Skip to content

v0.6.87: performance improvements#4707

Merged
icecrasher321 merged 7 commits into
mainfrom
staging
May 21, 2026
Merged

v0.6.87: performance improvements#4707
icecrasher321 merged 7 commits into
mainfrom
staging

Conversation

@icecrasher321
Copy link
Copy Markdown
Collaborator

@icecrasher321 icecrasher321 commented May 21, 2026

fix(table): derive typewriter slice from elapsed time (no full-text flash) (#4694)
fix(copilot): default SIM_AGENT_API_URL to www.copilot.sim.ai to avoid redirect path drop (#4700)
fix(mcp): cache result of discoverServerTools to prevent post-OAuth refetch storm (#4701)
fix(sidebar): pass showDelete to hide delete menu for non-admin members (#4697)
perf(db): reduce read/write fanout across hot paths (#4704)
fix(logs-cleanup): listing active workspaces into mem + download time streaming lims (#4692)
feat(tables): virtualize data grid with bounded copy and chunked delete (#4693)

TheodoreSpeaks and others added 6 commits May 21, 2026 05:52
…lash) (#4694)

The reveal used a lagging nullable `revealed` state with a `revealed ?? kind.text`
fallback in the caller. Under React 18 concurrent rendering a committed render
could observe `revealed === null` while `text` was the full value, so the
fallback painted the entire string for one frame before the type-on — an
intermittent flash, reproducible on a large Run-all (verified in-browser: 60+
cells flashing).

Derive the revealed slice from `text` + elapsed time during render instead of
holding it in state. For a non-null value the result is never `null` and never
the full string on the frame `text` changes (elapsed ≈ 0 → 0 chars), so the
fallback can't fire. `prevText` is tracked in state (not a ref) so a discarded
render rolls it back and the change is re-detected on the committed render.
Verified via DOM MutationObserver: 0 flashes across 213 animated cells.
…efetch storm (#4701)

* fix(mcp): write per-server cache from discoverServerTools to prevent post-OAuth refetch storm

* improvement(mcp): update server status from discoverServerTools + cap list-tools timeout at 30s
…rs (#4697)

The ContextMenu component already has a showDelete prop with conditional
rendering, but workflow-item and folder-item never pass it, leaving it
at the default value of true. This causes write members to see an active
Delete option that always fails with 403, since the DELETE API requires
admin permission.

Pass showDelete={userPermissions.canAdmin} from both workflow-item and
folder-item so that non-admin users no longer see the Delete menu.
Simplify disableDelete to only check canDeleteSelection and
effectiveLocked, since permission gating is now handled by showDelete.
* perf(db): reduce read/write fanout across hot paths

* fix(templates): include name/workflowId/status/tags in DELETE projection

* fix(db): address review feedback (joinedAt backfill, mcp delete error, chatDeploy projection, sql newline)

* fix(webhooks): include NULL failedCount in markWebhookSuccess guard
… streaming lims (#4692)

* fix(logs-cleanup): listing active workspaces into mem + download time streaming lims

* fix

* fix ci

* address comments

* add skill

* fix client-server sep

* fix parse bytes enforcement

* address comments, antipatterns

* address slides ssrf comment

* more fixes

* fix tests

* fix
@vercel
Copy link
Copy Markdown

vercel Bot commented May 21, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
docs Ready Ready Preview, Comment May 21, 2026 11:21pm

Request Review

@cursor
Copy link
Copy Markdown

cursor Bot commented May 21, 2026

PR Summary

Medium Risk
Touches multiple API routes (file parsing/upload, CSV import, media/tool proxies) and changes response behavior (new 413s, partial multi-file results), which could affect client expectations despite being largely safety/perf oriented.

Overview
Hardens several API/tool routes against unbounded memory usage and oversized payloads. File parsing now enforces URL/reference shape validation, download byte caps, and a combined multi-file parsed-output cap with sequential processing and optional partial results when later items exceed limits.

Multipart upload/import endpoints (/api/files/upload, /api/v1/files, CSV import routes) switch to readFormDataWithLimit/readFileToBufferWithLimit, returning 413 for size-limit violations before materializing file contents (and explicitly supporting chunked multipart without content-length).

External/tool proxies (DocuSign, image, video, TTS, new Google Slides export, new Typeform file download) now use bounded reads for JSON/text/binary responses, add explicit max-byte budgets, and in some cases store large outputs as uploaded files while only inlining small legacy base64 payloads.

Separately reduces DB read fanout by selecting only needed columns in several hot paths (admin list endpoints, templates/settings fetches, row delete returning, webhook PATCH no-op early return), adjusts logs live refresh intervals, and refines table cell typewriter rendering to avoid full-text flash.

Reviewed by Cursor Bugbot for commit 4002242. Bugbot is set up for automated code reviews on this repo. Configure here.

…te (#4693)

* feat(tables): virtualize data grid with bounded copy and chunked delete

* fix(tables): keyboard scroll past sticky header, copy toast row count, clipboard error handling

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(tables): keep copy/cut progress toast until the operation completes

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(tables): stop bulk cut chunks on first failure, reconcile grid on error

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@icecrasher321 icecrasher321 merged commit fde70e2 into main May 21, 2026
31 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants