First step of friend library sharing (Cassette):
- cassette/syncthing_api.py: a typed wrapper over the *local* Syncthing's
REST API. Key and address come from Syncthing's config.xml (config.json
may override); every failure is a SyncthingError naming the step, what
Syncthing said, and whether it's not running / a bad key / a refusal.
- cassette/state.py: friends, invites and share selections, kept in the
machine-local ~/.local/share/lintunes/cassette, never the synced data dir.
- cassette/host.py: one machine runs Cassette. config.json flags it,
preferences.json names it, and the other machine greys the menu group
out and says where friend sharing lives.
- Connections ▸ Sync Settings…: VLC-style list + page, editing a copy
that only OK writes. General shows Syncthing's status with a next step
for every failure, the display name and an avatar picker.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>