{"name":"promptfoo","description":"LLM eval & testing toolkit","author":{"name":"Ian Webster"},"version":"0.121.19","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,@actions/core,@actions/exec,@actions/github,@octokit/rest,@vitest/coverage-v8,langium,block-no-verify,yaml\" --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.9.0"},"@opentelemetry/otlp-exporter-base":{"@opentelemetry/core":"2.9.0"},"@opentelemetry/otlp-transformer":{"@opentelemetry/core":"2.9.0"},"@opentelemetry/resources":{"@opentelemetry/core":"2.9.0"},"@opentelemetry/sdk-logs":{"@opentelemetry/core":"2.9.0"},"@opentelemetry/sdk-metrics":{"@opentelemetry/core":"2.9.0"},"@opentelemetry/sdk-trace-base":{"@opentelemetry/core":"2.9.0"},"@opentelemetry/sdk-trace-node":{"@opentelemetry/core":"2.9.0"},"serialize-javascript":">=7.0.5","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"},"launch-editor":"2.14.1","engine.io":{".":"6.6.9","ws":"$ws"},"engine.io-client":{".":"6.6.6","ws":"$ws"},"socket.io-adapter":{".":"2.5.8","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.3.1","@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.108.3","dompurify":"3.4.11","monaco-editor":{".":"0.55.1","dompurify":"3.4.11"}},"devDependencies":{"@anthropic-ai/claude-agent-sdk":"0.3.201","@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.5.2","@fal-ai/client":"~1.10.1","@ibm-cloud/watsonx-ai":"^1.7.14","@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/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.3","depcheck":"^1.4.7","drizzle-kit":"^0.31.10","husky":"^9.1.7","ibm-cloud-sdk-core":"^5.4.22","knip":"^6.0.0","langfuse":"^3.38.20","langium":"4.3.1","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","yaml":"^2.9.0"},"optionalDependencies":{"@anthropic-ai/claude-agent-sdk":"0.3.201","@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.14","@modelcontextprotocol/sdk":"^1.29.0","@openai/agents":"^0.11.3","@openai/codex-sdk":"^0.144.0","@opencode-ai/sdk":"^1.14.33","@playwright/browser-chromium":"^1.60.0","@rollup/rollup-linux-x64-gnu":"^4.62.0","@slack/web-api":"^7.15.2","@smithy/node-http-handler":"^4.4.14","@swc/core":"^1.15.41","@swc/core-darwin-arm64":"^1.15.41","@swc/core-darwin-x64":"^1.15.41","@swc/core-linux-x64-gnu":"^1.15.41","@swc/core-linux-x64-musl":"^1.15.41","@swc/core-win32-x64-msvc":"^1.15.41","google-auth-library":"^10.9.0","hono":"^4.12.25","ibm-cloud-sdk-core":"^5.4.22","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.35.3"},"dependencies":{"@anthropic-ai/sdk":"0.110.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.9.0","@opentelemetry/exporter-trace-otlp-http":"^0.220.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":"^7.0.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":"5.2.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","saxes":"^6.0.0","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.28.0 <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":"1ede17aaed940e6dff04f71d24e4ecc011809dae","_id":"promptfoo@0.121.19","bugs":{"url":"https://github.com/promptfoo/promptfoo/issues"},"_nodeVersion":"24.18.0","_npmVersion":"11.11.0","dist":{"integrity":"sha512-5YebsCED/bmR9JktH9YNU62Tr1m3ncFMlM2tKrguI8vFFUfvqxhNzUBa3Z6huG7OvDKbi69UpamU4CLtYLDezQ==","shasum":"544bf866ac349ea51566186bf8f272d041a30431","tarball":"https://registry.npmjs.org/promptfoo/-/promptfoo-0.121.19.tgz","fileCount":634,"unpackedSize":28112145,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/promptfoo@0.121.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDpfCgkrbQjTIQFBcgZ1uwTEW1uaCf6KHcOYuZzHryE1QIhAOPHkGXbEzx1parrC+GAeDsCc8VuqgoI8JTtjsszAymC"}]},"_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.19_1784047490950_0.757562948825597"},"_hasShrinkwrap":false}