implement Nova chat attachments on the web side #1004
Conversation
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
supermemory-mcp | 7095548 | Jun 08 2026, 06:20 AM |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
supermemory-app | 7095548 | Commit Preview URL Branch Preview URL |
Jun 08 2026, 06:21 AM |
|
Claude finished @MaheshtheDev's task in 2m 21s —— View job Reviewing PR #1004: Nova chat attachments
Review submitted. No bugs, security issues, or logic errors found. This is a solid implementation with proper error handling, memory management, and XSS prevention. Score: 9/10. |
There was a problem hiding this comment.
Overview: Implements chat attachment functionality with file uploads, draft state management, save-to-memory toggle, and attachment rendering in messages.
Issues found: None — this looks good to ship.
The implementation is solid:
- File validation checks size (50MB limit) and type before accepting
- Each attachment draft tracks its own upload state (queued → uploading → uploaded/error), enabling granular retry
uploadAttachmentDraftcorrectly skips already-uploaded drafts on retry- State is only cleared on full success (both uploads and sendMessage complete)
- Error handling preserves draft state so users can retry or remove individual failures
- React's automatic text escaping prevents XSS in filename rendering
- The
canSendlogic correctly blocks sending when uploads are in progress or have errors
Score: 9/10
Minor observations (not blocking):
- Attachments upload sequentially rather than in parallel — likely intentional for server load control
handleRetryAttachmentcapturescurrentChatIdat callback creation time, so if a user switches threads before clicking retry, the attachment uploads to the new thread. Edge case, but worth noting.
There was a problem hiding this comment.
Overview: Implements chat attachment functionality with file uploads, draft state management, save-to-memory toggle, and attachment rendering in messages.
Issues found: None — this looks good to ship.
The implementation is solid:
- File validation checks size (50MB limit) and type before accepting
- Each attachment draft tracks its own upload state (queued → uploading → uploaded/error), enabling granular retry
uploadAttachmentDraftcorrectly skips already-uploaded drafts on retry- State is only cleared on full success (both uploads and sendMessage complete)
- Error handling preserves draft state so users can retry or remove individual failures
- React's automatic text escaping prevents XSS in filename rendering
- The
canSendlogic correctly blocks sending when uploads are in progress or have errors - Object URLs are properly cleaned up in
useEffectreturn to prevent memory leaks
Score: 9/10
Minor observations (not blocking):
- Attachments upload sequentially rather than in parallel — likely intentional for server load control
handleRetryAttachmentcapturescurrentChatIdat callback creation time, so if a user switches threads before clicking retry, the attachment uploads to the new thread. Edge case, but worth noting.
There was a problem hiding this comment.
Overview: Implements chat attachment functionality with file uploads, draft state management, save-to-memory toggle, and attachment rendering in messages.
Issues found: None — this looks good to ship.
The implementation is solid:
- File validation checks size (50MB limit) and type before accepting
- Each attachment draft tracks its own upload state (queued → uploading → uploaded/error), enabling granular retry
uploadAttachmentDraftcorrectly skips already-uploaded drafts on retry- State is only cleared on full success (both uploads and sendMessage complete)
- Error handling preserves draft state so users can retry or remove individual failures
- React's automatic text escaping prevents XSS in filename rendering
- The
canSendlogic correctly blocks sending when uploads are in progress or have errors - Object URLs are properly cleaned up in
useEffectreturn to prevent memory leaks
Score: 9/10
Minor observations (not blocking):
- Attachments upload sequentially rather than in parallel — likely intentional for server load control
handleRetryAttachmentcapturescurrentChatIdat callback creation time, so if a user switches threads before clicking retry, the attachment uploads to the new thread. Edge case, but worth noting.
There was a problem hiding this comment.
Overview: Implements chat attachment functionality with file uploads, draft state management, save-to-memory toggle, and attachment rendering in messages.
Issues found: None — this looks good to ship.
The implementation is solid:
- File validation checks size (50MB limit) and type before accepting
- Each attachment draft tracks its own upload state (queued → uploading → uploaded/error), enabling granular retry
uploadAttachmentDraftcorrectly skips already-uploaded drafts on retry- State is only cleared on full success (both uploads and sendMessage complete)
- Error handling preserves draft state so users can retry or remove individual failures
- React's automatic text escaping prevents XSS in filename rendering
- The
canSendlogic correctly blocks sending when uploads are in progress or have errors - Object URLs are properly cleaned up in
useEffectreturn to prevent memory leaks - Inflight upload tracking via
uploadPromisesRefprevents duplicate upload requests - Abort controllers are properly cleaned up when attachments are removed
- Discarded draft tracking ensures uploads that complete after removal are cleaned up server-side
Score: 9/10
Minor observations (not blocking):
- Attachments upload sequentially rather than in parallel — likely intentional for server load control
handleRetryAttachmentcapturescurrentChatIdat callback creation time, so if a user switches threads before clicking retry, the attachment uploads to the new thread. Edge case, but worth noting.
9646398 to
5aad18e
Compare
There was a problem hiding this comment.
Overview: Implements chat attachment functionality with file uploads, draft state management, save-to-memory toggle, and attachment rendering in messages.
Issues found: None — this looks good to ship.
The implementation is solid:
- File validation checks size (50MB limit) and type before accepting
- Each attachment draft tracks its own upload state (queued → uploading → uploaded/error), enabling granular retry
uploadAttachmentDraftcorrectly skips already-uploaded drafts on retry- State is only cleared on full success (both uploads and sendMessage complete)
- Error handling preserves draft state so users can retry or remove individual failures
- React's automatic text escaping prevents XSS in filename rendering
- The
canSendlogic correctly blocks sending when uploads are in progress or have errors - Object URLs are properly cleaned up in
useEffectreturn to prevent memory leaks - Inflight upload tracking via
uploadPromisesRefprevents duplicate upload requests - Abort controllers are properly cleaned up when attachments are removed
- Discarded draft tracking ensures uploads that complete after removal are cleaned up server-side
Score: 9/10
Minor observations (not blocking):
- Attachments upload sequentially rather than in parallel — likely intentional for server load control
handleRetryAttachmentcapturescurrentChatIdat callback creation time, so if a user switches threads before clicking retry, the attachment uploads to the new thread. Edge case, but worth noting.
There was a problem hiding this comment.
Overview: Implements chat attachment functionality with file uploads, draft state management, save-to-memory toggle, and attachment rendering in messages.
Issues found: None — this looks good to ship.
The implementation is solid:
- File validation checks size (50MB limit) and type before accepting
- Each attachment draft tracks its own upload state (queued → uploading → uploaded/error), enabling granular retry
uploadAttachmentDraftcorrectly skips already-uploaded drafts on retry- State is only cleared on full success (both uploads and sendMessage complete)
- Error handling preserves draft state so users can retry or remove individual failures
- React's automatic text escaping prevents XSS in filename rendering
- The
canSendlogic correctly blocks sending when uploads are in progress or have errors - Object URLs are properly cleaned up in
useEffectreturn to prevent memory leaks - Inflight upload tracking via
uploadPromisesRefprevents duplicate upload requests - Abort controllers are properly cleaned up when attachments are removed
- Discarded draft tracking ensures uploads that complete after removal are cleaned up server-side
Score: 9/10
Minor observations (not blocking):
- Attachments upload sequentially rather than in parallel — likely intentional for server load control
handleRetryAttachmentcapturescurrentChatIdat callback creation time, so if a user switches threads before clicking retry, the attachment uploads to the new thread. Edge case, but worth noting.
Stacked on the Nova chat attachments PR (#1004): adds Grok 4.3 (default), reworks the composer toolbar + web-source citations, and overhauls the mobile chat experience (sticky nav, pinned composer, back button). Plus a11y, delete-toast, and markdown fixes.
How to use the Graphite Merge QueueAdd the label Main to this PR to add it to the merge queue. You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has enabled the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. This stack of pull requests is managed by Graphite. Learn more about stacking. |
Merge activity
|
- Added attachment draft/shared types and validation in components/chat/attachments.ts. - Added paperclip upload UI to Nova composer with file chips, size/status, remove, retry, and per-file Save / Chat only toggle. - Wired uploads before send to /chat/attachments, then sends returned attachment references in chat message metadata. - Preserved attachment metadata when loading threads and rendered attachment chips on user messages. - Added attachment support from the home composer into the full chat view. - Extended chat analytics with attachment counts. <img width="1905" height="900" alt="image" src="https://github.com/user-attachments/assets/631001b8-7c68-4015-b36b-06c69cdad271" /> <img width="1323" height="1600" alt="image" src="https://github.com/user-attachments/assets/77eee08a-b235-41eb-b03a-f406b81b46e7" /> - ensured responsiveness
31550ec to
7095548
Compare
Stacked on the Nova chat attachments PR (#1004): adds Grok 4.3 (default), reworks the composer toolbar + web-source citations, and overhauls the mobile chat experience (sticky nav, pinned composer, back button). Plus a11y, delete-toast, and markdown fixes.
Stacked on the Nova chat attachments PR (#1004): adds Grok 4.3 (default), reworks the composer toolbar + web-source citations, and overhauls the mobile chat experience (sticky nav, pinned composer, back button). Plus a11y, delete-toast, and markdown fixes.

Uh oh!
There was an error while loading. Please reload this page.