{
  "name": "promptfoo",
  "description": "LLM eval & testing toolkit",
  "author": "Ian Webster",
  "version": "0.121.9",
  "license": "MIT",
  "type": "module",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/promptfoo/promptfoo.git"
  },
  "main": "./dist/src/index.js",
  "exports": {
    ".": {
      "import": "./dist/src/index.js",
      "require": "./dist/src/index.cjs"
    }
  },
  "workspaces": [
    "src/app",
    "site"
  ],
  "types": "dist/src/index.d.ts",
  "typings": "dist/src/index.d.ts",
  "files": [
    "dist",
    "!dist/test",
    "!dist/src/__mocks__",
    "!dist/**/*.map"
  ],
  "engines": {
    "node": "^20.20.0 || >=22.22.0"
  },
  "bin": {
    "promptfoo": "dist/src/entrypoint.js",
    "pf": "dist/src/entrypoint.js"
  },
  "scripts": {
    "audit:fix": "npm audit fix && npm audit fix --prefix src/app && npm audit fix --prefix site",
    "bin": "dist/src/entrypoint.js",
    "build:app": "npm run build --prefix src/app",
    "build:clean": "shx rm -rf dist",
    "build:watch": "NODE_OPTIONS='--max-old-space-size=8192' tsdown --watch",
    "build": "concurrently -g --kill-others-on-fail \"npm run tsc\" \"NODE_OPTIONS='--max-old-space-size=8192' tsdown\" \"npm run build:app\"",
    "postbuild": "tsx scripts/postbuild.ts",
    "citation:generate": "tsx scripts/generateCitation.ts",
    "db:generate": "npx drizzle-kit generate",
    "db:migrate": "tsx src/migrate.ts",
    "db:studio": "npx drizzle-kit studio",
    "openapi:generate": "tsx scripts/generateOpenApi.ts",
    "openapi:check": "tsx scripts/generateOpenApi.ts --check",
    "dev:app": "npm run dev --prefix src/app",
    "storybook": "npm run storybook --prefix src/app",
    "dev:server": "tsx --watch src/server/index.ts",
    "dev": "concurrently \"npm run dev:server\" \"npm run dev:app\"",
    "f": "git diff --name-only --diff-filter=ACMRTUXB origin/main | grep -E '\\.(js|jsx|mjs|cjs|ts|tsx|json)$' | xargs npx @biomejs/biome check --write && git diff --name-only --diff-filter=ACMRTUXB origin/main | grep -E '\\.(css|scss|html|md|mdc|mdx|yaml|yml)$' | xargs prettier --write",
    "format:check": "npx @biomejs/biome check && prettier --check '**/*.{css,scss,html,md,mdc,mdx,yaml,yml}'",
    "format:check:prettier": "prettier --check '**/*.{css,scss,html,md,mdc,mdx,yaml,yml}'",
    "format": "npx @biomejs/biome check --write . && prettier --write '**/*.{css,scss,html,md,mdc,mdx,yaml,yml}'",
    "jsonSchema:generate": "npx -y tsx scripts/generateJsonSchema.ts > site/static/config-schema.json && npx @biomejs/biome format --write site/static/config-schema.json",
    "knip": "knip",
    "l": "git diff --name-only --diff-filter=ACMRTUXB origin/main | grep -E '\\.(js|ts|tsx)$' | xargs npx @biomejs/biome lint --write",
    "lint:ci": "npx @biomejs/biome ci .",
    "lint:site": "npx @biomejs/biome lint site",
    "lint:src": "npx @biomejs/biome lint src",
    "lint:tests": "npx @biomejs/biome lint test",
    "lint": "npm run lint:src",
    "local:web": "npm run dev --prefix src/app",
    "local": "tsx src/main.ts",
    "preversion": "command -v gh >/dev/null 2>&1 || (echo \"Error: GitHub CLI required.\" && exit 1) && [ \"$(git rev-parse --abbrev-ref HEAD)\" = \"main\" ] || (echo \"Error: Must be on main branch to version\" && exit 1) && git pull origin main && git checkout -b \"chore/bump-version-$(date +%s)\"",
    "changelog:release": "node scripts/update-changelog-version.cjs",
    "postversion": "npm run changelog:release && npm run citation:generate && git add CHANGELOG.md CITATION.cff && git commit --amend --no-edit && gh pr create --repo promptfoo/promptfoo --title \"chore: bump version $npm_package_version\" --body \"\"",
    "prepublishOnly": "node -e \"if (!process.env.PROMPTFOO_POSTHOG_KEY) { console.error('Error: PROMPTFOO_POSTHOG_KEY must be set'); process.exit(1); }\" && npm run build:clean && npm run build",
    "test:app": "npm --prefix src/app run test --",
    "test:app:browser": "npm --prefix src/app run test:browser --",
    "test:site": "npm run test --prefix site",
    "test:integration": "vitest run --config vitest.integration.config.ts",
    "test:vitest": "vitest run",
    "test:vitest:watch": "vitest",
    "test:watch": "vitest",
    "test:redteam:integration": "npm run build && ./test/redteam/integration/test.sh",
    "test:smoke": "vitest run --config vitest.smoke.config.ts",
    "test": "vitest run",
    "test:coverage": "vitest run --coverage && npm run test:coverage --prefix src/app",
    "test:coverage:ratchet": "node --import tsx ./scripts/checkCoverageRatchets.ts",
    "check:typescript-coverage": "tsx scripts/checkTypeScriptCoverage.ts",
    "tsc": "tsc --noEmit",
    "mcp": "node dist/src/entrypoint.js mcp",
    "depcheck": "depcheck --ignores=\"@types/*,@biomejs/biome,prettier,shx,concurrently,madge,knip,vite,typescript,tshy,gcp-metadata,@opencode-ai/sdk,@actions/core,@actions/exec,@actions/github,@octokit/rest,nock,@vitest/coverage-v8,langium\" --ignore-dirs=\"dist,site,examples\"",
    "prepare": "husky || exit 0"
  },
  "overrides": {
    "uri-js": "npm:uri-js-replace",
    "chokidar": "5.0.0",
    "whatwg-url": "16.0.1",
    "esbuild": "0.28.0",
    "jsdom": {
      "@asamuzakjp/css-color": "5.1.11"
    },
    "storybook": {
      "esbuild": "0.27.7"
    },
    "react": "^19.2.4",
    "react-dom": "^19.2.4",
    "react-is": "^19.2.4",
    "*": {
      "whatwg-url": "16.0.1",
      "chokidar": "5.0.0",
      "esbuild": "0.28.0",
      "react": "^19.2.4",
      "react-dom": "^19.2.4"
    },
    "serialize-javascript": ">=7.0.4",
    "gaxios": "^7.1.4",
    "https-proxy-agent": "^9.0.0",
    "mongoose": {
      "gcp-metadata": "^8.1.2"
    },
    "webpack-dev-server": {
      "express": "^4.22.1"
    },
    "@anthropic-ai/claude-agent-sdk": {
      "@anthropic-ai/sdk": "^0.92.0"
    },
    "@isaacs/brace-expansion": ">=5.0.1",
    "fast-xml-parser": "$fast-xml-parser",
    "minimatch@<=3.1.3": "3.1.5",
    "vite": "^8.0.5",
    "lodash-es": "^4.18.1",
    "langium": {
      ".": "4.2.3",
      "@chevrotain/regexp-to-ast": "11.2.0",
      "chevrotain": "11.2.0",
      "chevrotain-allstar": "0.4.1"
    },
    "chevrotain": {
      ".": "11.2.0",
      "@chevrotain/cst-dts-gen": "12.0.0",
      "@chevrotain/gast": "11.2.0",
      "@chevrotain/regexp-to-ast": "11.2.0",
      "@chevrotain/types": "11.2.0",
      "@chevrotain/utils": "11.2.0"
    },
    "@chevrotain/cst-dts-gen": {
      ".": "12.0.0",
      "@chevrotain/gast": "12.0.0",
      "@chevrotain/types": "12.0.0"
    },
    "chevrotain-allstar": {
      ".": "0.4.1",
      "chevrotain": "11.2.0"
    },
    "webpack": "5.106.2",
    "dompurify": "3.4.2",
    "monaco-editor": {
      ".": "0.55.1",
      "dompurify": "3.4.2"
    }
  },
  "devDependencies": {
    "@anthropic-ai/claude-agent-sdk": "^0.2.126",
    "@asteasolutions/zod-to-openapi": "^8.5.0",
    "@aws-sdk/client-bedrock-agent-runtime": "^3.1040.0",
    "@aws-sdk/client-bedrock-runtime": "^3.1040.0",
    "@aws-sdk/client-s3": "^3.1003.0",
    "@aws-sdk/client-sagemaker-runtime": "^3.1040.0",
    "@aws-sdk/credential-provider-sso": "^3.972.16",
    "@aws-sdk/types": "^3.973.5",
    "@azure/identity": "^4.13.0",
    "@azure/openai-assistants": "^1.0.0-beta.6",
    "@biomejs/biome": "2.4.13",
    "@fal-ai/client": "~1.10.0",
    "@ibm-cloud/watsonx-ai": "^1.7.11",
    "@ibm-generative-ai/node-sdk": "^3.2.4",
    "@smithy/types": "^4.13.0",
    "@types/async": "^3.2.25",
    "@types/better-sqlite3": "^7.6.13",
    "@types/cli-progress": "^3.11.6",
    "@types/compression": "^1.8.1",
    "@types/cors": "^2.8.19",
    "@types/express": "^5.0.6",
    "@types/js-yaml": "^4.0.9",
    "@types/jsdom": "^28.0.0",
    "@types/node": "^24.12.0",
    "@types/nunjucks": "^3.2.6",
    "@types/opener": "^1.4.3",
    "@types/pdf-parse": "^1.1.5",
    "@types/pem": "^1.14.4",
    "@types/proxy-from-env": "^1.0.4",
    "@types/semver": "^7.7.1",
    "@types/source-map-support": "^0.5.10",
    "@types/supertest": "^7.0.0",
    "@vitest/coverage-v8": "^4.1.0",
    "concurrently": "^9.2.1",
    "depcheck": "^1.4.7",
    "drizzle-kit": "^0.31.10",
    "husky": "^9.1.7",
    "ibm-cloud-sdk-core": "^5.4.11",
    "knip": "^6.0.0",
    "langfuse": "^3.38.20",
    "langium": "4.2.3",
    "nock": "^14.0.11",
    "node-sql-parser": "^5.4.0",
    "pdf-parse": "^2.4.5",
    "playwright": "^1.59.1",
    "playwright-extra": "^4.3.6",
    "prettier": "^3.8.1",
    "puppeteer-extra-plugin-stealth": "^2.11.2",
    "read-excel-file": "^9.0.0",
    "shx": "^0.4.0",
    "source-map-support": "^0.5.21",
    "supertest": "^7.2.2",
    "ts-dedent": "^2.2.0",
    "tsdown": "0.21.9",
    "typescript": "^6.0.2",
    "vitest": "^4.1.0",
    "winston-transport": "^4.9.0"
  },
  "optionalDependencies": {
    "@anthropic-ai/claude-agent-sdk": "^0.2.126",
    "@aws-sdk/client-bedrock-agent-runtime": "^3.1040.0",
    "@aws-sdk/client-bedrock-runtime": "^3.1040.0",
    "@aws-sdk/client-s3": "^3.1003.0",
    "@aws-sdk/client-sagemaker-runtime": "^3.1040.0",
    "@aws-sdk/credential-provider-sso": "^3.972.16",
    "@azure/ai-projects": "^2.1.0",
    "@azure/identity": "^4.13.0",
    "@azure/msal-node": "^5.1.0",
    "@azure/openai-assistants": "^1.0.0-beta.6",
    "@fal-ai/client": "~1.10.0",
    "@huggingface/transformers": "^4.0.0",
    "@ibm-cloud/watsonx-ai": "^1.7.11",
    "@ibm-generative-ai/node-sdk": "^3.2.4",
    "@openai/codex-sdk": "^0.128.0",
    "@playwright/browser-chromium": "^1.59.1",
    "@rollup/rollup-linux-x64-gnu": "^4.59.0",
    "@slack/web-api": "^7.15.0",
    "@smithy/node-http-handler": "^4.4.14",
    "@swc/core": "^1.15.18",
    "@swc/core-darwin-arm64": "^1.15.18",
    "@swc/core-darwin-x64": "^1.15.18",
    "@swc/core-linux-x64-gnu": "^1.15.18",
    "@swc/core-linux-x64-musl": "^1.15.18",
    "@swc/core-win32-x64-msvc": "^1.15.18",
    "google-auth-library": "^10.6.2",
    "hono": "^4.12.5",
    "ibm-cloud-sdk-core": "^5.4.11",
    "langfuse": "^3.38.20",
    "natural": "^8.1.1",
    "node-sql-parser": "^5.4.0",
    "pdf-parse": "^2.4.5",
    "playwright": "^1.59.1",
    "playwright-extra": "^4.3.6",
    "read-excel-file": "^9.0.0",
    "sharp": "^0.34.5"
  },
  "dependencies": {
    "@anthropic-ai/sdk": "^0.92.0",
    "@apidevtools/json-schema-ref-parser": "^15.3.1",
    "@googleapis/sheets": "^13.0.1",
    "@inquirer/checkbox": "^5.1.0",
    "@inquirer/confirm": "^6.0.8",
    "@inquirer/core": "^11.1.5",
    "@inquirer/editor": "^5.0.8",
    "@inquirer/input": "^5.0.8",
    "@inquirer/select": "^5.1.0",
    "@modelcontextprotocol/sdk": "^1.29.0",
    "@openai/agents": "^0.8.5",
    "@opencode-ai/sdk": "^1.14.33",
    "@opentelemetry/api": "^1.9.0",
    "@opentelemetry/core": "^2.6.0",
    "@opentelemetry/exporter-trace-otlp-http": "^0.216.0",
    "@opentelemetry/resources": "^2.6.0",
    "@opentelemetry/sdk-trace-base": "^2.6.0",
    "@opentelemetry/sdk-trace-node": "^2.6.0",
    "@opentelemetry/semantic-conventions": "^1.40.0",
    "@types/ws": "^8.18.1",
    "ai": "^6.0.168",
    "ajv": "^8.18.0",
    "ajv-formats": "^3.0.1",
    "async": "^3.2.6",
    "better-sqlite3": "^12.8.0",
    "binary-extensions": "^3.1.0",
    "cache-manager": "^7.2.8",
    "chalk": "^5.6.2",
    "chokidar": "5.0.0",
    "cli-progress": "^3.12.0",
    "cli-table3": "^0.6.5",
    "commander": "^14.0.3",
    "compression": "^1.8.1",
    "cors": "^2.8.6",
    "csv-parse": "^6.2.0",
    "csv-stringify": "^6.7.0",
    "debounce": "^3.0.0",
    "dedent": "^1.7.2",
    "dotenv": "^17.3.1",
    "drizzle-orm": "^0.45.1",
    "execa": "^9.6.1",
    "express": "^5.2.1",
    "exsolve": "^1.0.8",
    "fast-deep-equal": "^3.1.3",
    "fast-safe-stringify": "^2.1.1",
    "fast-xml-parser": "^5.7.1",
    "fastest-levenshtein": "^1.0.16",
    "gcp-metadata": "^8.1.2",
    "glob": "^13.0.6",
    "http-z": "^8.1.1",
    "istextorbinary": "^9.5.0",
    "jks-js": "^1.1.5",
    "js-rouge": "^3.2.0",
    "js-yaml": "^4.1.1",
    "json5": "^2.2.3",
    "keyv": "^5.6.0",
    "keyv-file": "^5.3.3",
    "lru-cache": "^11.3.0",
    "mathjs": "^15.1.1",
    "minimatch": "^10.2.4",
    "nunjucks": "^3.2.4",
    "openai": "^6.35.0",
    "opener": "^1.5.2",
    "ora": "^9.3.0",
    "parse5": "^8.0.0",
    "pem": "~1.14.8",
    "posthog-node": "~5.24.10",
    "protobufjs": "^8.0.0",
    "proxy-agent": "^8.0.0",
    "proxy-from-env": "^2.1.0",
    "python-shell": "^5.0.0",
    "rfdc": "^1.4.1",
    "rxjs": "^7.8.2",
    "semver": "^7.7.4",
    "simple-git": "^3.33.0",
    "socket.io": "^4.8.3",
    "socket.io-client": "^4.8.3",
    "text-extensions": "^3.1.0",
    "tsx": "^4.21.0",
    "undici": "^7.25.0",
    "winston": "^3.19.0",
    "ws": "^8.19.0",
    "zod": "^4.3.6"
  },
  "madge": {
    "detectiveOptions": {
      "ts": {
        "skipAsyncImports": true
      },
      "tsx": {
        "skipAsyncImports": true
      }
    }
  },
  "pnpm": {
    "onlyBuiltDependencies": [
      "@huggingface/transformers",
      "@playwright/browser-chromium",
      "@swc/core",
      "better-sqlite3",
      "core-js",
      "core-js-pure",
      "esbuild",
      "protobufjs",
      "sharp"
    ],
    "ignoredBuiltDependencies": []
  }
}
