Skip to content

Conversation

@aadamgough
Copy link
Collaborator

Summary

Adding ability to download files from deployed chat. Also added file download for microsoft teams

Type of Change

  • New feature

Testing

Tested manually with gmail, slack, teams, outlook, drive, onedrive

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

@vercel
Copy link

vercel bot commented Dec 10, 2025

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

1 Skipped Deployment
Project Deployment Preview Comments Updated (UTC)
docs Skipped Skipped Dec 10, 2025 6:01am

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Dec 10, 2025

Greptile Overview

Greptile Summary

This PR adds file download functionality to deployed chat interfaces and Microsoft Teams integration. The implementation includes:

  • New ChatFileDownload component with individual file download cards showing file icons, names, and sizes
  • ChatFileDownloadAll button to download multiple files sequentially with 150ms delay between downloads
  • File extraction logic in chat streaming hook that recursively finds UserFile objects in block outputs
  • Microsoft Teams support for downloading both hosted contents and SharePoint/OneDrive reference attachments
  • Proper error handling with fallback to opening files in new tabs

The feature integrates cleanly with existing chat message display, includes deduplication for files, and follows the codebase patterns for error handling and logging.

Confidence Score: 4/5

  • This PR is safe to merge with one minor style improvement suggested
  • The implementation is well-structured with proper error handling, deduplication logic, and follows existing patterns. The file download functionality includes appropriate fallbacks, the Teams integration correctly handles both hosted and reference attachments, and the streaming hook properly extracts files. One minor style improvement was suggested to simplify URL logic, but this doesn't affect functionality.
  • No files require special attention - the suggested style improvement in file-download.tsx is optional

Important Files Changed

File Analysis

Filename Score Overview
apps/sim/app/chat/components/message/components/file-download.tsx 4/5 New component for downloading files from chat messages with proper error handling
apps/sim/app/chat/hooks/use-chat-streaming.ts 5/5 Added file extraction logic from streaming responses with deduplication
apps/sim/tools/microsoft_teams/utils.ts 5/5 Added functions to download SharePoint/OneDrive reference attachments via Microsoft Graph API

Sequence Diagram

sequenceDiagram
    participant User
    participant ChatUI as Chat UI
    participant ChatFileDownload
    participant StreamHook as useChatStreaming
    participant API as /api/chat/stream
    participant BlockExecutor
    participant TeamsTools as MS Teams Tools
    participant GraphAPI as Microsoft Graph API

    User->>ChatUI: Send message
    ChatUI->>API: POST with outputConfigs
    API->>BlockExecutor: Execute blocks
    
    alt Microsoft Teams Block
        BlockExecutor->>TeamsTools: read_channel/read_chat (includeAttachments=true)
        TeamsTools->>GraphAPI: Fetch messages
        GraphAPI-->>TeamsTools: Messages with attachments
        TeamsTools->>GraphAPI: Download hosted contents
        TeamsTools->>GraphAPI: Download reference attachments (SharePoint/OneDrive)
        GraphAPI-->>TeamsTools: File data (base64)
        TeamsTools-->>BlockExecutor: Return with attachments array
    end
    
    BlockExecutor-->>API: Stream chunks + final data
    API-->>StreamHook: SSE stream with block outputs
    
    StreamHook->>StreamHook: extractFilesFromData()
    StreamHook->>StreamHook: Check isUserFile & deduplicate
    StreamHook->>ChatUI: Update message with files array
    
    ChatUI->>ChatFileDownload: Render file cards
    
    User->>ChatFileDownload: Click download button
    ChatFileDownload->>ChatFileDownload: getFileUrl()
    ChatFileDownload->>API: fetch(file.url or /api/files/serve)
    API-->>ChatFileDownload: File blob
    ChatFileDownload->>ChatFileDownload: Create blob URL
    ChatFileDownload->>User: Trigger browser download
Loading

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

7 files reviewed, 1 comment

Edit Code Review Agent Settings | Greptile

@waleedlatif1 waleedlatif1 changed the title improvement(chat-files) improvement(chat): add the ability to download files from the deployed chat Dec 10, 2025
@icecrasher321
Copy link
Collaborator

@greptile

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

7 files reviewed, 1 comment

Edit Code Review Agent Settings | Greptile

@aadamgough aadamgough merged commit cb6e763 into staging Dec 10, 2025
9 checks passed
@aadamgough aadamgough deleted the improvement/chat-files branch December 10, 2025 06:08
waleedlatif1 added a commit that referenced this pull request Dec 10, 2025
… docs, mcp, autolayout improvements (#2286)

* fix(mcp): prevent redundant MCP server discovery calls at runtime, use cached tool schema instead (#2273)

* fix(mcp): prevent redundant MCP server discovery calls at runtime, use cached tool schema instead

* added backfill, added loading state for tools in settings > mcp

* fix tool inp

* feat(rate-limiter): token bucket algorithm  (#2270)

* fix(ratelimit): make deployed chat rate limited

* improvement(rate-limiter): use token bucket algo

* update docs

* fix

* fix type

* fix db rate limiter

* address greptile comments

* feat(i18n): update translations (#2275)

Co-authored-by: icecrasher321 <icecrasher321@users.noreply.github.com>

* fix(tools): updated kalshi and polymarket tools to accurately reflect outputs (#2274)

* feat(i18n): update translations (#2276)

Co-authored-by: waleedlatif1 <waleedlatif1@users.noreply.github.com>

* fix(autolayout): align by handle (#2277)

* fix(autolayout): align by handle

* use shared constants everywhere

* cleanup

* fix(copilot): fix custom tools (#2278)

* Fix title custom tool

* Checkpoitn (broken)

* Fix custom tool flash

* Edit workflow returns null fix

* Works

* Fix lint

* fix(ime): prevent form submission during IME composition steps (#2279)

* fix(ui): prevent form submission during IME composition steps

* chore(gitignore): add IntelliJ IDE files to .gitignore

---------

Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com>
Co-authored-by: Waleed <walif6@gmail.com>
Co-authored-by: waleedlatif1 <waleedlatif1@users.noreply.github.com>

* feat(ui): logs, kb, emcn (#2207)

* feat(kb): emcn alignment; sidebar: popover primary; settings-modal: expand

* feat: EMCN breadcrumb; improvement(KB): UI

* fix: hydration error

* improvement(KB): UI

* feat: emcn modal sizing, KB tags; refactor: deleted old sidebar

* feat(logs): UI

* fix: add documents modal name

* feat: logs, emcn, cursorrules; refactor: logs

* feat: dashboard

* feat: notifications; improvement: logs details

* fixed random rectangle on canvas

* fixed the name of the file to align

* fix build

---------

Co-authored-by: waleed <walif6@gmail.com>

* fix(creds): glitch allowing multiple credentials in an integration (#2282)

* improvement: custom tools modal, logs-details (#2283)

* fix(docs): fix copy page button and header hook (#2284)

* improvement(chat): add the ability to download files from the deployed chat (#2280)

* added teams download and chat download file

* Removed comments

* removed comments

* component structure and download all

* removed comments

* cleanup code

* fix empty files case

* small fix

* fix(container): resize heuristic improvement (#2285)

* estimate block height for resize based on subblocks

* fix hydration error

* make more conservative

---------

Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com>
Co-authored-by: icecrasher321 <icecrasher321@users.noreply.github.com>
Co-authored-by: waleedlatif1 <waleedlatif1@users.noreply.github.com>
Co-authored-by: Siddharth Ganesan <33737564+Sg312@users.noreply.github.com>
Co-authored-by: mosa <mosaxiv@gmail.com>
Co-authored-by: Emir Karabeg <78010029+emir-karabeg@users.noreply.github.com>
Co-authored-by: Adam Gough <77861281+aadamgough@users.noreply.github.com>
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.

3 participants