{"name":"promptfoo","description":"LLM eval & testing toolkit","author":{"name":"Ian Webster"},"version":"0.121.17","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"},"./contracts":{"import":{"types":"./dist/src/contracts.d.ts","default":"./dist/src/contracts.js"},"require":{"types":"./dist/src/contracts.d.cts","default":"./dist/src/contracts.cjs"}}},"workspaces":["src/app","site"],"types":"dist/src/index.d.ts","typings":"dist/src/index.d.ts","typesVersions":{"*":{"contracts":["dist/src/contracts.d.ts"]}},"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","architecture:baseline":"tsx scripts/regenerateEdgeBaseline.ts","architecture:check":"tsx scripts/checkArchitectureBoundaries.ts","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","modelAuditSchema:generate":"python3 scripts/generate_modelaudit_schema.py && npx @biomejs/biome format --write site/static/schemas/modelaudit site/static/examples/modelaudit","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/localEntrypoint.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:package-artifact":"tsx scripts/testPackageArtifact.ts","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,block-no-verify\" --ignore-dirs=\"dist,site,examples\"","deps:ownership":"tsx scripts/reportDependencyOwnership.ts","prepare":"husky || exit 0"},"overrides":{"uri-js":"npm:uri-js-replace","chokidar":"5.0.0","whatwg-url":"16.0.1","esbuild":"0.28.1","jsdom":{"@asamuzakjp/css-color":"5.1.11"},"storybook":{"esbuild":"0.28.1"},"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.1","react":"^19.2.4","react-dom":"^19.2.4"},"@opentelemetry/exporter-trace-otlp-http":{"@opentelemetry/core":"2.8.0"},"@opentelemetry/otlp-exporter-base":{"@opentelemetry/core":"2.8.0"},"@opentelemetry/otlp-transformer":{"@opentelemetry/core":"2.8.0"},"@opentelemetry/resources":{"@opentelemetry/core":"2.8.0"},"@opentelemetry/sdk-logs":{"@opentelemetry/core":"2.8.0"},"@opentelemetry/sdk-metrics":{"@opentelemetry/core":"2.8.0"},"@opentelemetry/sdk-trace-base":{"@opentelemetry/core":"2.8.0"},"@opentelemetry/sdk-trace-node":{"@opentelemetry/core":"2.8.0"},"serialize-javascript":">=7.0.4","gaxios":"^7.1.4","https-proxy-agent":"^9.0.0","ip-address":"10.2.0","mongoose":{"gcp-metadata":"^8.1.2"},"webpack-dev-server":{"express":"^4.22.2"},"engine.io":{".":"6.6.8","ws":"$ws"},"engine.io-client":{".":"6.6.5","ws":"$ws"},"socket.io-adapter":{".":"2.5.7","ws":"$ws"},"qs":">=6.15.2 <7.0.0","@isaacs/brace-expansion":">=5.0.1","brace-expansion@5":"^5.0.6","fast-xml-parser":"$fast-xml-parser","minimatch@<=3.1.3":"3.1.5","vite":"^8.0.16","lodash-es":"^4.18.1","langium":{".":"4.2.4","@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.107.2","dompurify":"3.4.9","monaco-editor":{".":"0.55.1","dompurify":"3.4.9"}},"devDependencies":{"@anthropic-ai/claude-agent-sdk":"0.3.167","@asteasolutions/zod-to-openapi":"^8.5.0","@aws-sdk/client-bedrock-agent-runtime":"^3.1045.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0","@aws-sdk/client-s3":"^3.1003.0","@aws-sdk/client-sagemaker-runtime":"^3.1045.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.16","@fal-ai/client":"~1.10.1","@ibm-cloud/watsonx-ai":"^1.7.13","@ibm-generative-ai/node-sdk":"^3.2.4","@smithy/types":"^4.13.0","@types/async":"^3.2.25","@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","block-no-verify":"^1.2.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.4","nock":"^14.0.11","node-sql-parser":"^5.4.0","pdf-parse":"^2.4.5","playwright":"^1.60.0","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.3.167","@aws-sdk/client-bedrock-agent-runtime":"^3.1045.0","@aws-sdk/client-bedrock-runtime":"^3.1045.0","@aws-sdk/client-s3":"^3.1003.0","@aws-sdk/client-sagemaker-runtime":"^3.1045.0","@aws-sdk/credential-provider-sso":"^3.972.16","@azure/ai-projects":"^2.1.1","@azure/identity":"^4.13.0","@azure/msal-node":"^5.2.0","@azure/openai-assistants":"^1.0.0-beta.6","@azure/storage-blob":"^12.31.0","@fal-ai/client":"~1.10.1","@googleapis/sheets":"^13.0.1","@huggingface/transformers":"^4.0.0","@ibm-cloud/watsonx-ai":"^1.7.13","@ibm-generative-ai/node-sdk":"^3.2.4","@modelcontextprotocol/sdk":"^1.29.0","@openai/agents":"^0.11.3","@openai/codex-sdk":"^0.130.0","@opencode-ai/sdk":"^1.14.33","@playwright/browser-chromium":"^1.60.0","@rollup/rollup-linux-x64-gnu":"^4.61.0","@slack/web-api":"^7.15.2","@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.7.0","hono":"^4.12.5","ibm-cloud-sdk-core":"^5.4.11","jks-js":"^1.1.5","langfuse":"^3.38.20","natural":"^8.1.1","node-sql-parser":"^5.4.0","pdf-parse":"^2.4.5","pem":"~1.14.8","playwright":"^1.60.0","playwright-extra":"^4.3.6","read-excel-file":"^9.0.0","sharp":"^0.34.5"},"dependencies":{"@anthropic-ai/sdk":"0.101.0","@apidevtools/json-schema-ref-parser":"^15.3.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/search":"^4.1.8","@inquirer/select":"^5.1.0","@libsql/client":"^0.17.3","@opentelemetry/api":"^1.9.0","@opentelemetry/core":"2.8.0","@opentelemetry/exporter-trace-otlp-http":"^0.218.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.190","ajv":"^8.18.0","ajv-formats":"^3.0.1","async":"^3.2.6","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","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.37.0","opener":"^1.5.2","ora":"^9.3.0","parse5":"^8.0.0","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.27.1 <8","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","core-js","core-js-pure","esbuild","protobufjs","sharp"],"ignoredBuiltDependencies":[]},"homepage":"https://promptfoo.dev","gitHead":"8be17c32d44b17f4ddbd618fcaca87769e674abc","_id":"promptfoo@0.121.17","bugs":{"url":"https://github.com/promptfoo/promptfoo/issues"},"_nodeVersion":"24.16.0","_npmVersion":"11.11.0","dist":{"integrity":"sha512-xrUCe9ff+5eLjrAa8Nyzsjl8Ca/+v0ai+mdhjXWQwRnz9ilCv4qdUfwQpO5ld0G+y8Qsg2lZlbIkfvBbzdeUeQ==","shasum":"d67db833bb7f9c81338ba2226d6010a6588e0fc2","tarball":"https://registry.npmjs.org/promptfoo/-/promptfoo-0.121.17.tgz","fileCount":614,"unpackedSize":27579255,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/promptfoo@0.121.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIET3r+L2YEd5wL8Qvfiq8NyKy2xDCfigcymWQgg5UtLhAiAUX8Meqv2ZuYTMqbNfewjXDdul/ZZTkEY3yVEGUcDHMw=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:65fda267-241b-49a9-87ab-4acfa34625f1"}},"directories":{},"maintainers":[{"name":"sklein12","email":"sklein12@gmail.com"},{"name":"mdangelo","email":"michael.l.dangelo@gmail.com"},{"name":"ianw","email":"ianw_npm@ianww.com"},{"name":"justinbeckwith","email":"justin.beckwith@gmail.com"},{"name":"faizanminhas","email":"faizan1030@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/promptfoo_0.121.17_1781629836909_0.9614609679259909"},"_hasShrinkwrap":false}