Fix file attachment API format and duplicate attachments

- Add required 'url' field to file parts in API request
- Use url, mime, filename instead of path field
- Prevent duplicate attachments by checking if path already exists
- Show all files when picker opens with empty query (use space as query)
- Filter git files only when search query provided
- Enter key now works correctly when file list has items
This commit is contained in:
Shantur Rathore
2025-10-24 00:47:02 +01:00
parent 2629276229
commit 26ab3e066f
3 changed files with 17 additions and 14 deletions

View File

@@ -78,16 +78,10 @@ const FilePicker: Component<FilePickerProps> = (props) => {
const gitFiles = cachedGitFiles() const gitFiles = cachedGitFiles()
console.log(`[FilePicker] Using ${gitFiles.length} cached git files`) console.log(`[FilePicker] Using ${gitFiles.length} cached git files`)
if (!searchQuery) { console.log(`[FilePicker] Searching files with query: "${searchQuery || "(empty)"}"`)
console.log(`[FilePicker] No search query, showing ${gitFiles.length} git files`) const searchResponse = await props.instanceClient.find.files({
setFiles(gitFiles) query: { query: searchQuery || " " },
setSelectedIndex(0) })
setLoading(false)
return
}
console.log(`[FilePicker] Searching files with query: "${searchQuery}"`)
const searchResponse = await props.instanceClient.find.files({ query: { query: searchQuery } })
const elapsed = Date.now() - startTime const elapsed = Date.now() - startTime
console.log(`[FilePicker] Search response received in ${elapsed}ms:`, searchResponse) console.log(`[FilePicker] Search response received in ${elapsed}ms:`, searchResponse)
@@ -99,7 +93,9 @@ const FilePicker: Component<FilePickerProps> = (props) => {
isGitFile: false, isGitFile: false,
})) }))
const filteredGitFiles = gitFiles.filter((f) => f.path.toLowerCase().includes(searchQuery.toLowerCase())) const filteredGitFiles = searchQuery
? gitFiles.filter((f) => f.path.toLowerCase().includes(searchQuery.toLowerCase()))
: gitFiles
const allFiles = [...filteredGitFiles, ...searchFiles] const allFiles = [...filteredGitFiles, ...searchFiles]
console.log( console.log(

View File

@@ -161,8 +161,14 @@ export default function PromptInput(props: PromptInputProps) {
function handleFileSelect(path: string) { function handleFileSelect(path: string) {
const filename = path.split("/").pop() || path const filename = path.split("/").pop() || path
const attachment = createFileAttachment(path, filename)
addAttachment(props.instanceId, props.sessionId, attachment) const existingAttachments = attachments()
const alreadyAttached = existingAttachments.some((att) => att.source.type === "file" && att.source.path === path)
if (!alreadyAttached) {
const attachment = createFileAttachment(path, filename)
addAttachment(props.instanceId, props.sessionId, attachment)
}
const currentPrompt = prompt() const currentPrompt = prompt()
const pos = atPosition() const pos = atPosition()

View File

@@ -652,8 +652,9 @@ async function sendMessage(
if (source.type === "file") { if (source.type === "file") {
parts.push({ parts.push({
type: "file" as const, type: "file" as const,
path: source.path, url: att.url,
mime: source.mime, mime: source.mime,
filename: att.filename,
}) })
} else if (source.type === "text") { } else if (source.type === "text") {
parts.push({ parts.push({