# Sunfish — AGENTS.md

Servidor web y de ficheros ligero y portable. Publica carpetas a la vez por web (HTML4 apto para
navegadores de los 90), FTP y WebDAV, para mover ficheros entre equipos modernos y máquinas muy
antiguas en redes de confianza. La versión 3 es una reescritura completa de la 2.0.

## Decisiones tomadas
- **C# / .NET 10.** Toda la lógica en `src/Sunfish.Core` (compatible con AOT); aplicaciones
  finas encima. Ver `DOC/ARQUITECTURA.md`.
- **Dos ejecutables:**
  - `Sunfish.exe` (WinForms, Windows): un solo `.exe` (`PublishSingleFile`), porque WinForms no
    admite AOT.
  - `sunfish-cli` (TUI/consola, Windows/Linux/macOS): Native AOT.
  - Más adelante, interfaces GTK y macOS sobre el mismo Core.
- **Motor HTTP propio sobre `Socket`** (ni `HttpListener` ni Kestrel): sin administrador,
  tolerante con clientes antiguos, permite AOT.
  - En este proyecto se publica con AOT aunque sea un servidor web: la excepción general para
    servidores web no aplica porque no se usa ASP.NET.
- **Un share = carpeta + location**, servida a la vez por web, FTP y WebDAV.
  - Gana la *location* más específica (por segmentos, como las *locations* de prefijo de nginx).
  - Si hay índice se sirve; si no, navegador de directorios. Ver `DOC/SHARES-Y-RUTAS.md`.
- **Web en modo clásico** (HTML 3.2/4.01, sin JS, ISO-8859-1 con entidades, GIF) y **modo
  moderno** como mejora progresiva. Subidas por formulario multipart. Ver `DOC/WEB.md`.
- **FTP** activo/pasivo con juegos de caracteres antiguos; **WebDAV** clase 1 + LOCK simulado.
  Ver `DOC/FTP-Y-WEBDAV.md`.
- **Mac clásico:** MacBinary/BinHex al subir y bajar, forks guardados como AppleDouble (`._`).
  Ver `DOC/MAC-CLASICO.md`.
- **Panel de administración web** con contraseña, desactivado por defecto.
- **Sin TLS a propósito.** Se eliminan la ejecución en el servidor, compartir pantalla, los
  plugins y el requisito de administrador. Ver `DOC/SEGURIDAD.md` y `DOC/LEGACY-2.0.md`.
- **Configuración** en INI (`sunfish.conf`, claves en inglés), con importación de la 2.0.
  Textos en español e inglés (`SUNFISH_LANG`).

## Estado
- **Solo documentación** de la 3. El código de `Sunfish/` y `Sunfish Test Plugin/` es la 2.0
  (.NET Framework 4.5): no se porta y se eliminará al empezar la reescritura.
- **Remoto** actual privado, rama `master`. El README ya apunta a GitHub (rama `main`) para
  cuando se publique allí.
- **Decisiones pendientes** listadas en `DOC/README.md`.

## Compilar
Previsto: `dotnet build`, `dotnet test`, `dotnet run --project src/Sunfish.WinForms` o
`src/Sunfish.Cli`. `build.ps1` compila los dos ejecutables en Windows; `build.sh`, `sunfish-cli`
en Linux/macOS. Ver `DOC/COMPILACION-Y-PRUEBAS.md`.
