Skip to content
Merged
Show file tree
Hide file tree
Changes from 95 commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
ff1d038
fix(evals): isolate calibration inputs and correct deterministic graders
codex Oct 5, 2026
c51e6da
fix(evals): preserve isolated runtime behavior across replay and inte…
codex Oct 5, 2026
1c76954
fix(evals): prepare CI runtime and launch Promptfoo through Node
codex Oct 5, 2026
cd13054
Use supported Node runtime for triage evaluation checks
codex Oct 5, 2026
53d4aa1
Preserve stdin imports for symlink-aware eval helpers
codex Oct 5, 2026
372f44b
refactor(evals): use native directory copying for runtime staging
mldangelo-oai Oct 5, 2026
46caad6
fix(eval): preserve behavior through typed tooling migration
codex Oct 5, 2026
3f098b7
fix: reconcile evaluation integrity with typed runners
codex Oct 5, 2026
9427c4e
fix(eval): reconcile typed runners and preserve approval prohibitions
codex Oct 5, 2026
5319001
fix(evals): preserve negated fallback instructions
codex Oct 5, 2026
eb10bd7
fix(evals): reject omitted fallback approval requests
codex Oct 5, 2026
72c56b7
test(evals): grade connector workflow decisions with JSON schema
codex Oct 5, 2026
b60aa13
Preserve Node access in eval permission profiles
codex Oct 5, 2026
f40d21e
fix(evals): integrate shared tooling and preserve runtime selection
codex Oct 5, 2026
ba668b1
chore(evals): integrate selected main
mldangelo-oai Oct 5, 2026
4fb4254
Merge main into PR branch
mldangelo-oai Oct 5, 2026
63214cf
Merge commit 'refs/codex/pr-repair/1261-final-fresh' into HEAD
mldangelo-oai Oct 5, 2026
b121e51
fix(evals): resolve selected Node commands before fallback
mldangelo-oai Oct 5, 2026
b71b304
Merge remote-tracking branch 'origin/main' into HEAD
mldangelo-oai Oct 5, 2026
ab34a41
Merge latest main into PR branch
mldangelo-oai Oct 6, 2026
adbdffd
Merge commit 'ab34a415d207a205113ade4ef88041fbadaa7cf4' into HEAD
mldangelo-oai Oct 6, 2026
7245510
Merge commit '797f8017e2d3d363da210551d20a33b4f434954b' into HEAD
mldangelo-oai Oct 6, 2026
9aeaa27
fix(evals): resolve runtime after rendering each case
mldangelo-oai Oct 6, 2026
87bed86
Merge latest main into PR branch
mldangelo-oai Oct 6, 2026
f8135bc
Merge commit 'fb4dd26073fd05c9a05e5036685874a7b0fc791f' into HEAD
mldangelo-oai Oct 6, 2026
23ab66e
Merge commit '87bed8627ec1c0c63a31efbfa6171ddad3735241' into HEAD
mldangelo-oai Oct 6, 2026
14e54c1
Merge latest main into PR branch
mldangelo-oai Oct 6, 2026
eeba19d
Merge commit '14e54c1ca9705df0f4e4a6ff94d4a0a80f964f13' into HEAD
mldangelo-oai Oct 6, 2026
9502757
fix: match complete GitHub intake endpoints
codex Oct 6, 2026
0ab0149
Merge latest main into PR branch
mldangelo-oai Oct 6, 2026
59ae3b2
Merge commit '0ab01493cc3c899fb30537846ff254eeeca7e296' into mdangelo…
codex Oct 6, 2026
0dd412d
fix: preserve evaluation template and endpoint behavior
codex Oct 6, 2026
2b99a22
fix: retain default runtime for empty evaluation overrides
codex Oct 6, 2026
2d58829
Merge commit '0ab01493cc3c899fb30537846ff254eeeca7e296' into HEAD
mldangelo-oai Oct 6, 2026
c191738
Merge commit 'e0489b00fe07dee041a54260f9d7a5ca33e54ede' into HEAD
mldangelo-oai Oct 6, 2026
0add948
Merge commit 'e0489b00fe07dee041a54260f9d7a5ca33e54ede' into mdangelo…
codex Oct 6, 2026
cc37211
fix(eval): preserve Promptfoo progress on Windows interruption
mldangelo-oai Oct 6, 2026
7b1db99
Merge commit '2b99a22c74170bd498d7f59793484578c86d5f49' into HEAD
mldangelo-oai Oct 6, 2026
3b6400d
refactor(eval): reuse upstream per-call template rendering
mldangelo-oai Oct 6, 2026
003645f
fix: align evaluation provider types with optional context
codex Oct 6, 2026
e8a5f36
fix(evals): type the existing provider boundary fixtures
mldangelo-oai Oct 6, 2026
6c547e3
Merge current public evaluation fixes while retaining upstream rendering
mldangelo-oai Oct 6, 2026
16b5d01
fix: require complete alert instance routes in evaluation
codex Oct 6, 2026
e3020a8
fix(evals): bound code scanning instance endpoint matches
mldangelo-oai Oct 6, 2026
50b9384
Merge commit '0cdb22a6db9877ff17a2f4369a7705e70b7cb27c' into HEAD
mldangelo-oai Oct 6, 2026
b7bef9b
Merge current public evaluation route fixes
mldangelo-oai Oct 6, 2026
452ba76
Merge captured main into evaluation repair
mldangelo-oai Oct 6, 2026
8a0a257
fix(evals): restore runtime setup and evaluation entrypoints
mldangelo-oai Oct 6, 2026
7539ea8
Merge commit 'a7b3618f4c5e63aa70f4defa4e72bbe8e0c4cdb1' into HEAD
mldangelo-oai Oct 6, 2026
66c3255
Merge commit '2f8ffa59960e4bc244e5ae5c3d1b88d5f2169c8c' into HEAD
mldangelo-oai Oct 6, 2026
b480a35
fix(evals): stage the runtime for viewer replays
mldangelo-oai Oct 6, 2026
fee52fc
Preserve SAST provider lookup across persisted Promptfoo replay
mldangelo-oai Oct 6, 2026
b8b868e
Merge commit 'refs/codex/pr-repair/1261/current-main' into HEAD
mldangelo-oai Oct 6, 2026
9a78f25
test: use built-in SQLite for evaluation replay fixtures
mldangelo-oai Oct 6, 2026
c1e00d3
Merge commit 'f894f1ff64b1a332001f48593c1622b85701f9f3' into HEAD
mldangelo-oai Oct 6, 2026
b070c71
test(evals): canonicalize provider fixture roots
mldangelo-oai Oct 6, 2026
afe257e
fix(evals): preserve version-one representative sample ordering
mldangelo-oai Oct 6, 2026
a4fe109
fix(evals): preserve explicit runtime selection and replay typing
codex Oct 6, 2026
2388e88
Merge commit 'f88b7f578cdf5863721a39fabf0a231a1ade8cb9' into HEAD
mldangelo-oai Oct 7, 2026
0339111
refactor(evals): simplify harnesses and consolidate regression coverage
codex Oct 7, 2026
6ea900a
Merge commit 'refs/codex/pr-repair/1261/current-public-head' into HEAD
mldangelo-oai Oct 7, 2026
ea8f791
Keep concurrent native builds and workflow fixtures stable
mldangelo-oai Oct 7, 2026
a173018
Merge commit '09ee36f00b140afeb2de9cd236a1c227e624cff2' into HEAD
mldangelo-oai Oct 7, 2026
8b0ce1b
Run native wrapper concurrency control in MCP test suite
mldangelo-oai Oct 7, 2026
aa9d04b
merge: preserve evaluation integrity fixes on current main
mldangelo-oai Oct 7, 2026
eccf486
Preserve selected Codex runtime access in isolated evals
mldangelo-oai Oct 7, 2026
2e92523
Preserve native PATH lookup for evaluation executables
mldangelo-oai Oct 7, 2026
d81acfa
Preserve native traversal when resolving evaluation executables
mldangelo-oai Oct 7, 2026
d63b812
Merge main into evaluation integrity fixes
mldangelo-oai Oct 7, 2026
d528e63
Preserve native Node path traversal in eval runtimes
mldangelo-oai Oct 7, 2026
2419394
Merge main into eval integrity fixes
mldangelo-oai Oct 7, 2026
dd497dc
Merge main into eval integrity fixes
mldangelo-oai Oct 7, 2026
f97fd9e
Merge main into evaluation integrity fixes
mldangelo-oai Oct 7, 2026
3332c04
Preserve npm launcher runtimes in evaluation sandboxes
mldangelo-oai Oct 7, 2026
a3e3aa8
Merge main and preserve eval runtime bindings
mldangelo-oai Oct 8, 2026
ab9d636
Merge main and preserve configured Node invocation
mldangelo-oai Oct 8, 2026
77e1d01
Merge main and fix cancellation fixture reporting
mldangelo-oai Oct 8, 2026
e8d851d
Merge main and preserve evaluation runtime selection
mldangelo-oai Oct 8, 2026
5e0be2f
Merge remote-tracking branch 'origin/main' into HEAD
mldangelo-oai Oct 8, 2026
c796b4e
fix(evals): retain read access to custom SastBench targets
mldangelo-oai Oct 8, 2026
9f62746
ci: allow Windows baseline tests to complete
mldangelo-oai Oct 8, 2026
7a0a363
Merge remote-tracking branch 'origin/main' into HEAD
mldangelo-oai Oct 8, 2026
99a12d9
Merge main into eval integrity branch
mldangelo-oai Oct 8, 2026
e372d70
ci: shard Ubuntu isolated test runs
mldangelo-oai Oct 8, 2026
278aea5
fix(evals): preserve native provider credential precedence
mldangelo-oai Oct 8, 2026
e9de8f5
Merge current PR and main updates
mldangelo-oai Oct 8, 2026
fade22f
fix(evals): restrict SAST reads to the selected worktree
mldangelo-oai Oct 8, 2026
dec8e8b
fix(evals): preserve saved native provider runtime bindings
mldangelo-oai Oct 8, 2026
5349c8d
Merge concurrent SAST workspace fix
mldangelo-oai Oct 8, 2026
5d9886c
Merge latest main into eval integrity branch
mldangelo-oai Oct 8, 2026
e127ca6
refactor(evals): remove unused SAST target-root default
mldangelo-oai Oct 8, 2026
fb9dcb8
Merge main worker progress fix
mldangelo-oai Oct 8, 2026
0e1ecbb
Merge concurrent SAST target cleanup
mldangelo-oai Oct 8, 2026
f5f6aa0
test: distinguish worker retry cases in JUnit reports
mldangelo-oai Oct 8, 2026
ad85391
fix(evals): route validation through the shared runner
mldangelo-oai Oct 8, 2026
0446ba0
Merge main and preserve evaluation workflow fixtures
mldangelo-oai Oct 9, 2026
e93dba4
fix(evals): align calibration prompt targets with configured roots
mldangelo-oai Oct 9, 2026
62e9a59
Merge main and repair Linux evaluation CI
mldangelo-oai Oct 9, 2026
44ce169
test: reuse busy-directory cleanup for API fixtures
mldangelo-oai Oct 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions .github/workflows/node-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -411,9 +411,14 @@ jobs:
path: reports/python.xml
if-no-files-found: warn
retention-days: 14
- name: Build SDK and type-check eval tooling
- name: Set up Node.js for triage evals
if: matrix.os == 'ubuntu-latest' && matrix.python == '3.12'
run: pnpm --dir sdk/typescript run build:evals
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: "24.15.0"
- name: Set up triage eval dependencies and host runtime
if: matrix.os == 'ubuntu-latest' && matrix.python == '3.12'
run: pnpm --dir evals/triage-finding run setup
- name: Test deterministic triage eval contracts
if: matrix.os == 'ubuntu-latest' && matrix.python == '3.12'
working-directory: evals/triage-finding
Expand Down
18 changes: 11 additions & 7 deletions .github/workflows/test-quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,24 +32,28 @@ jobs:
if: ${{ !cancelled() && (inputs.native-artifacts-ready || needs.native.result == 'success') }}
name: ${{ matrix.os }} / ${{ matrix.mode }}
runs-on: ${{ matrix.os }}
timeout-minutes: ${{ matrix.os == 'windows-latest' && (matrix.mode == 'baseline' && 60 || matrix.mode == 'parallel' && 45) || 30 }}
timeout-minutes: ${{ matrix.os == 'windows-latest' && (matrix.mode == 'baseline' && 75 || matrix.mode == 'parallel' && 45) || 30 }}
env:
CODEX_SECURITY_PROPERTY_SEED: ${{ github.event_name == 'pull_request' && 1 || github.run_number }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest]
mode: [baseline, isolated, parallel]
exclude:
- os: windows-latest
mode: isolated
mode: [baseline, parallel]
include:
- mode: baseline
args: ""
- mode: isolated
args: --isolate
- mode: parallel
args: --parallel=2
- os: ubuntu-latest
mode: isolated-1
args: --isolate --shard=1/3
- os: ubuntu-latest
mode: isolated-2
args: --isolate --shard=2/3
- os: ubuntu-latest
mode: isolated-3
args: --isolate --shard=3/3
- os: windows-latest
mode: isolated-1
args: --isolate --shard=1/7
Expand Down
2 changes: 1 addition & 1 deletion evals/secret-discovery/runtime.mts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export async function withEvalState(
let root;
let home;
try {
root = await mkdtemp(join(tmpdir(), "source-audit-"));
root = await realpath(await mkdtemp(join(tmpdir(), "source-audit-")));
// Share saved login updates without importing the caller's configuration.
let auth;
try {
Expand Down
37 changes: 37 additions & 0 deletions evals/secret-discovery/test_runtime.mts
Original file line number Diff line number Diff line change
Expand Up @@ -775,3 +775,40 @@ async ({ root, home, signal }) => {
},
);
}

test(
"fixture roots are canonical when the temporary directory is a symlink",
unixOnly,
async (t) => {
const directory = await mkdtemp(join(tmpdir(), "eval-aliased-temp-"));
t.after(() => rm(directory, { recursive: true, force: true }));
const actual = join(directory, "actual");
const alias = join(directory, "alias");
await mkdir(actual);
await symlink(actual, alias);
childProcess.execFileSync(
process.execPath,
[
"--experimental-strip-types",
"--input-type=module",
"--eval",
`
import assert from "node:assert/strict";
import { mkdtemp, realpath } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { withEvalState } from ${JSON.stringify(runtimeUrl)};
import { gradeResult } from ${JSON.stringify(new URL("./grade.mts", import.meta.url).href)};
await withEvalState(async () => await mkdtemp(join(tmpdir(), "home-")), join(tmpdir(), "missing-synthetic-home"), async ({root}) => {
assert.equal(root, await realpath(root));
const result = { findings: [], coverage: { completeness: "complete", explicitExclusions: [{ pattern: await realpath(root) }] } };
const grade = gradeResult(result, { positives: [], files: { "fixture.txt": "synthetic" } }, root);
assert.ok(grade.errors.includes("incomplete coverage"));
});
`,
],
{ env: { ...process.env, TMPDIR: alias }, stdio: "pipe" },
);
assert.deepEqual(await readdir(actual), []);
},
);
9 changes: 5 additions & 4 deletions evals/triage-finding/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This Promptfoo suite verifies that `$codex-security:triage-finding` accepts the
JSON result shape. It also covers bare skill invocation with no supplied finding,
which should prompt the user for a finding in a supported format instead of returning triage JSON. GitHub intake cases cover repository-source selection, REST endpoints, and explicit Connector requests without querying live GitHub during the eval.

The suite uses the Promptfoo Codex SDK provider because it only needs final assistant output and deterministic assertions. Codex runs from the checkout's plugin directory and reads its triage skill directly, with ambient plugins and memory disabled. The default suite can also read the synthetic fixtures; calibration cases can read their own hydrated checkout. Dataset labels, assertions, and calibration Git history stay outside those readable roots. The eval directory owns a small pinned pnpm environment so new cases can be added and run without a separate scratch setup.
The suite uses the Promptfoo Codex SDK provider because it only needs final assistant output and deterministic assertions. The common runner stages the checkout's triage skill and policy helper in a throwaway directory, with ambient plugins and memory disabled. The default suite can also read the synthetic fixtures; calibration cases can read their own hydrated checkout. Dataset labels, assertions, and calibration Git history stay outside those readable roots. The eval directory owns a small pinned pnpm environment so new cases can be added and run without a separate scratch setup.

Use Node.js 22.22.0 or newer for the eval runner. Run these commands from the repository root to install dependencies under this eval directory.

Expand All @@ -18,15 +18,16 @@ pnpm --dir evals/triage-finding run setup

After editing the tooling, rerun `pnpm --dir sdk/typescript run build:evals`. It prepares the SDK and type-checks the eval sources. Node and Promptfoo execute the TypeScript sources directly; package commands enable type stripping for Node 22.13.

Before running model evals, build the checkout's policy helper (requires the [native build prerequisites](../../plugins/codex-security/native/README.md)):
Before running the eval commands, prepare the native policy helper (requires the [native build prerequisites](../../plugins/codex-security/native/README.md)):

```bash
pnpm --dir plugins/codex-security/mcp-app install --frozen-lockfile
node plugins/codex-security/mcp-app/scripts/build_native.mjs
node plugins/codex-security/mcp-app/scripts/build_mcp_app.mjs --output plugins/codex-security/mcp --native host
```

Config validation and deterministic tests do not need this helper build.
The common runner builds the staged helper for validation, evaluation, and replay, then removes its temporary runtime after Promptfoo exits. The runtime extension runs after Promptfoo loads the native Codex provider, preserving its authentication precedence. A pinned Promptfoo patch runs saved `:beforeAll` startup hooks during viewer replay. Replay does not restore grading metadata, so grading hooks remain disabled.

Saved runs whose provider ID is `file://.../triage-provider.mts` need to be rerun with the current configuration before retry, resume, or replay. Their saved results remain intact. Native Codex provider IDs are unchanged.

Validate the config:

Expand Down
8 changes: 6 additions & 2 deletions evals/triage-finding/assertions/github-rest-intake.mts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,12 @@ function endpointPattern(path: string, queryParts: string[] = []) {
const repository = repositoryName(context.vars.target_repo as string);
const paths = [path, path.replace("{owner}/{repo}", repository)];
return (
paths.some((candidate) => escapedLiteralPattern(candidate).test(text)) &&
queryParts.every((part) => escapedLiteralPattern(part).test(text))
paths.some((candidate) =>
new RegExp(
escapedLiteralPattern(candidate).source + "\\b(?![/-]|\\.\\w)",
"i",
).test(text),
) && queryParts.every((part) => escapedLiteralPattern(part).test(text))
);
};
}
Expand Down
24 changes: 4 additions & 20 deletions evals/triage-finding/assertions/triage-io.mts
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,9 @@ import type { AssertionContext } from "../types.ts";
import { extractTriageResult, parseExpected } from "./output.mts";

function expectedScanbenchMapping(context: AssertionContext) {
const caseId = String(context.vars.case_id || "");
const label = String(context.vars.expected_binary_label || "");
const mappings = [];

if (caseId.endsWith("-vulnerable")) {
mappings.push({
expectedVerdict: "confirmed",
expectedBinaryLabel: "positive",
label: "vulnerable scanbench case",
});
} else if (caseId.endsWith("-fixed")) {
mappings.push({
expectedVerdict: "not_actionable",
expectedBinaryLabel: "negative",
label: "fixed scanbench case",
});
}

if (label === "positive") {
mappings.push({
expectedVerdict: "confirmed",
Expand Down Expand Up @@ -106,16 +91,15 @@ export default (output: unknown, context: AssertionContext) => {
`${label}: not_actionable finding must use null rank and rank_queue`,
);
}
} else if (rankQueue !== finding.verdict) {
failures.push(
`${label}: rank_queue must match verdict ${finding.verdict}`,
);
} else if (!Number.isInteger(rank) || rank! < 1) {
failures.push(
`${label}: actionable or unresolved finding must use a positive integer rank`,
);
} else {
if (rankQueue !== finding.verdict) {
failures.push(
`${label}: rank_queue must match verdict ${finding.verdict}, got ${rankQueue}`,
);
}
const ranks = ranksByQueue.get(rankQueue) || [];
ranks.push({ label, rank: rank! });
ranksByQueue.set(rankQueue, ranks);
Expand Down
26 changes: 13 additions & 13 deletions evals/triage-finding/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"private": true,
"description": "Promptfoo evals for the Codex Security triage-finding skill",
"scripts": {
"setup": "pnpm install --frozen-lockfile && pnpm rebuild better-sqlite3 && pnpm --dir ../../sdk/typescript run build:evals",
"setup": "pnpm install --frozen-lockfile && pnpm rebuild better-sqlite3 && pnpm --dir ../../plugins/codex-security/mcp-app install --frozen-lockfile && pnpm --dir ../../sdk/typescript run build:evals && node ../../plugins/codex-security/mcp-app/scripts/build_native.mjs",
"calibration:generate": "node --experimental-strip-types scripts/generate-calibration-tests.mts",
"calibration:hydrate": "node --experimental-strip-types scripts/hydrate-calibration-repos.mts",
"sastbench:install": "node --experimental-strip-types sastbench/scripts/install-sastbench.mts",
Expand All @@ -14,20 +14,20 @@
"test:calibration-generate": "node --experimental-strip-types scripts/test-generate-calibration-tests.mts",
"test:calibration-hydrate": "node --experimental-strip-types scripts/test-hydrate-calibration-repos.mts",
"test:dataset": "node --experimental-strip-types scripts/test-calibration-dataset.mts",
"test:deterministic": "node --experimental-strip-types scripts/test-app-surface-instructions.mts && node --experimental-strip-types scripts/test-triage-io.mts && node --experimental-strip-types scripts/test-intake-assertions.mts && node --experimental-strip-types scripts/test-calibration-dataset.mts && node --experimental-strip-types scripts/test-generate-calibration-tests.mts && node --experimental-strip-types scripts/test-promptfoo-runtime.mts && node --experimental-strip-types scripts/test-calibration-evidence.mts && node --experimental-strip-types scripts/test-hydrate-calibration-repos.mts && node --experimental-strip-types sastbench/scripts/test-sastbench-lib.mts && node --experimental-strip-types sastbench/scripts/test-install-sastbench.mts && node --experimental-strip-types sastbench/scripts/test-hydrate-sastbench-repos.mts && node --experimental-strip-types sastbench/scripts/test-sastbench-result.mts && node --experimental-strip-types sastbench/scripts/test-promptfoo-native-harness.mts",
"test:deterministic": "node --experimental-strip-types scripts/test-app-surface-instructions.mts && node --experimental-strip-types scripts/test-triage-io.mts && node --experimental-strip-types scripts/test-intake-assertions.mts && node --experimental-strip-types scripts/test-calibration-dataset.mts && node --experimental-strip-types scripts/test-generate-calibration-tests.mts && node --experimental-strip-types scripts/test-promptfoo-runtime.mts && node --experimental-strip-types scripts/test-calibration-evidence.mts && node --experimental-strip-types scripts/test-hydrate-calibration-repos.mts && node --experimental-strip-types sastbench/scripts/test-sastbench-lib.mts && node --experimental-strip-types sastbench/scripts/test-install-sastbench.mts && node --experimental-strip-types sastbench/scripts/test-hydrate-sastbench-repos.mts && node --experimental-strip-types sastbench/scripts/test-sastbench-result.mts && node --experimental-strip-types sastbench/scripts/test-promptfoo-native-harness.mts && node --experimental-strip-types --test scripts/test-promptfoo-runner.mts scripts/test-triage-provider.mts",
"test:instructions": "node --experimental-strip-types scripts/test-app-surface-instructions.mts",
"test:sastbench": "node --experimental-strip-types sastbench/scripts/test-sastbench-lib.mts && node --experimental-strip-types sastbench/scripts/test-install-sastbench.mts && node --experimental-strip-types sastbench/scripts/test-hydrate-sastbench-repos.mts && node --experimental-strip-types sastbench/scripts/test-sastbench-result.mts && node --experimental-strip-types sastbench/scripts/test-promptfoo-native-harness.mts",
"validate": "PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true promptfoo validate config -c ./promptfooconfig.yaml",
"validate:calibration": "pnpm run calibration:generate && PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true promptfoo validate config -c ./promptfooconfig.calibration.yaml",
"validate:sastbench": "PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true promptfoo validate config -c ./sastbench/promptfooconfig.sastbench.yaml",
"validate:sastbench:sample": "PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true promptfoo validate config -c ./sastbench/promptfooconfig.sastbench-sample.yaml",
"eval": "mkdir -p artifacts && PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true promptfoo eval -c ./promptfooconfig.yaml -o ./artifacts/triage-finding-eval.json --no-cache --no-share",
"eval:smoke": "mkdir -p artifacts && PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true promptfoo eval -c ./promptfooconfig.yaml -o ./artifacts/triage-finding-eval-smoke.json --no-cache --no-share --filter-range 0:1",
"eval:calibration": "pnpm run calibration:generate && pnpm run calibration:hydrate && mkdir -p artifacts && PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true promptfoo eval -c ./promptfooconfig.calibration.yaml -o ./artifacts/triage-finding-calibration-eval.json --no-cache --no-share",
"eval:calibration:smoke": "node --experimental-strip-types scripts/generate-calibration-tests.mts --case oss-dompurify-ghsa-v8jm-5vwx-cfxm --variant vulnerable --output artifacts/calibration-smoke.yaml && node --experimental-strip-types scripts/hydrate-calibration-repos.mts --case oss-dompurify-ghsa-v8jm-5vwx-cfxm --variant vulnerable && mkdir -p artifacts && PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true promptfoo eval -c ./promptfooconfig.calibration-smoke.yaml -o ./artifacts/triage-finding-calibration-smoke.json --no-cache --no-share",
"eval:sastbench": "PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true promptfoo eval -c ./sastbench/promptfooconfig.sastbench.yaml --no-cache --no-share",
"eval:sastbench:sample": "PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true promptfoo eval -c ./sastbench/promptfooconfig.sastbench-sample.yaml --no-cache --no-share --max-concurrency 32",
"pf:view": "PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true promptfoo view"
"validate": "PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true node --experimental-strip-types scripts/run-promptfoo.mts validate config -c ./promptfooconfig.yaml",
"validate:calibration": "pnpm run calibration:generate && PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true node --experimental-strip-types scripts/run-promptfoo.mts validate config -c ./promptfooconfig.calibration.yaml",
"validate:sastbench": "PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true node --experimental-strip-types scripts/run-promptfoo.mts validate config -c ./sastbench/promptfooconfig.sastbench.yaml",
"validate:sastbench:sample": "PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true node --experimental-strip-types scripts/run-promptfoo.mts validate config -c ./sastbench/promptfooconfig.sastbench-sample.yaml",
"eval": "mkdir -p artifacts && PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true node --experimental-strip-types scripts/run-promptfoo.mts eval -c ./promptfooconfig.yaml -o ./artifacts/triage-finding-eval.json --no-cache --no-share",
"eval:smoke": "mkdir -p artifacts && PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true node --experimental-strip-types scripts/run-promptfoo.mts eval -c ./promptfooconfig.yaml -o ./artifacts/triage-finding-eval-smoke.json --no-cache --no-share --filter-range 0:1",
"eval:calibration": "pnpm run calibration:generate && pnpm run calibration:hydrate && mkdir -p artifacts && PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true node --experimental-strip-types scripts/run-promptfoo.mts eval -c ./promptfooconfig.calibration.yaml -o ./artifacts/triage-finding-calibration-eval.json --no-cache --no-share",
"eval:calibration:smoke": "node --experimental-strip-types scripts/generate-calibration-tests.mts --case oss-dompurify-ghsa-v8jm-5vwx-cfxm --variant vulnerable --output artifacts/calibration-smoke.yaml && node --experimental-strip-types scripts/hydrate-calibration-repos.mts --case oss-dompurify-ghsa-v8jm-5vwx-cfxm --variant vulnerable && mkdir -p artifacts && PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true node --experimental-strip-types scripts/run-promptfoo.mts eval -c ./promptfooconfig.calibration-smoke.yaml -o ./artifacts/triage-finding-calibration-smoke.json --no-cache --no-share",
"eval:sastbench": "PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true node --experimental-strip-types scripts/run-promptfoo.mts eval -c ./sastbench/promptfooconfig.sastbench.yaml --no-cache --no-share",
"eval:sastbench:sample": "PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true node --experimental-strip-types scripts/run-promptfoo.mts eval -c ./sastbench/promptfooconfig.sastbench-sample.yaml --no-cache --no-share --max-concurrency 32",
"pf:view": "PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true node --experimental-strip-types scripts/run-promptfoo.mts view"
},
"dependencies": {
"@openai/codex-sdk": "0.162.0-alpha.20",
Expand Down
24 changes: 24 additions & 0 deletions evals/triage-finding/patches/promptfoo@0.123.1.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
diff --git a/dist/src/main.js b/dist/src/main.js
index 63b3515f0a43d58b4bfa0407e2749b8803f53399..1ac5c28580050c90ba60d3fc2fad0bdee03ac9e8 100755
--- a/dist/src/main.js
+++ b/dist/src/main.js
@@ -7143,6 +7143,7 @@ evalRouter.post("/replay", async (req, res) => {
label: "Replay"
}],
providers: [providerConfig],
+ extensions: eval_.config.extensions?.filter((extension) => extension.endsWith(":beforeAll")),
tests: [{ vars: variables || {} }]
}, {
maxConcurrency: 1,
diff --git a/dist/src/server/index.js b/dist/src/server/index.js
index 4d3710840e68d5570ef35011a1ff4cc105e617ee..7681d249b4d9bee02c0347b438fdf971e6909282 100644
--- a/dist/src/server/index.js
+++ b/dist/src/server/index.js
@@ -61896,6 +61896,7 @@ evalRouter.post("/replay", async (req, res) => {
label: "Replay"
}],
providers: [providerConfig],
+ extensions: eval_.config.extensions?.filter((extension) => extension.endsWith(":beforeAll")),
tests: [{ vars: variables || {} }]
}, {
maxConcurrency: 1,
Loading
Loading