Add file attachments with @ mentions and drag & drop support

- Create attachment type system with file, text, symbol, and agent sources
- Implement file picker with SDK integration (find.files, file.status)
- Add @ detection in prompt input to trigger file search
- Create attachment chips UI for managing attached files
- Add attachment state management per session
- Update message submission to include attachments
- Implement drag & drop support for adding files
- Show git-modified files first in file picker with +/- indicators
- Filter files as user types after @
- Clear attachments after successful message send
This commit is contained in:
Shantur Rathore
2025-10-23 22:46:29 +01:00
parent 9dfb3cd612
commit bdd9837538
7 changed files with 536 additions and 18 deletions

View File

@@ -626,7 +626,7 @@ async function sendMessage(
instanceId: string,
sessionId: string,
prompt: string,
attachments: string[] = [],
attachments: any[] = [],
): Promise<void> {
const instance = instances().get(instanceId)
if (!instance || !instance.client) {
@@ -639,13 +639,33 @@ async function sendMessage(
throw new Error("Session not found")
}
const parts: any[] = [
{
type: "text" as const,
text: prompt,
},
]
if (attachments.length > 0) {
for (const att of attachments) {
const source = att.source
if (source.type === "file") {
parts.push({
type: "file" as const,
path: source.path,
mime: source.mime,
})
} else if (source.type === "text") {
parts.push({
type: "text" as const,
text: source.value,
})
}
}
}
const requestBody = {
parts: [
{
type: "text" as const,
text: prompt,
},
],
parts,
...(session.agent && { agent: session.agent }),
...(session.model.providerId &&
session.model.modelId && {