Skip to content

⛴️ chore: Bring Canary Up to Date With Dev - #16457

Merged
danny-avila merged 68 commits into
canaryfrom
lia/refresh-canary-from-dev
Oct 1, 2026
Merged

danny-avila merged 68 commits into
canaryfrom
lia/refresh-canary-from-dev

Conversation

@lia-by-librechat

@lia-by-librechat lia-by-librechat Bot commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

Summary

This PR joins current canary ef1aa668126d1d7604519d21aa31b098bb24407d and dev e8f3be08623663d4ad7f7241e693c94469b63bb0 without rebasing, squashing, forcing refs or moving either base branch. Both tips are ancestors of the current PR head, f66ad88e1c29836c2b7d580f8931872b5e8f8bef.

How It Works

  • Includes the latest dev dependency audit/agents SDK 4.0.1 update, paused in-process LibreOffice previews, and security-release package/Helm bumps. These three commits merged cleanly.

  • Preserves canary's composer/palette, theme control and label roles, forced-temporary ephemeral retention, in-thread steering, command output/verdicts and MCP Apps alongside dev's fixes and release tooling. The callback test conflict retains the real identity, timing and executor helpers, not just one branch's mock exports.

  • Reconciles earlier timing/verdict, approval, theme validation/tenant isolation, and imported approval/reader-state paths. Focused coverage remains in place for those integration boundaries.

  • Fixes a reproducible agent-picker bug: the select owns its popover, so combobox resetValueOnHide alone did not clear the controlled search. Closing the select now resets the search and reopening lists the full configured cap while keeping the selected agent. The new regression failed on the preceding implementation and passes after the fix.

  • The large Mermaid export test now waits for durable generation completion before opening a rendered preview. Its failed trace showed the expected streaming Code tab, not a missing completed graph. SVG/PNG validation, dimensions/pixel caps, five repeated exports, and no-browser-crash assertions are unchanged. No performance threshold or export assertion is weakened.

Type of Change

  • Branch synchronization
  • Merge integration, UI bug fix and regression tests

Verification

  • Exact published and reviewed head: f66ad88e1c29836c2b7d580f8931872b5e8f8bef. At 2026-10-01 03:00 UTC, all 41 CI checks passed, with no failures or pending checks. This includes the formerly failing agent-picker and large Mermaid-export browser scenarios, both TypeScript gates, static checks, Lighthouse, MCP Apps, runtime smoke and browser shards.
  • Fresh merged-lockfile installation and all four shared builds passed locally with agents SDK 4.0.1. All five local no-emit checks passed: data-provider, data-schemas, API, shared-client and client app. A passing build was not substituted for typechecking.
  • 212 focused local assertions passed: 191 preview/HTML/command tests and 21 selector/badge tests. Five LibreOffice-present integration cases were skipped because the binary is unavailable. PR-wide Prettier, import order and manifest validation passed across 287 affected files. Earlier focused theme/tenant, approval, callback, retention/import and Mermaid regression coverage remains in the sync history and was validated by current-head CI.
  • Independent bounded source review is complete with no verified findings at this exact head. It read all 287 patches and final-head integration source, and verified all three ledger fixes: SYNC-T1 callback mock, OCT1-A1 controlled search reset, OCT1-E1 completed Mermaid export scenario. No verified findings were rejected or left open. Earlier incomplete reviews are not treated as clean.
  • Review limitations: the reviewer inspected CI but did not independently execute tests, inspect the published SDK artifact, or prove Git ancestry. Parent read-only Git checks confirm both current branch tips are ancestors and the merge-base equals current canary ef1aa668126d1d7604519d21aa31b098bb24407d. Full browser/Lighthouse checks ran in GitHub CI, not locally; no Chrome/Chromium is installed in the worker. Mixed-version deployments and LibreOffice-present runtime scenarios were not independently reproduced. No GitHub maintainer approval is recorded.
  • The worktree is clean. Canary, dev and main have not been promoted or modified by this task; no deployment, environment or protection configuration was performed.

Landing

Keep this PR targeted at canary. After exact-head checks and review settle, prefer a non-forced fast-forward of canary to the approved head. The sync branch contains the required integration merges, so this adds no extra outer merge commit. If branch protection requires the GitHub merge UI, use Create a merge commit, never squash or rebase. If either base advances, refresh and validate again before landing. No main/dev promotion or deployment is included.

berry-13 and others added 8 commits September 28, 2026 12:28
* 🥤 fix: Keep Pending Code Steers Within the Composer

* 🧪 test: Keep Pending Code Steer Preview Controls Visible

* 🧪 test: Prove Pending Code Starts Inside the Composer

---------

Co-authored-by: Lia <lia@librechat.ai>
Co-authored-by: Lia <lia@librechat.ai>
Route modules build their rate limiters while they load, and both server
entries required them before startup checks copied rateLimits from
librechat.yaml into the environment. The conversationsImport, tts, stt
and route-scoped fileUploads budgets therefore ignored the yaml unless
the matching environment variable was also set. Require the routes only
after performStartupChecks in index.js and experimental.js.
…16439)

* 🔒 fix: Guard 2FA Deep-Link Redirects Against Blocked Session Storage

The post-login redirect store was the one session-storage consumer in the
client that reached for it bare-handed: a context where storage access
throws crashed the login screen's persist effect and the post-challenge
boot instead of dropping the destination. Route every access through
throwing-safe helpers so a blocked store costs the deep link, never the
sign-in, and pin the ordinary 2FA challenge's deep-link survival and
consumption with mock-harness scenarios plus blocked-storage unit tests.
The challenge screen's code inputs also gain accessible names.

* ♿ fix: Name the 2FA Verify Button by Its Visible Text

The challenge submit button carried aria-label 'Continue' over the visible
text 'Verify', so its accessible name did not contain the visible label
(WCAG 2.5.3). The visible text names the button on its own; the label is
dropped.

* 🧪 test: Keep the 2FA Mock Harness From Re-Declaring Destinations

The shell's authenticated queries 401 against the real backend under the
stand-in bearer, and the auth-recovery login bounce carries the current URL
as redirect_to, re-persisting the deep link mid-test. Answer those queries
empty and leave /api/config real.

* 🧪 test: Answer the Shell's Empty Shapes in the 2FA Deep-Link Harness

The composer and its selectors iterate their query results, so the stand-in
session's shell queries need per-endpoint empty payloads rather than a
blank object; the destination's marker rides the query string so no
conversation has to exist for the landing to hold; and the second sign-in
declares its own destination, which is the deterministic form of
consumption-across-sign-ins.

* 🧪 test: Assert the 2FA Shell Across Viewports

The account button hides in the mobile drawer and the drawer never
satisfies a pointer click's stability check, so the shell assertion polls
for whichever marker the viewport shows and the session ends through an
in-page logout request, which the route mocks can actually see.

* 🧪 test: Locate the Login Password Field by Label

* 🧪 test: Let the CI Storage Polyfill Replace the Blocked Store

The CI-mode build ships a storage polyfill that answers a broken
sessionStorage by installing its own in-memory shim with
defineProperty, which crashed against a non-configurable blocker and
took the app boot with it. The blocker stays configurable: the shim is
per-document, so the challenge's document swap still empties it and the
landing contract is the same either way.
@lia-by-librechat

Copy link
Copy Markdown
Contributor Author

Review handoff for exact head ffa54e0259bd0a7e180f33e1619cc3fbc3408edd: merges canary 9ac96c5ca945 with dev 71398aef6275 as the two commit parents. Conflict resolution retains canary's new composer and same-origin redirects while adding dev's blocked-storage handling, accepted-send draft cleanup and YAML rate-limit fixture. Dev's removed old steer component is not reintroduced because the active in-thread steer view already caps its width. Clean-install CI is underway. The local shared node_modules overlay is incomplete, so Jest/TypeScript/lint need CI or an intact local install before claiming pass. Do not squash or rebase; leave canary untouched while the PR is reviewed.

@lia-by-librechat

Copy link
Copy Markdown
Contributor Author

Review handoff for exact head e20558b73635603bfe73c9215bd9cef681556fdd: the dev-to-canary merge keeps canary's redesigned composer and safe redirects. This follow-up resolves two confirmed CI failures on the preceding head: class order in two affected client files, and duplicate root rateLimits in the E2E fixture that disabled the MCP Apps quota phase. The actual quota Playwright config now parses with a single rateLimits root containing both speech limits and MCP App limits; Apps policy is enabled. Scoped Prettier, import sorting and ESLint pass locally. CI is restarting on this SHA; do not use checks from ffa54e025 to approve this head. Leave canary untouched until review and exact-head CI are assessed.

@lia-by-librechat

Copy link
Copy Markdown
Contributor Author

Review handoff for exact head d8b9371ad96059635fb527ce1c0544e6b410ca2a: the prior head passed clean-install TypeScript, static checks and Lighthouse. Its Redis E2E shard failed two new code-steer layout tests that still assumed the composer overlay removed by canary. The latest commit measures the actual in-thread SteerPart across pending-to-applied handoff at desktop/mobile sizes, checking bubble bounds and horizontally scrollable code without assuming the optional Show More preference is enabled. Source-only local Playwright discovery, ESLint and Prettier passed; browser shards are restarting for this SHA. The preceding head also had an MCP App popup timeout after a click despite passing policy and rendering assertions. That separate check remains under review, not claimed fixed here. Neither dev nor canary has moved or been rebased; please review this exact head.

danny-avila and others added 5 commits September 28, 2026 15:35
Sonnet 5.5 (`claude-sonnet-5-5`) rejects `thinking.type: disabled` and takes
`between_tools` as its lowest thinking setting, binds thinking blocks to the
conversation prefix, caps effort at `high` while thinking is off, rejects
sampling parameters, supports the `updates` thinking display, and ships with
128k output / 1M context at Sonnet 5 pricing.

Family gates in data-provider now use "5.5 or later" semantics so Opus 5.6+,
Sonnet 5.6+ and the Mythos-class line (Fable) inherit the newest contract
instead of falling back to the Opus 5 / Sonnet 5 paths.
… Starts (#16453)

* 🔁 fix: Retry Code API Rate Limits That Reject Before a Workspace Call Starts

* 🔁 fix: Bound Workspace Rate Limit Retries by Code API Budget

* 🔗 fix: Isolate Code API Retry Default from Utility Graph

* 🧩 fix: Type the Shared Code API Retry Default

* 🔁 fix: Keep Workspace Admission Retry Budgets Independent

---------

Co-authored-by: Lia <lia@librechat.ai>
* 🔲 fix: Anchor Quote Popup to Visible Selection

* 🔲 fix: Keep Cross-Container Quotes Anchored to Visible Text

* 🔲 perf: Bound Quote Geometry Walk to Selected Text

---------

Co-authored-by: Lia <lia@librechat.ai>
* fix: validate principal config overrides against configSchema

Reject admin config writes whose fields fail configSchema, and drop
invalid fields from stored overrides at merge time so the base value
from librechat.yaml survives.

* fix: require the merge key on partial custom endpoint overrides

* test: register a dedicated user for config override scenarios

* test: log in once per worker in config override scenarios

* fix: strip invalid overrides under dotted record keys

* fix: ignore a stored overrides document that is not an object

* fix: reject indexed patches into merged-by-name override arrays

* fix: match union options by shape, apply supplied-value refinements, reject paths past scalars

* refactor: validate config overrides on the merged result instead of the patch

* test: cover record refinements on written config fields

* fix: validate config field writes on top of the stored override

* fix: attribute id-addressed issues to their item and keep valid sections after repairs

* fix: judge field writes by what they change, over the principal's tombstoned base

* fix: validate whole-document config writes on the principal's tombstoned base

* fix: report config override issues as stable codes instead of schema messages

* fix: reject indexed writes into keyed arrays and keep filtered MCP servers out of validation state

* fix: judge each override layer only on the values it supplies

* fix: reject merged-by-key array items that are not objects

* fix: report repeated merge keys on the items the keyed merge discards

* fix: reject keys a union option drops when another option defines them
* ⏩ fix: Clarify Steering Timing and First-Response Fallback

* style: Format First-Response Tooltip Choice

* 💬 fix: Avoid Implying the First Conversation Has Not Started

* fix: Explain the Steer Sooner Enter Override

---------

Co-authored-by: Lia <lia@librechat.ai>
lia-by-librechat Bot and others added 6 commits September 28, 2026 18:49
* 🥧 fix: Show Failed Call Fractions and Preview Age

* 🗑️ chore: Remove Unused Failure Labels

* 🕒 test: Verify Live Failure Close Times

* 🧵 fix: Select Accessible Badge Labels Without Nested Ternaries

* 🪆 fix: Show One Failure Pill for Live Phase Groups

---------

Co-authored-by: Lia <lia@librechat.ai>
* 🔀 fix: Resolve SplitText Direction From Its Own Text Under RTL

SplitText wraps every grapheme and every word in its own inline-block box, so
the bidi algorithm never sees the text as one run. Under an RTL document the
boxes lay out right to left, and a Latin greeting or agent name on the landing
page renders mirrored, letter by letter and word by word.

The paragraph and each word box now carry dir="auto", so direction resolves
from the first strong character of the text itself: the paragraph decides word
order and each word decides its own letter order. RTL text still lays out
right to left, and mixed greetings render each part correctly.

Claude-Session: https://claude.ai/code/session_01EhJ8HUVBZ53ArUzgXDnxom

* 🐛 fix: Preserve RTL Greeting Word Order

---------

Co-authored-by: Lia <lia@librechat.ai>
Co-authored-by: Lia <lia@librechat.ai>
…Budget (#16464)

* ⏱️ fix: Fit Workspace Command Timeouts Inside the Configured Request Budget

* ⏱️ fix: Make Workspace Command Admission Reserve Configurable

* 🧪 test: Match Steering E2E Labels on Dev

* ⏱️ fix: Reject Impossible Workspace Command Admission Reserves

* 🧪 test: Match Failed Call Count in Dev E2E

* ⏱️ fix: Bound Workspace Admission Headroom and Document Its Budget

* ⏱️ fix: Validate Default Workspace Command Admission Reserve

---------

Co-authored-by: Lia <lia@librechat.ai>
* 🕘 feat: Distinguish Tool Preparation From Tool Call Time

* 🎞️ fix: Format timing specs and flatten phase labels

* 🧷 fix: Narrow Tool-Step Timing Before Stream Callback

* ⏱️ fix: Show Measured Subsecond Tool Calls

* 🧮 fix: Attribute Earliest Tool Fragment to Its Call

* 🧵 fix: Preserve Tool Timing Across Replay and Parallel Calls

* 📦 chore: Upgrade Agents SDK To 3.9.8

* 🧭 fix: Restore Tool Timing Across Redis And Child Activity

---------

Co-authored-by: Lia <lia@librechat.ai>
* feat: Route Linked Worktree Requests into Per-Worktree Lanes

Workers that advertise the git_linked_worktree workspace scope run each
.worktrees/<name> of a registered checkout in its own scheduling lane.
Accept the scope in worker status, map worktree-scoped paths and command
working directories onto the worktree field, and restore the prefix on
returned paths so tool output stays relative to the checkout.

* fix: Advertise Worktree cwd Routing in Model-Facing Bash Definitions

* refactor: Normalize the Lane Flag in TypeScript, Pass It Through /api Unchanged

* feat: Gate Linked Worktree Lanes Behind an Environment configSchema Toggle

* test: Give the Lane Toggle Fixture a Default Environment
@lia-by-librechat

Copy link
Copy Markdown
Contributor Author

Review handoff for exact final head fd510aa950d26c83d307d3726c7d55bb165641a9: both current canary abc9285523e00 and dev b341f9380584 remain ancestors, and the conflicts are resolved. Local checks passed: 145 tool UI/approval/timing tests; 111 config/tenant/theme/command tests; 57 callback/model-end tests after forwarding the new executor helper through the test adapter; 17 focused Mongo import/read-state tests. All four shared builds and backend/data-provider/data-schemas typechecks passed. Prior clean-install CI typechecks passed on 47b3b9b7e, but are restarting on this SHA. That earlier Lighthouse job failed trace capture with NO_NAVSTART, before a budget measurement, not a confirmed performance regression. Two independent review attempts were incomplete due isolated worker capacity; a new remote-source review of this SHA is requested. Neither incomplete review is claimed clean. Canary itself remains unchanged; no rebase or forced update.

@lia-by-librechat

Copy link
Copy Markdown
Contributor Author

Independent bounded source review completed for exact head fd510aa950d26c83d307d3726c7d55bb165641a9, base/merge-base abc9285523e0036d1ca4a749a3bfdb148322e0dc: no verified findings. The reviewer read all 276 patches, then revalidated final-head callback/timing, approval, theme/tenant/cache, imported reader/approval state, history, artifacts and message integration with matching graph/source snapshots. SYNC-T1 (P2 callback mock omitted executor helper) is fixed in this head. The reviewer inspected CI, not independently rerun tests; parent Git ancestry checks confirm both baseline tips are contained. At 14:50 UTC, 36 CI checks passed, no failures, four memory-browser shards remain running. Canary itself has not moved. Do not interpret this source review as a completed browser gate or a GitHub maintainer approval.

@lia-by-librechat

Copy link
Copy Markdown
Contributor Author

Review handoff for exact head 67e4609f6aed9b45707231817ceb4cd5d36af520: refreshed the same sync PR with canary ef1aa668126d1d7604519d21aa31b098bb24407d and dev c60dac37d0a4b11e75fcfe16362fb9e71a52e559, both now ancestors. The single callback-mock conflict retains the real identity, timing and executor helpers. The previous memory-shard failures were investigated with browser traces: the selected agent remained filtered after closing/reopening; the shared combobox now resets on its select-owned popover closing (regression failed before fix, all 16 tests pass after). The large Mermaid repeated-export scenario was asserting a preview while the artifact was still on Code during generation; it now waits for durable completion, preserving all SVG/PNG/cap/no-crash checks. Shared builds and scoped lint/format/browser discovery passed. CI and an independent review are running on this exact head. Canary/main/dev refs remain untouched; no rebase, squash or force push.

danny-avila and others added 4 commits September 30, 2026 22:12
* chore: bump dompurify

* chore: bump agents sdk to v4.0.1
Co-authored-by: lia-by-librechat[bot] <328778573+lia-by-librechat[bot]@users.noreply.github.com>
@lia-by-librechat

Copy link
Copy Markdown
Contributor Author

Review handoff for exact head f66ad88e1c29836c2b7d580f8931872b5e8f8bef: clean, non-rebased merge of current dev e8f3be08623663d4ad7f7241e693c94469b63bb0 into the same sync PR. Current canary ef1aa668126d1d7604519d21aa31b098bb24407d remains an ancestor. The preceding head 67e4609f6 finished with all 41 checks green; new-head CI must revalidate the three incoming security/dependency/LibreOffice-preview-pause/version commits. A fresh independent review is running; previous-head reviews were incomplete, not clean. Canary itself has not moved, no force push, squash or rebase.

@lia-by-librechat

Copy link
Copy Markdown
Contributor Author

Final exact-head handoff for f66ad88e1c29836c2b7d580f8931872b5e8f8bef: all 41 CI checks passed, no failures or pending checks, as of 2026-10-01 03:00 UTC. Independent bounded source review is complete with no verified findings after reading all 287 patches and final-head source. The reviewer verified SYNC-T1 (callback mock), OCT1-A1 (search reset), and OCT1-E1 (completed Mermaid export scenario) in source. Parent Git checks independently confirm canary ef1aa668126d and dev e8f3be086236 are ancestors and the merge-base is the current canary tip. Review inspected CI, not independent runtime execution or the published SDK artifact; five local LibreOffice-present integration cases were skipped and browser/Lighthouse ran in GitHub CI, not locally. There is no GitHub maintainer approval recorded. Neither canary nor dev/main was moved by this task. Ready for maintainer landing via non-forced canary fast-forward to this exact head; never squash or rebase.

@danny-avila
danny-avila merged commit f66ad88 into canary Oct 1, 2026
43 checks passed
@danny-avila
danny-avila deleted the lia/refresh-canary-from-dev branch October 1, 2026 03:02
@danny-avila
danny-avila deployed to legacy-mirror October 1, 2026 03:11 — with GitHub Actions Active
@danny-avila
danny-avila deployed to legacy-mirror October 1, 2026 03:11 — with GitHub Actions Active
jeannotdamoiseaux pushed a commit to jeannotdamoiseaux/LibreChat that referenced this pull request Oct 1, 2026
jeannotdamoiseaux pushed a commit to jeannotdamoiseaux/LibreChat that referenced this pull request Oct 1, 2026
jeannotdamoiseaux pushed a commit to jeannotdamoiseaux/LibreChat that referenced this pull request Oct 1, 2026
jeannotdamoiseaux pushed a commit to jeannotdamoiseaux/LibreChat that referenced this pull request Oct 1, 2026
jeannotdamoiseaux pushed a commit to jeannotdamoiseaux/LibreChat that referenced this pull request Oct 1, 2026
jeannotdamoiseaux pushed a commit to jeannotdamoiseaux/LibreChat that referenced this pull request Oct 1, 2026
jeannotdamoiseaux pushed a commit to jeannotdamoiseaux/LibreChat that referenced this pull request Oct 1, 2026
jeannotdamoiseaux pushed a commit to jeannotdamoiseaux/LibreChat that referenced this pull request Oct 1, 2026
jeannotdamoiseaux pushed a commit to jeannotdamoiseaux/LibreChat that referenced this pull request Oct 1, 2026
Retain the tracked-file integration outcomes recorded by original canary sync PR LibreChat-AI#16457.

No new implementation is introduced. Shared and ambiguous corrections are carried by the final sync-resolution commit so the resulting tracked tree equals frozen canary f66ad88.

Original-PR: LibreChat-AI#16457
Resolution-Sources: ffa54e0, 7fe6eab, 8f64336, 207ee8b, 7f3f82f, e9e5b36, ff3f0f8, 6bd6577, 84a53a4, f66ad88

This branch was successfully deployed

1 active deployment
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🗺️ Chat UI Shell codegraph: the taxonomy area this belongs to (classifier, confidence ≥ 0.9) 🛡️ security review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants