Building a modern alternative to Salesforce, powered by the community.
Find a file
Félix Malfait 2bb939b4b5
Add file attachment support to agent chat messaging (#19517)
## Summary
This PR adds support for attaching files to agent chat messages. Users
can now upload files when sending messages to the AI agent, and these
files are properly processed, stored, and made available to the agent
with signed URLs.

## Key Changes

- **File attachment input**: Added `fileIds` parameter to the
`sendChatMessage` GraphQL mutation to accept file IDs from the client
- **File processing**: Implemented `buildFilePartsFromIds()` method to
convert file IDs into file UI parts with signed URLs
- **Message composition**: Updated user messages to include both text
and file parts when files are attached
- **File URL signing**: Integrated `FileUrlService` to generate signed
URLs for files in the AgentChat folder, ensuring secure access
- **Message persistence**: Files are now included in the message parts
stored in the database and retrieved when loading conversation history
- **File metadata mapping**: Enhanced `mapDBPartToUIMessagePart()` to
properly extract MIME types from file entities and include file IDs

## Implementation Details

- Files are fetched from the database using the provided file IDs and
workspace context
- Each file is converted to an `ExtendedFileUIPart` with proper metadata
(filename, MIME type, signed URL, and file ID)
- When loading messages from the database, file parts are enhanced with
signed URLs to ensure they remain accessible
- The `loadMessagesFromDB()` method now requires the workspace ID to
properly sign file URLs
- File attachments are seamlessly integrated into the existing message
part system alongside text content

https://claude.ai/code/session_01TAdN1gBzeiYELX4XDrrYY1

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
2026-04-09 22:37:03 +02:00
.claude-pr Add file attachment support to agent chat messaging (#19517) 2026-04-09 22:37:03 +02:00
.cursor Replace typeorm binary by database:migrate:generate (#19515) 2026-04-09 16:25:10 +00:00
.github Add application-logs module with driver pattern for logic function log persistence (#19486) 2026-04-09 14:35:24 +00:00
.vscode Migrate from ESLint to OxLint (#18443) 2026-03-06 01:03:50 +01:00
.yarn Refactor dependency graph for SDK, client-sdk and create-app (#18963) 2026-03-26 10:56:52 +00:00
packages Add file attachment support to agent chat messaging (#19517) 2026-04-09 22:37:03 +02:00
.dockerignore Scaffold light twenty app dev container (#18734) 2026-03-18 20:10:54 +01:00
.gitattributes Consolidate Prettier config and improve consistency (#15191) 2025-10-18 12:24:35 +02:00
.gitignore polishing next home hero visual (#19284) 2026-04-02 20:26:05 +00:00
.mcp.json Fix AI chat re-renders and refactored code (#18585) 2026-03-21 12:52:21 +00:00
.nvmrc Upgrade to Node 24 (#13730) 2025-08-07 17:02:12 +02:00
.yarnrc.yml Refactor dependency graph for SDK, client-sdk and create-app (#18963) 2026-03-26 10:56:52 +00:00
CLAUDE.md Replace typeorm binary by database:migrate:generate (#19515) 2026-04-09 16:25:10 +00:00
jest.preset.js Move tools/eslint-rules to packages/twenty-eslint-rules (#17203) 2026-01-17 07:37:17 +01:00
LICENSE feat(sso): allow to use OIDC and SAML (#7246) 2024-10-21 20:07:08 +02:00
nx.json fix: replace npm pkg set with node script in set-local-version target (#19344) 2026-04-05 18:56:37 +00:00
package.json Bump @storybook/react-vite from 10.2.13 to 10.3.3 (#19232) 2026-04-02 08:49:11 +00:00
README.md docs: fix contributor docs links and typos (#18637) 2026-03-14 12:54:31 +01:00
tsconfig.base.json Revert "[hacktoberfest] feat: add fireflies" (#15589) 2025-11-04 12:25:23 +01:00
yarn.config.cjs [ENHC] Create Yarn constraints to validate node version (#10542) 2025-02-27 15:18:07 +01:00
yarn.lock chore: replace glb files and lottie with optimized variants (#19503) 2026-04-09 14:27:13 +00:00

Twenty logo

The #1 Open-Source CRM

🌐 Website · 📚 Documentation · Roadmap · Discord · Figma


Cover


Installation

See: 🚀 Self-hosting 🖥️ Local Setup

Why Twenty

We built Twenty for three reasons:

CRMs are too expensive, and users are trapped. Companies use locked-in customer data to hike prices. It shouldn't be that way.

A fresh start is required to build a better experience. We can learn from past mistakes and craft a cohesive experience inspired by new UX patterns from tools like Notion, Airtable or Linear.

We believe in open-source and community. Hundreds of developers are already building Twenty together. Once we have plugin capabilities, a whole ecosystem will grow around it.


What You Can Do With Twenty

Please feel free to flag any specific needs you have by creating an issue.

Below are a few features we have implemented to date:

Personalize layouts with filters, sort, group by, kanban and table views

Companies Kanban Views

Customize your objects and fields

Setting Custom Objects

Create and manage permissions with custom roles

Permissions

Automate workflow with triggers and actions

Workflows

Emails, calendar events, files, and more

Other Features


Stack

Thanks

Chromatic Greptile Sentry Crowdin E2B

Thanks to these amazing services that we use and recommend for UI testing (Chromatic), code review (Greptile), catching bugs (Sentry) and translating (Crowdin).

Join the Community