What's Changed
- fix(conformance): failed and could-not-run rows open like not-applicable rows (CQT-126) by @ignaciojimenezr in #7121
- test(hosted): settle the scenario OAuth gate before reporting a 401 by @chelojimenez in #7181
- fix(harness): support Embed routing and patch sandbox dependencies by @chelojimenez in #7180
- test(cli): retry sandbox cleanup so the proxy test stops failing with ENOTEMPTY (PP-226) by @ignaciojimenezr in #7183
- cli: name the tools more conformance checks call by @ignaciojimenezr in #7184
- feat(billing): say when a declined card stopped a run or chat (PLB-396 C2) by @ozboms in #7101
- cli: run the OAuth negative checks by default by @ignaciojimenezr in #7191
- cli: pin the protocol version for tasks conformance by @ignaciojimenezr in #7185
- feat(conformance): search, filter and sort History by server (CQT-113) by @ZeHuari in #7177
- fix(cli): require Node 22 and move the CI examples to it by @moisonmaxime in #6838
- MCP Events (triggers): SDK, inspector server, Events/Triggers tabs, CLI by @chelojimenez in #5764
- cli: conformance run takes the same settings as each suite command by @ignaciojimenezr in #7198
- fix(chat): replay a paused call after sign-in on a single-login server by @ignaciojimenezr in #7203
- refactor(evals): give the unified turn the direct contract evals need by @chelojimenez in #6656
- refactor(evals): run hosted eval turns through the unified turn by @chelojimenez in #6657
- refactor(evals): translate the eval stream one part at a time by @chelojimenez in #6658
- refactor(evals): run local eval turns through the unified turn by @chelojimenez in #6659
- test(evals): fail CI when server code starts a turn past the facade by @chelojimenez in #6660
- fix(swarms): only report run completion the backend has settled by @chelojimenez in #6647
- feat(sdk): export one definition of eval run and iteration lifecycle by @chelojimenez in #6648
- refactor(evals): read run and iteration lifecycle from the SDK by @chelojimenez in #6649
- fix(conformance): ask for OAuth sign-in at the top of the run (CQT-97) by @ZeHuari in #7176
- refactor(client): read eval run terminality from the SDK contract by @chelojimenez in #6650
- fix(conformance): drop repeated counts from the score card's gray line (CQT-133) by @ignaciojimenezr in #7205
- refactor(evals): share the agent cancelEvalRun handler between tabs by @chelojimenez in #6651
- fix(evals): let the in-app agent cancel a run held for its judge by @chelojimenez in #6652
- fix(swarms): run on the execution budgets frozen at launch by @chelojimenez in #6655
- Keep proxy tool calls attached to their active chat turn by @chelojimenez in #7186
- Confirm native MCP readiness before continuing an agent by @chelojimenez in #7187
- Bind warm-agent approvals to the authorized account by @chelojimenez in #7188
- Retain native chat agents behind the internal pilot gate by @chelojimenez in #7189
- Enable hosted warm-agent reuse by default by @chelojimenez in #7210
- Make eval retries idempotent and capacity refusals retryable by @chelojimenez in #7213
- test(swarms): pin when the journey run stream reopens by @chelojimenez in #7182
- events: subscribe and run as a client's saved Events support by @chelojimenez in #7211
- fix(evals): keep the status of a failed Convex read in Sentry (KES-781) by @nachocossio in #7091
- fix(browserd): wait 60s for a new box's first Chromium launch (KES-720) by @chelojimenez in #7226
- harness: resolve the MCP route in one planner by @chelojimenez in #7217
- test(harness): adapter contract suite and pin-change gate by @chelojimenez in #7218
- test(e2e): stop the OAuth layout test matching "503" in a port (PLB-477) by @ignaciojimenezr in #7228
- fix(chat): lazy sign-in follow-ups from QA (per-login reconnect, copy) by @ignaciojimenezr in #7243
- events: caniuse reads saved Event delivery; sync the SDK catalog by @chelojimenez in #7215
- conformance: share a run as a score card, drawn in-house by @chelojimenez in #7245
- conformance: unfurl a shared run's link as its score card by @chelojimenez in #7246
- Extract the paginated tool declaration lookup by @chelojimenez in #7147
- Align compatible plugin imports and manifest identities by @chelojimenez in #7148
- Complete owned forms and retain input across App surfaces by @chelojimenez in #7149
- fix(conformance): send a saved run's Back to the tab it was opened from (CQT-134) by @ignaciojimenezr in #7241
- fix(conformance): drop "Fully conformant"; passed runs read "Conformant" (CQT-142) by @ignaciojimenezr in #7240
- Bound App file transfer and preserve owned resource cleanup by @chelojimenez in #7150
- Bind retained App tools and file views to their current owner by @chelojimenez in #7151
- Show native tool sources and included plugin catalogs by @chelojimenez in #7152
- Honor manual form capabilities and preserve client configuration by @chelojimenez in #7153
- Bind CLI rendering to the saved project target by @chelojimenez in #7154
- chore: add Inspector, CLI, and SDK release changeset by @ignaciojimenezr in #7250
- fix(evals): connect background eval runs to Cross-App Access servers by @chelojimenez in #7216
- Move Apps conformance configuration into its own module by @chelojimenez in #7155
- Scope retained CLI widgets to fresh authenticated connections by @chelojimenez in #7156
- Keep automatic plugins optional during authenticated command approval by @chelojimenez in #7157
- Keep fullscreen-only Apps dismissible without replay by @chelojimenez in #7158
- Honor Computer placement policy and authenticated delegation by @chelojimenez in #7159
- Restore focus when owned forms finish by @chelojimenez in #7160
- Keep Compare App state and pending input scoped to each lane by @chelojimenez in #7161
- Extract managed turn failure response mapping by @chelojimenez in #7162
- Recover completed chat persistence without replaying execution by @chelojimenez in #7163
- Fix macOS harness conformance evidence and listener probing by @chelojimenez in #7252
- Keep sign-in available after guest startup fails by @chelojimenez in #7256
- fix(conformance): name CLI runs by their URL in History, and say when a run can't be saved (CQT-147) by @chelojimenez in #7255
- fix(conformance): valid JUnit from conformance run, and no false Wire Schema Valid failure without a pinned version (CQT-146) by @chelojimenez in #7254
- Let hosted egress reach operator-listed private targets by @chelojimenez in #7013
- Honor DO_NOT_TRACK everywhere and read flags from a file by @chelojimenez in #7014
- Serve the MCP Apps sandbox origin at runtime by @chelojimenez in #7015
- Let operators turn the MCPJam agent off with MCPJAM_PLATFORM_AGENT by @chelojimenez in #7016
- Recover harness credentials after backend startup outages by @chelojimenez in #7200
- Add hosted OpenCode as a private Playground harness by @chelojimenez in #7258
- Add GitHub Copilot CLI to the hosted Playground by @chelojimenez in #7261
- feat(telemetry): one conformance_run_triggered event for every conformance run (CQT-128) by @ignaciojimenezr in #7244
- evals: send each eval turn's MCP routing record with its trace (HARN-33) by @chelojimenez in #7262
- Request a private BYOC candidate after Inspector releases by @chelojimenez in #7265
- feat(conformance): skip checks that need input, and show "40/42 checks selected" (CQT-141) by @ignaciojimenezr in #7209
- fix(auth): open signed out with sign-in when guest access is refused (KES-803) by @moisonmaxime in #7242
- Fix hosted OpenCode approval controls and branding by @chelojimenez in #7272
- Compare: resolve each column's model through its own harness (HARN-54, 1/6) by @chelojimenez in #7273
- Compare: give each pane a stable id (HARN-54, 2/6) by @chelojimenez in #7275
- Compare: restore each pane after tool sign-in (HARN-54, 3/6) by @chelojimenez in #7276
- Compare: settings for each client pane (HARN-54, 4/6) by @chelojimenez in #7279
- Compare: run a saved environment in a pane (HARN-54, 5/6) by @chelojimenez in #7285
- Compare: show the skills available to each pane (HARN-54, 6/6) by @chelojimenez in #7280
- feat(server): open workspace localhost apps in the hosted browser, and explain when Browser is missing (HARN-27) by @chelojimenez in #7253
- feat(server): reach workspace computers that are closed to the internet by @chelojimenez in #7259
- feat(server): pair a desktop with a pinned box for unattended Browser (HARN-48) by @chelojimenez in #7260
- Fix hosted harness Stop and trace identity after approvals by @chelojimenez in #7274
- feat(server): send pasted images as native Codex prompt input by @chelojimenez in #7266
- feat(server): pin image-capable harness adapters and HOME bake layout by @chelojimenez in #7269
- feat(server): send pasted images as native Claude Code prompt input by @chelojimenez in #7270
- feat(server): send pasted images as native Cursor CLI prompt input by @chelojimenez in #7271
- fix(conformance): color could-not-run checks by who is to blame by @ignaciojimenezr in #7268
- cli: conformance run signs in for OAuth the way oauth conformance does (CQT-149) by @ignaciojimenezr in #7299
- feat(oauth): say which callback URL to allow when OAuth sign-in never comes back (BB-380) by @ignaciojimenezr in #7298
- fix(chat): help BYOC owners repair model setup by @chelojimenez in #7305
- feat(server): always send native images to harnesses that accept them by @chelojimenez in #7307
- Keep private sandbox credentials out of app and harness requests by @chelojimenez in #7302
- Move the SDK's conformance operations into their own modules by @chelojimenez in #7277
- Share conformance check selection and SDK mapping between the app and the server by @chelojimenez in #7278
- Run hosted conformance with a server's saved settings, a time budget and cancel by @chelojimenez in #7282
- Serve hosted conformance runs on MCP and the CLI, and read them check by check by @chelojimenez in #7283
- Record who launched a hosted conformance run by @chelojimenez in #7284
- conformance: say connected only once the protocol check passes (CQT-150) by @ignaciojimenezr in #7306
- fix(conformance): drop duplicate breadcrumb from run setup by @ignaciojimenezr in #7312
- perf(harness): reduce warm startup and pre-send work by @chelojimenez in #7267
- perf(harness): overlap turn prep, send without a redundant read, time each stage by @chelojimenez in #7281
- fix(conformance): drop Overview/History tabs from a run's header (CQT-132) by @ignaciojimenezr in #7315
- Show an off conformance check's tool field while its row is open (CQT-152) by @ignaciojimenezr in #7311
- fix(harness): keep the turn timing fields in production log rows by @chelojimenez in #7320
- Show live conversation sandbox frames in the Browser pane by @chelojimenez in #7321
- conformance: record a timed-out hosted suite as timed out (CQT-151) by @ignaciojimenezr in #7309
- chore: add Inspector, CLI, and SDK release changeset by @ignaciojimenezr in #7322
- Fall back to JPEG when browser video never starts by @chelojimenez in #7323
- conformance: hosted runs pick their suites the way the app does (CQT-153) by @ignaciojimenezr in #7317
- chore(release): version packages (3.20.0) by @chelojimenez in #7193
- harness: run Cursor turns on the org key, checked before any box (HARN-33 · I4a) by @chelojimenez in #7286
- conformance: QA UI fixes (CQT-127, CQT-138, CQT-130) by @ZeHuari in #7338
- harness: delete the per-member Cursor key arms (HARN-33 · I4b) by @chelojimenez in #7287
- harness: stop asking members for a Cursor key (HARN-33 · I5) by @chelojimenez in #7288
- conformance: move the run timeout from setup to Settings (CQT-135) by @ZeHuari in #7339
- Fix custom connections in the built-in agent loop (KES-831 I3) by @chelojimenez in #7329
- evals: accept an org's Cursor key in the own-key run sheet check (HARN-33 · I14) by @chelojimenez in #7289
- evals: run Cursor eval cases on their box and harness turn (HARN-33 · I15) by @chelojimenez in #7290
- Support Cursor account models across client pickers and runtime admission by @chelojimenez in #7325
- Enable Cursor Apps with single-use host tool approvals by @chelojimenez in #7327
- harness: admit org keys by the API a connection serves (KES-831 I2a) by @chelojimenez in #7330
- fix(inspector): restore server version and Overview after a page reload by @chelojimenez in #7343
- harness: check the Cursor bridge launches from its install directory (HARN-33 · I1) by @chelojimenez in #7292
- Extract shared organization provider controls by @chelojimenez in #7314
- Add organization Cursor key setup and model refresh by @chelojimenez in #7316
- Accept agents that register through auth.md by @chelojimenez in #7342
- Stop detached harness processes after failed approval pauses by @chelojimenez in #7313
- fix(evals): log and alert when an eval can't read an MCP App's page (KES-841) by @ignaciojimenezr in #7344
- harness: keep Cursor's MCP config stable for the whole session (HARN-33 · I9a) by @chelojimenez in #7293
- Show refused models with reasons; test gateways from the Inspector (KES-831 I1a) by @chelojimenez in #7333
- Add a gateway from its base URL and key (KES-831 I1) by @chelojimenez in #7334
- Run harness clients on organization gateways (KES-831 I2b) by @chelojimenez in #7335
- harness: forward Cursor CLI turns on pass-through without a lease (HARN-33 · I9b) by @chelojimenez in #7294
- harness: bind Cursor CLI approvals to the request they approve (HARN-33 · I8a) by @chelojimenez in #7295
- sdk: seed Cursor CLI without the pins that block pass-through (HARN-33 · I13) by @chelojimenez in #7296
- sdk: negotiate the Cursor CLI client's protocol as the CLI does (HARN-33 · I16) by @chelojimenez in #7297
- fix(conformance): keep Starting on the card while its run connects the server (CQT-154) by @ignaciojimenezr in #7345
- fix(sdk): report a -32022 version refusal as unsupported, not as HTTP 400/405 (CQT-156) by @ignaciojimenezr in #7346
- fix(conformance): show a blocked OAuth sign-in window in the dialog only (CQT-157) by @ignaciojimenezr in #7350
- fix(conformance): stack a run header's actions on a narrow window (CQT-155) by @ignaciojimenezr in #7349
- fix(conformance): one line for a suite that doesn't apply, live and saved (CQT-158) by @ignaciojimenezr in #7351
- Hide the Tasks update check behind a flag (CQT-159) by @ignaciojimenezr in #7354
- ci: replace the staging-canary Ask MCPJam gate with a hermetic smoke by @chelojimenez in #7352
- conformance: fill share card bars green when every scored check passes by @ignaciojimenezr in #7358
- conformance: name the server on a shared run's page by @ZeHuari in #7357
Full Changelog: v3.19.0...v3.20.0