-
Notifications
You must be signed in to change notification settings - Fork 1.7k
feat: Playwright-batch facade surface, HardBench audit, and harness fixes from the smoke gates #2867
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
feat: Playwright-batch facade surface, HardBench audit, and harness fixes from the smoke gates #2867
Changes from all commits
Commits
Show all changes
49 commits
Select commit
Hold shift + click to select a range
79aa866
feat(integrations): facade run executes the Playwright batch surface
miguelg719 3341bd6
feat(evals): stagehand_facade is the Playwright batch surface; add st…
miguelg719 8cb2314
fix(evals): default the rubric verifier to a live judge model
miguelg719 3cfd185
bench(hardbenchmark): validity audit — quarantine 1 bot-walled task, …
miguelg719 876f940
fix(evals): fx harness never reached the Stagehand MCP tools
miguelg719 994e9bc
fix(integrations): stop mastra/pi sessions retaining request bodies a…
miguelg719 4fb8a0f
fix(deepagents): keep provider tool-call blocks out of assistant text
miguelg719 e0bc551
fix(evals): keep the run summary alive when a Braintrust row has no o…
miguelg719 9ffb9c3
style(pi-sdk): format session test
miguelg719 d0d1be9
fix(evals): codex harness reaches runner-mounted MCP tools; count fac…
miguelg719 16e34f3
feat(integrations): facade page.frameLocator; clearer strict-mode and…
miguelg719 be44128
feat(evals): flag passes that never called the mounted browser surface
miguelg719 e123685
test(evals): pin default_tools_approval_mode on runner-mounted codex …
miguelg719 f8456cb
style(evals): oxfmt audit script and artifacts
miguelg719 9b3d571
fix(integrations): frame-scoped getAttribute fails with guidance
miguelg719 68c5f45
feat(evals): experiment metadata always carries tool_surface, model, …
miguelg719 f0cffe3
feat(integrations): demote raw SDK event logs to debug, drop stream d…
miguelg719 2695dd6
feat(evals): resolve the facade Browserbase session before the agent …
miguelg719 ff8a73a
feat(evals): shared readable step trace for every external harness
miguelg719 d307b1a
feat(evals): log the Browserbase session URL as the first line of eve…
miguelg719 e37d961
feat(evals): trace the agent's summary and final answer
miguelg719 8d5470b
fix(pi): keep pi's stock system prompt and default reasoning on
miguelg719 35b7a52
bench(hardbenchmark): quarantine Macy's (bot-wall), imgur (session de…
miguelg719 21c647e
fix(fx): final answer is the agent's conclusion, not its narration
miguelg719 2c22cc8
fix(evals): deterministic outcome gates, strict process score, answer…
miguelg719 1567a31
fix(sdk-ts): client-side deadline for callback batches
miguelg719 6beccf6
fix(facade): terminal browser-session-lost error instead of dead-sess…
miguelg719 6f63372
fix(evals): propagate browser_session_lost stop reason
miguelg719 813111b
fix(facade): explicit 1 h Browserbase session timeout, no keep-alive
miguelg719 ab063f5
fix(evals): only a trailing report parses without a marker
miguelg719 62c2928
feat(harnesses): request and capture model reasoning summaries
miguelg719 e264b0d
style(evals): oxfmt AUDIT-REVIEW.md
miguelg719 977e7b4
feat(eve): route non-first-party creators through the Vercel AI Gateway
miguelg719 22a0a87
fix(eve): pin a context window for gateway models missing from eve's …
miguelg719 bc85928
fix(evals): gated rows name the gate in the row error
miguelg719 98e1812
fix(evals): answer grounding is advisory by default
miguelg719 0a3ce86
feat(evals): dataset-aware step budgets (HardBench defaults to 75)
miguelg719 247e051
fix(eve): final answer and reasoning pairing
miguelg719 1d3f6ec
feat(evals): record terminationReason on persisted trajectories
miguelg719 4410556
fix(evals): persist gated outcome in scores/result.json
miguelg719 a692ce5
feat(evals): split agent vs verifier wall-clock
miguelg719 71dd3c9
feat(evals): normalized token usage across harnesses
miguelg719 63ce610
feat(evals): estimated cost from normalized usage and a versioned pri…
miguelg719 4c5c977
test(facade): deterministic layout-error retry window
miguelg719 e27975b
bench(hardbenchmark): require on-site evidence for constraint criteri…
miguelg719 2acb9ab
fix(facade): proxied + verified Browserbase sessions by default in ev…
miguelg719 c337309
test(codex-sdk): usage recovered from the CODEX_HOME rollout on budge…
miguelg719 3304ad4
fix(codex-sdk): keep token usage when the step budget aborts the turn
miguelg719 745e229
feat(evals): billed cost per row (reported, else computed at provider…
miguelg719 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,39 @@ | ||
| import type { BrowserSessionLoss } from "../contracts/tool.js"; | ||
|
|
||
| /** | ||
| * Wire strings the facade stdio server emits when its browser session is gone. | ||
| * Source of truth: packages/integrations/core/src/facade/contract.ts | ||
| * (BROWSER_SESSION_LOST_ERROR_PREFIX, SESSION_LOST_TELEMETRY_PREFIX). Mirrored | ||
| * here because evals consumes the integrations package through its built dist, | ||
| * and a facade build is allowed to lag behind the runner. | ||
| */ | ||
| export const BROWSER_SESSION_LOST_ERROR_PREFIX = "Browser session lost ("; | ||
| export const SESSION_LOST_TELEMETRY_PREFIX = "stagehand_facade_session_lost "; | ||
|
|
||
| export function isBrowserSessionLostError(message: string): boolean { | ||
| return message.startsWith(BROWSER_SESSION_LOST_ERROR_PREFIX); | ||
| } | ||
|
|
||
| /** Extracts the cause from "Browser session lost (<cause>). ..." */ | ||
| export function browserSessionLostCause(message: string): string | undefined { | ||
| if (!isBrowserSessionLostError(message)) return undefined; | ||
| return /^Browser session lost \((.*?)\)\./u.exec(message)?.[1] ?? message; | ||
| } | ||
|
|
||
| export function parseSessionLossTelemetry(line: string): BrowserSessionLoss | undefined { | ||
| if (!line.startsWith(SESSION_LOST_TELEMETRY_PREFIX)) return undefined; | ||
| try { | ||
| const parsed = JSON.parse(line.slice(SESSION_LOST_TELEMETRY_PREFIX.length)) as Record< | ||
| string, | ||
| unknown | ||
| >; | ||
| if (typeof parsed.cause !== "string") return undefined; | ||
| return { | ||
| cause: parsed.cause, | ||
| ...(typeof parsed.tool === "string" && { tool: parsed.tool }), | ||
| ...(typeof parsed.at === "string" && { at: parsed.at }), | ||
| }; | ||
| } catch { | ||
| return undefined; | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P2: When a legacy facade reports the terminal session-loss tool error only to a runner-issued request, this check never runs because the
evals-facade-*response path returns first. Parse terminal tool errors before that early return, or the runner can grade a browser-dead run as a normal agent outcome.Prompt for AI agents