SIGN IN SIGN UP

Merge PR #1: multi-printer, job history, spool reallocation, SP slot

Manually integrates davidkinnes/CFSync:spoolman features on top of
existing SSH improvements (sshpass, multi-password, dual file paths).

- Multi-printer support: config normalizes all legacy formats into a
  printers list; state becomes MultiAppState{printers: Dict[str, AppState]}
- Direct spool input slot: "SP" constant, PrinterInputId union type,
  rendered as "Printer Spool Input" card in UI
- Job history: last 10 jobs stored in st.job_history, captured on print
  end with per-slot spool metadata
- Spool reallocation: POST /api/ui/jobs/reallocate_spool transfers
  filament usage between Spoolman spools for completed jobs
- WebSocket auto-linking: _ws_autolink_by_serialnum() alongside SSH
- GET /api/printers endpoint returning printer list with connection status
- UI: multi-printer layout, recent jobs card, history relink modal

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
K
koen01 committed
3b52b20751dccbfeb39406b643206ecc6f83952f
Parent: 51baf4b