0.73.0

Added

  • File Attachments API: эндпоинты POST/GET/DELETE /api/v1/agents/{id}/files/* для загрузки, скачивания, листинга и удаления файлов в workspace агента (Closes #90)
  • File metadata: таблица stored_files с миграцией 039, CRUD-методы в Store (SQLite + PostgreSQL)
  • File audit log: таблица file_audit_log с миграцией 040, аудит upload/download/delete с IP-адресами (Closes #95)
  • Agent file context: прикреплённые файлы из чата передаются в HandleMessage, информация о файлах добавляется в LLM-контекст (Closes #91)
  • generate_file tool: новый инструмент агента для генерации файлов в output/ директории workspace (Closes #94)
  • Email attachments: параметр attachments в email_send tool, MIME multipart вложения, FsGuard path validation (Closes #92)
  • SMTP attachments: метод SendWithAttachments в email/smtp.go с base64-encoding и multipart/mixed
  • Workspace context: ContextWithWorkspace/WorkspaceFromContext для передачи workspace path через context
  • WebSocket MediaItem: расширен полями filename, mime_type, size, file_id, path; attachments пробрасываются в bus.InboundMessage
  • Frontend file upload: кнопка 📎 в ChatComposer, drag-and-drop, предпросмотр вложений, загрузка через REST API (Closes #93)
  • Frontend download buttons: ссылки на /files/download рендерятся как стилизованные карточки скачивания в ChatMessage
  • API client: api.files.upload/download/list/delete методы, поддержка FormData

Fixed

  • Путь файла (path) не доходил до агента — MediaItem не содержал поле Path. Теперь пробрасывается через всю цепочку
  • Нельзя было отправить только файл без текста — ChatStore.sendMessage блокировал пустой текст даже при наличии media
  • Пользователь не видел свои вложения в отправленном сообщении — добавлен 📎 prefix с именами файлов