Files
tether/agent
Patrick Ecord d3dd785921 core: file/image transfer over the RTC data channel (chunked, P2P)
Add Engine.send_file(name, mime, data) and MessageHandler.on_file. Files stream
over each open RTC data channel as binary frames — M<json meta> · C<16-byte
id><16KB chunk>… · E<id> — and reassemble on the receiver in arrival order
(the channel is reliable+ordered). The data channel now distinguishes string
(clipboard) from binary (file) messages. Files are direct-only — never relayed,
matching prefer-direct.

Transport trait gains start(...files) + a default-noop send_file (only RTC
implements it). The agent saves received files to ~/Downloads; the apps stub
on_file (receive UI is a follow-up). All MessageHandler impls updated.

Proven by examples/file_demo.rs: A sends a 50KB blob (4 chunks), B reassembles
it to identical bytes over RTC.

Follow-ups: file transfer over LAN (same-network without RTC); attach/preview UI;
progress + size cap.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 11:54:29 -05:00
..

tether-agent

Headless clipboard sync daemon on the shared tethercore engine (SSE + RTC + LAN, prefer-direct E2E). One Rust binary for macOS / Linux / Windows.

tether-agent                       # run in the foreground (Ctrl-C to stop)
tether-agent install               # run on login as a background service
tether-agent uninstall             # remove the service
tether-agent status                # service status

# config (applies to run + install; account derives the shared room):
tether-agent install --account you@example.com --name "Patrick's NAS"
  • macOS: a launchd LaunchAgent at ~/Library/LaunchAgents/io.pecord.tether-agent.plist (logs → ~/Library/Logs/tether-agent.log).
  • Linux: a systemd user unit at ~/.config/systemd/user/tether-agent.service (loginctl enable-linger to start at boot without login).
  • Defaults: --server https://tether.pecord.io, account-derived room, hostname as name.