What's Changed
- Fix the hosted-browser hook crash on a null answer, and two review findings (KES-720) by @chelojimenez in #6901
- feat(chat): authorize managed local ingress and own turn resources by @chelojimenez in #6909
- refactor(chat): share direct-provider streaming and policy preparation by @chelojimenez in #6910
- refactor(chat): relocate managed orchestration into focused stages by @chelojimenez in #6911
- feat(chat): prepare standalone and local capability adapters by @chelojimenez in #6912
- feat(chat): share authorized managed setup and local runtime policy by @chelojimenez in #6913
- feat(chat): route local callers through shared execution by @chelojimenez in #6914
- refactor(chat): remove the retired local chat engine by @chelojimenez in #6915
- test(sdk): measure pinned-stream backpressure with the byte cap by @nachocossio in #6867
- fix(models): report the catalog backend status as httpStatus by @nachocossio in #6868
- Move the swarm Confirm footer into its own component (PLB-108) by @nachocossio in #6864
- Title the swarm credits dialog for a run that cannot finish (PLB-108) by @nachocossio in #6863
- conformance: clean up the page for the public launch by @ZeHuari in #6917
- conformance: recover from a blocked OAuth popup by @ZeHuari in #6918
- conformance: link to the saved run and cancel one left mid-run by @ZeHuari in #6920
- conformance: time the initialize handshake, hide skipped durations by @ZeHuari in #6922
- conformance: wait 10 min for OAuth consent, expire sessions on idle by @ZeHuari in #6921
- deps: bump e2b to 2.61.0 and qs in the Claude Code vendor pack by @olartgabo in #6919
- conformance: use the negotiated version for OAuth on Auto (CQT-31) by @ignaciojimenezr in #6933
- fix(servers): approve a stdio server's command per device before spawning it by @weimar-torres-herrera in #6003
- fix(chat): stop chats dying when the model calls a tool wrong by @ignaciojimenezr in #6927
- conformance: report 2026 servers without auth as OAuth not applicable (CQT-17) by @ignaciojimenezr in #6934
- conformance: let not-applicable suites open to their checks by @ignaciojimenezr in #6937
- oauth: name the content type when protected resource metadata is not JSON (CQT-16) by @ignaciojimenezr in #6938
- Keep native approvals alive through HTTP by @chelojimenez in #6929
- Resume Claude approvals with current forwarding credentials and policy by @chelojimenez in #6930
- Deliver original Claude tool results to widgets by call ID by @chelojimenez in #6931
- fix(evals): count turns at assert steps and fix two dogfood cases by @weimar-torres-herrera in #6778
- fix(evals): link a provider-not-configured run to AI providers by @weimar-torres-herrera in #6532
- conformance: make scores match their fractions and name sign-in blocks (CQT-19) by @ZeHuari in #6943
- conformance: label the server select "Server" (CQT-27) by @ZeHuari in #6942
- fix(sdk): remove cross-tool directions from hosted descriptions by @chelojimenez in #6951
- Let a suite's judge be Required with no calibration or rollout gates by @chelojimenez in #6944
- Preserve client behavior when qualifying native Claude forwarding by @chelojimenez in #6946
- Preserve MCP profiles and authenticated App results by @chelojimenez in #6947
- fix(mcp): address OpenAI domain verification and tool metadata by @chelojimenez in #6953
- Gate modern MCP Apps in Claude Code turns by @chelojimenez in #6948
- Start ephemeral hosted browsers from saved profiles (KES-736) by @chelojimenez in #6908
- conformance: remove the View saved run button (CQT-6) by @ZeHuari in #6958
- conformance: send the saved client secret for preregistered OAuth (CQT-14) by @ignaciojimenezr in #6939
- conformance: offer every server and connect it on Run (CQT-1) by @ZeHuari in #6936
- conformance: run protocol, apps and tasks with the saved OAuth login (CQT-39) by @ignaciojimenezr in #6960
- fix(conformance): use only the saved OAuth login, drop the body-token fallback by @ignaciojimenezr in #6955
- conformance: open Overview when a run starts from History (CQT-10) by @ZeHuari in #6959
- Authorize widget actions and preserve streaming approvals by @chelojimenez in #6949
- Connect native Claude Code form elicitation to hosted prompts by @chelojimenez in #6962
- conformance: ask in a dialog when the browser blocks the sign-in window by @ignaciojimenezr in #6963
- Show every HTTP server's auth method in the Auth tab by @moisonmaxime in #6957
- conformance: stop charging a bad x-mcp-header twice (CQT-45) by @ignaciojimenezr in #6965
- Preserve acknowledgements when native MCP clients answer server requests by @chelojimenez in #6966
- fix(hosted): a backend refusal beats a request OAuth token (CQT-13) by @ignaciojimenezr in #6964
- conformance: session-termination advice accepts only 2xx or 405 by @ignaciojimenezr in #6956
- fix(evals): pair pre-created iterations by case, not prompt text by @weimar-torres-herrera in #6881
- fix(logger): keep the caller's frame on logger.error captures by @nachocossio in #6941
- fix(evals): offer Add a provider in every model picker's empty search by @weimar-torres-herrera in #6779
- fix(server): stop crashing on socket errors with a numeric code by @nachocossio in #6940
- conformance: move tool-name advice from Apps to Protocol (CQT-46) by @ignaciojimenezr in #6980
- fix(evals): accept any read of a past run in the dogfood verdict case by @chelojimenez in #6969
- conformance: setup steps, server defaults and run header by @ZeHuari in #6979
- Show the organization shelf first on Registry by @chelojimenez in #6889
- Share harness input handling and modern continuation contracts by @chelojimenez in #6967
- Keep modern MCP input inside native harness and App calls by @chelojimenez in #6970
- Preserve account identity in shared Task handles by @chelojimenez in #6971
- Keep Task requests on their saved account and wire by @chelojimenez in #6972
- Bind Task events to verified request owners by @chelojimenez in #6973
- Bind saved Task controls to the original owner and account by @chelojimenez in #6974
- Reuse form and URL consent for modern Task input by @chelojimenez in #6975
- fix(browserd): leave saved passwords, autofill and history out of browser profiles by @olartgabo in #6452
- Keep Claude Tasks bound to their creating executions by @chelojimenez in #6986
- test(harness): cover composed preflight and Task input by @chelojimenez in #6987
- fix(harness): release input waits on cancellation by @chelojimenez in #6988
- fix(harness): admit enrolled Claude clients to qualified forwarding by @chelojimenez in #6989
- fix(harness): preserve private App results outside model history by @chelojimenez in #6990
- fix(apps): honor advertised Claude host behavior by @chelojimenez in #6991
- Bind owned App resources to their original instance by @chelojimenez in #6993
- Bind Claude App resources to their producing account by @chelojimenez in #6994
- Require bound chat approvals for retained Claude App tool calls by @chelojimenez in #6995
- BB-260 (1/21): Keep the readiness credential off discovery requests by @ignaciojimenezr in #6757
- BB-260 (2/21): Keep identity refresh within current privacy permissions by @ignaciojimenezr in #6758
- BB-260 (3/21): Recognize protected-call sign-in challenges and host policies by @ignaciojimenezr in #6759
- BB-260 (4/21): Preserve protected-call challenges through transport and CLI errors by @ignaciojimenezr in #6760
- test(client): read the rewound URL where the branch drops it by @chelojimenez in #6682
- Move forwarding continuation behind a runtime adapter contract by @chelojimenez in #6997
- feat(harness): add Codex forwarding and bound App continuations by @chelojimenez in #7001
- fix(codex): wait for MCP inventory before model turns by @chelojimenez in #7002
- feat(cli,sdk): choose the MCPJam server by one order by @chelojimenez in #6998
- feat(cli,sdk): honor the IT settings file and its lock by @chelojimenez in #6999
- feat(cli): work behind a corporate proxy on Node 22 by @chelojimenez in #7000
- fix(cli): keep NO_PROXY=* and capitalized proxy URLs working, and qualify the proxy docs by @chelojimenez in #7025
- conformance: clearer Tasks warning for the extension on 2025-11-25 (CQT-49) by @ignaciojimenezr in #6985
- conformance: score the Tasks integer TTL check (CQT-51) by @ignaciojimenezr in #7020
- conformance: drop the Tasks resultType fallback warning (CQT-50) by @ignaciojimenezr in #7019
- conformance: act on the staging feedback by @ZeHuari in #7028
- Tasks conformance: score tasks-update-ack-shape, trimmed to the spec MUST by @ignaciojimenezr in #7021
- conformance: let a server's OAuth checks be left out of the score by @ZeHuari in #7029
- conformance: report Tasks statusMessage and unknown-id SHOULDs as advice (CQT-65) by @ignaciojimenezr in #7032
- conformance: remove Metadata Quality and Resource Error URI advice (CQT-66) by @ignaciojimenezr in #7034
- conformance: score the 11 pending checks the spec states as MUSTs (CQT-64) by @ignaciojimenezr in #7031
- conformance: tool inputs for the 2026-07-28 checks in step 2 by @ZeHuari in #7027
- Read the client address only from MCPJAM_TRUSTED_CLIENT_IP_HEADER when it is set by @chelojimenez in #7026
- fix(sdk): keep window.openai runtime replies away from MCP Apps widgets (PLB-432) by @nachocossio in #6977
- fix(clients): drop localBrowserEnabled from a read-back config on write by @nachocossio in #6983
- fix(swarms): stop setup from blocking targets on the model's report by @nachocossio in #6978
- projects: send the viewer's theme when the browser creates a project by @nachocossio in #6429
- BB-260 (5/21): Expose client sign-in policy and host compatibility by @ignaciojimenezr in #6761
- BB-260 (6/21): Grade optional OAuth from valid resource metadata by @ignaciojimenezr in #6762
- BB-260 (7/21): Probe protected tools without sending saved credentials by @ignaciojimenezr in #6763
- BB-260 (8/21): Grade Claude lazy authentication from protected-call evidence by @ignaciojimenezr in #6764
- BB-260 (9/21): Grade OpenAI protected-call authentication evidence by @ignaciojimenezr in #6765
- BB-260 (10/21): Carry lazy-auth probes through CLI and hosted readiness by @ignaciojimenezr in #6766
- BB-260 (11/21): Expose protected-call sign-in errors across Inspector APIs by @ignaciojimenezr in #6767
- BB-260 (12/21): Report sign-in requirements in headless suites and evals by @ignaciojimenezr in #6768
- BB-260 (13/21): Bind sign-in continuations to their original call and credential by @ignaciojimenezr in #6769
- BB-260 (14/21): Recover protected chat calls after sign-in by @ignaciojimenezr in #6770
- conformance: log level filtering as 0-point advice, and pick each suite's advice in step 2 by @ignaciojimenezr in #7030
- BB-260 (8/21 fix): Grade a 2xx step-up refusal as a missing challenge by @chelojimenez in #7045
- Show startup progress for hosted agent turns by @chelojimenez in #7036
- Restore owned App rendering when the current catalog is missing metadata by @chelojimenez in #7035
- KES-750 (I1): Show the organization's decision model row and Test reasons by @chelojimenez in #7018
- fix: mark absent Apps surface as not applicable (CQT-20) by @ignaciojimenezr in #7046
- conformance: always open the Share dialog, drop its share flag by @ignaciojimenezr in #7033
- conformance: pick the Tasks tool, its arguments and input answers in the app by @ignaciojimenezr in #7039
- conformance: one advice container above the suites (CQT-81) by @ZeHuari in #7049
- conformance: score the tool output check, with a step 2 tool field (CQT-67) by @ignaciojimenezr in #7038
- conformance: remove Tasks warnings no spec rule backs (CQT-82) by @ignaciojimenezr in #7048
- conformance: remove Useful Cache TTLs and Parse Error Handling advice (CQT-84) by @ignaciojimenezr in #7052
- conformance: fail -32021 rules the spec states as MUSTs (CQT-83) by @ignaciojimenezr in #7050
- Reuse broker-acknowledged sandbox preparation by @chelojimenez in #7044
- conformance: score is the share of checks passed, one decimal (CQT-85) by @ignaciojimenezr in #7054
- conformance: report timeouts per check (CQT-80) by @ZeHuari in #7053
- BB-260 (15/21): Persist sign-in recovery by call identity by @ignaciojimenezr in #6771
- Keep the Browser Panel open once the browser connects by @chelojimenez in #7051
- BB-260 (16/21): Bind each OAuth attempt to its pending call by @ignaciojimenezr in #6772
- BB-260 (17/21): Share sign-in card and callback lifecycle across surfaces by @ignaciojimenezr in #6773
- conformance: Apps ui/resourceUri as a Deprecation Notice; OAuth iss as SHOULD (CQT-86) by @ignaciojimenezr in #7055
- fix(chat): stop paging on the guest input cap's 413 refusal by @nachocossio in #7040
- conformance: UI nits (CQT-87, CQT-98, CQT-102) by @ZeHuari in #7057
- fix(evals): answer eval_step fee refusals at precreate with 403, not 500 by @nachocossio in #7037
- fix(client): show conformance explanations before errors by @ignaciojimenezr in #7058
- conformance: Run again and Settings on a saved run (CQT-90, CQT-100) by @ZeHuari in #7065
- cli: add --advice-id to pick which conformance advice runs by @ignaciojimenezr in #7062
- fix(client): wait for project settings before loading tasks by @ignaciojimenezr in #7067
- fix(conformance): keep advice on saved and shared runs by @ignaciojimenezr in #7069
- fix(conformance): leave missing inputs unscored (CQT-111) by @ignaciojimenezr in #7068
- fix(client): show missing conformance tool inputs (CQT-111) by @ignaciojimenezr in #7061
- conformance: share setup inputs with Settings and Convex defaults (CQT-116) by @ignaciojimenezr in #7071
- fix(conformance): check selected protocol before running (CQT-110) by @ignaciojimenezr in #7073
- fix(client): clarify deprecated feature advice label by @ignaciojimenezr in #7072
- fix(client): collapse conformance debug details by @ignaciojimenezr in #7077
- fix(conformance): use one protocol version per run (CQT-108) by @ignaciojimenezr in #7075
- fix(client): match saved conformance checks to the live design (CQT-106) by @ignaciojimenezr in #7076
- fix(oauth): skip DCR checks for pre-registered clients by @ignaciojimenezr in #7078
- conformance: finish hosted OAuth runs across replicas (CQT-47) by @ignaciojimenezr in #6981
- conformance: optional input badges and version toast (CQT-117) by @ZeHuari in #7074
- fix(oauth): stop reporting DCR refusals as MCPJam errors by @weimar-torres-herrera in #6859
- conformance: name the server in errors, and UI nits (CQT-109, CQT-101, CQT-93) by @ZeHuari in #7070
- fix(conformance): restore saved server Overview (CQT-92, CQT-105) by @ignaciojimenezr in #7079
- deps: bump re2js to 2.8.7 to fix lookbehind DoS (Dependabot #1074, #1082) by @olartgabo in #7059
- Keep the browser on a run that already booked its desktop when the verdict goes stale (KES-720) by @olartgabo in #6924
- deps: patch @hono/node-server and glob Dependabot alerts by @olartgabo in #7084
- sdk: redact x-api-key style URL params in shared reports (PLB-455) by @ZeHuari in #7080
- BB-260 (18/21): Restore Tools, Resources and Prompts after sign-in by @ignaciojimenezr in #6774
- BB-260 (19/21): Keep Playground tool inputs and results through sign-in by @ignaciojimenezr in #6775
- fix(client): remove permission groups placeholder by @chelojimenez in #7094
- feat(conformance): per-check Tasks tool settings (CQT-118) by @ignaciojimenezr in #7087
- BB-260 (20/21): Restore waiting chat calls without duplicate recovery by @ignaciojimenezr in #6776
- Default conformance runs to 300 seconds with saved overrides by @ignaciojimenezr in #7089
- fix(client): keep tester OAuth challenges out of sign-in recovery by @chelojimenez in #7097
- conformance: Swarm header on run pages, New badge, one incomplete reason, Suggested deprecation label (CQT-124, CQT-120, CQT-125) by @ZeHuari in #7093
- fix(conformance): checks that need a setup tool don't make a run incomplete by @ignaciojimenezr in #7096
- feat(conformance): every check that needs a tool shows its own dropdown (CQT-123) by @ignaciojimenezr in #7100
- fix(conformance): plain text when the Tasks tool creates no task (CQT-121) by @ignaciojimenezr in #7099
- fix(client): polish conformance home, history, and score card by @vigneshgopalandd-maker in #7098
- conformance: shade the output schema check when no tool declares an output schema by @ignaciojimenezr in #7102
- feat(host-config): add a per-client model-context policy for plugin Apps by @chelojimenez in #6563
- fix(plugins): make App context refusals recoverable and typed by @chelojimenez in #6610
- refactor(plugins): admit new App context against limits, re-read against ceilings by @chelojimenez in #6622
- feat(plugins): store App context up to the policy ceiling by @chelojimenez in #6636
- feat(plugins): let the client's model-context policy decide App context by @chelojimenez in #6637
- BB-260 (21/21): Restore comparison chats after sign-in and document recovery by @ignaciojimenezr in #6777
- fix: run Ask MCPJam on organization default models by @chelojimenez in #7103
- Name why a self-hosted app is stuck loading in its Sentry reports by @chelojimenez in #7109
- fix(docker): run the launcher as the container's main process by @chelojimenez in #6666
- fix(server): give the launcher and server one shutdown timeline by @chelojimenez in #6667
- refactor(server): move the claim loops out of the server entry by @chelojimenez in #6668
- fix(server): stop every claim loop at once on shutdown by @chelojimenez in #6669
- Show contract credits and preserve swarm provider routing by @chelojimenez in #7107
- fix(client): show suite scores on conformance home cards by @vigneshgopalandd-maker in #7105
- Desktop: trust the OS certificate store so the app loads behind HTTPS-inspecting networks by @chelojimenez in #7111
- fix(org-settings): state the effective AI keys, billing and search policy (QA-01, QA-04, QA-27) by @prathmeshpatel in #7114
- Hide the tool approval row on caniuse.dev by @chelojimenez in #7112
- feat(server): add a bounded drain coordinator for shutdown by @chelojimenez in #6670
- feat(server): drain accepted work for a bounded time before teardown by @chelojimenez in #6671
- Avoid redundant reservations before brokered harness turns by @chelojimenez in #7063
- Prepare hosted chats with fewer backend round trips by @chelojimenez in #7064
- Use saved client connection pins consistently for chat and Apps by @chelojimenez in #7066
- refactor(evals): detach v1 eval runs through the shared helper by @chelojimenez in #6674
- feat(server): refuse new eval launches while the server drains by @chelojimenez in #6675
- feat(server): drain detached eval runs and quick runs on shutdown by @chelojimenez in #6677
- feat(server): drain swarm runs and doorbell passes on shutdown by @chelojimenez in #6678
- fix(server): let the drain wait for claims answered after the stop by @chelojimenez in #6683
- clients: keep models on the org provider under strict BYOK (QA-25, QA-26) by @prathmeshpatel in #7115
- feat(server): run the claim loops in their own worker deployment by @chelojimenez in #6684
- feat(sdk): share reviewed provider model names (STI-244) by @chelojimenez in #7116
- fix(conformance): tidy the tool dropdowns by @ignaciojimenezr in #7108
- feat(conformance): fill a tool's arguments with a form from its input schema (CQT-123) by @ignaciojimenezr in #7120
- evals: save every org picker model with its org connection (QA-18, QA-20) by @prathmeshpatel in #7117
- fix(apps): refuse an ordinary App's context the next turn can't carry by @chelojimenez in #6639
- feat(sdk): give the ChatGPT seed its App context budgets by @chelojimenez in #6640
- BB-260 follow-ups: review fixes for sign-in, readiness and comparison recovery by @chelojimenez in #7118
- studies: repair blocked models and explain the tester block (STI-248) by @chelojimenez in #7135
- fix(swarms): save approved model replacements on Run again by @chelojimenez in #7136
- fix(swarms): explain session report failures in Findings by @chelojimenez in #7137
- fix(client): simplify organization BYOK setup by @chelojimenez in #7095
- fix(oauth): answer 502/504 when the server under test is unreachable by @weimar-torres-herrera in #7056
- sdk: redact credentials in the first field of a hash-route fragment by @nachocossio in #7139
- fix(evals): retry busy spend admission on hosted eval model steps by @nachocossio in #7083
- fix(chat): refuse unreadable client history with a 400 by @nachocossio in #7085
- chore(release): version packages (3.19.0) by @chelojimenez in #6935
- fix(evals): alias MCP tool names that providers reject by @nachocossio in #7145
- fix(release): repair the SDK smoke pin and stop permitting Codex pack 1.0.2 by @chelojimenez in #7179
Full Changelog: v3.18.0...v3.19.0