SIGN IN SIGN UP

Add SSH-based serialNum auto-link and fix spool swap unlink

- Fetch material_box_info.json via SFTP (paramiko) when a slot transitions
  to RFID state (state=2); parse serialNum field as Spoolman spool ID and
  auto-link directly — no extra-field lookup required
- Add _ws_last_state tracking to detect RFID→non-RFID spool swaps and
  automatically unlink the Spoolman spool when a different physical spool
  is loaded into a linked slot
- Rate-limit SSH fetch to once per 30s; runs in thread executor so WS
  loop never blocks; lazy-imports paramiko with a clear error if missing
- Add paramiko>=3.0 to requirements.txt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
K
koen01 committed
fd0c46cae2c0551ea558a6679848e5096860f4ab
Parent: 1ad11ae