// @ts-check
/** @type {import('@stryker-mutator/api/core').StrykerOptions} */
const config = {
  // Vitest runner.
  testRunner: "vitest",
  plugins: ["@stryker-mutator/vitest-runner"],

  // Ignore symlinks and large dirs that stryker can't copy.
  ignorePatterns: ["home_sessions", ".reasonix", "node_modules"],

  // Target load-bearing modules — keeps runs fast (~minutes) so contributors
  // actually run it. UI, MCP transport, renderer, and TUI primitives are
  // better tested by snapshot/integration than mutation.
  mutate: [
    "src/loop.ts",
    "src/context-manager.ts",
    "src/core/**/*.ts",
    "src/tools/shell.ts",
    "src/tools/plan-core.ts",
    "src/tools/choice.ts",
    "src/repair/**/*.ts",
  ],

  // Run only the test files that cover the mutated modules.
  testFiles: [
    "tests/loop.test.ts",
    "tests/shell-tools.test.ts",
    "tests/plan.test.ts",
    "tests/choice.test.ts",
    "tests/repair/*.test.ts",
  ],

  testRunnerNodeArgs: ["--experimental-vm-modules"],
  vitest: {
    configFile: "vitest.config.ts",
  },

  // Thresholds — fail if mutation score drops below this.
  thresholds: {
    high: 80,
    low: 60,
    break: 50,
  },

  // Reporters — JSON gives us structured data for automated analysis.
  // Keep "progress" so the progress bar doesn't vanish during the run.
  reporters: ["progress", "clear-text", "html", "json"],
  jsonReporter: {
    fileName: "reports/mutation/mutation.json",
  },

  // Concurrency; adjust based on your machine.
  concurrency: 4,

  // Clear timeout large enough for the full suite.
  timeoutMS: 60000,
};

export default config;
