Skip to content

[pull] main from danny-avila:main - #272

Merged
pull[bot] merged 21 commits into
innFactory:mainfrom
LibreChat-AI:main
Sep 22, 2026
Merged

pull[bot] merged 21 commits into
innFactory:mainfrom
LibreChat-AI:main

Conversation

@pull

@pull pull Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

danny-avila and others added 21 commits September 21, 2026 12:56
* fix: Preserve Draft Identity Across Navigation

* fix: Await Conversation Records With Loaded Assistant Catalogs

* fix: Reconcile Retained Conversation State on Route Remount
…ate (#16165)

* docs: tighten PR template type-of-change and screenshot guidance

Type of change asked authors to select what applies but left the whole list in
the description, so every PR shipped six unchecked boxes a reviewer had to scan
past. Tell authors to delete the lines that do not apply.

The screenshot section said only "include before/after screenshots", which left
both when it applies and how to attach a file to guesswork. Spell out the
user-visible surfaces that require one, and give the upload path directly:
relative image links in the body plus `gh pr create|edit|comment --attach`,
which rewrites each link to the uploaded asset. Name the workarounds that must
not be used, since a committed image, a local path or a hand-written
user-attachments link all cost a review round.

* docs: tell PR authors not to hand-wrap paragraphs

GitHub renders a single newline inside a paragraph as a line break, so a
description wrapped at 80 columns in an editor arrives as ragged short lines
that never reflow to the reader's window. Say so in the Summary guidance, and
note that it covers every section, list items and table cells.

* docs: stop claiming gh --attach is the only upload route

The web editor's drag and paste is also a real upload and also returns an
asset URL. The point of the sentence is that an asset URL comes back from an
upload and cannot be written by hand, so say that instead.

* docs: say the before screenshot comes from the base revision

"Capture from the app running this branch" applied to both halves of the pair,
so a before image captured that way shows the changed UI too and the pair
demonstrates nothing.
* 🏦 fix: Require Named Helm Credential Secrets

* docs: Clarify Helm Credential Injection and Meilisearch Secrets

---------

Co-authored-by: Lia <lia@librechat.ai>
* fix: preserve Insights with guarded ACL role updates

* test: settle ACL index builds before opening the transaction

* fix: replace ACL mask partitions with single-operator bit writes

* style: drop the now-unused RoleBits import

* fix: make ACL role replacement one atomic guarded write

* fix: export the permission write retry ceiling

* fix: retry ACL mutations per document and preserve atomic permissions

---------

Co-authored-by: Lia <lia@librechat.ai>
* fix: preserve Insights with guarded ACL role updates

* fix: reject combined $bit operators in ACL permission writes

* test: type the permission-bit spies without never casts

* test: settle ACL index builds before opening the transaction

* fix: replace ACL mask partitions with single-operator bit writes

* style: drop the now-unused RoleBits import

* fix: split two-sided permission bit writes into single operators

* fix: make ACL role replacement one atomic guarded write

* fix: export the permission write retry ceiling

* fix: retry ACL mutations per document and preserve atomic permissions

---------

Co-authored-by: Lia <lia@librechat.ai>
The quote specs resolved a needle inside a single text node, which the
smooth-streaming fade makes untrue for the whole window between a reply
being fully readable and its turn settling: `animate.tsx` wraps every
word of the animated message in its own span, so `E2E opening paragraph`
lives in three sibling text nodes and the lookup threw
`No text node contains: E2E opening paragraph`.

The lookup now matches each message's flattened text and maps the match
back onto the nodes it came from, and the cross-message test checks the
selection is still crossing two messages when it asserts the popup stays
away, so a collapsed selection can no longer pass it by default.

Co-authored-by: Lia <lia@librechat.ai>
* ⚡ perf: Discover MCP tools only when needed

* 🎨 style: Format startup regression coverage

* 🫥 fix: Keep hidden agent panels from discovering tools

* 🧹 fix: Remove unused startup import

---------

Co-authored-by: Lia <lia@librechat.ai>
#16193)

* feat: report dispatch, settlement and elapsed timings from check_background_task

The poll tool described a background task only as running or settled, with no
notion of when: a caller could not tell a task dispatched seconds ago from one
stuck for an hour, and a collected result carried no settlement time.

Ordinary and subagent tasks both already stamp dispatch and last update in the
registry, so the poll payload now serializes them the way the rest of the app
serializes time (ISO-8601), plus the elapsed span because a polling model has no
clock of its own. The durable receipt a poll falls back to after a restart
already stored its settlement time; it is carried through the claim projection so
a recovered poll reports settlement too.

* test: drive the timing assertions from the assigned dispatch stamp

The registry dispatch stamp is strictly increasing and process-global, so it is
not the mocked clock: the poll test now reads the stamp the registry assigned and
drives the clock from it. Four durable-claim assertions admit the settlement
stamp the projection now carries, and the new block is Prettier-formatted.

---------

Co-authored-by: Lia <lia@librechat.ai>
* 🌊 fix: Prevent Agent Model Stream Idle Timeouts

* fix: Preserve Default Proxy Dispatcher Construction

* test: Assert Agent Transport Timeout Policy

* test: Cover Direct Model Dispatcher Reuse

* fix: Scope Agent Model Transport Timeouts

* fix: Enforce Agent Timeouts Across Direct and Summary Clients

* fix: Align Model Transport Adapter Types

---------

Co-authored-by: Lia <lia@librechat.ai>
* docs: set expectations for AI-assisted contributions

* docs: note that we may finish a contributor's branch

---------

Co-authored-by: Lia <lia@librechat.ai>
* 🧮 fix: Show Live Tool Combo Multipliers

* 🧮 fix: Preserve Live Outcome Separator

* 🧮 fix: Narrow Combo Scan Parts

* 🧮 test: Expect Live Combo Labels

* 🎰 fix: Synchronize Live Combo Transitions

* 🎰 test: Await Live Combo Reset

* 🎰 perf: Accumulate Tool Combos During Span Summaries

---------

Co-authored-by: Lia <lia@librechat.ai>
* fix: give each streamed tool call a stable outward index

* fix: scope tool-call fragments and preserve completed answers

* fix: finalize agent tool-call snapshots without duplicating deltas

* fix: assemble complete tool identities before response publication

---------

Co-authored-by: Lia <lia@librechat.ai>
@pull pull Bot locked and limited conversation to collaborators Sep 22, 2026
@pull pull Bot added the ⤵️ pull label Sep 22, 2026
@pull
pull Bot merged commit ef89fbd into innFactory:main Sep 22, 2026
19 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants