feat(sftp): wire toolbar buttons and live transfer progress panel
- S-1 Upload: hidden file input, FileReader reads as text, calls SFTP.WriteFile, refreshes listing
- S-2 Download: calls SFTP.ReadFile, creates Blob, triggers browser download via temporary <a> element
- S-3 Delete: confirm() dialog, calls SFTP.Delete, clears selection, refreshes listing
- S-4 New Folder: prompt() dialog, calls SFTP.Mkdir with full path, refreshes listing
- S-5 Transfer Progress: new useTransfers composable (module-level singleton) tracks active
transfers; TransferProgress consumes it directly — no prop threading required
- Added single-click selection state to file entries; download/delete buttons dim when no
valid selection exists
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>