Uh oh!
There was an error while loading. Please reload this page.
v0.7.63: chat pins, ui improvements, bump deps, file improvements - #6382
Conversation
waleedlatif1
commented
Aug 7, 2026
- feat(library): Best AI Agent Builder in 2026: Sim Leads for Open-Source, Self-Hostable Teams (feat(library): Best AI Agent Builder in 2026: Sim Leads for Open-Source, Self-Hostable Teams #6369)
- improvement(tables): show a tooltip on truncated column headers (improvement(tables): show a tooltip on truncated column headers #6371)
- chore(deps): bump mermaid to 11.16.1 and js-yaml to 4.3.1 to clear open Dependabot alerts (chore(deps): bump mermaid to 11.16.1 and js-yaml to 4.3.1 to clear open Dependabot alerts #6375)
- fix(sidebar): keep the pin visible on the chat you're viewing (fix(sidebar): keep the pin visible on the chat you're viewing #6377)
- fix(uploads): treat a missing storage object as absent metadata, not a failure (fix(uploads): treat a missing storage object as absent metadata, not a failure #6378)
- fix(files): render the file-viewer placeholder through the live node views (fix(files): render the file-viewer placeholder through the live node views #6379)
- improvement(forking): widen the fork mapping target picker and make it searchable (improvement(forking): widen the fork mapping target picker and make it searchable #6381)
- fix(chat): re-measure the prompt editor when its width changes (fix(chat): re-measure the prompt editor when its width changes #6380)
…ce, Self-Hostable Teams (#6369) Co-authored-by: Sim Pi Agent <pi@sim.ai>
* improvement(tables): show a tooltip on truncated column headers * chore(tables): use absolute import for HeaderLabel
…en Dependabot alerts (#6375)
The pin glyph carried a stale `!isCurrentRoute` guard copy-pasted from the status dot back when the dot was also hidden on the current route. #4354 later relaxed the dot's guard but left the pin's untouched, so opening a pinned chat made its pin vanish. Derive `showStatusDot` once and express the pin as its negation so the two conditions can no longer drift apart. Also align the collapsed rail, which never forwarded `isCurrentRoute` and so showed an unread dot on the chat you were already reading, and hide the pin by the same opacity mechanism the dot uses instead of a display toggle plus a mount guard.
…a failure (#6378) * fix(uploads): treat a missing storage object as absent metadata, not a failure A workspace file is rewritten under a new key on every content update and the superseded object is deleted, so any reader holding the previous key finds nothing. getFileMetadata's provider lookups let that not-found propagate, so authorization's catch-all logged it at ERROR and never reached the branch already written for it. Return the function's established empty value instead, and collapse the three divergent per-provider not-found predicates onto one. * fix(uploads): read the not-found label from code as well as name Azure raises a RestError whose name carries the class and whose code carries the reason, so testing name first and falling back to code only when name was absent missed BlobNotFound outright — narrower than the per-provider check it replaced. * fix(uploads): keep a missing bucket or container out of the not-found path NoSuchBucket and ContainerNotFound also answer 404, so the status-only match read a total storage misconfiguration as an absent object — every file read would fail closed with nothing left to alert on. * fix(uploads): require an object-level label before treating a lookup as absent GCS answers a missing object and a missing bucket identically, so a bare 404 cannot be attributed to the object by a dispatcher that does not know what was requested. getFileMetadata now takes the labelled check and leaves an unlabelled 404 propagating as before; the provider clients keep the lenient form, which is what each already used. * refactor(uploads): let getFileMetadata delegate to the provider head helpers getFileMetadata re-implemented the S3 and Blob HEAD calls inline, so it had to inspect provider errors itself and needed a second, stricter predicate to do it safely. headS3Object and headBlobObject already perform exactly those calls and already report absence as null, so delegating removes the duplication, the error inspection, and the extra predicate at once. GCS keeps raising, as before. Covers the real provider path in the S3 client's own suite, where mocking the seam had been hiding whether the two layers agree. * fix(files): log a missing file at info rather than error when serving Each serve handler rethrows into the outer one, so a superseded key produced two ERROR lines for what is an ordinary 404 — two thirds of this module's error volume. Route all five catch sites through one helper that reserves error for failures that are actually the server's fault, matching how DocCompileUserError is already handled a few lines above. * test(uploads): cover the Blob not-found paths the shared predicate now governs S3 and GCS already asserted absence and non-404 rethrow; Blob asserted neither, so the container-level exclusion went unverified on the one provider whose error puts the reason in code rather than name.
…views (#6379) * fix(files): render the file-viewer placeholder through the live node views The collaborative markdown viewer painted a static generateHTML placeholder while the Yjs doc seeded, then swapped to the live editor. generateHTML runs only schema renderHTML — never the React node views or the ProseMirror decoration plugins — so every node whose live appearance comes from a node view or a decoration rendered differently in the placeholder and visibly repainted on the swap: syntax highlighting popped in, mention-chip icons shifted their labels, mermaid blocks jumped from source to diagram, and media embeds appeared out of nowhere. Render the placeholder through a read-only editor that shares the live editor's extension set instead. It uses the same node views and decoration plugins, so the placeholder is pixel-identical to the live editor and the swap neither repaints nor reflows — highlighting, mention icons, images, mermaid (via its existing SVG cache), and embeds (which already reserve their aspect-ratio box) all render up front. The placeholder editor carries no Collaboration extension, Y.Doc, or awareness, so it structurally cannot write to the shared document, preserving the seed-only-on-server invariant; editable={false} disables every editing affordance. * fix(files): address review on the placeholder editor - Give ReadOnlyPlaceholder a named props interface (repo component convention). - Render the placeholder synchronously (immediatelyRender: true) so it paints instantly like the static HTML it replaced instead of blanking for a frame while the editor mounts — safe because this surface is client-only, never SSR'd. - Hoist the editor reading-column classes into a shared EDITOR_SURFACE_CLASS so the placeholder and live editor stay geometrically identical (drop the now redundant placeholderContent term from the live editor's hidden class).
…t searchable (#6381) * improvement(forking): widen the fork mapping target picker and make it searchable * fix(forking): stop the truncated-candidates hint promising a search that cannot reach past the cap
* fix(chat): re-measure the prompt editor when its width changes The chat input's textarea grows to its full content height under a mirror overlay, but it only re-measured on text change. A width change after typing (window resize, sidebar toggle, resource panel opening) left the textarea at a stale inline height while the overlay rewrapped taller. The spilled lines still painted and scrolled but had no textarea beneath them, so clicks landed on the scroller and never placed a caret. Re-measure on width change only — the measure writes the textarea's height, so reacting to height would feed itself. * fix(chat): measure the observer's first delivery like any other The width can change between the mount-time measure and observe(), so treating the first notification as confirmation of the mount width dropped that change and left the stale height in place. * chore(chat): trim duplicated comments on the prompt editor autosize The failure mode was documented in four places. Keeps one canonical explanation next to the guard and leaves only the per-test whys the test names do not already carry.
The latest updates on your projects. Learn more about Vercel for GitHub. |
PR SummaryMedium Risk Overview Files & uploads: The file serve route logs routine Editors: Collaborative file viewing swaps static HTML for a read-only TipTap placeholder that shares extensions and layout with the live editor. The chat prompt editorre-autosizes when the scroller width changes ( UI: Table column headers use Other: New library MDX best AI agent builder 2026; mermaid 11.16.1 and js-yaml 4.3.1 (Dependabot/security); Reviewed by Cursor Bugbot for commit d2964af. Configure here. |
Greptile SummaryThis release combines file-storage and file-viewer fixes with prompt-editor resizing, table-header tooltips, sidebar pin visibility, searchable fork mappings, dependency updates, and new library content.
Confidence Score: 5/5The PR appears safe to merge, with no concrete changed-code failure identified. The storage changes retain fail-closed authorization and propagate genuine provider failures, while the UI changes preserve existing state and lifecycle boundaries with targeted regression coverage.
|
| Filename | Overview |
|---|---|
| apps/sim/lib/uploads/core/errors.ts | Introduces shared object-not-found classification while preserving explicit bucket and container failures. |
| apps/sim/lib/uploads/core/storage-client.ts | Routes metadata lookups through provider HEAD helpers and safely maps absent objects to empty metadata. |
| apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/rich-markdown-editor.tsx | Replaces static placeholder HTML with a temporary read-only TipTap view using the live editor’s node views. |
| apps/sim/app/workspace/[workspaceId]/home/components/user-input/components/prompt-editor/prompt-editor.tsx | Observes editor width and re-runs textarea autosizing without reacting recursively to height changes. |
| apps/sim/app/workspace/[workspaceId]/tables/[tableId]/components/table-grid/headers/header-label.tsx | Adds a reusable truncated-header label that displays a tooltip only when text is clipped. |
| apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx | Keeps a current chat’s pin visible whenever no active or unread status dot takes precedence. |
| apps/sim/ee/workspace-forking/components/fork-sync/fork-sync-view.tsx | Widens target selectors and enables searching within the available mapping candidates. |
| apps/sim/package.json | Updates js-yaml and Mermaid to patched versions with corresponding lockfile changes. |
Reviews (1): Last reviewed commit: "fix(chat): re-measure the prompt editor ..." | Re-trigger Greptile
Uh oh!
There was an error while loading. Please reload this page.