@evalops/maestro 0.10.21 → 0.10.22

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.
Files changed (143) hide show
  1. package/dist/agent/agent.d.ts +1 -0
  2. package/dist/agent/agent.d.ts.map +1 -1
  3. package/dist/agent/agent.js +15 -4
  4. package/dist/agent/agent.js.map +1 -1
  5. package/dist/agent/swarm/executor.d.ts.map +1 -1
  6. package/dist/agent/swarm/executor.js +68 -3
  7. package/dist/agent/swarm/executor.js.map +1 -1
  8. package/dist/agent/swarm/types.d.ts +3 -0
  9. package/dist/agent/swarm/types.d.ts.map +1 -1
  10. package/dist/agent/swarm/types.js.map +1 -1
  11. package/dist/agent/transport.d.ts.map +1 -1
  12. package/dist/agent/transport.js +7 -1
  13. package/dist/agent/transport.js.map +1 -1
  14. package/dist/audit/logger.d.ts +1 -1
  15. package/dist/bootstrap/tools-setup.d.ts.map +1 -1
  16. package/dist/bootstrap/tools-setup.js +3 -2
  17. package/dist/bootstrap/tools-setup.js.map +1 -1
  18. package/dist/cli/commands/a2a.d.ts.map +1 -1
  19. package/dist/cli/commands/a2a.js +141 -8
  20. package/dist/cli/commands/a2a.js.map +1 -1
  21. package/dist/cli/commands/codex.d.ts.map +1 -1
  22. package/dist/cli/commands/codex.js +4 -3
  23. package/dist/cli/commands/codex.js.map +1 -1
  24. package/dist/cli/commands/hosted-runner.d.ts +1 -0
  25. package/dist/cli/commands/hosted-runner.d.ts.map +1 -1
  26. package/dist/cli/commands/hosted-runner.js +31 -2
  27. package/dist/cli/commands/hosted-runner.js.map +1 -1
  28. package/dist/cli/commands/run.d.ts.map +1 -1
  29. package/dist/cli/commands/run.js +2 -9
  30. package/dist/cli/commands/run.js.map +1 -1
  31. package/dist/cli-tui/commands/a2a-handlers.d.ts.map +1 -1
  32. package/dist/cli-tui/commands/a2a-handlers.js +55 -0
  33. package/dist/cli-tui/commands/a2a-handlers.js.map +1 -1
  34. package/dist/cli.js +3924 -1972
  35. package/dist/codex/compatibility.d.ts +17 -1
  36. package/dist/codex/compatibility.d.ts.map +1 -1
  37. package/dist/codex/compatibility.js +57 -1
  38. package/dist/codex/compatibility.js.map +1 -1
  39. package/dist/guardian/config.d.ts +8 -6
  40. package/dist/guardian/config.d.ts.map +1 -1
  41. package/dist/guardian/config.js +33 -7
  42. package/dist/guardian/config.js.map +1 -1
  43. package/dist/guardian/runner.d.ts.map +1 -1
  44. package/dist/guardian/runner.js +54 -9
  45. package/dist/guardian/runner.js.map +1 -1
  46. package/dist/mcp/config.d.ts.map +1 -1
  47. package/dist/mcp/config.js +2 -0
  48. package/dist/mcp/config.js.map +1 -1
  49. package/dist/mcp/fathom-cua.d.ts +3 -0
  50. package/dist/mcp/fathom-cua.d.ts.map +1 -0
  51. package/dist/mcp/fathom-cua.js +158 -0
  52. package/dist/mcp/fathom-cua.js.map +1 -0
  53. package/dist/mcp/index.d.ts +1 -0
  54. package/dist/mcp/index.d.ts.map +1 -1
  55. package/dist/mcp/index.js +1 -0
  56. package/dist/mcp/index.js.map +1 -1
  57. package/dist/node_modules/@evalops/contracts/package.json +1 -1
  58. package/dist/node_modules/@evalops/tui/package.json +1 -1
  59. package/dist/platform/a2a-cockpit.d.ts +90 -0
  60. package/dist/platform/a2a-cockpit.d.ts.map +1 -0
  61. package/dist/platform/a2a-cockpit.js +302 -0
  62. package/dist/platform/a2a-cockpit.js.map +1 -0
  63. package/dist/platform/a2a-fleet.d.ts +14 -0
  64. package/dist/platform/a2a-fleet.d.ts.map +1 -1
  65. package/dist/platform/a2a-fleet.js +66 -1
  66. package/dist/platform/a2a-fleet.js.map +1 -1
  67. package/dist/platform/a2a-ownership.d.ts +27 -0
  68. package/dist/platform/a2a-ownership.d.ts.map +1 -0
  69. package/dist/platform/a2a-ownership.js +149 -0
  70. package/dist/platform/a2a-ownership.js.map +1 -0
  71. package/dist/platform/a2a-task-ledger.d.ts.map +1 -1
  72. package/dist/platform/a2a-task-ledger.js +29 -5
  73. package/dist/platform/a2a-task-ledger.js.map +1 -1
  74. package/dist/server/agent-trajectory-replay-lab.d.ts +36 -0
  75. package/dist/server/agent-trajectory-replay-lab.d.ts.map +1 -0
  76. package/dist/server/agent-trajectory-replay-lab.js +48 -0
  77. package/dist/server/agent-trajectory-replay-lab.js.map +1 -0
  78. package/dist/server/any-agent-control-plane-proof.d.ts +42 -0
  79. package/dist/server/any-agent-control-plane-proof.d.ts.map +1 -0
  80. package/dist/server/any-agent-control-plane-proof.js +175 -0
  81. package/dist/server/any-agent-control-plane-proof.js.map +1 -0
  82. package/dist/server/app-context.d.ts +1 -0
  83. package/dist/server/app-context.d.ts.map +1 -1
  84. package/dist/server/app-context.js.map +1 -1
  85. package/dist/server/handlers/a2a-cockpit.d.ts +3 -0
  86. package/dist/server/handlers/a2a-cockpit.d.ts.map +1 -0
  87. package/dist/server/handlers/a2a-cockpit.js +71 -0
  88. package/dist/server/handlers/a2a-cockpit.js.map +1 -0
  89. package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
  90. package/dist/server/handlers/headless-sessions.js +17 -2
  91. package/dist/server/handlers/headless-sessions.js.map +1 -1
  92. package/dist/server/handlers/session-artifacts.d.ts.map +1 -1
  93. package/dist/server/handlers/session-artifacts.js +20 -3
  94. package/dist/server/handlers/session-artifacts.js.map +1 -1
  95. package/dist/server/handlers/session-replay-lab.d.ts +13 -0
  96. package/dist/server/handlers/session-replay-lab.d.ts.map +1 -0
  97. package/dist/server/handlers/session-replay-lab.js +80 -0
  98. package/dist/server/handlers/session-replay-lab.js.map +1 -0
  99. package/dist/server/handlers/stats.js +1 -1
  100. package/dist/server/handlers/stats.js.map +1 -1
  101. package/dist/server/handlers/status.d.ts +44 -3
  102. package/dist/server/handlers/status.d.ts.map +1 -1
  103. package/dist/server/handlers/status.js +227 -17
  104. package/dist/server/handlers/status.js.map +1 -1
  105. package/dist/server/headless-runtime-service.d.ts +17 -0
  106. package/dist/server/headless-runtime-service.d.ts.map +1 -1
  107. package/dist/server/headless-runtime-service.js +143 -3
  108. package/dist/server/headless-runtime-service.js.map +1 -1
  109. package/dist/server/hosted-agent-runtime-progress.d.ts +17 -0
  110. package/dist/server/hosted-agent-runtime-progress.d.ts.map +1 -1
  111. package/dist/server/hosted-agent-runtime-progress.js +352 -15
  112. package/dist/server/hosted-agent-runtime-progress.js.map +1 -1
  113. package/dist/server/routes.d.ts.map +1 -1
  114. package/dist/server/routes.js +14 -0
  115. package/dist/server/routes.js.map +1 -1
  116. package/dist/services/intelligent-router/index.d.ts +1 -1
  117. package/dist/services/intelligent-router/index.d.ts.map +1 -1
  118. package/dist/services/intelligent-router/index.js +1 -1
  119. package/dist/services/intelligent-router/index.js.map +1 -1
  120. package/dist/services/intelligent-router/normalize.d.ts +10 -2
  121. package/dist/services/intelligent-router/normalize.d.ts.map +1 -1
  122. package/dist/services/intelligent-router/normalize.js +20 -1
  123. package/dist/services/intelligent-router/normalize.js.map +1 -1
  124. package/dist/services/intelligent-router/service.d.ts.map +1 -1
  125. package/dist/services/intelligent-router/service.js +35 -0
  126. package/dist/services/intelligent-router/service.js.map +1 -1
  127. package/dist/services/intelligent-router/types.d.ts +13 -0
  128. package/dist/services/intelligent-router/types.d.ts.map +1 -1
  129. package/dist/services/intelligent-router/types.js +1 -0
  130. package/dist/services/intelligent-router/types.js.map +1 -1
  131. package/dist/telemetry/cli-command-aggregator.d.ts +1 -0
  132. package/dist/telemetry/cli-command-aggregator.d.ts.map +1 -1
  133. package/dist/telemetry/cli-command-aggregator.js +23 -0
  134. package/dist/telemetry/cli-command-aggregator.js.map +1 -1
  135. package/dist/telemetry/maestro-event-bus.d.ts.map +1 -1
  136. package/dist/telemetry/maestro-event-bus.js +11 -5
  137. package/dist/telemetry/maestro-event-bus.js.map +1 -1
  138. package/dist/telemetry/maestro-event-catalog.d.ts +15 -1
  139. package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -1
  140. package/dist/telemetry/maestro-event-catalog.js +30 -0
  141. package/dist/telemetry/maestro-event-catalog.js.map +1 -1
  142. package/dist/version.json +2 -2
  143. package/package.json +289 -283
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/guardian/runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport {\n\tcopyFileSync,\n\texistsSync,\n\tmkdirSync,\n\tmkdtempSync,\n\treadFileSync,\n\trmSync,\n\tstatSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport os from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { resolveGuardianConfig } from \"./config.js\";\nimport { loadGuardianState, recordGuardianRun } from \"./state.js\";\nimport { DEFAULT_EXCLUDES } from \"./types.js\";\nimport type {\n\tGuardianEnablement,\n\tGuardianRunOptions,\n\tGuardianRunResult,\n\tGuardianStatus,\n\tGuardianToolResult,\n} from \"./types.js\";\n\nconst GUARDIAN_DISABLE_VALUES = [\"0\", \"false\", \"off\", \"no\"];\nconst GUARDIAN_ENABLE_VALUES = [\"1\", \"true\", \"on\"];\nconst DEFAULT_TIMEOUT_MS = 10_000;\n\ntype FileListResult =\n\t| { ok: true; files: string[] }\n\t| { ok: false; error: string; exitCode: number };\n\ntype CommandResult = {\n\texitCode: number;\n\tstdout: string;\n\tstderr: string;\n\terror?: string;\n\tdurationMs: number;\n};\n\nfunction commandExists(command: string, cwd: string): boolean {\n\tconst result = spawnSync(command, [\"--version\"], {\n\t\tcwd,\n\t\tstdio: \"pipe\",\n\t\tencoding: \"utf-8\",\n\t});\n\treturn (result.status ?? 1) === 0;\n}\n\nfunction runCommand(\n\tcommand: string,\n\targs: string[],\n\tcwd: string,\n\ttimeoutMs = DEFAULT_TIMEOUT_MS,\n\tenv?: NodeJS.ProcessEnv,\n): CommandResult {\n\tconst started = Date.now();\n\ttry {\n\t\tconst result = spawnSync(command, args, {\n\t\t\tcwd,\n\t\t\tencoding: \"utf-8\",\n\t\t\tenv: env ? { ...process.env, ...env } : process.env,\n\t\t\tmaxBuffer: 8 * 1024 * 1024,\n\t\t\ttimeout: timeoutMs,\n\t\t});\n\t\treturn {\n\t\t\texitCode: result.status ?? 1,\n\t\t\tstdout: result.stdout ?? \"\",\n\t\t\tstderr: result.stderr ?? \"\",\n\t\t\tdurationMs: Date.now() - started,\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\texitCode: 1,\n\t\t\tstdout: \"\",\n\t\t\tstderr: error instanceof Error ? error.message : String(error),\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\tdurationMs: Date.now() - started,\n\t\t};\n\t}\n}\n\nfunction hasGitSecretsPlugin(root: string): boolean {\n\tconst result = runCommand(\"git\", [\"secrets\", \"--help\"], root, 4_000);\n\treturn (\n\t\tresult.exitCode === 0 ||\n\t\tresult.stderr.includes(\"git secrets\") ||\n\t\tresult.stdout.includes(\"git secrets\")\n\t);\n}\n\nfunction filterFiles(files: string[]): string[] {\n\treturn files.filter((file) => {\n\t\tconst normalized = file.replace(/\\\\/g, \"/\");\n\t\treturn !DEFAULT_EXCLUDES.some(\n\t\t\t(exclude) =>\n\t\t\t\tnormalized === exclude ||\n\t\t\t\tnormalized.startsWith(exclude) ||\n\t\t\t\tnormalized.includes(`/${exclude}`),\n\t\t);\n\t});\n}\n\nfunction listStagedFiles(root: string): FileListResult {\n\tconst result = runCommand(\n\t\t\"git\",\n\t\t[\"diff\", \"--name-only\", \"--cached\", \"--diff-filter=ACMRTUXB\"],\n\t\troot,\n\t);\n\tif (result.exitCode !== 0) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror:\n\t\t\t\tresult.stderr.trim() ||\n\t\t\t\tresult.stdout.trim() ||\n\t\t\t\t\"Unable to list staged files\",\n\t\t\texitCode: result.exitCode,\n\t\t};\n\t}\n\tconst files = filterFiles(\n\t\tresult.stdout\n\t\t\t.split(\"\\n\")\n\t\t\t.map((line) => line.trim())\n\t\t\t.filter(Boolean),\n\t);\n\treturn { ok: true, files };\n}\n\nfunction listTrackedFiles(root: string): FileListResult {\n\tconst result = runCommand(\"git\", [\"ls-files\"], root);\n\tif (result.exitCode !== 0) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror:\n\t\t\t\tresult.stderr.trim() ||\n\t\t\t\tresult.stdout.trim() ||\n\t\t\t\t\"Unable to list tracked files\",\n\t\t\texitCode: result.exitCode,\n\t\t};\n\t}\n\tconst files = filterFiles(\n\t\tresult.stdout\n\t\t\t.split(\"\\n\")\n\t\t\t.map((line) => line.trim())\n\t\t\t.filter(Boolean),\n\t);\n\treturn { ok: true, files };\n}\n\nfunction resolveEnablement(\n\trespectEnv: boolean | undefined,\n): GuardianEnablement {\n\tconst state = loadGuardianState();\n\tif (!respectEnv) {\n\t\treturn { enabled: state.enabled };\n\t}\n\tconst rawEnv = process.env.MAESTRO_GUARDIAN;\n\tif (typeof rawEnv === \"string\" && rawEnv.trim().length > 0) {\n\t\tconst normalized = rawEnv.trim().toLowerCase();\n\t\tif (GUARDIAN_DISABLE_VALUES.includes(normalized)) {\n\t\t\treturn {\n\t\t\t\tenabled: false,\n\t\t\t\treason: \"MAESTRO_GUARDIAN=0 (disabled)\",\n\t\t\t\tenvOverride: \"disabled\",\n\t\t\t};\n\t\t}\n\t\tif (GUARDIAN_ENABLE_VALUES.includes(normalized)) {\n\t\t\treturn {\n\t\t\t\tenabled: true,\n\t\t\t\treason: \"MAESTRO_GUARDIAN=1 (forced on)\",\n\t\t\t\tenvOverride: \"enabled\",\n\t\t\t};\n\t\t}\n\t}\n\treturn { enabled: state.enabled };\n}\n\nfunction locateSemgrep(\n\troot: string,\n): { command: string; args: string[] } | null {\n\tif (commandExists(\"semgrep\", root)) {\n\t\treturn { command: \"semgrep\", args: [] };\n\t}\n\tif (commandExists(\"npx\", root)) {\n\t\treturn { command: \"npx\", args: [\"--yes\", \"semgrep\"] };\n\t}\n\treturn null;\n}\n\nfunction runSemgrep(files: string[], root: string): GuardianToolResult {\n\tconst started = Date.now();\n\tconst cmd = locateSemgrep(root);\n\tif (!cmd) {\n\t\treturn {\n\t\t\ttool: \"semgrep\",\n\t\t\texitCode: 0,\n\t\t\tstdout: \"\",\n\t\t\tstderr: \"\",\n\t\t\tdurationMs: Date.now() - started,\n\t\t\tskipped: true,\n\t\t\treason: \"semgrep not found\",\n\t\t};\n\t}\n\tconst includeArgs = files.flatMap((file) => [\"--include\", file]);\n\tconst args = [\n\t\t...cmd.args,\n\t\t\"scan\",\n\t\t\"--config\",\n\t\t\"p/secrets\",\n\t\t\"--config\",\n\t\t\"p/ci\",\n\t\t\"--json\",\n\t\t\"--skip-unknown-extensions\",\n\t\t\"--error\",\n\t\t\"--timeout\",\n\t\t\"7\",\n\t\t\"--jobs\",\n\t\t\"1\",\n\t\t\"--metrics=off\",\n\t\t\"--disable-version-check\",\n\t\t...includeArgs,\n\t\t\".\",\n\t];\n\t// Semgrep can take longer on larger workspaces; allow up to 2 minutes before timing out\n\tconst result = runCommand(cmd.command, args, root, 120_000, {\n\t\tSEMGREP_SEND_METRICS: \"off\",\n\t});\n\treturn {\n\t\ttool: \"semgrep\",\n\t\texitCode: result.exitCode,\n\t\tstdout: result.stdout,\n\t\tstderr: result.stderr,\n\t\tdurationMs: result.durationMs,\n\t};\n}\n\nfunction materializeStagedFiles(root: string, files: string[]): string | null {\n\tconst tempDir = mkdtempSync(join(os.tmpdir(), \"composer-guardian-staged-\"));\n\tfor (const relative of files) {\n\t\tconst target = join(tempDir, relative);\n\t\tconst dir = dirname(target);\n\t\tmkdirSync(dir, { recursive: true });\n\t\tconst show = runCommand(\"git\", [\"show\", `:${relative}`], root, 5_000);\n\t\tif (show.exitCode !== 0) {\n\t\t\t// skip files we fail to read from index\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\twriteFileSync(target, show.stdout, \"utf-8\");\n\t\t} catch {\n\t\t\t// ignore write errors for problematic files\n\t\t}\n\t}\n\treturn tempDir;\n}\n\nfunction copyFilesToTemp(root: string, files: string[]): string | null {\n\tif (!files.length) return null;\n\tconst tempDir = mkdtempSync(join(os.tmpdir(), \"composer-guardian-\"));\n\tfor (const relative of files) {\n\t\tconst source = resolve(root, relative);\n\t\tif (!existsSync(source)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst target = join(tempDir, relative);\n\t\tconst dir = dirname(target);\n\t\tmkdirSync(dir, { recursive: true });\n\t\ttry {\n\t\t\tcopyFileSync(source, target);\n\t\t} catch {\n\t\t\t// ignore copy errors; file may be removed\n\t\t}\n\t}\n\treturn tempDir;\n}\n\nfunction runGitSecrets(files: string[], root: string): GuardianToolResult {\n\tconst started = Date.now();\n\tif (!files.length) {\n\t\treturn {\n\t\t\ttool: \"git-secrets\",\n\t\t\texitCode: 0,\n\t\t\tstdout: \"\",\n\t\t\tstderr: \"\",\n\t\t\tdurationMs: Date.now() - started,\n\t\t\tskipped: true,\n\t\t\treason: \"no files\",\n\t\t};\n\t}\n\n\tconst hasBinary = commandExists(\"git-secrets\", root);\n\tconst hasPlugin = !hasBinary && hasGitSecretsPlugin(root);\n\tif (!hasBinary && !hasPlugin) {\n\t\treturn {\n\t\t\ttool: \"git-secrets\",\n\t\t\texitCode: 0,\n\t\t\tstdout: \"\",\n\t\t\tstderr: \"\",\n\t\t\tdurationMs: Date.now() - started,\n\t\t\tskipped: true,\n\t\t\treason: \"git-secrets not installed\",\n\t\t};\n\t}\n\n\tconst args = hasBinary\n\t\t? [\"--scan\", \"--no-index\", \"--\", ...files]\n\t\t: [\"secrets\", \"--scan\", \"--no-index\", \"--\", ...files];\n\tconst result = runCommand(hasBinary ? \"git-secrets\" : \"git\", args, root);\n\treturn {\n\t\ttool: \"git-secrets\",\n\t\texitCode: result.exitCode,\n\t\tstdout: result.stdout,\n\t\tstderr: result.stderr,\n\t\tdurationMs: result.durationMs,\n\t};\n}\n\nfunction runTrufflehog(files: string[], root: string): GuardianToolResult {\n\tconst started = Date.now();\n\tif (!commandExists(\"trufflehog\", root)) {\n\t\treturn {\n\t\t\ttool: \"trufflehog\",\n\t\t\texitCode: 0,\n\t\t\tstdout: \"\",\n\t\t\tstderr: \"\",\n\t\t\tdurationMs: Date.now() - started,\n\t\t\tskipped: true,\n\t\t\treason: \"trufflehog not installed\",\n\t\t};\n\t}\n\tif (!files.length) {\n\t\treturn {\n\t\t\ttool: \"trufflehog\",\n\t\t\texitCode: 0,\n\t\t\tstdout: \"\",\n\t\t\tstderr: \"\",\n\t\t\tdurationMs: Date.now() - started,\n\t\t\tskipped: true,\n\t\t\treason: \"no files\",\n\t\t};\n\t}\n\n\tlet tempDir: string | null = null;\n\ttry {\n\t\ttempDir = copyFilesToTemp(root, files);\n\t\tif (!tempDir) {\n\t\t\treturn {\n\t\t\t\ttool: \"trufflehog\",\n\t\t\t\texitCode: 0,\n\t\t\t\tstdout: \"\",\n\t\t\t\tstderr: \"\",\n\t\t\t\tdurationMs: Date.now() - started,\n\t\t\t\tskipped: true,\n\t\t\t\treason: \"no files\",\n\t\t\t};\n\t\t}\n\t\tconst result = runCommand(\n\t\t\t\"trufflehog\",\n\t\t\t[\"filesystem\", \"--no-update\", \"--fail\", \"--json\", \"--path\", tempDir],\n\t\t\ttempDir,\n\t\t);\n\t\treturn {\n\t\t\ttool: \"trufflehog\",\n\t\t\texitCode: result.exitCode,\n\t\t\tstdout: result.stdout,\n\t\t\tstderr: result.stderr,\n\t\t\tdurationMs: result.durationMs,\n\t\t};\n\t} finally {\n\t\tif (tempDir) {\n\t\t\ttry {\n\t\t\t\trmSync(tempDir, { recursive: true, force: true });\n\t\t\t} catch {\n\t\t\t\t// best effort cleanup\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport type HeuristicFindingName =\n\t| \"AWS access key\"\n\t| \"AWS secret key\"\n\t| \"Private key block\"\n\t| \"Generic API key\"\n\t| \"Slack token\"\n\t| \"GitHub token\"\n\t| \"GitLab token\"\n\t| \"Google API key\"\n\t| \"Stripe key\"\n\t| \"OpenAI API key\"\n\t| \"SendGrid API key\"\n\t| \"Twilio auth token\"\n\t| \"Discord webhook\"\n\t| \"Database URL with credentials\"\n\t| \"JWT token\";\n\nexport type EvidenceIntegrityFindingName =\n\t| \"Synthetic production commit SHA\"\n\t| \"Synthetic production PR reference\"\n\t| \"Synthetic local GitHub Actions run ID\"\n\t| \"Local proof identifier\"\n\t| \"Replay artifact claimed as production evidence\";\n\nconst HEURISTIC_PATTERNS: Array<{ name: HeuristicFindingName; regex: RegExp }> =\n\t[\n\t\t// AWS credentials\n\t\t{ name: \"AWS access key\", regex: /\\bAKIA[0-9A-Z]{16}\\b/ },\n\t\t{\n\t\t\tname: \"AWS secret key\",\n\t\t\t// AWS secret keys are 40 characters of base64-like characters\n\t\t\tregex:\n\t\t\t\t/(?:aws_secret_access_key|secret_access_key|aws_secret)\\s*[:=]\\s*['\"]?[A-Za-z0-9/+=]{40}['\"]?/i,\n\t\t},\n\t\t{\n\t\t\tname: \"Private key block\",\n\t\t\tregex: /BEGIN [A-Z ]*PRIVATE KEY/,\n\t\t},\n\t\t{\n\t\t\tname: \"Generic API key\",\n\t\t\t// Avoid matching natural language inside string literals while still catching\n\t\t\t// typical config patterns like:\n\t\t\t// token: \"....\" / token = \"....\"\n\t\t\t// apiKey: \"....\" / api_key = \"....\"\n\t\t\t// And JSON-style:\n\t\t\t// \"token\": \"....\"\n\t\t\tregex:\n\t\t\t\t/(?:(?<!['\"])\\b(?:api[_-]?key|token)\\b\\s*[:=]\\s*['\"][A-Za-z0-9_-]{20,}['\"]|['\"](?:api[_-]?key|token)['\"]\\s*:\\s*['\"][A-Za-z0-9_-]{20,}['\"])/i,\n\t\t},\n\t\t{\n\t\t\tname: \"Slack token\",\n\t\t\t// Slack tokens are typically segmented and include numeric IDs:\n\t\t\t// xoxb-<digits>-<digits>-<secret>\n\t\t\t// xapp-<digits>-<digits>-<secret>\n\t\t\t// Use a stricter shape to avoid false positives in tests/docs.\n\t\t\tregex: /\\b(?:xox[baprs]|xapp)-\\d{6,}(?:-\\d{6,}){1,2}-[A-Za-z0-9-]{10,}\\b/,\n\t\t},\n\t\t{\n\t\t\tname: \"GitHub token\",\n\t\t\t// GitHub tokens: ghp_ (personal), gho_ (OAuth), ghu_ (user-to-server),\n\t\t\t// ghs_ (server-to-server), ghr_ (refresh), github_pat_\n\t\t\tregex: /\\b(?:ghp_|gho_|ghu_|ghs_|ghr_|github_pat_)[A-Za-z0-9_]{36,}\\b/,\n\t\t},\n\t\t{\n\t\t\tname: \"GitLab token\",\n\t\t\t// GitLab personal access tokens: glpat-...\n\t\t\tregex: /\\bglpat-[A-Za-z0-9_-]{20,}\\b/,\n\t\t},\n\t\t{\n\t\t\tname: \"Google API key\",\n\t\t\t// Google API keys start with AIza\n\t\t\tregex: /\\bAIza[A-Za-z0-9_-]{35}\\b/,\n\t\t},\n\t\t{\n\t\t\tname: \"Stripe key\",\n\t\t\t// Stripe keys: sk_live_, pk_live_, sk_test_, pk_test_, rk_live_, rk_test_\n\t\t\tregex: /\\b[spr]k_(?:live|test)_[A-Za-z0-9]{24,}\\b/,\n\t\t},\n\t\t{\n\t\t\tname: \"OpenAI API key\",\n\t\t\t// OpenAI keys: sk-... (typically 48+ chars total)\n\t\t\tregex: /\\bsk-[A-Za-z0-9]{32,}\\b/,\n\t\t},\n\t\t{\n\t\t\tname: \"SendGrid API key\",\n\t\t\t// SendGrid keys start with SG.\n\t\t\tregex: /\\bSG\\.[A-Za-z0-9_-]{22,}\\.[A-Za-z0-9_-]{22,}\\b/,\n\t\t},\n\t\t{\n\t\t\tname: \"Twilio auth token\",\n\t\t\t// Twilio auth tokens in config patterns\n\t\t\tregex:\n\t\t\t\t/twilio[_-]?(?:auth[_-]?token|account[_-]?sid)\\s*[:=]\\s*['\"]?[A-Za-z0-9]{32,}['\"]?/i,\n\t\t},\n\t\t{\n\t\t\tname: \"Discord webhook\",\n\t\t\t// Discord webhook URLs contain sensitive tokens\n\t\t\tregex:\n\t\t\t\t/https:\\/\\/(?:discord(?:app)?\\.com|canary\\.discord\\.com)\\/api\\/webhooks\\/\\d+\\/[A-Za-z0-9_-]+/,\n\t\t},\n\t\t{\n\t\t\tname: \"Database URL with credentials\",\n\t\t\t// Database connection strings with embedded credentials\n\t\t\t// postgres://user:password@host, mysql://user:pass@host, mongodb://user:pass@host\n\t\t\tregex:\n\t\t\t\t/\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis):\\/\\/[^\\s:]+:[^\\s@]+@[^\\s'\"]+/i,\n\t\t},\n\t\t{\n\t\t\tname: \"JWT token\",\n\t\t\t// JWT tokens have a distinctive structure: eyJ...\n\t\t\t// Only flag if it looks like a real token (has all three parts with decent lengths)\n\t\t\tregex:\n\t\t\t\t/\\beyJ[A-Za-z0-9_-]{20,}\\.eyJ[A-Za-z0-9_-]{20,}\\.[A-Za-z0-9_-]{20,}\\b/,\n\t\t},\n\t];\n\nconst EVIDENCE_CONTEXT_REGEX =\n\t/(?<![A-Za-z0-9_-])(?:production[\\s_-]+evidence|productionEvidence|production[\\s_-]+proof|productionProof|live[\\s_-]+evidence|liveEvidence|live[\\s_-]+proof|liveProof|dereferenceable|evidence[\\s_-]+bundle|evidenceBundle|deploy-verifier|hard[_-]identifiers|hardIdentifiers)(?![A-Za-z0-9_-])/i;\n\nconst REPLAY_EVIDENCE_MARKER_PATTERN = String.raw`(?:\\bdeterministic_replay\\b|(?<![A-Za-z0-9_])[\"']?replay[\"']?\\s*:\\s*true)`;\nconst PRODUCTION_EVIDENCE_CLAIM_PATTERN = String.raw`(?<![A-Za-z0-9_-])[\"']?(?:production[_-]?evidence|live[_-]?proof)[\"']?\\s*:\\s*[\"']?(?:true|verified)[\"']?(?![A-Za-z0-9_-])`;\n\nconst EVIDENCE_PATTERNS: Array<{\n\tname: EvidenceIntegrityFindingName;\n\tregex?: RegExp;\n\tmatches?: (contents: string) => boolean;\n\trequiresEvidenceContext?: boolean;\n}> = [\n\t{\n\t\tname: \"Synthetic production commit SHA\",\n\t\t// A 40-hex \"SHA\" containing an embedded UTC timestamp plus cutesy marker\n\t\t// text is a fixture identifier, not dereferenceable git evidence.\n\t\tregex:\n\t\t\t/\\b[0-9a-f]{4,12}20\\d{12}[0-9a-f]{0,16}(?:c0de|cafe|5afe)[0-9a-f]{0,20}\\b/i,\n\t\trequiresEvidenceContext: true,\n\t},\n\t{\n\t\tname: \"Synthetic production PR reference\",\n\t\tregex:\n\t\t\t/\\b[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.-]+#(?!\\d+\\b)[A-Za-z][A-Za-z0-9_.:-]*(?:local|prod-pr-lane)[A-Za-z0-9_.:-]*\\b/i,\n\t\trequiresEvidenceContext: true,\n\t},\n\t{\n\t\tname: \"Synthetic local GitHub Actions run ID\",\n\t\tregex: /\\bgha-run-[A-Za-z0-9_.:-]*-local\\b/i,\n\t\trequiresEvidenceContext: true,\n\t},\n\t{\n\t\tname: \"Local proof identifier\",\n\t\tregex:\n\t\t\t/\\bproof(?:[_-]?id|Id)?\\b[\"']?\\s*[:=]\\s*[\"']?[A-Za-z0-9_.:-]+-local\\b/i,\n\t\trequiresEvidenceContext: true,\n\t},\n\t{\n\t\tname: \"Replay artifact claimed as production evidence\",\n\t\tmatches: (contents) =>\n\t\t\tnew RegExp(REPLAY_EVIDENCE_MARKER_PATTERN, \"i\").test(contents) &&\n\t\t\tnew RegExp(PRODUCTION_EVIDENCE_CLAIM_PATTERN, \"i\").test(contents),\n\t},\n];\n\nexport function detectHeuristicFindings(\n\tcontents: string,\n): HeuristicFindingName[] {\n\tconst matches: HeuristicFindingName[] = [];\n\tfor (const pattern of HEURISTIC_PATTERNS) {\n\t\tif (pattern.regex.test(contents)) {\n\t\t\tmatches.push(pattern.name);\n\t\t}\n\t}\n\treturn matches;\n}\n\nexport function detectEvidenceIntegrityFindings(\n\tcontents: string,\n): EvidenceIntegrityFindingName[] {\n\tconst matches: EvidenceIntegrityFindingName[] = [];\n\tconst hasEvidenceContext = EVIDENCE_CONTEXT_REGEX.test(contents);\n\tfor (const pattern of EVIDENCE_PATTERNS) {\n\t\tif (pattern.requiresEvidenceContext && !hasEvidenceContext) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (pattern.matches?.(contents) ?? pattern.regex?.test(contents)) {\n\t\t\tmatches.push(pattern.name);\n\t\t}\n\t}\n\treturn matches;\n}\n\nfunction runEvidenceIntegrityScan(\n\tfiles: string[],\n\troot: string,\n): GuardianToolResult {\n\tconst started = Date.now();\n\tconst findings: string[] = [];\n\tconst ignorePatterns = [\n\t\t/test\\/guardian\\/evidence-integrity\\.test\\.ts$/,\n\t\t/src\\/guardian\\/runner\\.ts$/,\n\t];\n\n\tfor (const relative of files) {\n\t\tif (ignorePatterns.some((pattern) => pattern.test(relative))) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst fullPath = resolve(root, relative);\n\t\tif (!existsSync(fullPath)) continue;\n\t\tlet contents: string;\n\t\ttry {\n\t\t\tconst stats = statSync(fullPath);\n\t\t\tif (stats.size > 2 * 1024 * 1024) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcontents = readFileSync(fullPath, \"utf-8\");\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tif (contents.includes(\"\\0\")) continue;\n\t\tfor (const match of detectEvidenceIntegrityFindings(contents)) {\n\t\t\tfindings.push(`${match}: ${relative}`);\n\t\t}\n\t}\n\n\tif (!findings.length) {\n\t\treturn {\n\t\t\ttool: \"evidence-integrity\",\n\t\t\texitCode: 0,\n\t\t\tstdout: \"\",\n\t\t\tstderr: \"\",\n\t\t\tdurationMs: Date.now() - started,\n\t\t};\n\t}\n\treturn {\n\t\ttool: \"evidence-integrity\",\n\t\texitCode: 1,\n\t\tstdout: findings.join(\"\\n\"),\n\t\tstderr:\n\t\t\t\"Live-production claims must use dereferenceable git, PR, Actions, deploy, and signature identifiers. Mark deterministic fixtures as replay evidence instead.\",\n\t\tdurationMs: Date.now() - started,\n\t};\n}\n\nfunction runHeuristicScan(files: string[], root: string): GuardianToolResult {\n\tconst started = Date.now();\n\tconst findings: string[] = [];\n\tconst ignorePatterns = [\n\t\t/test\\/enterprise\\/pii-detector\\.test\\.ts$/,\n\t\t/test\\/guardian\\/heuristic-scan\\.test\\.ts$/,\n\t\t// Tests that intentionally include credential-like fixtures.\n\t\t/test\\/integration\\/security-middleware\\.test\\.ts$/,\n\t\t/test\\/safety\\/context-firewall\\.test\\.ts$/,\n\t\t/test\\/safety\\/edge-cases\\.test\\.ts$/,\n\t\t/test\\/safety\\/safety-middleware\\.test\\.ts$/,\n\t\t/test\\/telemetry\\/beacon\\.test\\.ts$/,\n\t\t/test\\/telemetry\\/telemetry-metadata-split\\.test\\.ts$/,\n\t\t// The runner itself contains regex patterns that look like secrets\n\t\t/src\\/guardian\\/runner\\.ts$/,\n\t];\n\n\tfor (const relative of files) {\n\t\tif (ignorePatterns.some((pattern) => pattern.test(relative))) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst fullPath = resolve(root, relative);\n\t\tif (!existsSync(fullPath)) continue;\n\t\tlet contents: string;\n\t\ttry {\n\t\t\tconst stats = statSync(fullPath);\n\t\t\tif (stats.size > 2 * 1024 * 1024) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcontents = readFileSync(fullPath, \"utf-8\");\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tif (contents.includes(\"\\0\")) continue; // likely binary\n\t\tfor (const match of detectHeuristicFindings(contents)) {\n\t\t\tfindings.push(`${match}: ${relative}`);\n\t\t}\n\t}\n\n\tif (!findings.length) {\n\t\treturn {\n\t\t\ttool: \"heuristic-scan\",\n\t\t\texitCode: 0,\n\t\t\tstdout: \"\",\n\t\t\tstderr: \"\",\n\t\t\tdurationMs: Date.now() - started,\n\t\t};\n\t}\n\treturn {\n\t\ttool: \"heuristic-scan\",\n\t\texitCode: 1,\n\t\tstdout: findings.join(\"\\n\"),\n\t\tstderr: \"\",\n\t\tdurationMs: Date.now() - started,\n\t};\n}\n\nfunction buildSummary(\n\tstatus: GuardianStatus,\n\tfiles: string[],\n\ttools: GuardianToolResult[],\n\ttarget: \"staged\" | \"all\",\n\tskipReason?: string,\n): string {\n\tif (status === \"skipped\") {\n\t\treturn `Guardian skipped (${skipReason ?? \"disabled\"})`;\n\t}\n\tconst fileLabel = target === \"staged\" ? \"staged file(s)\" : \"tracked file(s)\";\n\tconst prefix =\n\t\tstatus === \"passed\"\n\t\t\t? \"Guardian passed\"\n\t\t\t: status === \"failed\"\n\t\t\t\t? \"Guardian blocked commit\"\n\t\t\t\t: \"Guardian error\";\n\tconst ran = tools\n\t\t.filter((tool) => !tool.skipped)\n\t\t.map((tool) => tool.tool)\n\t\t.join(\" + \");\n\tconst skipped = tools\n\t\t.filter((tool) => tool.skipped)\n\t\t.map((tool) => tool.tool)\n\t\t.join(\", \");\n\tconst toolSummary =\n\t\tran && skipped\n\t\t\t? `${ran} (skipped: ${skipped})`\n\t\t\t: ran || (skipped ? `skipped: ${skipped}` : \"\");\n\treturn `${prefix} on ${files.length} ${fileLabel}${\n\t\ttoolSummary ? ` using ${toolSummary}` : \"\"\n\t}`;\n}\n\nexport function formatGuardianResult(result: GuardianRunResult): string {\n\tconst lines: string[] = [];\n\tlines.push(result.summary);\n\tlines.push(\n\t\t`Status: ${result.status} • Target: ${result.target} • Duration: ${\n\t\t\tresult.durationMs\n\t\t}ms`,\n\t);\n\tfor (const tool of result.toolResults) {\n\t\tconst status =\n\t\t\ttool.skipped && tool.reason\n\t\t\t\t? `skipped (${tool.reason})`\n\t\t\t\t: tool.exitCode === 0\n\t\t\t\t\t? \"clean\"\n\t\t\t\t\t: tool.exitCode === 1\n\t\t\t\t\t\t? \"findings\"\n\t\t\t\t\t\t: \"error\";\n\t\tlines.push(\n\t\t\t`- ${tool.tool}: ${status} (${tool.durationMs}ms${\n\t\t\t\ttool.exitCode !== 0 ? `, exit ${tool.exitCode}` : \"\"\n\t\t\t})`,\n\t\t);\n\t\tif (tool.stdout.trim()) {\n\t\t\tlines.push(` stdout: ${tool.stdout.trim()}`);\n\t\t}\n\t\tif (tool.stderr.trim()) {\n\t\t\tlines.push(` stderr: ${tool.stderr.trim()}`);\n\t\t}\n\t}\n\tif (result.files?.length) {\n\t\tconst preview = result.files.slice(0, 8).join(\", \");\n\t\tconst suffix =\n\t\t\tresult.files.length > 8 ? ` … +${result.files.length - 8} more` : \"\";\n\t\tlines.push(`Files: ${preview}${suffix}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction pickOverallStatus(tools: GuardianToolResult[]): GuardianStatus {\n\tconst hadError = tools.some((tool) => !tool.skipped && tool.exitCode > 1);\n\tif (hadError) return \"error\";\n\tconst hadFindings = tools.some(\n\t\t(tool) => !tool.skipped && tool.exitCode === 1,\n\t);\n\tif (hadFindings) return \"failed\";\n\treturn \"passed\";\n}\n\nexport function shouldGuardCommand(command: string): {\n\tshouldGuard: boolean;\n\ttrigger: string | null;\n} {\n\tconst inlineDisable = /MAESTRO_GUARDIAN\\s*=\\s*(0|false|off|no)/i;\n\tif (inlineDisable.test(command)) {\n\t\treturn { shouldGuard: false, trigger: null };\n\t}\n\tconst gitMatch = command.match(/\\bgit\\s+(commit|push)\\b/i);\n\tif (gitMatch?.[1]) {\n\t\treturn { shouldGuard: true, trigger: `git ${gitMatch[1].toLowerCase()}` };\n\t}\n\n\tconst destructivePatterns: Array<{ regex: RegExp; label: string }> = [\n\t\t{ regex: /\\brm\\s+-rf\\b/i, label: \"rm -rf\" },\n\t\t{\n\t\t\tregex: /\\brm\\s+(?:-[a-z]*r[a-z]*\\b|--recursive\\b)/i,\n\t\t\tlabel: \"rm -r\",\n\t\t},\n\t\t{ regex: /\\bfind\\s+[^\\n]*-delete\\b/i, label: \"find -delete\" },\n\t\t{ regex: /\\bchmod\\s+0{3,4}\\b/i, label: \"chmod 000\" },\n\t\t{ regex: /\\bchown\\b[^\\n]*\\broot\\b/i, label: \"chown root\" },\n\t\t{ regex: /\\bdd\\s+if=.*\\s+of=\\/dev\\//i, label: \"dd to device\" },\n\t\t{ regex: /\\bmkfs\\./i, label: \"mkfs\" },\n\t\t{ regex: /\\btruncate\\s+-s\\s+0\\b/i, label: \"truncate -s 0\" },\n\t];\n\n\tfor (const pattern of destructivePatterns) {\n\t\tif (pattern.regex.test(command)) {\n\t\t\treturn { shouldGuard: true, trigger: pattern.label };\n\t\t}\n\t}\n\n\treturn { shouldGuard: false, trigger: null };\n}\n\nexport async function runGuardian(\n\toptions: GuardianRunOptions = {},\n): Promise<GuardianRunResult> {\n\tconst target = options.target ?? \"staged\";\n\tconst root = options.root ? resolve(options.root) : process.cwd();\n\tlet scanRoot = root;\n\tlet snapshotDir: string | null = null;\n\tconst enablement = resolveEnablement(options.respectEnv ?? true);\n\tconst startedAt = Date.now();\n\n\tif (!enablement.enabled) {\n\t\tconst result: GuardianRunResult = {\n\t\t\tstatus: \"skipped\",\n\t\t\texitCode: 0,\n\t\t\tstartedAt,\n\t\t\tdurationMs: Date.now() - startedAt,\n\t\t\ttarget,\n\t\t\ttrigger: options.trigger,\n\t\t\tfilesScanned: 0,\n\t\t\tsummary: \"Guardian disabled by configuration\",\n\t\t\tskipReason: enablement.reason ?? \"disabled\",\n\t\t\ttoolResults: [],\n\t\t};\n\t\trecordGuardianRun(result);\n\t\treturn result;\n\t}\n\n\tconst filesResult =\n\t\ttarget === \"all\" ? listTrackedFiles(root) : listStagedFiles(root);\n\tif (!filesResult.ok) {\n\t\tconst result: GuardianRunResult = {\n\t\t\tstatus: \"error\",\n\t\t\texitCode: filesResult.exitCode,\n\t\t\tstartedAt,\n\t\t\tdurationMs: Date.now() - startedAt,\n\t\t\ttarget,\n\t\t\ttrigger: options.trigger,\n\t\t\tfilesScanned: 0,\n\t\t\tsummary: filesResult.error,\n\t\t\ttoolResults: [],\n\t\t};\n\t\trecordGuardianRun(result);\n\t\treturn result;\n\t}\n\n\tconst files = filesResult.files;\n\tif (!files.length) {\n\t\tconst result: GuardianRunResult = {\n\t\t\tstatus: \"skipped\",\n\t\t\texitCode: 0,\n\t\t\tstartedAt,\n\t\t\tdurationMs: Date.now() - startedAt,\n\t\t\ttarget,\n\t\t\ttrigger: options.trigger,\n\t\t\tfilesScanned: 0,\n\t\t\tsummary: \"No files to scan\",\n\t\t\tskipReason: \"no files\",\n\t\t\ttoolResults: [],\n\t\t};\n\t\trecordGuardianRun(result);\n\t\treturn result;\n\t}\n\n\tif (target === \"staged\") {\n\t\tsnapshotDir = materializeStagedFiles(root, files);\n\t\tif (snapshotDir) {\n\t\t\tscanRoot = snapshotDir;\n\t\t}\n\t}\n\n\tconst config = resolveGuardianConfig({\n\t\troot,\n\t\tconfig: options.config,\n\t});\n\n\tconst toolResults: GuardianToolResult[] = [];\n\n\tif (config.tools.evidenceIntegrity) {\n\t\ttoolResults.push(runEvidenceIntegrityScan(files, scanRoot));\n\t}\n\n\tif (config.tools.semgrep) {\n\t\ttoolResults.push(runSemgrep(files, scanRoot));\n\t}\n\n\tlet fallback: GuardianToolResult | null = null;\n\tif (config.tools.gitSecrets) {\n\t\tconst gitSecretsResult = runGitSecrets(files, scanRoot);\n\t\tif (!gitSecretsResult.skipped) {\n\t\t\tfallback = gitSecretsResult;\n\t\t}\n\t}\n\tif (!fallback && config.tools.trufflehog) {\n\t\tconst truffleResult = runTrufflehog(files, scanRoot);\n\t\tif (!truffleResult.skipped) {\n\t\t\tfallback = truffleResult;\n\t\t}\n\t}\n\tif (!fallback && config.tools.heuristicScan) {\n\t\tfallback = runHeuristicScan(files, scanRoot);\n\t}\n\tif (fallback) {\n\t\ttoolResults.push(fallback);\n\t}\n\n\tconst status = pickOverallStatus(toolResults);\n\tconst exitCode =\n\t\tstatus === \"passed\"\n\t\t\t? 0\n\t\t\t: (toolResults.find((tool) => !tool.skipped && tool.exitCode !== 0)\n\t\t\t\t\t?.exitCode ?? 1);\n\n\tconst result: GuardianRunResult = {\n\t\tstatus,\n\t\texitCode,\n\t\tstartedAt,\n\t\tdurationMs: Date.now() - startedAt,\n\t\ttarget,\n\t\ttrigger: options.trigger,\n\t\tfilesScanned: files.length,\n\t\tfiles: options.quiet ? undefined : files,\n\t\tsummary: buildSummary(status, files, toolResults, target),\n\t\ttoolResults,\n\t};\n\n\trecordGuardianRun(result);\n\n\tif (snapshotDir) {\n\t\ttry {\n\t\t\trmSync(snapshotDir, { recursive: true, force: true });\n\t\t} catch {\n\t\t\t// best effort cleanup\n\t\t}\n\t}\n\treturn result;\n}\n"]}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/guardian/runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport {\n\tcopyFileSync,\n\texistsSync,\n\tmkdirSync,\n\tmkdtempSync,\n\treadFileSync,\n\trmSync,\n\tstatSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport os from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { resolveGuardianConfig } from \"./config.js\";\nimport { loadGuardianState, recordGuardianRun } from \"./state.js\";\nimport { DEFAULT_EXCLUDES } from \"./types.js\";\nimport type {\n\tGuardianEnablement,\n\tGuardianRunOptions,\n\tGuardianRunResult,\n\tGuardianStatus,\n\tGuardianToolResult,\n} from \"./types.js\";\n\nconst GUARDIAN_DISABLE_VALUES = [\"0\", \"false\", \"off\", \"no\"];\nconst GUARDIAN_ENABLE_VALUES = [\"1\", \"true\", \"on\"];\nconst DEFAULT_TIMEOUT_MS = 10_000;\nconst DEFAULT_SEMGREP_TIMEOUT_MS = 120_000;\n\ntype FileListResult =\n\t| { ok: true; files: string[] }\n\t| { ok: false; error: string; exitCode: number };\n\ntype CommandResult = {\n\texitCode: number;\n\tstdout: string;\n\tstderr: string;\n\terror?: string;\n\tdurationMs: number;\n};\n\nfunction spawnErrorCode(error: Error | undefined): string | null {\n\tconst code = (error as NodeJS.ErrnoException | undefined)?.code;\n\treturn typeof code === \"string\" ? code : null;\n}\n\nfunction isSpawnTimeout(error: Error | undefined): boolean {\n\treturn (\n\t\tspawnErrorCode(error) === \"ETIMEDOUT\" ||\n\t\terror?.message.includes(\"ETIMEDOUT\") === true\n\t);\n}\n\nfunction exitCodeForSpawnResult(\n\tstatus: number | null,\n\terror: Error | undefined,\n\tsignal: NodeJS.Signals | null,\n): number {\n\tif (typeof status === \"number\") {\n\t\treturn status;\n\t}\n\tif (isSpawnTimeout(error)) {\n\t\treturn 124;\n\t}\n\tif (error) {\n\t\treturn 2;\n\t}\n\tif (signal) {\n\t\tconst signalNumber = os.constants.signals[signal];\n\t\treturn typeof signalNumber === \"number\" ? 128 + signalNumber : 128;\n\t}\n\treturn 1;\n}\n\nfunction appendSpawnFailureDetails(\n\tstderr: string,\n\tcommand: string,\n\terror: Error | undefined,\n\tsignal: NodeJS.Signals | null,\n\ttimeoutMs: number,\n): string {\n\tconst details: string[] = [];\n\tif (isSpawnTimeout(error)) {\n\t\tdetails.push(`${command} timed out after ${timeoutMs}ms`);\n\t}\n\tif (error?.message) {\n\t\tdetails.push(error.message);\n\t}\n\tif (signal) {\n\t\tdetails.push(`${command} terminated by ${signal}`);\n\t}\n\tconst uniqueDetails = Array.from(new Set(details));\n\treturn [stderr, ...uniqueDetails].filter((part) => part.trim()).join(\"\\n\");\n}\n\nfunction commandExists(command: string, cwd: string): boolean {\n\tconst result = spawnSync(command, [\"--version\"], {\n\t\tcwd,\n\t\tstdio: \"pipe\",\n\t\tencoding: \"utf-8\",\n\t});\n\treturn (result.status ?? 1) === 0;\n}\n\nfunction runCommand(\n\tcommand: string,\n\targs: string[],\n\tcwd: string,\n\ttimeoutMs = DEFAULT_TIMEOUT_MS,\n\tenv?: NodeJS.ProcessEnv,\n): CommandResult {\n\tconst started = Date.now();\n\ttry {\n\t\tconst result = spawnSync(command, args, {\n\t\t\tcwd,\n\t\t\tencoding: \"utf-8\",\n\t\t\tenv: env ? { ...process.env, ...env } : process.env,\n\t\t\tmaxBuffer: 8 * 1024 * 1024,\n\t\t\ttimeout: timeoutMs,\n\t\t});\n\t\tconst errorMessage =\n\t\t\tresult.error instanceof Error ? result.error.message : undefined;\n\t\tconst stderr =\n\t\t\tresult.stderr && result.stderr.length > 0\n\t\t\t\t? result.stderr\n\t\t\t\t: (errorMessage ?? \"\");\n\t\treturn {\n\t\t\texitCode: exitCodeForSpawnResult(\n\t\t\t\tresult.status,\n\t\t\t\tresult.error,\n\t\t\t\tresult.signal ?? null,\n\t\t\t),\n\t\t\tstdout: result.stdout ?? \"\",\n\t\t\tstderr: appendSpawnFailureDetails(\n\t\t\t\tstderr,\n\t\t\t\tcommand,\n\t\t\t\tresult.error,\n\t\t\t\tresult.signal ?? null,\n\t\t\t\ttimeoutMs,\n\t\t\t),\n\t\t\terror: errorMessage,\n\t\t\tdurationMs: Date.now() - started,\n\t\t};\n\t} catch (error) {\n\t\tconst thrownError =\n\t\t\terror instanceof Error ? error : new Error(String(error));\n\t\treturn {\n\t\t\texitCode: exitCodeForSpawnResult(null, thrownError, null),\n\t\t\tstdout: \"\",\n\t\t\tstderr: thrownError.message,\n\t\t\terror: thrownError.message,\n\t\t\tdurationMs: Date.now() - started,\n\t\t};\n\t}\n}\n\nfunction hasGitSecretsPlugin(root: string): boolean {\n\tconst result = runCommand(\"git\", [\"secrets\", \"--help\"], root, 4_000);\n\treturn (\n\t\tresult.exitCode === 0 ||\n\t\tresult.stderr.includes(\"git secrets\") ||\n\t\tresult.stdout.includes(\"git secrets\")\n\t);\n}\n\nfunction filterFiles(files: string[]): string[] {\n\treturn files.filter((file) => {\n\t\tconst normalized = file.replace(/\\\\/g, \"/\");\n\t\treturn !DEFAULT_EXCLUDES.some(\n\t\t\t(exclude) =>\n\t\t\t\tnormalized === exclude ||\n\t\t\t\tnormalized.startsWith(exclude) ||\n\t\t\t\tnormalized.includes(`/${exclude}`),\n\t\t);\n\t});\n}\n\nfunction listStagedFiles(root: string): FileListResult {\n\tconst result = runCommand(\n\t\t\"git\",\n\t\t[\"diff\", \"--name-only\", \"--cached\", \"--diff-filter=ACMRTUXB\"],\n\t\troot,\n\t);\n\tif (result.exitCode !== 0) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror:\n\t\t\t\tresult.stderr.trim() ||\n\t\t\t\tresult.stdout.trim() ||\n\t\t\t\t\"Unable to list staged files\",\n\t\t\texitCode: result.exitCode,\n\t\t};\n\t}\n\tconst files = filterFiles(\n\t\tresult.stdout\n\t\t\t.split(\"\\n\")\n\t\t\t.map((line) => line.trim())\n\t\t\t.filter(Boolean),\n\t);\n\treturn { ok: true, files };\n}\n\nfunction listTrackedFiles(root: string): FileListResult {\n\tconst result = runCommand(\"git\", [\"ls-files\"], root);\n\tif (result.exitCode !== 0) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror:\n\t\t\t\tresult.stderr.trim() ||\n\t\t\t\tresult.stdout.trim() ||\n\t\t\t\t\"Unable to list tracked files\",\n\t\t\texitCode: result.exitCode,\n\t\t};\n\t}\n\tconst files = filterFiles(\n\t\tresult.stdout\n\t\t\t.split(\"\\n\")\n\t\t\t.map((line) => line.trim())\n\t\t\t.filter(Boolean),\n\t);\n\treturn { ok: true, files };\n}\n\nfunction resolveEnablement(\n\trespectEnv: boolean | undefined,\n): GuardianEnablement {\n\tconst state = loadGuardianState();\n\tif (!respectEnv) {\n\t\treturn { enabled: state.enabled };\n\t}\n\tconst rawEnv = process.env.MAESTRO_GUARDIAN;\n\tif (typeof rawEnv === \"string\" && rawEnv.trim().length > 0) {\n\t\tconst normalized = rawEnv.trim().toLowerCase();\n\t\tif (GUARDIAN_DISABLE_VALUES.includes(normalized)) {\n\t\t\treturn {\n\t\t\t\tenabled: false,\n\t\t\t\treason: \"MAESTRO_GUARDIAN=0 (disabled)\",\n\t\t\t\tenvOverride: \"disabled\",\n\t\t\t};\n\t\t}\n\t\tif (GUARDIAN_ENABLE_VALUES.includes(normalized)) {\n\t\t\treturn {\n\t\t\t\tenabled: true,\n\t\t\t\treason: \"MAESTRO_GUARDIAN=1 (forced on)\",\n\t\t\t\tenvOverride: \"enabled\",\n\t\t\t};\n\t\t}\n\t}\n\treturn { enabled: state.enabled };\n}\n\nfunction locateSemgrep(\n\troot: string,\n): { command: string; args: string[] } | null {\n\tif (commandExists(\"semgrep\", root)) {\n\t\treturn { command: \"semgrep\", args: [] };\n\t}\n\tif (commandExists(\"npx\", root)) {\n\t\treturn { command: \"npx\", args: [\"--yes\", \"semgrep\"] };\n\t}\n\treturn null;\n}\n\nfunction runSemgrep(\n\tfiles: string[],\n\troot: string,\n\ttimeoutMs = DEFAULT_SEMGREP_TIMEOUT_MS,\n): GuardianToolResult {\n\tconst started = Date.now();\n\tconst cmd = locateSemgrep(root);\n\tif (!cmd) {\n\t\treturn {\n\t\t\ttool: \"semgrep\",\n\t\t\texitCode: 0,\n\t\t\tstdout: \"\",\n\t\t\tstderr: \"\",\n\t\t\tdurationMs: Date.now() - started,\n\t\t\tskipped: true,\n\t\t\treason: \"semgrep not found\",\n\t\t};\n\t}\n\tconst includeArgs = files.flatMap((file) => [\"--include\", file]);\n\tconst args = [\n\t\t...cmd.args,\n\t\t\"scan\",\n\t\t\"--config\",\n\t\t\"p/secrets\",\n\t\t\"--config\",\n\t\t\"p/ci\",\n\t\t\"--json\",\n\t\t\"--skip-unknown-extensions\",\n\t\t\"--error\",\n\t\t\"--timeout\",\n\t\t\"7\",\n\t\t\"--jobs\",\n\t\t\"1\",\n\t\t\"--metrics=off\",\n\t\t\"--disable-version-check\",\n\t\t...includeArgs,\n\t\t\".\",\n\t];\n\t// Semgrep can take longer on larger workspaces, so honor the configured tool budget.\n\tconst result = runCommand(cmd.command, args, root, timeoutMs, {\n\t\tSEMGREP_SEND_METRICS: \"off\",\n\t});\n\treturn {\n\t\ttool: \"semgrep\",\n\t\texitCode: result.exitCode,\n\t\tstdout: result.stdout,\n\t\tstderr: result.stderr,\n\t\tdurationMs: result.durationMs,\n\t};\n}\n\nfunction materializeStagedFiles(root: string, files: string[]): string | null {\n\tconst tempDir = mkdtempSync(join(os.tmpdir(), \"composer-guardian-staged-\"));\n\tfor (const relative of files) {\n\t\tconst target = join(tempDir, relative);\n\t\tconst dir = dirname(target);\n\t\tmkdirSync(dir, { recursive: true });\n\t\tconst show = runCommand(\"git\", [\"show\", `:${relative}`], root, 5_000);\n\t\tif (show.exitCode !== 0) {\n\t\t\t// skip files we fail to read from index\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\twriteFileSync(target, show.stdout, \"utf-8\");\n\t\t} catch {\n\t\t\t// ignore write errors for problematic files\n\t\t}\n\t}\n\treturn tempDir;\n}\n\nfunction copyFilesToTemp(root: string, files: string[]): string | null {\n\tif (!files.length) return null;\n\tconst tempDir = mkdtempSync(join(os.tmpdir(), \"composer-guardian-\"));\n\tfor (const relative of files) {\n\t\tconst source = resolve(root, relative);\n\t\tif (!existsSync(source)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst target = join(tempDir, relative);\n\t\tconst dir = dirname(target);\n\t\tmkdirSync(dir, { recursive: true });\n\t\ttry {\n\t\t\tcopyFileSync(source, target);\n\t\t} catch {\n\t\t\t// ignore copy errors; file may be removed\n\t\t}\n\t}\n\treturn tempDir;\n}\n\nfunction runGitSecrets(files: string[], root: string): GuardianToolResult {\n\tconst started = Date.now();\n\tif (!files.length) {\n\t\treturn {\n\t\t\ttool: \"git-secrets\",\n\t\t\texitCode: 0,\n\t\t\tstdout: \"\",\n\t\t\tstderr: \"\",\n\t\t\tdurationMs: Date.now() - started,\n\t\t\tskipped: true,\n\t\t\treason: \"no files\",\n\t\t};\n\t}\n\n\tconst hasBinary = commandExists(\"git-secrets\", root);\n\tconst hasPlugin = !hasBinary && hasGitSecretsPlugin(root);\n\tif (!hasBinary && !hasPlugin) {\n\t\treturn {\n\t\t\ttool: \"git-secrets\",\n\t\t\texitCode: 0,\n\t\t\tstdout: \"\",\n\t\t\tstderr: \"\",\n\t\t\tdurationMs: Date.now() - started,\n\t\t\tskipped: true,\n\t\t\treason: \"git-secrets not installed\",\n\t\t};\n\t}\n\n\tconst args = hasBinary\n\t\t? [\"--scan\", \"--no-index\", \"--\", ...files]\n\t\t: [\"secrets\", \"--scan\", \"--no-index\", \"--\", ...files];\n\tconst result = runCommand(hasBinary ? \"git-secrets\" : \"git\", args, root);\n\treturn {\n\t\ttool: \"git-secrets\",\n\t\texitCode: result.exitCode,\n\t\tstdout: result.stdout,\n\t\tstderr: result.stderr,\n\t\tdurationMs: result.durationMs,\n\t};\n}\n\nfunction runTrufflehog(files: string[], root: string): GuardianToolResult {\n\tconst started = Date.now();\n\tif (!commandExists(\"trufflehog\", root)) {\n\t\treturn {\n\t\t\ttool: \"trufflehog\",\n\t\t\texitCode: 0,\n\t\t\tstdout: \"\",\n\t\t\tstderr: \"\",\n\t\t\tdurationMs: Date.now() - started,\n\t\t\tskipped: true,\n\t\t\treason: \"trufflehog not installed\",\n\t\t};\n\t}\n\tif (!files.length) {\n\t\treturn {\n\t\t\ttool: \"trufflehog\",\n\t\t\texitCode: 0,\n\t\t\tstdout: \"\",\n\t\t\tstderr: \"\",\n\t\t\tdurationMs: Date.now() - started,\n\t\t\tskipped: true,\n\t\t\treason: \"no files\",\n\t\t};\n\t}\n\n\tlet tempDir: string | null = null;\n\ttry {\n\t\ttempDir = copyFilesToTemp(root, files);\n\t\tif (!tempDir) {\n\t\t\treturn {\n\t\t\t\ttool: \"trufflehog\",\n\t\t\t\texitCode: 0,\n\t\t\t\tstdout: \"\",\n\t\t\t\tstderr: \"\",\n\t\t\t\tdurationMs: Date.now() - started,\n\t\t\t\tskipped: true,\n\t\t\t\treason: \"no files\",\n\t\t\t};\n\t\t}\n\t\tconst result = runCommand(\n\t\t\t\"trufflehog\",\n\t\t\t[\"filesystem\", \"--no-update\", \"--fail\", \"--json\", \"--path\", tempDir],\n\t\t\ttempDir,\n\t\t);\n\t\treturn {\n\t\t\ttool: \"trufflehog\",\n\t\t\texitCode: result.exitCode,\n\t\t\tstdout: result.stdout,\n\t\t\tstderr: result.stderr,\n\t\t\tdurationMs: result.durationMs,\n\t\t};\n\t} finally {\n\t\tif (tempDir) {\n\t\t\ttry {\n\t\t\t\trmSync(tempDir, { recursive: true, force: true });\n\t\t\t} catch {\n\t\t\t\t// best effort cleanup\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport type HeuristicFindingName =\n\t| \"AWS access key\"\n\t| \"AWS secret key\"\n\t| \"Private key block\"\n\t| \"Generic API key\"\n\t| \"Slack token\"\n\t| \"GitHub token\"\n\t| \"GitLab token\"\n\t| \"Google API key\"\n\t| \"Stripe key\"\n\t| \"OpenAI API key\"\n\t| \"SendGrid API key\"\n\t| \"Twilio auth token\"\n\t| \"Discord webhook\"\n\t| \"Database URL with credentials\"\n\t| \"JWT token\";\n\nexport type EvidenceIntegrityFindingName =\n\t| \"Synthetic production commit SHA\"\n\t| \"Synthetic production PR reference\"\n\t| \"Synthetic local GitHub Actions run ID\"\n\t| \"Local proof identifier\"\n\t| \"Replay artifact claimed as production evidence\";\n\nconst HEURISTIC_PATTERNS: Array<{ name: HeuristicFindingName; regex: RegExp }> =\n\t[\n\t\t// AWS credentials\n\t\t{ name: \"AWS access key\", regex: /\\bAKIA[0-9A-Z]{16}\\b/ },\n\t\t{\n\t\t\tname: \"AWS secret key\",\n\t\t\t// AWS secret keys are 40 characters of base64-like characters\n\t\t\tregex:\n\t\t\t\t/(?:aws_secret_access_key|secret_access_key|aws_secret)\\s*[:=]\\s*['\"]?[A-Za-z0-9/+=]{40}['\"]?/i,\n\t\t},\n\t\t{\n\t\t\tname: \"Private key block\",\n\t\t\tregex: /BEGIN [A-Z ]*PRIVATE KEY/,\n\t\t},\n\t\t{\n\t\t\tname: \"Generic API key\",\n\t\t\t// Avoid matching natural language inside string literals while still catching\n\t\t\t// typical config patterns like:\n\t\t\t// token: \"....\" / token = \"....\"\n\t\t\t// apiKey: \"....\" / api_key = \"....\"\n\t\t\t// And JSON-style:\n\t\t\t// \"token\": \"....\"\n\t\t\tregex:\n\t\t\t\t/(?:(?<!['\"])\\b(?:api[_-]?key|token)\\b\\s*[:=]\\s*['\"][A-Za-z0-9_-]{20,}['\"]|['\"](?:api[_-]?key|token)['\"]\\s*:\\s*['\"][A-Za-z0-9_-]{20,}['\"])/i,\n\t\t},\n\t\t{\n\t\t\tname: \"Slack token\",\n\t\t\t// Slack tokens are typically segmented and include numeric IDs:\n\t\t\t// xoxb-<digits>-<digits>-<secret>\n\t\t\t// xapp-<digits>-<digits>-<secret>\n\t\t\t// Use a stricter shape to avoid false positives in tests/docs.\n\t\t\tregex: /\\b(?:xox[baprs]|xapp)-\\d{6,}(?:-\\d{6,}){1,2}-[A-Za-z0-9-]{10,}\\b/,\n\t\t},\n\t\t{\n\t\t\tname: \"GitHub token\",\n\t\t\t// GitHub tokens: ghp_ (personal), gho_ (OAuth), ghu_ (user-to-server),\n\t\t\t// ghs_ (server-to-server), ghr_ (refresh), github_pat_\n\t\t\tregex: /\\b(?:ghp_|gho_|ghu_|ghs_|ghr_|github_pat_)[A-Za-z0-9_]{36,}\\b/,\n\t\t},\n\t\t{\n\t\t\tname: \"GitLab token\",\n\t\t\t// GitLab personal access tokens: glpat-...\n\t\t\tregex: /\\bglpat-[A-Za-z0-9_-]{20,}\\b/,\n\t\t},\n\t\t{\n\t\t\tname: \"Google API key\",\n\t\t\t// Google API keys start with AIza\n\t\t\tregex: /\\bAIza[A-Za-z0-9_-]{35}\\b/,\n\t\t},\n\t\t{\n\t\t\tname: \"Stripe key\",\n\t\t\t// Stripe keys: sk_live_, pk_live_, sk_test_, pk_test_, rk_live_, rk_test_\n\t\t\tregex: /\\b[spr]k_(?:live|test)_[A-Za-z0-9]{24,}\\b/,\n\t\t},\n\t\t{\n\t\t\tname: \"OpenAI API key\",\n\t\t\t// OpenAI keys: sk-... (typically 48+ chars total)\n\t\t\tregex: /\\bsk-[A-Za-z0-9]{32,}\\b/,\n\t\t},\n\t\t{\n\t\t\tname: \"SendGrid API key\",\n\t\t\t// SendGrid keys start with SG.\n\t\t\tregex: /\\bSG\\.[A-Za-z0-9_-]{22,}\\.[A-Za-z0-9_-]{22,}\\b/,\n\t\t},\n\t\t{\n\t\t\tname: \"Twilio auth token\",\n\t\t\t// Twilio auth tokens in config patterns\n\t\t\tregex:\n\t\t\t\t/twilio[_-]?(?:auth[_-]?token|account[_-]?sid)\\s*[:=]\\s*['\"]?[A-Za-z0-9]{32,}['\"]?/i,\n\t\t},\n\t\t{\n\t\t\tname: \"Discord webhook\",\n\t\t\t// Discord webhook URLs contain sensitive tokens\n\t\t\tregex:\n\t\t\t\t/https:\\/\\/(?:discord(?:app)?\\.com|canary\\.discord\\.com)\\/api\\/webhooks\\/\\d+\\/[A-Za-z0-9_-]+/,\n\t\t},\n\t\t{\n\t\t\tname: \"Database URL with credentials\",\n\t\t\t// Database connection strings with embedded credentials\n\t\t\t// postgres://user:password@host, mysql://user:pass@host, mongodb://user:pass@host\n\t\t\tregex:\n\t\t\t\t/\\b(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis):\\/\\/[^\\s:]+:[^\\s@]+@[^\\s'\"]+/i,\n\t\t},\n\t\t{\n\t\t\tname: \"JWT token\",\n\t\t\t// JWT tokens have a distinctive structure: eyJ...\n\t\t\t// Only flag if it looks like a real token (has all three parts with decent lengths)\n\t\t\tregex:\n\t\t\t\t/\\beyJ[A-Za-z0-9_-]{20,}\\.eyJ[A-Za-z0-9_-]{20,}\\.[A-Za-z0-9_-]{20,}\\b/,\n\t\t},\n\t];\n\nconst EVIDENCE_CONTEXT_REGEX =\n\t/(?<![A-Za-z0-9_-])(?:production[\\s_-]+evidence|productionEvidence|production[\\s_-]+proof|productionProof|live[\\s_-]+evidence|liveEvidence|live[\\s_-]+proof|liveProof|dereferenceable|evidence[\\s_-]+bundle|evidenceBundle|deploy-verifier|hard[_-]identifiers|hardIdentifiers)(?![A-Za-z0-9_-])/i;\n\nconst REPLAY_EVIDENCE_MARKER_PATTERN = String.raw`(?:\\bdeterministic_replay\\b|(?<![A-Za-z0-9_])[\"']?replay[\"']?\\s*:\\s*true)`;\nconst PRODUCTION_EVIDENCE_CLAIM_PATTERN = String.raw`(?<![A-Za-z0-9_-])[\"']?(?:production[_-]?evidence|live[_-]?proof)[\"']?\\s*:\\s*[\"']?(?:true|verified)[\"']?(?![A-Za-z0-9_-])`;\n\nconst EVIDENCE_PATTERNS: Array<{\n\tname: EvidenceIntegrityFindingName;\n\tregex?: RegExp;\n\tmatches?: (contents: string) => boolean;\n\trequiresEvidenceContext?: boolean;\n}> = [\n\t{\n\t\tname: \"Synthetic production commit SHA\",\n\t\t// A 40-hex \"SHA\" containing an embedded UTC timestamp plus cutesy marker\n\t\t// text is a fixture identifier, not dereferenceable git evidence.\n\t\tregex:\n\t\t\t/\\b[0-9a-f]{4,12}20\\d{12}[0-9a-f]{0,16}(?:c0de|cafe|5afe)[0-9a-f]{0,20}\\b/i,\n\t\trequiresEvidenceContext: true,\n\t},\n\t{\n\t\tname: \"Synthetic production PR reference\",\n\t\tregex:\n\t\t\t/\\b[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.-]+#(?!\\d+\\b)[A-Za-z][A-Za-z0-9_.:-]*(?:local|prod-pr-lane)[A-Za-z0-9_.:-]*\\b/i,\n\t\trequiresEvidenceContext: true,\n\t},\n\t{\n\t\tname: \"Synthetic local GitHub Actions run ID\",\n\t\tregex: /\\bgha-run-[A-Za-z0-9_.:-]*-local\\b/i,\n\t\trequiresEvidenceContext: true,\n\t},\n\t{\n\t\tname: \"Local proof identifier\",\n\t\tregex:\n\t\t\t/\\bproof(?:[_-]?id|Id)?\\b[\"']?\\s*[:=]\\s*[\"']?[A-Za-z0-9_.:-]+-local\\b/i,\n\t\trequiresEvidenceContext: true,\n\t},\n\t{\n\t\tname: \"Replay artifact claimed as production evidence\",\n\t\tmatches: (contents) =>\n\t\t\tnew RegExp(REPLAY_EVIDENCE_MARKER_PATTERN, \"i\").test(contents) &&\n\t\t\tnew RegExp(PRODUCTION_EVIDENCE_CLAIM_PATTERN, \"i\").test(contents),\n\t},\n];\n\nexport function detectHeuristicFindings(\n\tcontents: string,\n): HeuristicFindingName[] {\n\tconst matches: HeuristicFindingName[] = [];\n\tfor (const pattern of HEURISTIC_PATTERNS) {\n\t\tif (pattern.regex.test(contents)) {\n\t\t\tmatches.push(pattern.name);\n\t\t}\n\t}\n\treturn matches;\n}\n\nexport function detectEvidenceIntegrityFindings(\n\tcontents: string,\n): EvidenceIntegrityFindingName[] {\n\tconst matches: EvidenceIntegrityFindingName[] = [];\n\tconst hasEvidenceContext = EVIDENCE_CONTEXT_REGEX.test(contents);\n\tfor (const pattern of EVIDENCE_PATTERNS) {\n\t\tif (pattern.requiresEvidenceContext && !hasEvidenceContext) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (pattern.matches?.(contents) ?? pattern.regex?.test(contents)) {\n\t\t\tmatches.push(pattern.name);\n\t\t}\n\t}\n\treturn matches;\n}\n\nfunction runEvidenceIntegrityScan(\n\tfiles: string[],\n\troot: string,\n): GuardianToolResult {\n\tconst started = Date.now();\n\tconst findings: string[] = [];\n\tconst ignorePatterns = [\n\t\t/test\\/guardian\\/evidence-integrity\\.test\\.ts$/,\n\t\t/src\\/guardian\\/runner\\.ts$/,\n\t];\n\n\tfor (const relative of files) {\n\t\tif (ignorePatterns.some((pattern) => pattern.test(relative))) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst fullPath = resolve(root, relative);\n\t\tif (!existsSync(fullPath)) continue;\n\t\tlet contents: string;\n\t\ttry {\n\t\t\tconst stats = statSync(fullPath);\n\t\t\tif (stats.size > 2 * 1024 * 1024) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcontents = readFileSync(fullPath, \"utf-8\");\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tif (contents.includes(\"\\0\")) continue;\n\t\tfor (const match of detectEvidenceIntegrityFindings(contents)) {\n\t\t\tfindings.push(`${match}: ${relative}`);\n\t\t}\n\t}\n\n\tif (!findings.length) {\n\t\treturn {\n\t\t\ttool: \"evidence-integrity\",\n\t\t\texitCode: 0,\n\t\t\tstdout: \"\",\n\t\t\tstderr: \"\",\n\t\t\tdurationMs: Date.now() - started,\n\t\t};\n\t}\n\treturn {\n\t\ttool: \"evidence-integrity\",\n\t\texitCode: 1,\n\t\tstdout: findings.join(\"\\n\"),\n\t\tstderr:\n\t\t\t\"Live-production claims must use dereferenceable git, PR, Actions, deploy, and signature identifiers. Mark deterministic fixtures as replay evidence instead.\",\n\t\tdurationMs: Date.now() - started,\n\t};\n}\n\nfunction runHeuristicScan(files: string[], root: string): GuardianToolResult {\n\tconst started = Date.now();\n\tconst findings: string[] = [];\n\tconst ignorePatterns = [\n\t\t/test\\/enterprise\\/pii-detector\\.test\\.ts$/,\n\t\t/test\\/guardian\\/heuristic-scan\\.test\\.ts$/,\n\t\t// Tests that intentionally include credential-like fixtures.\n\t\t/test\\/integration\\/security-middleware\\.test\\.ts$/,\n\t\t/test\\/safety\\/context-firewall\\.test\\.ts$/,\n\t\t/test\\/safety\\/edge-cases\\.test\\.ts$/,\n\t\t/test\\/safety\\/safety-middleware\\.test\\.ts$/,\n\t\t/test\\/telemetry\\/beacon\\.test\\.ts$/,\n\t\t/test\\/telemetry\\/telemetry-metadata-split\\.test\\.ts$/,\n\t\t// The runner itself contains regex patterns that look like secrets\n\t\t/src\\/guardian\\/runner\\.ts$/,\n\t];\n\n\tfor (const relative of files) {\n\t\tif (ignorePatterns.some((pattern) => pattern.test(relative))) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst fullPath = resolve(root, relative);\n\t\tif (!existsSync(fullPath)) continue;\n\t\tlet contents: string;\n\t\ttry {\n\t\t\tconst stats = statSync(fullPath);\n\t\t\tif (stats.size > 2 * 1024 * 1024) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcontents = readFileSync(fullPath, \"utf-8\");\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tif (contents.includes(\"\\0\")) continue; // likely binary\n\t\tfor (const match of detectHeuristicFindings(contents)) {\n\t\t\tfindings.push(`${match}: ${relative}`);\n\t\t}\n\t}\n\n\tif (!findings.length) {\n\t\treturn {\n\t\t\ttool: \"heuristic-scan\",\n\t\t\texitCode: 0,\n\t\t\tstdout: \"\",\n\t\t\tstderr: \"\",\n\t\t\tdurationMs: Date.now() - started,\n\t\t};\n\t}\n\treturn {\n\t\ttool: \"heuristic-scan\",\n\t\texitCode: 1,\n\t\tstdout: findings.join(\"\\n\"),\n\t\tstderr: \"\",\n\t\tdurationMs: Date.now() - started,\n\t};\n}\n\nfunction buildSummary(\n\tstatus: GuardianStatus,\n\tfiles: string[],\n\ttools: GuardianToolResult[],\n\ttarget: \"staged\" | \"all\",\n\tskipReason?: string,\n): string {\n\tif (status === \"skipped\") {\n\t\treturn `Guardian skipped (${skipReason ?? \"disabled\"})`;\n\t}\n\tconst fileLabel = target === \"staged\" ? \"staged file(s)\" : \"tracked file(s)\";\n\tconst prefix =\n\t\tstatus === \"passed\"\n\t\t\t? \"Guardian passed\"\n\t\t\t: status === \"failed\"\n\t\t\t\t? \"Guardian blocked commit\"\n\t\t\t\t: \"Guardian error\";\n\tconst ran = tools\n\t\t.filter((tool) => !tool.skipped)\n\t\t.map((tool) => tool.tool)\n\t\t.join(\" + \");\n\tconst skipped = tools\n\t\t.filter((tool) => tool.skipped)\n\t\t.map((tool) => tool.tool)\n\t\t.join(\", \");\n\tconst toolSummary =\n\t\tran && skipped\n\t\t\t? `${ran} (skipped: ${skipped})`\n\t\t\t: ran || (skipped ? `skipped: ${skipped}` : \"\");\n\treturn `${prefix} on ${files.length} ${fileLabel}${\n\t\ttoolSummary ? ` using ${toolSummary}` : \"\"\n\t}`;\n}\n\nexport function formatGuardianResult(result: GuardianRunResult): string {\n\tconst lines: string[] = [];\n\tlines.push(result.summary);\n\tlines.push(\n\t\t`Status: ${result.status} • Target: ${result.target} • Duration: ${\n\t\t\tresult.durationMs\n\t\t}ms`,\n\t);\n\tfor (const tool of result.toolResults) {\n\t\tconst status =\n\t\t\ttool.skipped && tool.reason\n\t\t\t\t? `skipped (${tool.reason})`\n\t\t\t\t: tool.exitCode === 0\n\t\t\t\t\t? \"clean\"\n\t\t\t\t\t: tool.exitCode === 1\n\t\t\t\t\t\t? \"findings\"\n\t\t\t\t\t\t: \"error\";\n\t\tlines.push(\n\t\t\t`- ${tool.tool}: ${status} (${tool.durationMs}ms${\n\t\t\t\ttool.exitCode !== 0 ? `, exit ${tool.exitCode}` : \"\"\n\t\t\t})`,\n\t\t);\n\t\tif (tool.stdout.trim()) {\n\t\t\tlines.push(` stdout: ${tool.stdout.trim()}`);\n\t\t}\n\t\tif (tool.stderr.trim()) {\n\t\t\tlines.push(` stderr: ${tool.stderr.trim()}`);\n\t\t}\n\t}\n\tif (result.files?.length) {\n\t\tconst preview = result.files.slice(0, 8).join(\", \");\n\t\tconst suffix =\n\t\t\tresult.files.length > 8 ? ` … +${result.files.length - 8} more` : \"\";\n\t\tlines.push(`Files: ${preview}${suffix}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction pickOverallStatus(tools: GuardianToolResult[]): GuardianStatus {\n\tconst hadError = tools.some((tool) => !tool.skipped && tool.exitCode > 1);\n\tif (hadError) return \"error\";\n\tconst hadFindings = tools.some(\n\t\t(tool) => !tool.skipped && tool.exitCode === 1,\n\t);\n\tif (hadFindings) return \"failed\";\n\treturn \"passed\";\n}\n\nexport function shouldGuardCommand(command: string): {\n\tshouldGuard: boolean;\n\ttrigger: string | null;\n} {\n\tconst inlineDisable = /MAESTRO_GUARDIAN\\s*=\\s*(0|false|off|no)/i;\n\tif (inlineDisable.test(command)) {\n\t\treturn { shouldGuard: false, trigger: null };\n\t}\n\tconst gitMatch = command.match(/\\bgit\\s+(commit|push)\\b/i);\n\tif (gitMatch?.[1]) {\n\t\treturn { shouldGuard: true, trigger: `git ${gitMatch[1].toLowerCase()}` };\n\t}\n\n\tconst destructivePatterns: Array<{ regex: RegExp; label: string }> = [\n\t\t{ regex: /\\brm\\s+-rf\\b/i, label: \"rm -rf\" },\n\t\t{\n\t\t\tregex: /\\brm\\s+(?:-[a-z]*r[a-z]*\\b|--recursive\\b)/i,\n\t\t\tlabel: \"rm -r\",\n\t\t},\n\t\t{ regex: /\\bfind\\s+[^\\n]*-delete\\b/i, label: \"find -delete\" },\n\t\t{ regex: /\\bchmod\\s+0{3,4}\\b/i, label: \"chmod 000\" },\n\t\t{ regex: /\\bchown\\b[^\\n]*\\broot\\b/i, label: \"chown root\" },\n\t\t{ regex: /\\bdd\\s+if=.*\\s+of=\\/dev\\//i, label: \"dd to device\" },\n\t\t{ regex: /\\bmkfs\\./i, label: \"mkfs\" },\n\t\t{ regex: /\\btruncate\\s+-s\\s+0\\b/i, label: \"truncate -s 0\" },\n\t];\n\n\tfor (const pattern of destructivePatterns) {\n\t\tif (pattern.regex.test(command)) {\n\t\t\treturn { shouldGuard: true, trigger: pattern.label };\n\t\t}\n\t}\n\n\treturn { shouldGuard: false, trigger: null };\n}\n\nexport async function runGuardian(\n\toptions: GuardianRunOptions = {},\n): Promise<GuardianRunResult> {\n\tconst target = options.target ?? \"staged\";\n\tconst root = options.root ? resolve(options.root) : process.cwd();\n\tlet scanRoot = root;\n\tlet snapshotDir: string | null = null;\n\tconst enablement = resolveEnablement(options.respectEnv ?? true);\n\tconst startedAt = Date.now();\n\n\tif (!enablement.enabled) {\n\t\tconst result: GuardianRunResult = {\n\t\t\tstatus: \"skipped\",\n\t\t\texitCode: 0,\n\t\t\tstartedAt,\n\t\t\tdurationMs: Date.now() - startedAt,\n\t\t\ttarget,\n\t\t\ttrigger: options.trigger,\n\t\t\tfilesScanned: 0,\n\t\t\tsummary: \"Guardian disabled by configuration\",\n\t\t\tskipReason: enablement.reason ?? \"disabled\",\n\t\t\ttoolResults: [],\n\t\t};\n\t\trecordGuardianRun(result);\n\t\treturn result;\n\t}\n\n\tconst filesResult =\n\t\ttarget === \"all\" ? listTrackedFiles(root) : listStagedFiles(root);\n\tif (!filesResult.ok) {\n\t\tconst result: GuardianRunResult = {\n\t\t\tstatus: \"error\",\n\t\t\texitCode: filesResult.exitCode,\n\t\t\tstartedAt,\n\t\t\tdurationMs: Date.now() - startedAt,\n\t\t\ttarget,\n\t\t\ttrigger: options.trigger,\n\t\t\tfilesScanned: 0,\n\t\t\tsummary: filesResult.error,\n\t\t\ttoolResults: [],\n\t\t};\n\t\trecordGuardianRun(result);\n\t\treturn result;\n\t}\n\n\tconst files = filesResult.files;\n\tif (!files.length) {\n\t\tconst result: GuardianRunResult = {\n\t\t\tstatus: \"skipped\",\n\t\t\texitCode: 0,\n\t\t\tstartedAt,\n\t\t\tdurationMs: Date.now() - startedAt,\n\t\t\ttarget,\n\t\t\ttrigger: options.trigger,\n\t\t\tfilesScanned: 0,\n\t\t\tsummary: \"No files to scan\",\n\t\t\tskipReason: \"no files\",\n\t\t\ttoolResults: [],\n\t\t};\n\t\trecordGuardianRun(result);\n\t\treturn result;\n\t}\n\n\tif (target === \"staged\") {\n\t\tsnapshotDir = materializeStagedFiles(root, files);\n\t\tif (snapshotDir) {\n\t\t\tscanRoot = snapshotDir;\n\t\t}\n\t}\n\n\tconst config = resolveGuardianConfig({\n\t\troot,\n\t\tconfig: options.config,\n\t});\n\n\tconst toolResults: GuardianToolResult[] = [];\n\n\tif (config.tools.evidenceIntegrity) {\n\t\ttoolResults.push(runEvidenceIntegrityScan(files, scanRoot));\n\t}\n\n\tif (config.tools.semgrep) {\n\t\ttoolResults.push(runSemgrep(files, scanRoot, config.toolTimeoutMs));\n\t}\n\n\tlet fallback: GuardianToolResult | null = null;\n\tif (config.tools.gitSecrets) {\n\t\tconst gitSecretsResult = runGitSecrets(files, scanRoot);\n\t\tif (!gitSecretsResult.skipped) {\n\t\t\tfallback = gitSecretsResult;\n\t\t}\n\t}\n\tif (!fallback && config.tools.trufflehog) {\n\t\tconst truffleResult = runTrufflehog(files, scanRoot);\n\t\tif (!truffleResult.skipped) {\n\t\t\tfallback = truffleResult;\n\t\t}\n\t}\n\tif (!fallback && config.tools.heuristicScan) {\n\t\tfallback = runHeuristicScan(files, scanRoot);\n\t}\n\tif (fallback) {\n\t\ttoolResults.push(fallback);\n\t}\n\n\tconst status = pickOverallStatus(toolResults);\n\tconst exitCode =\n\t\tstatus === \"passed\"\n\t\t\t? 0\n\t\t\t: (toolResults.find((tool) => !tool.skipped && tool.exitCode !== 0)\n\t\t\t\t\t?.exitCode ?? 1);\n\n\tconst result: GuardianRunResult = {\n\t\tstatus,\n\t\texitCode,\n\t\tstartedAt,\n\t\tdurationMs: Date.now() - startedAt,\n\t\ttarget,\n\t\ttrigger: options.trigger,\n\t\tfilesScanned: files.length,\n\t\tfiles: options.quiet ? undefined : files,\n\t\tsummary: buildSummary(status, files, toolResults, target),\n\t\ttoolResults,\n\t};\n\n\trecordGuardianRun(result);\n\n\tif (snapshotDir) {\n\t\ttry {\n\t\t\trmSync(snapshotDir, { recursive: true, force: true });\n\t\t} catch {\n\t\t\t// best effort cleanup\n\t\t}\n\t}\n\treturn result;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"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"}
@@ -62,6 +62,7 @@ import { createLogger } from "../utils/logger.js";
62
62
  import { getHomeDir, resolveEnvPath } from "../utils/path-expansion.js";
63
63
  import { uniquePaths } from "../utils/path-utils.js";
64
64
  import { defaultEnvValidators, evaluateEnvValidators } from "./env-limits.js";
65
+ import { getFathomCuaPluginServers } from "./fathom-cua.js";
65
66
  import { getPlatformMcpPluginServers } from "./platform-plugin.js";
66
67
  import { mcpAuthPresetSchema, mcpConfigSchema, mcpServerSchema, mcpWorkspaceTrustDefaultSchema, mcpWorkspaceTrustEntrySchema, } from "./schema.js";
67
68
  const logger = createLogger("mcp:config");
@@ -117,6 +118,7 @@ export function loadMcpConfig(projectRoot, options = {}) {
117
118
  const pluginCfg = {
118
119
  servers: [
119
120
  ...getPlatformMcpPluginServers(),
121
+ ...getFathomCuaPluginServers(),
120
122
  ...(options.pluginServers ?? []),
121
123
  ],
122
124
  authPresets: [],
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MCP Configuration - Model Context Protocol Server Management\n *\n * This module handles loading and merging MCP (Model Context Protocol)\n * server configurations from multiple sources. MCP servers extend the\n * agent's capabilities with additional tools and integrations.\n *\n * ## Configuration Sources (precedence order)\n *\n * 1. **Enterprise**: `~/.maestro/enterprise/mcp.json` (highest; legacy\n * Composer enterprise MCP config remains a fallback)\n * 2. **Plugin**: Programmatically provided servers\n * 3. **Project**: `.maestro/mcp.json` in project root\n * 4. **Local**: `.maestro/mcp.local.json` (git-ignored)\n * 5. **User**: `~/.maestro/mcp.json` (lowest; legacy Composer user MCP config\n * remains a fallback)\n *\n * ## Configuration Format\n *\n * ```json\n * {\n * \"servers\": [\n * {\n * \"name\": \"my-server\",\n * \"transport\": \"stdio\",\n * \"command\": \"node\",\n * \"args\": [\"path/to/server.js\"],\n * \"env\": { \"API_KEY\": \"${MY_API_KEY}\" }\n * }\n * ],\n * \"mcpServers\": {\n * \"another-server\": {\n * \"command\": \"python\",\n * \"args\": [\"-m\", \"my_mcp_server\"]\n * }\n * }\n * }\n * ```\n *\n * ## Transport Types\n *\n * | Transport | Description |\n * |-----------|------------------------------------------|\n * | stdio | Communicate via stdin/stdout (default) |\n * | http | HTTP-based transport |\n * | sse | Server-Sent Events transport |\n *\n * ## Environment Variable Expansion\n *\n * Supports `${VAR}` and `${VAR:-default}` syntax in:\n * - command, args, url, cwd, headersHelper\n * - env values\n * - headers\n *\n * @module mcp/config\n */\n\nimport { readFileSync, statSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport type { z } from \"zod\";\nimport { PATHS } from \"../config/constants.js\";\nimport { readJsonFile, writeJsonFile } from \"../utils/fs.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport { getHomeDir, resolveEnvPath } from \"../utils/path-expansion.js\";\nimport { uniquePaths } from \"../utils/path-utils.js\";\nimport { defaultEnvValidators, evaluateEnvValidators } from \"./env-limits.js\";\nimport { getPlatformMcpPluginServers } from \"./platform-plugin.js\";\nimport {\n\ttype McpAuthPresetInput,\n\ttype McpServerInput,\n\tmcpAuthPresetSchema,\n\tmcpConfigSchema,\n\tmcpServerSchema,\n\tmcpWorkspaceTrustDefaultSchema,\n\tmcpWorkspaceTrustEntrySchema,\n} from \"./schema.js\";\nimport type {\n\tMcpAuthPresetConfig,\n\tMcpConfig,\n\tMcpScope,\n\tMcpServerConfig,\n\tMcpWorkspaceTrustDefault,\n\tMcpWorkspaceTrustEntry,\n} from \"./types.js\";\n\nconst logger = createLogger(\"mcp:config\");\n\nconst PROJECT_CONFIG_NAME = \".maestro/mcp.json\";\nconst LOCAL_CONFIG_NAME = \".maestro/mcp.local.json\";\n\nconst getEnterpriseConfigPathOverride = (): string | null =>\n\tresolveEnvPath(process.env.MAESTRO_ENTERPRISE_MCP_PATH);\n\nconst getDefaultEnterpriseConfigPath = (): string =>\n\tjoin(PATHS.MAESTRO_HOME, \"enterprise\", \"mcp.json\");\n\nconst getEnterpriseConfigPath = (): string =>\n\tgetEnterpriseConfigPathOverride() ?? getDefaultEnterpriseConfigPath();\n\nconst getUserConfigPathOverride = (): string | null =>\n\tresolveEnvPath(process.env.MAESTRO_USER_MCP_PATH);\n\nconst getDefaultUserConfigPath = (): string =>\n\tjoin(PATHS.MAESTRO_HOME, \"mcp.json\");\n\nconst getUserConfigPath = (): string =>\n\tgetUserConfigPathOverride() ?? getDefaultUserConfigPath();\n\nconst getLegacyEnterpriseConfigPath = (): string =>\n\tjoin(getHomeDir(), \".composer\", \"enterprise\", \"mcp.json\");\n\nconst getLegacyUserConfigPath = (): string =>\n\tjoin(getHomeDir(), \".composer\", \"mcp.json\");\n\nfunction isConfigFile(path: string): boolean {\n\ttry {\n\t\treturn statSync(path).isFile();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction selectEffectiveConfigPath(paths: string[]): string {\n\treturn paths.find(isConfigFile) ?? paths[0]!;\n}\n\nconst getUserConfigPathCandidates = (): string[] => {\n\tconst overridePath = getUserConfigPathOverride();\n\tif (overridePath) {\n\t\treturn [overridePath];\n\t}\n\treturn uniquePaths([getDefaultUserConfigPath(), getLegacyUserConfigPath()]);\n};\n\nconst getEnterpriseConfigPathCandidates = (): string[] => {\n\tconst overridePath = getEnterpriseConfigPathOverride();\n\tif (overridePath) {\n\t\treturn [overridePath];\n\t}\n\treturn uniquePaths([\n\t\tgetDefaultEnterpriseConfigPath(),\n\t\tgetLegacyEnterpriseConfigPath(),\n\t]);\n};\n\nconst getEffectiveUserConfigPath = (): string =>\n\tselectEffectiveConfigPath(getUserConfigPathCandidates());\n\nconst getEffectiveEnterpriseConfigPath = (): string =>\n\tselectEffectiveConfigPath(getEnterpriseConfigPathCandidates());\n\ntype ParsedConfig = {\n\tservers: McpServerConfig[];\n\tauthPresets: McpAuthPresetConfig[];\n\ttrustedWorkspaces: Record<string, McpWorkspaceTrustEntry[]>;\n\tworkspaceTrustDefault?: McpWorkspaceTrustDefault;\n};\ntype RawMcpConfigFile = z.infer<typeof mcpConfigSchema>;\ntype PersistedMcpAuthPresetConfig = Omit<McpAuthPresetInput, \"name\">;\ntype PersistedMcpServerConfig = Omit<McpServerInput, \"name\">;\nexport type WritableMcpScope = Exclude<McpScope, \"enterprise\" | \"plugin\">;\n\nexport interface LoadMcpOptions {\n\tpluginServers?: McpServerConfig[];\n\tincludeEnvLimits?: boolean;\n}\n\nexport interface AddMcpServerOptions {\n\tprojectRoot?: string;\n\tscope: WritableMcpScope;\n\tserver: McpServerInput & { name: string };\n}\n\nexport interface AddMcpAuthPresetOptions {\n\tprojectRoot?: string;\n\tscope: WritableMcpScope;\n\tpreset: McpAuthPresetInput & { name: string };\n}\n\nexport interface RemoveMcpServerOptions {\n\tprojectRoot?: string;\n\tscope?: WritableMcpScope;\n\tname: string;\n}\n\nexport interface RemoveMcpAuthPresetOptions {\n\tprojectRoot?: string;\n\tscope?: WritableMcpScope;\n\tname: string;\n}\n\nexport interface UpdateMcpServerOptions {\n\tprojectRoot?: string;\n\tscope?: WritableMcpScope;\n\tname: string;\n\tserver: McpServerInput & { name: string };\n}\n\nexport interface UpdateMcpAuthPresetOptions {\n\tprojectRoot?: string;\n\tscope?: WritableMcpScope;\n\tname: string;\n\tpreset: McpAuthPresetInput & { name: string };\n}\n\nexport function loadMcpConfig(\n\tprojectRoot?: string,\n\toptions: LoadMcpOptions = {},\n): McpConfig {\n\tconst userCfg = parseConfigFile(getEffectiveUserConfigPath(), \"user\");\n\tconst enterpriseCfg = parseConfigFile(\n\t\tgetEffectiveEnterpriseConfigPath(),\n\t\t\"enterprise\",\n\t);\n\tconst projectCfg = projectRoot\n\t\t? parseConfigFile(resolve(projectRoot, PROJECT_CONFIG_NAME), \"project\")\n\t\t: { servers: [], authPresets: [], trustedWorkspaces: {} };\n\tconst localCfg = projectRoot\n\t\t? parseConfigFile(resolve(projectRoot, LOCAL_CONFIG_NAME), \"local\")\n\t\t: { servers: [], authPresets: [], trustedWorkspaces: {} };\n\tconst pluginCfg: ParsedConfig = {\n\t\tservers: [\n\t\t\t...getPlatformMcpPluginServers(),\n\t\t\t...(options.pluginServers ?? []),\n\t\t],\n\t\tauthPresets: [],\n\t\ttrustedWorkspaces: {},\n\t};\n\n\tconst merged = new Map<string, McpServerConfig>();\n\tconst mergedAuthPresets = new Map<string, McpAuthPresetConfig>();\n\tconst mergedTrustedWorkspaces: Record<string, McpWorkspaceTrustEntry[]> = {};\n\tlet workspaceTrustDefault: McpWorkspaceTrustDefault | undefined;\n\t// precedence: enterprise -> plugin -> project -> local -> user\n\t// lower precedence first, higher precedence last so later overrides earlier\n\tfor (const src of [userCfg, localCfg, projectCfg, pluginCfg, enterpriseCfg]) {\n\t\tfor (const authPreset of src.authPresets) {\n\t\t\tmergedAuthPresets.set(authPreset.name, authPreset);\n\t\t}\n\t\tfor (const server of src.servers) {\n\t\t\t// A higher-precedence config can explicitly disable a server defined earlier.\n\t\t\tif (server.enabled === false || server.disabled === true) {\n\t\t\t\tmerged.delete(server.name);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tmerged.set(server.name, server);\n\t\t}\n\t\tfor (const [serverName, entries] of Object.entries(src.trustedWorkspaces)) {\n\t\t\tmergedTrustedWorkspaces[serverName] = [\n\t\t\t\t...(mergedTrustedWorkspaces[serverName] ?? []),\n\t\t\t\t...entries,\n\t\t\t];\n\t\t}\n\t\tif (src.workspaceTrustDefault) {\n\t\t\tworkspaceTrustDefault = src.workspaceTrustDefault;\n\t\t}\n\t}\n\n\tconst envLimits = options.includeEnvLimits\n\t\t? evaluateEnvValidators(defaultEnvValidators)\n\t\t: undefined;\n\n\treturn {\n\t\tservers: Array.from(merged.values()),\n\t\tauthPresets: Array.from(mergedAuthPresets.values()),\n\t\tprojectRoot: projectRoot ? resolve(projectRoot) : undefined,\n\t\ttrustedWorkspaces:\n\t\t\tObject.keys(mergedTrustedWorkspaces).length > 0\n\t\t\t\t? mergedTrustedWorkspaces\n\t\t\t\t: undefined,\n\t\tworkspaceTrustDefault,\n\t\tenvLimits,\n\t};\n}\n\nexport function getConfigPaths(projectRoot?: string): string[] {\n\tconst paths = [\n\t\tgetEffectiveUserConfigPath(),\n\t\tgetEffectiveEnterpriseConfigPath(),\n\t];\n\tif (projectRoot) {\n\t\tpaths.push(resolve(projectRoot, PROJECT_CONFIG_NAME));\n\t\tpaths.push(resolve(projectRoot, LOCAL_CONFIG_NAME));\n\t}\n\treturn paths;\n}\n\nexport function getWritableMcpConfigPath(\n\tscope: WritableMcpScope,\n\tprojectRoot = process.cwd(),\n): string {\n\tswitch (scope) {\n\t\tcase \"user\":\n\t\t\treturn getEffectiveUserConfigPath();\n\t\tcase \"project\":\n\t\t\treturn resolve(projectRoot, PROJECT_CONFIG_NAME);\n\t\tcase \"local\":\n\t\t\treturn resolve(projectRoot, LOCAL_CONFIG_NAME);\n\t}\n}\n\nexport function inferRemoteMcpTransport(url: string): \"http\" | \"sse\" {\n\treturn isSseUrl(url) ? \"sse\" : \"http\";\n}\n\nexport function addMcpServerToConfig(options: AddMcpServerOptions): {\n\tpath: string;\n} {\n\tconst path = getWritableMcpConfigPath(options.scope, options.projectRoot);\n\tconst validatedServer = mcpServerSchema.parse({\n\t\t...options.server,\n\t\ttransport:\n\t\t\toptions.server.transport ??\n\t\t\t(options.server.url\n\t\t\t\t? inferRemoteMcpTransport(options.server.url)\n\t\t\t\t: \"stdio\"),\n\t});\n\tconst existing = readJsonFile<unknown>(path, { fallback: {} });\n\tconst parsed = mcpConfigSchema.safeParse(existing);\n\tif (!parsed.success) {\n\t\tthrow new Error(\n\t\t\t`Invalid MCP config at ${path}: ${parsed.error.issues.map((issue) => issue.message).join(\"; \")}`,\n\t\t);\n\t}\n\n\tconst nextConfig = structuredClone(parsed.data) as RawMcpConfigFile;\n\tconst hasObjectFormat =\n\t\tisRecord(nextConfig.mcpServers) || !Array.isArray(nextConfig.servers);\n\tif (hasObjectFormat) {\n\t\tconst existingServers = isRecord(nextConfig.mcpServers)\n\t\t\t? nextConfig.mcpServers\n\t\t\t: {};\n\t\tif (\n\t\t\tObject.prototype.hasOwnProperty.call(\n\t\t\t\texistingServers,\n\t\t\t\tvalidatedServer.name,\n\t\t\t)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`MCP server \"${validatedServer.name}\" already exists in ${path}`,\n\t\t\t);\n\t\t}\n\t\tnextConfig.mcpServers = {\n\t\t\t...existingServers,\n\t\t\t[validatedServer.name]: buildPersistedServerConfig(validatedServer),\n\t\t};\n\t} else {\n\t\tconst servers = nextConfig.servers ?? [];\n\t\tif (servers.some((server) => server.name === validatedServer.name)) {\n\t\t\tthrow new Error(\n\t\t\t\t`MCP server \"${validatedServer.name}\" already exists in ${path}`,\n\t\t\t);\n\t\t}\n\t\tnextConfig.servers = [\n\t\t\t...servers,\n\t\t\t{\n\t\t\t\t...buildPersistedServerConfig(validatedServer),\n\t\t\t\tname: validatedServer.name,\n\t\t\t},\n\t\t];\n\t}\n\n\twriteJsonFile(path, nextConfig);\n\treturn { path };\n}\n\nexport function addMcpAuthPresetToConfig(options: AddMcpAuthPresetOptions): {\n\tpath: string;\n} {\n\tconst path = getWritableMcpConfigPath(options.scope, options.projectRoot);\n\tconst validatedPreset = mcpAuthPresetSchema.parse(options.preset);\n\tconst existing = readJsonFile<unknown>(path, { fallback: {} });\n\tconst parsed = mcpConfigSchema.safeParse(existing);\n\tif (!parsed.success) {\n\t\tthrow new Error(\n\t\t\t`Invalid MCP config at ${path}: ${parsed.error.issues.map((issue) => issue.message).join(\"; \")}`,\n\t\t);\n\t}\n\n\tconst nextConfig = structuredClone(parsed.data) as RawMcpConfigFile;\n\tconst existingPresets = isRecord(nextConfig.authPresets)\n\t\t? nextConfig.authPresets\n\t\t: {};\n\tif (\n\t\tObject.prototype.hasOwnProperty.call(existingPresets, validatedPreset.name)\n\t) {\n\t\tthrow new Error(\n\t\t\t`MCP auth preset \"${validatedPreset.name}\" already exists in ${path}`,\n\t\t);\n\t}\n\n\tnextConfig.authPresets = {\n\t\t...existingPresets,\n\t\t[validatedPreset.name]: buildPersistedAuthPresetConfig(validatedPreset),\n\t};\n\n\twriteJsonFile(path, nextConfig);\n\treturn { path };\n}\n\nexport function removeMcpServerFromConfig(options: RemoveMcpServerOptions): {\n\tpath: string;\n\tscope: WritableMcpScope;\n} {\n\tconst projectRoot = options.projectRoot ?? process.cwd();\n\tconst scope = resolveWritableMutationScope(\n\t\toptions.name,\n\t\toptions.scope,\n\t\tprojectRoot,\n\t);\n\tconst { path, config } = readWritableMcpConfig(scope, projectRoot);\n\tconst nextConfig = structuredClone(config) as RawMcpConfigFile;\n\tconst removed = mutateWritableMcpConfig(nextConfig, options.name, \"remove\");\n\tif (!removed) {\n\t\tthrow new Error(`MCP server \"${options.name}\" not found in ${path}`);\n\t}\n\n\twriteJsonFile(path, nextConfig);\n\treturn { path, scope };\n}\n\nexport function removeMcpAuthPresetFromConfig(\n\toptions: RemoveMcpAuthPresetOptions,\n): {\n\tpath: string;\n\tscope: WritableMcpScope;\n} {\n\tconst projectRoot = options.projectRoot ?? process.cwd();\n\tconst scope = resolveWritableAuthPresetMutationScope(\n\t\toptions.name,\n\t\toptions.scope,\n\t\tprojectRoot,\n\t);\n\tconst { path, config } = readWritableMcpConfig(scope, projectRoot);\n\tconst nextConfig = structuredClone(config) as RawMcpConfigFile;\n\tconst removed = mutateWritableMcpAuthPresetConfig(\n\t\tnextConfig,\n\t\toptions.name,\n\t\t\"remove\",\n\t);\n\tif (!removed) {\n\t\tthrow new Error(`MCP auth preset \"${options.name}\" not found in ${path}`);\n\t}\n\n\twriteJsonFile(path, nextConfig);\n\treturn { path, scope };\n}\n\nexport function updateMcpServerInConfig(options: UpdateMcpServerOptions): {\n\tpath: string;\n\tscope: WritableMcpScope;\n} {\n\tconst projectRoot = options.projectRoot ?? process.cwd();\n\tconst scope = resolveWritableMutationScope(\n\t\toptions.name,\n\t\toptions.scope,\n\t\tprojectRoot,\n\t);\n\tif (options.server.name !== options.name) {\n\t\tthrow new Error(\"Renaming MCP servers is not supported by /mcp edit.\");\n\t}\n\n\tconst validatedServer = mcpServerSchema.parse({\n\t\t...options.server,\n\t\ttransport:\n\t\t\toptions.server.transport ??\n\t\t\t(options.server.url\n\t\t\t\t? inferRemoteMcpTransport(options.server.url)\n\t\t\t\t: \"stdio\"),\n\t});\n\tconst { path, config } = readWritableMcpConfig(scope, projectRoot);\n\tconst nextConfig = structuredClone(config) as RawMcpConfigFile;\n\tconst updated = mutateWritableMcpConfig(nextConfig, options.name, \"update\", {\n\t\tserver: validatedServer,\n\t});\n\tif (!updated) {\n\t\tthrow new Error(`MCP server \"${options.name}\" not found in ${path}`);\n\t}\n\n\twriteJsonFile(path, nextConfig);\n\treturn { path, scope };\n}\n\nexport function updateMcpAuthPresetInConfig(\n\toptions: UpdateMcpAuthPresetOptions,\n): {\n\tpath: string;\n\tscope: WritableMcpScope;\n} {\n\tconst projectRoot = options.projectRoot ?? process.cwd();\n\tconst scope = resolveWritableAuthPresetMutationScope(\n\t\toptions.name,\n\t\toptions.scope,\n\t\tprojectRoot,\n\t);\n\tif (options.preset.name !== options.name) {\n\t\tthrow new Error(\"Renaming MCP auth presets is not supported.\");\n\t}\n\n\tconst validatedPreset = mcpAuthPresetSchema.parse(options.preset);\n\tconst { path, config } = readWritableMcpConfig(scope, projectRoot);\n\tconst nextConfig = structuredClone(config) as RawMcpConfigFile;\n\tconst updated = mutateWritableMcpAuthPresetConfig(\n\t\tnextConfig,\n\t\toptions.name,\n\t\t\"update\",\n\t\t{\n\t\t\tpreset: validatedPreset,\n\t\t},\n\t);\n\tif (!updated) {\n\t\tthrow new Error(`MCP auth preset \"${options.name}\" not found in ${path}`);\n\t}\n\n\twriteJsonFile(path, nextConfig);\n\treturn { path, scope };\n}\n\nfunction parseConfigFile(path: string, scope: McpScope): ParsedConfig {\n\tif (!isConfigFile(path)) {\n\t\treturn { servers: [], authPresets: [], trustedWorkspaces: {} };\n\t}\n\ttry {\n\t\tconst content = readFileSync(path, \"utf-8\");\n\t\tconst json = JSON.parse(content);\n\t\tconst parsed = mcpConfigSchema.safeParse(json);\n\t\tif (!parsed.success) {\n\t\t\tlogger.warn(\"Invalid MCP config\", {\n\t\t\t\tscope,\n\t\t\t\tpath,\n\t\t\t\terror: parsed.error.issues.map((e) => e.message).join(\"; \"),\n\t\t\t});\n\t\t\treturn { servers: [], authPresets: [], trustedWorkspaces: {} };\n\t\t}\n\n\t\tconst servers: McpServerConfig[] = [];\n\t\tconst authPresets: McpAuthPresetConfig[] = [];\n\t\tif (Array.isArray(parsed.data.servers)) {\n\t\t\tfor (const server of parsed.data.servers) {\n\t\t\t\tconst normalized = normalizeServer(server, server.name, scope);\n\t\t\t\tif (normalized) servers.push(normalized);\n\t\t\t}\n\t\t}\n\t\tif (parsed.data.mcpServers) {\n\t\t\tfor (const [name, raw] of Object.entries(parsed.data.mcpServers)) {\n\t\t\t\tconst merged: McpServerInput | { name: string } = isRecord(raw)\n\t\t\t\t\t? ({ ...raw, name } as McpServerInput)\n\t\t\t\t\t: { name };\n\t\t\t\tconst normalized = normalizeServer(merged, name, scope);\n\t\t\t\tif (normalized) servers.push(normalized);\n\t\t\t}\n\t\t}\n\t\tif (parsed.data.authPresets) {\n\t\t\tfor (const [name, raw] of Object.entries(parsed.data.authPresets)) {\n\t\t\t\tconst merged: McpAuthPresetInput | { name: string } = isRecord(raw)\n\t\t\t\t\t? ({ ...raw, name } as McpAuthPresetInput)\n\t\t\t\t\t: { name };\n\t\t\t\tconst normalized = normalizeAuthPreset(merged, name, scope);\n\t\t\t\tif (normalized) authPresets.push(normalized);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tservers,\n\t\t\tauthPresets,\n\t\t\ttrustedWorkspaces: normalizeTrustedWorkspaces(\n\t\t\t\tparsed.data.trustedWorkspaces,\n\t\t\t\tscope,\n\t\t\t\tpath,\n\t\t\t),\n\t\t\tworkspaceTrustDefault: normalizeWorkspaceTrustDefault(\n\t\t\t\tparsed.data.workspaceTrustDefault,\n\t\t\t\tscope,\n\t\t\t\tpath,\n\t\t\t),\n\t\t};\n\t} catch (error) {\n\t\tlogger.warn(\"Failed to parse MCP config file\", {\n\t\t\tpath,\n\t\t\tscope,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\tstack: error instanceof Error ? error.stack : undefined,\n\t\t});\n\t\treturn { servers: [], authPresets: [], trustedWorkspaces: {} };\n\t}\n}\n\nfunction normalizeWorkspaceTrustDefault(\n\traw: unknown,\n\tscope: McpScope,\n\tpath: string,\n): McpWorkspaceTrustDefault | undefined {\n\tif (raw === undefined) {\n\t\treturn undefined;\n\t}\n\tconst parsed = mcpWorkspaceTrustDefaultSchema.safeParse(raw);\n\tif (parsed.success) {\n\t\treturn parsed.data;\n\t}\n\tlogger.warn(\"Invalid MCP workspaceTrustDefault\", {\n\t\tscope,\n\t\tpath,\n\t\terror: parsed.error.issues.map((issue) => issue.message).join(\"; \"),\n\t});\n\treturn undefined;\n}\n\nfunction normalizeTrustedWorkspaces(\n\traw: unknown,\n\tscope: McpScope,\n\tpath: string,\n): Record<string, McpWorkspaceTrustEntry[]> {\n\tif (raw === undefined) {\n\t\treturn {};\n\t}\n\tif (!isRecord(raw)) {\n\t\tlogger.warn(\"Invalid MCP trustedWorkspaces\", {\n\t\t\tscope,\n\t\t\tpath,\n\t\t\terror: \"expected an object keyed by MCP server name\",\n\t\t});\n\t\treturn {};\n\t}\n\tconst trustedWorkspaces: Record<string, McpWorkspaceTrustEntry[]> = {};\n\tfor (const [serverName, entries] of Object.entries(raw)) {\n\t\tif (!Array.isArray(entries)) {\n\t\t\tlogger.warn(\"Invalid MCP trustedWorkspaces entry\", {\n\t\t\t\tscope,\n\t\t\t\tpath,\n\t\t\t\tserverName,\n\t\t\t\terror: \"expected an array of workspace trust entries\",\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst validEntries: McpWorkspaceTrustEntry[] = [];\n\t\tfor (const [index, entry] of entries.entries()) {\n\t\t\tconst parsed = mcpWorkspaceTrustEntrySchema.safeParse(entry);\n\t\t\tif (!parsed.success) {\n\t\t\t\tlogger.warn(\"Invalid MCP trusted workspace entry\", {\n\t\t\t\t\tscope,\n\t\t\t\t\tpath,\n\t\t\t\t\tserverName,\n\t\t\t\t\tindex,\n\t\t\t\t\terror: parsed.error.issues.map((issue) => issue.message).join(\"; \"),\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvalidEntries.push(parsed.data);\n\t\t}\n\t\tif (validEntries.length > 0) {\n\t\t\ttrustedWorkspaces[serverName] = validEntries;\n\t\t}\n\t}\n\treturn trustedWorkspaces;\n}\n\nfunction readWritableMcpConfig(\n\tscope: WritableMcpScope,\n\tprojectRoot: string,\n): {\n\tpath: string;\n\tconfig: RawMcpConfigFile;\n} {\n\tconst path = getWritableMcpConfigPath(scope, projectRoot);\n\tconst existing = readJsonFile<unknown>(path, { fallback: {} });\n\tconst parsed = mcpConfigSchema.safeParse(existing);\n\tif (!parsed.success) {\n\t\tthrow new Error(\n\t\t\t`Invalid MCP config at ${path}: ${parsed.error.issues.map((issue) => issue.message).join(\"; \")}`,\n\t\t);\n\t}\n\treturn { path, config: parsed.data };\n}\n\nfunction resolveWritableMutationScope(\n\tname: string,\n\tscope: WritableMcpScope | undefined,\n\tprojectRoot: string,\n): WritableMcpScope {\n\tif (scope) {\n\t\treturn scope;\n\t}\n\n\tconst activeServer = loadMcpConfig(projectRoot).servers.find(\n\t\t(server) => server.name === name,\n\t);\n\tif (!activeServer) {\n\t\tthrow new Error(`MCP server \"${name}\" not found in merged config.`);\n\t}\n\tif (!isWritableScope(activeServer.scope)) {\n\t\tthrow new Error(\n\t\t\t`MCP server \"${name}\" is managed by ${activeServer.scope ?? \"an unknown\"} scope and cannot be edited here.`,\n\t\t);\n\t}\n\treturn activeServer.scope;\n}\n\nfunction resolveWritableAuthPresetMutationScope(\n\tname: string,\n\tscope: WritableMcpScope | undefined,\n\tprojectRoot: string,\n): WritableMcpScope {\n\tif (scope) {\n\t\treturn scope;\n\t}\n\n\tconst activePreset = loadMcpConfig(projectRoot).authPresets.find(\n\t\t(preset) => preset.name === name,\n\t);\n\tif (!activePreset) {\n\t\tthrow new Error(`MCP auth preset \"${name}\" not found in merged config.`);\n\t}\n\tif (!isWritableScope(activePreset.scope)) {\n\t\tthrow new Error(\n\t\t\t`MCP auth preset \"${name}\" is managed by ${activePreset.scope ?? \"an unknown\"} scope and cannot be edited here.`,\n\t\t);\n\t}\n\treturn activePreset.scope;\n}\n\nfunction mutateWritableMcpConfig(\n\tconfig: RawMcpConfigFile,\n\tname: string,\n\tmode: \"remove\" | \"update\",\n\toptions?: { server: McpServerInput & { name: string } },\n): boolean {\n\tif (\n\t\tisRecord(config.mcpServers) &&\n\t\tObject.prototype.hasOwnProperty.call(config.mcpServers, name)\n\t) {\n\t\tif (mode === \"remove\") {\n\t\t\tdelete config.mcpServers[name];\n\t\t} else {\n\t\t\tconfig.mcpServers[name] = buildPersistedServerConfig(options!.server);\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (Array.isArray(config.servers)) {\n\t\tconst index = config.servers.findIndex((server) => server.name === name);\n\t\tif (index >= 0) {\n\t\t\tif (mode === \"remove\") {\n\t\t\t\tconfig.servers.splice(index, 1);\n\t\t\t} else {\n\t\t\t\tconfig.servers[index] = {\n\t\t\t\t\t...buildPersistedServerConfig(options!.server),\n\t\t\t\t\tname: options!.server.name,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nfunction mutateWritableMcpAuthPresetConfig(\n\tconfig: RawMcpConfigFile,\n\tname: string,\n\tmode: \"remove\" | \"update\",\n\toptions?: {\n\t\tpreset: McpAuthPresetInput & { name: string };\n\t},\n): boolean {\n\tif (\n\t\tisRecord(config.authPresets) &&\n\t\tObject.prototype.hasOwnProperty.call(config.authPresets, name)\n\t) {\n\t\tif (mode === \"remove\") {\n\t\t\tdelete config.authPresets[name];\n\t\t} else {\n\t\t\tconfig.authPresets[name] = buildPersistedAuthPresetConfig(\n\t\t\t\toptions!.preset,\n\t\t\t);\n\t\t}\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction normalizeServer(\n\tserver: McpServerInput,\n\tname: string,\n\tscope: McpScope,\n): McpServerConfig | null {\n\tconst transport = resolveTransport(server);\n\tconst expanded = expandServerEnv({ ...server, name, transport });\n\n\tconst validated = mcpServerSchema.safeParse(expanded);\n\tif (!validated.success) {\n\t\tlogger.warn(\"Invalid MCP server entry\", {\n\t\t\tscope,\n\t\t\tname,\n\t\t\terror: validated.error.issues.map((e) => e.message).join(\"; \"),\n\t\t});\n\t\treturn null;\n\t}\n\n\tconst cleanEnv =\n\t\tvalidated.data.env && typeof validated.data.env === \"object\"\n\t\t\t? (Object.fromEntries(\n\t\t\t\t\tObject.entries(validated.data.env).map(([k, v]) => [\n\t\t\t\t\t\tk,\n\t\t\t\t\t\tString(v ?? \"\"),\n\t\t\t\t\t]),\n\t\t\t\t) as Record<string, string>)\n\t\t\t: undefined;\n\tconst cleanHeaders =\n\t\tvalidated.data.headers && typeof validated.data.headers === \"object\"\n\t\t\t? (Object.fromEntries(\n\t\t\t\t\tObject.entries(validated.data.headers).map(([k, v]) => [\n\t\t\t\t\t\tk,\n\t\t\t\t\t\tString(v ?? \"\"),\n\t\t\t\t\t]),\n\t\t\t\t) as Record<string, string>)\n\t\t\t: undefined;\n\n\treturn {\n\t\t...validated.data,\n\t\tenv: cleanEnv,\n\t\theaders: cleanHeaders,\n\t\ttransport,\n\t\tscope,\n\t\tenabled: validated.data.enabled ?? validated.data.disabled !== true,\n\t\tsupportsParallelToolCalls:\n\t\t\tvalidated.data.supportsParallelToolCalls === true,\n\t};\n}\n\nfunction normalizeAuthPreset(\n\tpreset: McpAuthPresetInput,\n\tname: string,\n\tscope: McpScope,\n): McpAuthPresetConfig | null {\n\tconst expanded = expandAuthPresetEnv({ ...preset, name });\n\tconst validated = mcpAuthPresetSchema.safeParse(expanded);\n\tif (!validated.success) {\n\t\tlogger.warn(\"Invalid MCP auth preset entry\", {\n\t\t\tscope,\n\t\t\tname,\n\t\t\terror: validated.error.issues.map((e) => e.message).join(\"; \"),\n\t\t});\n\t\treturn null;\n\t}\n\n\tconst cleanHeaders =\n\t\tvalidated.data.headers && typeof validated.data.headers === \"object\"\n\t\t\t? (Object.fromEntries(\n\t\t\t\t\tObject.entries(validated.data.headers).map(([k, v]) => [\n\t\t\t\t\t\tk,\n\t\t\t\t\t\tString(v ?? \"\"),\n\t\t\t\t\t]),\n\t\t\t\t) as Record<string, string>)\n\t\t\t: undefined;\n\n\treturn {\n\t\t...validated.data,\n\t\theaders: cleanHeaders,\n\t\tscope,\n\t};\n}\n\nfunction resolveTransport(\n\tserver: McpServerInput,\n): McpServerConfig[\"transport\"] {\n\tif (\n\t\tserver.transport &&\n\t\t(server.transport === \"stdio\" ||\n\t\t\tserver.transport === \"http\" ||\n\t\t\tserver.transport === \"sse\")\n\t) {\n\t\treturn server.transport;\n\t}\n\tif (server.url) {\n\t\treturn isSseUrl(server.url) ? \"sse\" : \"http\";\n\t}\n\treturn \"stdio\";\n}\n\nfunction isSseUrl(rawUrl: string): boolean {\n\ttry {\n\t\tconst parsed = new URL(rawUrl);\n\t\tif (parsed.hostname.startsWith(\"sse.\")) return true;\n\t\tconst path = parsed.pathname || \"\";\n\t\tif (path.endsWith(\"/sse\")) return true;\n\t\tif (path.includes(\"/sse/\")) return true;\n\t\treturn false;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction buildPersistedServerConfig(\n\tserver: McpServerInput & { name: string },\n): PersistedMcpServerConfig {\n\treturn {\n\t\ttransport: server.transport,\n\t\tcommand: server.command,\n\t\targs: server.args,\n\t\tenv: server.env,\n\t\tcwd: server.cwd,\n\t\turl: server.url,\n\t\theaders: server.headers,\n\t\theadersHelper: server.headersHelper,\n\t\tauthPreset: server.authPreset,\n\t\ttimeout: server.timeout,\n\t\tenabled: server.enabled,\n\t\tdisabled: server.disabled,\n\t\tsupportsParallelToolCalls: server.supportsParallelToolCalls,\n\t};\n}\n\nfunction buildPersistedAuthPresetConfig(\n\tpreset: McpAuthPresetInput & { name: string },\n): PersistedMcpAuthPresetConfig {\n\treturn {\n\t\theaders: preset.headers,\n\t\theadersHelper: preset.headersHelper,\n\t};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isWritableScope(\n\tvalue: McpScope | undefined,\n): value is WritableMcpScope {\n\treturn value === \"local\" || value === \"project\" || value === \"user\";\n}\n\nfunction expandValue(\n\tvalue: string | undefined,\n\tcontext: { kind: \"server\" | \"authPreset\"; name: string },\n): string | undefined {\n\tif (!value) return value;\n\treturn value.replace(/\\$\\{([^}]+)\\}/g, (_match, expr: unknown) => {\n\t\tconst [name, fallback] = String(expr).split(\":-\");\n\t\tconst val = name ? process.env[name] : undefined;\n\t\tif (val !== undefined) return val;\n\t\tif (fallback !== undefined) return fallback;\n\t\tlogger.debug(\"Missing environment variable during MCP expansion\", {\n\t\t\t[context.kind]: context.name,\n\t\t\tvariable: name,\n\t\t});\n\t\treturn _match;\n\t});\n}\n\nfunction expandServerEnv(\n\tserver: McpServerInput & {\n\t\ttransport: McpServerConfig[\"transport\"];\n\t\tname: string;\n\t},\n): McpServerInput {\n\tconst expand = (value?: string) =>\n\t\texpandValue(value, { kind: \"server\", name: server.name });\n\n\treturn {\n\t\t...server,\n\t\tcommand: expand(server.command),\n\t\targs: server.args\n\t\t\t? server.args.map((v) => expand(String(v)) ?? \"\")\n\t\t\t: undefined,\n\t\tenv: server.env\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries(server.env).map(([k, v]) => [\n\t\t\t\t\t\tk,\n\t\t\t\t\t\texpand(typeof v === \"string\" ? v : undefined) ?? \"\",\n\t\t\t\t\t]),\n\t\t\t\t)\n\t\t\t: undefined,\n\t\turl: expand(server.url),\n\t\theaders: server.headers\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries(server.headers).map(([k, v]) => {\n\t\t\t\t\t\tconst expanded =\n\t\t\t\t\t\t\texpand(typeof v === \"string\" ? v : undefined) ?? \"\";\n\t\t\t\t\t\treturn [k, expanded] as [string, string];\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t: undefined,\n\t\theadersHelper: expand(server.headersHelper),\n\t\tauthPreset: expand(server.authPreset),\n\t\tcwd: expand(server.cwd),\n\t};\n}\n\nfunction expandAuthPresetEnv(\n\tpreset: McpAuthPresetInput & { name: string },\n): McpAuthPresetInput {\n\tconst expand = (value?: string) =>\n\t\texpandValue(value, { kind: \"authPreset\", name: preset.name });\n\n\treturn {\n\t\t...preset,\n\t\theaders: preset.headers\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries(preset.headers).map(([k, v]) => {\n\t\t\t\t\t\tconst expanded =\n\t\t\t\t\t\t\texpand(typeof v === \"string\" ? v : undefined) ?? \"\";\n\t\t\t\t\t\treturn [k, expanded] as [string, string];\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t: undefined,\n\t\theadersHelper: expand(preset.headersHelper),\n\t};\n}\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * MCP Configuration - Model Context Protocol Server Management\n *\n * This module handles loading and merging MCP (Model Context Protocol)\n * server configurations from multiple sources. MCP servers extend the\n * agent's capabilities with additional tools and integrations.\n *\n * ## Configuration Sources (precedence order)\n *\n * 1. **Enterprise**: `~/.maestro/enterprise/mcp.json` (highest; legacy\n * Composer enterprise MCP config remains a fallback)\n * 2. **Plugin**: Programmatically provided servers\n * 3. **Project**: `.maestro/mcp.json` in project root\n * 4. **Local**: `.maestro/mcp.local.json` (git-ignored)\n * 5. **User**: `~/.maestro/mcp.json` (lowest; legacy Composer user MCP config\n * remains a fallback)\n *\n * ## Configuration Format\n *\n * ```json\n * {\n * \"servers\": [\n * {\n * \"name\": \"my-server\",\n * \"transport\": \"stdio\",\n * \"command\": \"node\",\n * \"args\": [\"path/to/server.js\"],\n * \"env\": { \"API_KEY\": \"${MY_API_KEY}\" }\n * }\n * ],\n * \"mcpServers\": {\n * \"another-server\": {\n * \"command\": \"python\",\n * \"args\": [\"-m\", \"my_mcp_server\"]\n * }\n * }\n * }\n * ```\n *\n * ## Transport Types\n *\n * | Transport | Description |\n * |-----------|------------------------------------------|\n * | stdio | Communicate via stdin/stdout (default) |\n * | http | HTTP-based transport |\n * | sse | Server-Sent Events transport |\n *\n * ## Environment Variable Expansion\n *\n * Supports `${VAR}` and `${VAR:-default}` syntax in:\n * - command, args, url, cwd, headersHelper\n * - env values\n * - headers\n *\n * @module mcp/config\n */\n\nimport { readFileSync, statSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport type { z } from \"zod\";\nimport { PATHS } from \"../config/constants.js\";\nimport { readJsonFile, writeJsonFile } from \"../utils/fs.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport { getHomeDir, resolveEnvPath } from \"../utils/path-expansion.js\";\nimport { uniquePaths } from \"../utils/path-utils.js\";\nimport { defaultEnvValidators, evaluateEnvValidators } from \"./env-limits.js\";\nimport { getFathomCuaPluginServers } from \"./fathom-cua.js\";\nimport { getPlatformMcpPluginServers } from \"./platform-plugin.js\";\nimport {\n\ttype McpAuthPresetInput,\n\ttype McpServerInput,\n\tmcpAuthPresetSchema,\n\tmcpConfigSchema,\n\tmcpServerSchema,\n\tmcpWorkspaceTrustDefaultSchema,\n\tmcpWorkspaceTrustEntrySchema,\n} from \"./schema.js\";\nimport type {\n\tMcpAuthPresetConfig,\n\tMcpConfig,\n\tMcpScope,\n\tMcpServerConfig,\n\tMcpWorkspaceTrustDefault,\n\tMcpWorkspaceTrustEntry,\n} from \"./types.js\";\n\nconst logger = createLogger(\"mcp:config\");\n\nconst PROJECT_CONFIG_NAME = \".maestro/mcp.json\";\nconst LOCAL_CONFIG_NAME = \".maestro/mcp.local.json\";\n\nconst getEnterpriseConfigPathOverride = (): string | null =>\n\tresolveEnvPath(process.env.MAESTRO_ENTERPRISE_MCP_PATH);\n\nconst getDefaultEnterpriseConfigPath = (): string =>\n\tjoin(PATHS.MAESTRO_HOME, \"enterprise\", \"mcp.json\");\n\nconst getEnterpriseConfigPath = (): string =>\n\tgetEnterpriseConfigPathOverride() ?? getDefaultEnterpriseConfigPath();\n\nconst getUserConfigPathOverride = (): string | null =>\n\tresolveEnvPath(process.env.MAESTRO_USER_MCP_PATH);\n\nconst getDefaultUserConfigPath = (): string =>\n\tjoin(PATHS.MAESTRO_HOME, \"mcp.json\");\n\nconst getUserConfigPath = (): string =>\n\tgetUserConfigPathOverride() ?? getDefaultUserConfigPath();\n\nconst getLegacyEnterpriseConfigPath = (): string =>\n\tjoin(getHomeDir(), \".composer\", \"enterprise\", \"mcp.json\");\n\nconst getLegacyUserConfigPath = (): string =>\n\tjoin(getHomeDir(), \".composer\", \"mcp.json\");\n\nfunction isConfigFile(path: string): boolean {\n\ttry {\n\t\treturn statSync(path).isFile();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction selectEffectiveConfigPath(paths: string[]): string {\n\treturn paths.find(isConfigFile) ?? paths[0]!;\n}\n\nconst getUserConfigPathCandidates = (): string[] => {\n\tconst overridePath = getUserConfigPathOverride();\n\tif (overridePath) {\n\t\treturn [overridePath];\n\t}\n\treturn uniquePaths([getDefaultUserConfigPath(), getLegacyUserConfigPath()]);\n};\n\nconst getEnterpriseConfigPathCandidates = (): string[] => {\n\tconst overridePath = getEnterpriseConfigPathOverride();\n\tif (overridePath) {\n\t\treturn [overridePath];\n\t}\n\treturn uniquePaths([\n\t\tgetDefaultEnterpriseConfigPath(),\n\t\tgetLegacyEnterpriseConfigPath(),\n\t]);\n};\n\nconst getEffectiveUserConfigPath = (): string =>\n\tselectEffectiveConfigPath(getUserConfigPathCandidates());\n\nconst getEffectiveEnterpriseConfigPath = (): string =>\n\tselectEffectiveConfigPath(getEnterpriseConfigPathCandidates());\n\ntype ParsedConfig = {\n\tservers: McpServerConfig[];\n\tauthPresets: McpAuthPresetConfig[];\n\ttrustedWorkspaces: Record<string, McpWorkspaceTrustEntry[]>;\n\tworkspaceTrustDefault?: McpWorkspaceTrustDefault;\n};\ntype RawMcpConfigFile = z.infer<typeof mcpConfigSchema>;\ntype PersistedMcpAuthPresetConfig = Omit<McpAuthPresetInput, \"name\">;\ntype PersistedMcpServerConfig = Omit<McpServerInput, \"name\">;\nexport type WritableMcpScope = Exclude<McpScope, \"enterprise\" | \"plugin\">;\n\nexport interface LoadMcpOptions {\n\tpluginServers?: McpServerConfig[];\n\tincludeEnvLimits?: boolean;\n}\n\nexport interface AddMcpServerOptions {\n\tprojectRoot?: string;\n\tscope: WritableMcpScope;\n\tserver: McpServerInput & { name: string };\n}\n\nexport interface AddMcpAuthPresetOptions {\n\tprojectRoot?: string;\n\tscope: WritableMcpScope;\n\tpreset: McpAuthPresetInput & { name: string };\n}\n\nexport interface RemoveMcpServerOptions {\n\tprojectRoot?: string;\n\tscope?: WritableMcpScope;\n\tname: string;\n}\n\nexport interface RemoveMcpAuthPresetOptions {\n\tprojectRoot?: string;\n\tscope?: WritableMcpScope;\n\tname: string;\n}\n\nexport interface UpdateMcpServerOptions {\n\tprojectRoot?: string;\n\tscope?: WritableMcpScope;\n\tname: string;\n\tserver: McpServerInput & { name: string };\n}\n\nexport interface UpdateMcpAuthPresetOptions {\n\tprojectRoot?: string;\n\tscope?: WritableMcpScope;\n\tname: string;\n\tpreset: McpAuthPresetInput & { name: string };\n}\n\nexport function loadMcpConfig(\n\tprojectRoot?: string,\n\toptions: LoadMcpOptions = {},\n): McpConfig {\n\tconst userCfg = parseConfigFile(getEffectiveUserConfigPath(), \"user\");\n\tconst enterpriseCfg = parseConfigFile(\n\t\tgetEffectiveEnterpriseConfigPath(),\n\t\t\"enterprise\",\n\t);\n\tconst projectCfg = projectRoot\n\t\t? parseConfigFile(resolve(projectRoot, PROJECT_CONFIG_NAME), \"project\")\n\t\t: { servers: [], authPresets: [], trustedWorkspaces: {} };\n\tconst localCfg = projectRoot\n\t\t? parseConfigFile(resolve(projectRoot, LOCAL_CONFIG_NAME), \"local\")\n\t\t: { servers: [], authPresets: [], trustedWorkspaces: {} };\n\tconst pluginCfg: ParsedConfig = {\n\t\tservers: [\n\t\t\t...getPlatformMcpPluginServers(),\n\t\t\t...getFathomCuaPluginServers(),\n\t\t\t...(options.pluginServers ?? []),\n\t\t],\n\t\tauthPresets: [],\n\t\ttrustedWorkspaces: {},\n\t};\n\n\tconst merged = new Map<string, McpServerConfig>();\n\tconst mergedAuthPresets = new Map<string, McpAuthPresetConfig>();\n\tconst mergedTrustedWorkspaces: Record<string, McpWorkspaceTrustEntry[]> = {};\n\tlet workspaceTrustDefault: McpWorkspaceTrustDefault | undefined;\n\t// precedence: enterprise -> plugin -> project -> local -> user\n\t// lower precedence first, higher precedence last so later overrides earlier\n\tfor (const src of [userCfg, localCfg, projectCfg, pluginCfg, enterpriseCfg]) {\n\t\tfor (const authPreset of src.authPresets) {\n\t\t\tmergedAuthPresets.set(authPreset.name, authPreset);\n\t\t}\n\t\tfor (const server of src.servers) {\n\t\t\t// A higher-precedence config can explicitly disable a server defined earlier.\n\t\t\tif (server.enabled === false || server.disabled === true) {\n\t\t\t\tmerged.delete(server.name);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tmerged.set(server.name, server);\n\t\t}\n\t\tfor (const [serverName, entries] of Object.entries(src.trustedWorkspaces)) {\n\t\t\tmergedTrustedWorkspaces[serverName] = [\n\t\t\t\t...(mergedTrustedWorkspaces[serverName] ?? []),\n\t\t\t\t...entries,\n\t\t\t];\n\t\t}\n\t\tif (src.workspaceTrustDefault) {\n\t\t\tworkspaceTrustDefault = src.workspaceTrustDefault;\n\t\t}\n\t}\n\n\tconst envLimits = options.includeEnvLimits\n\t\t? evaluateEnvValidators(defaultEnvValidators)\n\t\t: undefined;\n\n\treturn {\n\t\tservers: Array.from(merged.values()),\n\t\tauthPresets: Array.from(mergedAuthPresets.values()),\n\t\tprojectRoot: projectRoot ? resolve(projectRoot) : undefined,\n\t\ttrustedWorkspaces:\n\t\t\tObject.keys(mergedTrustedWorkspaces).length > 0\n\t\t\t\t? mergedTrustedWorkspaces\n\t\t\t\t: undefined,\n\t\tworkspaceTrustDefault,\n\t\tenvLimits,\n\t};\n}\n\nexport function getConfigPaths(projectRoot?: string): string[] {\n\tconst paths = [\n\t\tgetEffectiveUserConfigPath(),\n\t\tgetEffectiveEnterpriseConfigPath(),\n\t];\n\tif (projectRoot) {\n\t\tpaths.push(resolve(projectRoot, PROJECT_CONFIG_NAME));\n\t\tpaths.push(resolve(projectRoot, LOCAL_CONFIG_NAME));\n\t}\n\treturn paths;\n}\n\nexport function getWritableMcpConfigPath(\n\tscope: WritableMcpScope,\n\tprojectRoot = process.cwd(),\n): string {\n\tswitch (scope) {\n\t\tcase \"user\":\n\t\t\treturn getEffectiveUserConfigPath();\n\t\tcase \"project\":\n\t\t\treturn resolve(projectRoot, PROJECT_CONFIG_NAME);\n\t\tcase \"local\":\n\t\t\treturn resolve(projectRoot, LOCAL_CONFIG_NAME);\n\t}\n}\n\nexport function inferRemoteMcpTransport(url: string): \"http\" | \"sse\" {\n\treturn isSseUrl(url) ? \"sse\" : \"http\";\n}\n\nexport function addMcpServerToConfig(options: AddMcpServerOptions): {\n\tpath: string;\n} {\n\tconst path = getWritableMcpConfigPath(options.scope, options.projectRoot);\n\tconst validatedServer = mcpServerSchema.parse({\n\t\t...options.server,\n\t\ttransport:\n\t\t\toptions.server.transport ??\n\t\t\t(options.server.url\n\t\t\t\t? inferRemoteMcpTransport(options.server.url)\n\t\t\t\t: \"stdio\"),\n\t});\n\tconst existing = readJsonFile<unknown>(path, { fallback: {} });\n\tconst parsed = mcpConfigSchema.safeParse(existing);\n\tif (!parsed.success) {\n\t\tthrow new Error(\n\t\t\t`Invalid MCP config at ${path}: ${parsed.error.issues.map((issue) => issue.message).join(\"; \")}`,\n\t\t);\n\t}\n\n\tconst nextConfig = structuredClone(parsed.data) as RawMcpConfigFile;\n\tconst hasObjectFormat =\n\t\tisRecord(nextConfig.mcpServers) || !Array.isArray(nextConfig.servers);\n\tif (hasObjectFormat) {\n\t\tconst existingServers = isRecord(nextConfig.mcpServers)\n\t\t\t? nextConfig.mcpServers\n\t\t\t: {};\n\t\tif (\n\t\t\tObject.prototype.hasOwnProperty.call(\n\t\t\t\texistingServers,\n\t\t\t\tvalidatedServer.name,\n\t\t\t)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`MCP server \"${validatedServer.name}\" already exists in ${path}`,\n\t\t\t);\n\t\t}\n\t\tnextConfig.mcpServers = {\n\t\t\t...existingServers,\n\t\t\t[validatedServer.name]: buildPersistedServerConfig(validatedServer),\n\t\t};\n\t} else {\n\t\tconst servers = nextConfig.servers ?? [];\n\t\tif (servers.some((server) => server.name === validatedServer.name)) {\n\t\t\tthrow new Error(\n\t\t\t\t`MCP server \"${validatedServer.name}\" already exists in ${path}`,\n\t\t\t);\n\t\t}\n\t\tnextConfig.servers = [\n\t\t\t...servers,\n\t\t\t{\n\t\t\t\t...buildPersistedServerConfig(validatedServer),\n\t\t\t\tname: validatedServer.name,\n\t\t\t},\n\t\t];\n\t}\n\n\twriteJsonFile(path, nextConfig);\n\treturn { path };\n}\n\nexport function addMcpAuthPresetToConfig(options: AddMcpAuthPresetOptions): {\n\tpath: string;\n} {\n\tconst path = getWritableMcpConfigPath(options.scope, options.projectRoot);\n\tconst validatedPreset = mcpAuthPresetSchema.parse(options.preset);\n\tconst existing = readJsonFile<unknown>(path, { fallback: {} });\n\tconst parsed = mcpConfigSchema.safeParse(existing);\n\tif (!parsed.success) {\n\t\tthrow new Error(\n\t\t\t`Invalid MCP config at ${path}: ${parsed.error.issues.map((issue) => issue.message).join(\"; \")}`,\n\t\t);\n\t}\n\n\tconst nextConfig = structuredClone(parsed.data) as RawMcpConfigFile;\n\tconst existingPresets = isRecord(nextConfig.authPresets)\n\t\t? nextConfig.authPresets\n\t\t: {};\n\tif (\n\t\tObject.prototype.hasOwnProperty.call(existingPresets, validatedPreset.name)\n\t) {\n\t\tthrow new Error(\n\t\t\t`MCP auth preset \"${validatedPreset.name}\" already exists in ${path}`,\n\t\t);\n\t}\n\n\tnextConfig.authPresets = {\n\t\t...existingPresets,\n\t\t[validatedPreset.name]: buildPersistedAuthPresetConfig(validatedPreset),\n\t};\n\n\twriteJsonFile(path, nextConfig);\n\treturn { path };\n}\n\nexport function removeMcpServerFromConfig(options: RemoveMcpServerOptions): {\n\tpath: string;\n\tscope: WritableMcpScope;\n} {\n\tconst projectRoot = options.projectRoot ?? process.cwd();\n\tconst scope = resolveWritableMutationScope(\n\t\toptions.name,\n\t\toptions.scope,\n\t\tprojectRoot,\n\t);\n\tconst { path, config } = readWritableMcpConfig(scope, projectRoot);\n\tconst nextConfig = structuredClone(config) as RawMcpConfigFile;\n\tconst removed = mutateWritableMcpConfig(nextConfig, options.name, \"remove\");\n\tif (!removed) {\n\t\tthrow new Error(`MCP server \"${options.name}\" not found in ${path}`);\n\t}\n\n\twriteJsonFile(path, nextConfig);\n\treturn { path, scope };\n}\n\nexport function removeMcpAuthPresetFromConfig(\n\toptions: RemoveMcpAuthPresetOptions,\n): {\n\tpath: string;\n\tscope: WritableMcpScope;\n} {\n\tconst projectRoot = options.projectRoot ?? process.cwd();\n\tconst scope = resolveWritableAuthPresetMutationScope(\n\t\toptions.name,\n\t\toptions.scope,\n\t\tprojectRoot,\n\t);\n\tconst { path, config } = readWritableMcpConfig(scope, projectRoot);\n\tconst nextConfig = structuredClone(config) as RawMcpConfigFile;\n\tconst removed = mutateWritableMcpAuthPresetConfig(\n\t\tnextConfig,\n\t\toptions.name,\n\t\t\"remove\",\n\t);\n\tif (!removed) {\n\t\tthrow new Error(`MCP auth preset \"${options.name}\" not found in ${path}`);\n\t}\n\n\twriteJsonFile(path, nextConfig);\n\treturn { path, scope };\n}\n\nexport function updateMcpServerInConfig(options: UpdateMcpServerOptions): {\n\tpath: string;\n\tscope: WritableMcpScope;\n} {\n\tconst projectRoot = options.projectRoot ?? process.cwd();\n\tconst scope = resolveWritableMutationScope(\n\t\toptions.name,\n\t\toptions.scope,\n\t\tprojectRoot,\n\t);\n\tif (options.server.name !== options.name) {\n\t\tthrow new Error(\"Renaming MCP servers is not supported by /mcp edit.\");\n\t}\n\n\tconst validatedServer = mcpServerSchema.parse({\n\t\t...options.server,\n\t\ttransport:\n\t\t\toptions.server.transport ??\n\t\t\t(options.server.url\n\t\t\t\t? inferRemoteMcpTransport(options.server.url)\n\t\t\t\t: \"stdio\"),\n\t});\n\tconst { path, config } = readWritableMcpConfig(scope, projectRoot);\n\tconst nextConfig = structuredClone(config) as RawMcpConfigFile;\n\tconst updated = mutateWritableMcpConfig(nextConfig, options.name, \"update\", {\n\t\tserver: validatedServer,\n\t});\n\tif (!updated) {\n\t\tthrow new Error(`MCP server \"${options.name}\" not found in ${path}`);\n\t}\n\n\twriteJsonFile(path, nextConfig);\n\treturn { path, scope };\n}\n\nexport function updateMcpAuthPresetInConfig(\n\toptions: UpdateMcpAuthPresetOptions,\n): {\n\tpath: string;\n\tscope: WritableMcpScope;\n} {\n\tconst projectRoot = options.projectRoot ?? process.cwd();\n\tconst scope = resolveWritableAuthPresetMutationScope(\n\t\toptions.name,\n\t\toptions.scope,\n\t\tprojectRoot,\n\t);\n\tif (options.preset.name !== options.name) {\n\t\tthrow new Error(\"Renaming MCP auth presets is not supported.\");\n\t}\n\n\tconst validatedPreset = mcpAuthPresetSchema.parse(options.preset);\n\tconst { path, config } = readWritableMcpConfig(scope, projectRoot);\n\tconst nextConfig = structuredClone(config) as RawMcpConfigFile;\n\tconst updated = mutateWritableMcpAuthPresetConfig(\n\t\tnextConfig,\n\t\toptions.name,\n\t\t\"update\",\n\t\t{\n\t\t\tpreset: validatedPreset,\n\t\t},\n\t);\n\tif (!updated) {\n\t\tthrow new Error(`MCP auth preset \"${options.name}\" not found in ${path}`);\n\t}\n\n\twriteJsonFile(path, nextConfig);\n\treturn { path, scope };\n}\n\nfunction parseConfigFile(path: string, scope: McpScope): ParsedConfig {\n\tif (!isConfigFile(path)) {\n\t\treturn { servers: [], authPresets: [], trustedWorkspaces: {} };\n\t}\n\ttry {\n\t\tconst content = readFileSync(path, \"utf-8\");\n\t\tconst json = JSON.parse(content);\n\t\tconst parsed = mcpConfigSchema.safeParse(json);\n\t\tif (!parsed.success) {\n\t\t\tlogger.warn(\"Invalid MCP config\", {\n\t\t\t\tscope,\n\t\t\t\tpath,\n\t\t\t\terror: parsed.error.issues.map((e) => e.message).join(\"; \"),\n\t\t\t});\n\t\t\treturn { servers: [], authPresets: [], trustedWorkspaces: {} };\n\t\t}\n\n\t\tconst servers: McpServerConfig[] = [];\n\t\tconst authPresets: McpAuthPresetConfig[] = [];\n\t\tif (Array.isArray(parsed.data.servers)) {\n\t\t\tfor (const server of parsed.data.servers) {\n\t\t\t\tconst normalized = normalizeServer(server, server.name, scope);\n\t\t\t\tif (normalized) servers.push(normalized);\n\t\t\t}\n\t\t}\n\t\tif (parsed.data.mcpServers) {\n\t\t\tfor (const [name, raw] of Object.entries(parsed.data.mcpServers)) {\n\t\t\t\tconst merged: McpServerInput | { name: string } = isRecord(raw)\n\t\t\t\t\t? ({ ...raw, name } as McpServerInput)\n\t\t\t\t\t: { name };\n\t\t\t\tconst normalized = normalizeServer(merged, name, scope);\n\t\t\t\tif (normalized) servers.push(normalized);\n\t\t\t}\n\t\t}\n\t\tif (parsed.data.authPresets) {\n\t\t\tfor (const [name, raw] of Object.entries(parsed.data.authPresets)) {\n\t\t\t\tconst merged: McpAuthPresetInput | { name: string } = isRecord(raw)\n\t\t\t\t\t? ({ ...raw, name } as McpAuthPresetInput)\n\t\t\t\t\t: { name };\n\t\t\t\tconst normalized = normalizeAuthPreset(merged, name, scope);\n\t\t\t\tif (normalized) authPresets.push(normalized);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tservers,\n\t\t\tauthPresets,\n\t\t\ttrustedWorkspaces: normalizeTrustedWorkspaces(\n\t\t\t\tparsed.data.trustedWorkspaces,\n\t\t\t\tscope,\n\t\t\t\tpath,\n\t\t\t),\n\t\t\tworkspaceTrustDefault: normalizeWorkspaceTrustDefault(\n\t\t\t\tparsed.data.workspaceTrustDefault,\n\t\t\t\tscope,\n\t\t\t\tpath,\n\t\t\t),\n\t\t};\n\t} catch (error) {\n\t\tlogger.warn(\"Failed to parse MCP config file\", {\n\t\t\tpath,\n\t\t\tscope,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\tstack: error instanceof Error ? error.stack : undefined,\n\t\t});\n\t\treturn { servers: [], authPresets: [], trustedWorkspaces: {} };\n\t}\n}\n\nfunction normalizeWorkspaceTrustDefault(\n\traw: unknown,\n\tscope: McpScope,\n\tpath: string,\n): McpWorkspaceTrustDefault | undefined {\n\tif (raw === undefined) {\n\t\treturn undefined;\n\t}\n\tconst parsed = mcpWorkspaceTrustDefaultSchema.safeParse(raw);\n\tif (parsed.success) {\n\t\treturn parsed.data;\n\t}\n\tlogger.warn(\"Invalid MCP workspaceTrustDefault\", {\n\t\tscope,\n\t\tpath,\n\t\terror: parsed.error.issues.map((issue) => issue.message).join(\"; \"),\n\t});\n\treturn undefined;\n}\n\nfunction normalizeTrustedWorkspaces(\n\traw: unknown,\n\tscope: McpScope,\n\tpath: string,\n): Record<string, McpWorkspaceTrustEntry[]> {\n\tif (raw === undefined) {\n\t\treturn {};\n\t}\n\tif (!isRecord(raw)) {\n\t\tlogger.warn(\"Invalid MCP trustedWorkspaces\", {\n\t\t\tscope,\n\t\t\tpath,\n\t\t\terror: \"expected an object keyed by MCP server name\",\n\t\t});\n\t\treturn {};\n\t}\n\tconst trustedWorkspaces: Record<string, McpWorkspaceTrustEntry[]> = {};\n\tfor (const [serverName, entries] of Object.entries(raw)) {\n\t\tif (!Array.isArray(entries)) {\n\t\t\tlogger.warn(\"Invalid MCP trustedWorkspaces entry\", {\n\t\t\t\tscope,\n\t\t\t\tpath,\n\t\t\t\tserverName,\n\t\t\t\terror: \"expected an array of workspace trust entries\",\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst validEntries: McpWorkspaceTrustEntry[] = [];\n\t\tfor (const [index, entry] of entries.entries()) {\n\t\t\tconst parsed = mcpWorkspaceTrustEntrySchema.safeParse(entry);\n\t\t\tif (!parsed.success) {\n\t\t\t\tlogger.warn(\"Invalid MCP trusted workspace entry\", {\n\t\t\t\t\tscope,\n\t\t\t\t\tpath,\n\t\t\t\t\tserverName,\n\t\t\t\t\tindex,\n\t\t\t\t\terror: parsed.error.issues.map((issue) => issue.message).join(\"; \"),\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvalidEntries.push(parsed.data);\n\t\t}\n\t\tif (validEntries.length > 0) {\n\t\t\ttrustedWorkspaces[serverName] = validEntries;\n\t\t}\n\t}\n\treturn trustedWorkspaces;\n}\n\nfunction readWritableMcpConfig(\n\tscope: WritableMcpScope,\n\tprojectRoot: string,\n): {\n\tpath: string;\n\tconfig: RawMcpConfigFile;\n} {\n\tconst path = getWritableMcpConfigPath(scope, projectRoot);\n\tconst existing = readJsonFile<unknown>(path, { fallback: {} });\n\tconst parsed = mcpConfigSchema.safeParse(existing);\n\tif (!parsed.success) {\n\t\tthrow new Error(\n\t\t\t`Invalid MCP config at ${path}: ${parsed.error.issues.map((issue) => issue.message).join(\"; \")}`,\n\t\t);\n\t}\n\treturn { path, config: parsed.data };\n}\n\nfunction resolveWritableMutationScope(\n\tname: string,\n\tscope: WritableMcpScope | undefined,\n\tprojectRoot: string,\n): WritableMcpScope {\n\tif (scope) {\n\t\treturn scope;\n\t}\n\n\tconst activeServer = loadMcpConfig(projectRoot).servers.find(\n\t\t(server) => server.name === name,\n\t);\n\tif (!activeServer) {\n\t\tthrow new Error(`MCP server \"${name}\" not found in merged config.`);\n\t}\n\tif (!isWritableScope(activeServer.scope)) {\n\t\tthrow new Error(\n\t\t\t`MCP server \"${name}\" is managed by ${activeServer.scope ?? \"an unknown\"} scope and cannot be edited here.`,\n\t\t);\n\t}\n\treturn activeServer.scope;\n}\n\nfunction resolveWritableAuthPresetMutationScope(\n\tname: string,\n\tscope: WritableMcpScope | undefined,\n\tprojectRoot: string,\n): WritableMcpScope {\n\tif (scope) {\n\t\treturn scope;\n\t}\n\n\tconst activePreset = loadMcpConfig(projectRoot).authPresets.find(\n\t\t(preset) => preset.name === name,\n\t);\n\tif (!activePreset) {\n\t\tthrow new Error(`MCP auth preset \"${name}\" not found in merged config.`);\n\t}\n\tif (!isWritableScope(activePreset.scope)) {\n\t\tthrow new Error(\n\t\t\t`MCP auth preset \"${name}\" is managed by ${activePreset.scope ?? \"an unknown\"} scope and cannot be edited here.`,\n\t\t);\n\t}\n\treturn activePreset.scope;\n}\n\nfunction mutateWritableMcpConfig(\n\tconfig: RawMcpConfigFile,\n\tname: string,\n\tmode: \"remove\" | \"update\",\n\toptions?: { server: McpServerInput & { name: string } },\n): boolean {\n\tif (\n\t\tisRecord(config.mcpServers) &&\n\t\tObject.prototype.hasOwnProperty.call(config.mcpServers, name)\n\t) {\n\t\tif (mode === \"remove\") {\n\t\t\tdelete config.mcpServers[name];\n\t\t} else {\n\t\t\tconfig.mcpServers[name] = buildPersistedServerConfig(options!.server);\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (Array.isArray(config.servers)) {\n\t\tconst index = config.servers.findIndex((server) => server.name === name);\n\t\tif (index >= 0) {\n\t\t\tif (mode === \"remove\") {\n\t\t\t\tconfig.servers.splice(index, 1);\n\t\t\t} else {\n\t\t\t\tconfig.servers[index] = {\n\t\t\t\t\t...buildPersistedServerConfig(options!.server),\n\t\t\t\t\tname: options!.server.name,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nfunction mutateWritableMcpAuthPresetConfig(\n\tconfig: RawMcpConfigFile,\n\tname: string,\n\tmode: \"remove\" | \"update\",\n\toptions?: {\n\t\tpreset: McpAuthPresetInput & { name: string };\n\t},\n): boolean {\n\tif (\n\t\tisRecord(config.authPresets) &&\n\t\tObject.prototype.hasOwnProperty.call(config.authPresets, name)\n\t) {\n\t\tif (mode === \"remove\") {\n\t\t\tdelete config.authPresets[name];\n\t\t} else {\n\t\t\tconfig.authPresets[name] = buildPersistedAuthPresetConfig(\n\t\t\t\toptions!.preset,\n\t\t\t);\n\t\t}\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction normalizeServer(\n\tserver: McpServerInput,\n\tname: string,\n\tscope: McpScope,\n): McpServerConfig | null {\n\tconst transport = resolveTransport(server);\n\tconst expanded = expandServerEnv({ ...server, name, transport });\n\n\tconst validated = mcpServerSchema.safeParse(expanded);\n\tif (!validated.success) {\n\t\tlogger.warn(\"Invalid MCP server entry\", {\n\t\t\tscope,\n\t\t\tname,\n\t\t\terror: validated.error.issues.map((e) => e.message).join(\"; \"),\n\t\t});\n\t\treturn null;\n\t}\n\n\tconst cleanEnv =\n\t\tvalidated.data.env && typeof validated.data.env === \"object\"\n\t\t\t? (Object.fromEntries(\n\t\t\t\t\tObject.entries(validated.data.env).map(([k, v]) => [\n\t\t\t\t\t\tk,\n\t\t\t\t\t\tString(v ?? \"\"),\n\t\t\t\t\t]),\n\t\t\t\t) as Record<string, string>)\n\t\t\t: undefined;\n\tconst cleanHeaders =\n\t\tvalidated.data.headers && typeof validated.data.headers === \"object\"\n\t\t\t? (Object.fromEntries(\n\t\t\t\t\tObject.entries(validated.data.headers).map(([k, v]) => [\n\t\t\t\t\t\tk,\n\t\t\t\t\t\tString(v ?? \"\"),\n\t\t\t\t\t]),\n\t\t\t\t) as Record<string, string>)\n\t\t\t: undefined;\n\n\treturn {\n\t\t...validated.data,\n\t\tenv: cleanEnv,\n\t\theaders: cleanHeaders,\n\t\ttransport,\n\t\tscope,\n\t\tenabled: validated.data.enabled ?? validated.data.disabled !== true,\n\t\tsupportsParallelToolCalls:\n\t\t\tvalidated.data.supportsParallelToolCalls === true,\n\t};\n}\n\nfunction normalizeAuthPreset(\n\tpreset: McpAuthPresetInput,\n\tname: string,\n\tscope: McpScope,\n): McpAuthPresetConfig | null {\n\tconst expanded = expandAuthPresetEnv({ ...preset, name });\n\tconst validated = mcpAuthPresetSchema.safeParse(expanded);\n\tif (!validated.success) {\n\t\tlogger.warn(\"Invalid MCP auth preset entry\", {\n\t\t\tscope,\n\t\t\tname,\n\t\t\terror: validated.error.issues.map((e) => e.message).join(\"; \"),\n\t\t});\n\t\treturn null;\n\t}\n\n\tconst cleanHeaders =\n\t\tvalidated.data.headers && typeof validated.data.headers === \"object\"\n\t\t\t? (Object.fromEntries(\n\t\t\t\t\tObject.entries(validated.data.headers).map(([k, v]) => [\n\t\t\t\t\t\tk,\n\t\t\t\t\t\tString(v ?? \"\"),\n\t\t\t\t\t]),\n\t\t\t\t) as Record<string, string>)\n\t\t\t: undefined;\n\n\treturn {\n\t\t...validated.data,\n\t\theaders: cleanHeaders,\n\t\tscope,\n\t};\n}\n\nfunction resolveTransport(\n\tserver: McpServerInput,\n): McpServerConfig[\"transport\"] {\n\tif (\n\t\tserver.transport &&\n\t\t(server.transport === \"stdio\" ||\n\t\t\tserver.transport === \"http\" ||\n\t\t\tserver.transport === \"sse\")\n\t) {\n\t\treturn server.transport;\n\t}\n\tif (server.url) {\n\t\treturn isSseUrl(server.url) ? \"sse\" : \"http\";\n\t}\n\treturn \"stdio\";\n}\n\nfunction isSseUrl(rawUrl: string): boolean {\n\ttry {\n\t\tconst parsed = new URL(rawUrl);\n\t\tif (parsed.hostname.startsWith(\"sse.\")) return true;\n\t\tconst path = parsed.pathname || \"\";\n\t\tif (path.endsWith(\"/sse\")) return true;\n\t\tif (path.includes(\"/sse/\")) return true;\n\t\treturn false;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction buildPersistedServerConfig(\n\tserver: McpServerInput & { name: string },\n): PersistedMcpServerConfig {\n\treturn {\n\t\ttransport: server.transport,\n\t\tcommand: server.command,\n\t\targs: server.args,\n\t\tenv: server.env,\n\t\tcwd: server.cwd,\n\t\turl: server.url,\n\t\theaders: server.headers,\n\t\theadersHelper: server.headersHelper,\n\t\tauthPreset: server.authPreset,\n\t\ttimeout: server.timeout,\n\t\tenabled: server.enabled,\n\t\tdisabled: server.disabled,\n\t\tsupportsParallelToolCalls: server.supportsParallelToolCalls,\n\t};\n}\n\nfunction buildPersistedAuthPresetConfig(\n\tpreset: McpAuthPresetInput & { name: string },\n): PersistedMcpAuthPresetConfig {\n\treturn {\n\t\theaders: preset.headers,\n\t\theadersHelper: preset.headersHelper,\n\t};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isWritableScope(\n\tvalue: McpScope | undefined,\n): value is WritableMcpScope {\n\treturn value === \"local\" || value === \"project\" || value === \"user\";\n}\n\nfunction expandValue(\n\tvalue: string | undefined,\n\tcontext: { kind: \"server\" | \"authPreset\"; name: string },\n): string | undefined {\n\tif (!value) return value;\n\treturn value.replace(/\\$\\{([^}]+)\\}/g, (_match, expr: unknown) => {\n\t\tconst [name, fallback] = String(expr).split(\":-\");\n\t\tconst val = name ? process.env[name] : undefined;\n\t\tif (val !== undefined) return val;\n\t\tif (fallback !== undefined) return fallback;\n\t\tlogger.debug(\"Missing environment variable during MCP expansion\", {\n\t\t\t[context.kind]: context.name,\n\t\t\tvariable: name,\n\t\t});\n\t\treturn _match;\n\t});\n}\n\nfunction expandServerEnv(\n\tserver: McpServerInput & {\n\t\ttransport: McpServerConfig[\"transport\"];\n\t\tname: string;\n\t},\n): McpServerInput {\n\tconst expand = (value?: string) =>\n\t\texpandValue(value, { kind: \"server\", name: server.name });\n\n\treturn {\n\t\t...server,\n\t\tcommand: expand(server.command),\n\t\targs: server.args\n\t\t\t? server.args.map((v) => expand(String(v)) ?? \"\")\n\t\t\t: undefined,\n\t\tenv: server.env\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries(server.env).map(([k, v]) => [\n\t\t\t\t\t\tk,\n\t\t\t\t\t\texpand(typeof v === \"string\" ? v : undefined) ?? \"\",\n\t\t\t\t\t]),\n\t\t\t\t)\n\t\t\t: undefined,\n\t\turl: expand(server.url),\n\t\theaders: server.headers\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries(server.headers).map(([k, v]) => {\n\t\t\t\t\t\tconst expanded =\n\t\t\t\t\t\t\texpand(typeof v === \"string\" ? v : undefined) ?? \"\";\n\t\t\t\t\t\treturn [k, expanded] as [string, string];\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t: undefined,\n\t\theadersHelper: expand(server.headersHelper),\n\t\tauthPreset: expand(server.authPreset),\n\t\tcwd: expand(server.cwd),\n\t};\n}\n\nfunction expandAuthPresetEnv(\n\tpreset: McpAuthPresetInput & { name: string },\n): McpAuthPresetInput {\n\tconst expand = (value?: string) =>\n\t\texpandValue(value, { kind: \"authPreset\", name: preset.name });\n\n\treturn {\n\t\t...preset,\n\t\theaders: preset.headers\n\t\t\t? Object.fromEntries(\n\t\t\t\t\tObject.entries(preset.headers).map(([k, v]) => {\n\t\t\t\t\t\tconst expanded =\n\t\t\t\t\t\t\texpand(typeof v === \"string\" ? v : undefined) ?? \"\";\n\t\t\t\t\t\treturn [k, expanded] as [string, string];\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t: undefined,\n\t\theadersHelper: expand(preset.headersHelper),\n\t};\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { McpServerConfig } from "./types.js";
2
+ export declare function getFathomCuaPluginServers(): McpServerConfig[];
3
+ //# sourceMappingURL=fathom-cua.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fathom-cua.d.ts","sourceRoot":"","sources":["../../src/mcp/fathom-cua.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAwKlD,wBAAgB,yBAAyB,IAAI,eAAe,EAAE,CAK7D"}