LibreChat/client
Danny Avila 240e9e920f
Some checks are pending
Backend Unit Tests / Build packages (push) Waiting to run
Backend Unit Tests / Codegraph select (push) Waiting to run
Backend Unit Tests / TypeScript type checks (push) Blocked by required conditions
Backend Unit Tests / Circular dependency checks (push) Waiting to run
Backend Unit Tests / Tests: api (shard 1/3) (push) Blocked by required conditions
Backend Unit Tests / Tests: api (shard 2/3) (push) Blocked by required conditions
Backend Unit Tests / Tests: api (shard 3/3) (push) Blocked by required conditions
Backend Unit Tests / Tests: data-provider (push) Blocked by required conditions
Backend Unit Tests / Tests: data-schemas (push) Blocked by required conditions
Backend Unit Tests / Tests: @librechat/api (shard 1/4) (push) Blocked by required conditions
Backend Unit Tests / Tests: @librechat/api (shard 2/4) (push) Blocked by required conditions
Backend Unit Tests / Tests: @librechat/api (shard 3/4) (push) Blocked by required conditions
Backend Unit Tests / Tests: @librechat/api (shard 4/4) (push) Blocked by required conditions
Codegraph E2E Votes / vote (full suite) (push) Waiting to run
Docker Dev Branch Images Build / build (Dockerfile, lc-dev, node) (push) Waiting to run
Docker Dev Branch Images Build / build (Dockerfile.multi, lc-dev-api, api-build) (push) Waiting to run
Frontend Unit Tests / Codegraph select (push) Waiting to run
Frontend Unit Tests / Build packages (push) Waiting to run
Frontend Unit Tests / TypeScript type checks (client) (push) Blocked by required conditions
Frontend Unit Tests / Tests: @librechat/client (push) Blocked by required conditions
Frontend Unit Tests / Tests: Ubuntu (shard 1/2) (push) Blocked by required conditions
Frontend Unit Tests / Tests: Ubuntu (shard 2/2) (push) Blocked by required conditions
Frontend Unit Tests / Vite build verification (push) Blocked by required conditions
Sync Locize Translations & Create Translation PR / Sync Translation Keys with Locize (push) Waiting to run
Sync Locize Translations & Create Translation PR / Create Translation PR on Version Published (push) Blocked by required conditions
Docker Dev Images Build / build (Dockerfile, librechat-dev, node) (push) Waiting to run
Docker Dev Images Build / build (Dockerfile.multi, librechat-dev-api, api-build) (push) Waiting to run
Sync Helm Chart Tags / Ignore non-main push (push) Waiting to run
Sync Helm Chart Tags / Sync chart tags (push) Waiting to run
🧺 fix: Skip Oversized and Duplicate Files Instead of the Whole Batch (#15358)
* 🧺 fix: Skip Oversized and Duplicate Files Instead of the Whole Batch

Uploading several files at once failed entirely when any single one exceeded
`fileSizeLimit`: `validateFileSizes` returned false for the batch and
`discardProcessedUploads()` dropped every processed upload, valid files
included. Duplicates rejected the selection the same way.

Adds `partitionUploads`, which splits a selection into the files that may be
uploaded and the ones that cannot, and applies it at both validation points —
duplicates against the raw selection, sizes against the processed files whose
bytes resizing has already settled. Offenders are discarded individually and
named in a toast; the rest upload.

Per-file rules only: `totalSizeLimit` describes the batch as a whole, so
`validateFileSizes` still enforces it over whatever survives the partition.
When nothing survives, the batch keeps reporting the existing all-or-nothing
errors rather than per-file skip notices, so single-file uploads are unchanged.

* 🧮 fix: Count the Partitioned Selection Against the File Limit

Codex round 1.

`validateFiles` received the unpartitioned selection, so its
`fileList.length + files.size` check spent `fileLimit` slots on files the
partition was about to discard — with 9 of 10 slots taken, picking an
already-attached file alongside a new one rejected both. The partition now runs
first and hands `validateFiles` only the survivors, keeping the count rule in
one place. A selection that loses every file still passes the untouched list
through, so the batch-level checks report it in their usual order.

Also stops the partition tests allocating real buffers: one case built a 500 MiB
ArrayBuffer to assert a size-only branch.

* 🎚️ fix: Apply the File Count to the Files That Survive Processing

Codex round 2.

Round 1 stopped duplicates spending `fileLimit` slots, but the count still ran
before sizes were known: the pre-processing partition defers size checks, so an
oversized file was counted and then discarded. With one slot left, picking an
oversized file beside a valid one rejected both.

The count now runs where the survivors are finally known — after the
post-processing partition — through a `validateFileLimit` extracted from
`validateFiles`, so both callers share one rule and one message. The two
batch-composition rules the partition now owns, count and duplicates, sit behind
a single `skipBatchRules` flag in place of `skipDuplicateValidation`.

Selections that overshoot the limit are now processed before being rejected,
where they used to be turned away up front. That is the price of counting only
what will actually be attached, and matches how duplicates and sizes have always
been handled in this function.

* 🔕 fix: Hold Skip Notices Until the Batch Is Actually Uploading

Codex round 3.

The pre-processing partition announced its dropped duplicates as soon as
`validateFiles` passed, but the surviving files still had to clear the file
count and `totalSizeLimit` afterwards. A selection that failed there showed both
"Skipped duplicate file(s)" and the batch rejection, with nothing uploaded —
contradicting the notice's own contract that it describes a batch that is
otherwise still going.

Both partitions' skipped entries are now reported together, after the batch is
known to be uploading. A selection rejected in full reports itself through the
batch-level errors alone.
2026-08-30 09:04:13 -04:00
..
public
scripts
src 🧺 fix: Skip Oversized and Duplicate Files Instead of the Whole Batch (#15358) 2026-08-30 09:04:13 -04:00
sw
test
babel.config.cjs
check_updates.sh
index.html
jest.config.cjs 🧮 fix: Currency-Safe Single-Dollar LaTeX via Micromark Tokenizer (#15181) 2026-08-24 22:29:02 -04:00
jest.resolver.cjs
nginx.conf
package.json 🧮 fix: Currency-Safe Single-Dollar LaTeX via Micromark Tokenizer (#15181) 2026-08-24 22:29:02 -04:00
postcss.config.cjs
tailwind.config.cjs feat: Context Gauge Hover Reveal and Breakdown Motion Polish (#15038) 2026-08-21 11:34:36 -04:00
tsconfig.json
vite.config.ts