- SSH keepalive every 30s with max 3 retries (configurable via env vars)
- TCP keepalive on client sockets to detect dead connections
- Increase pre-auth timeout from 30s to 300s to match TS6 query timeout
- Add keepalive settings to Config dataclass
- Replace module-level env var globals with frozen Config dataclass
- Add pyproject.toml with project metadata, ruff, mypy, pytest config
- Expand unit tests from 11 to 30 (sanitize edge cases, SSH failure
modes, proxy forwarding, cleanup, auth loop edge cases)
- Fix all ruff and mypy findings
- Integration tests no longer need importlib.reload hack
- Dockerfile installs from pyproject.toml for consistency
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Test channellist+channelinfo, ban CRUD, servergrouplist, whoami,
clientlist, hostinfo, permissionlist, and logview. Extract helper
methods _login_and_use() and _send_cmd() for DRY test code.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The proxy's Docker IP must be in TS6's query_ip_allowlist.txt,
otherwise logins will fail with error 520 after anti-flood kicks in.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Bridges the legacy TeamSpeak 3 ServerQuery raw protocol (TCP 10011) to
TeamSpeak 6's SSH Query interface (TCP 10022). Includes unit tests,
Docker setup, and integration test scaffold.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>