mirror of
https://github.com/m1ngsama/TNT.git
synced 2026-02-08 00:54:03 +00:00
This PR addresses critical performance bottlenecks, improves UX, and eliminates technical debt. ### Key Changes **1. Performance Optimization:** - **Startup**: Rewrote `message_load` to scan `messages.log` backwards from the end - Complexity reduced from O(FileSize) to O(MaxMessages) - Large log file startup: seconds → milliseconds - **Rendering**: Optimized TUI rendering to use line clearing (`\033[K`) instead of full-screen clearing (`\033[2J`) - Eliminated visual flicker **2. libssh API Migration:** - Replaced deprecated message-based API with callback-based server implementation - Removed `#pragma GCC diagnostic ignored "-Wdeprecated-declarations"` - Ensures future libssh compatibility **3. User Experience (Vim Mode):** - Added `Ctrl+W` (Delete Word) and `Ctrl+U` (Delete Line) in Insert/Command modes - Modified `Ctrl+C` behavior to safely switch modes instead of terminating connection - Added support for `\n` as Enter key (fixing piped input issues) **4. Project Structure:** - Moved all test scripts to `tests/` directory - Added `make test` target - Updated CI/CD to run comprehensive test suite ### Verification - ✅ All tests passing (17/17) - ✅ CI passing on Ubuntu and macOS - ✅ AddressSanitizer clean - ✅ Valgrind clean (no memory leaks) - ✅ Zero compilation warnings ### Code Quality **Rating:** 🟢 Good Taste - Algorithm-driven optimization (not hacks) - Simplified architecture (callback-based API) - Zero breaking changes (all tests pass)
2.1 KiB
2.1 KiB
TNT
Terminal chat server. Vim-style interface. SSH-based.
Install
curl -sSL https://raw.githubusercontent.com/m1ngsama/TNT/main/install.sh | sh
Or download from releases.
Run
tnt # port 2222
tnt -p 3333 # custom port
PORT=3333 tnt # env var
Connect: ssh -p 2222 localhost
Anonymous Access: By default, users can connect with ANY username and ANY password (or empty password). No SSH keys required. This makes TNT perfect for public chat servers.
Security
Configure via environment variables.
Access Control
TNT_ACCESS_TOKEN="secret" tnt # require password
TNT_BIND_ADDR=127.0.0.1 tnt # localhost only
Without TNT_ACCESS_TOKEN, server is open (default).
Rate Limiting
TNT_MAX_CONNECTIONS=100 tnt # total limit
TNT_MAX_CONN_PER_IP=10 tnt # per-IP limit
TNT_RATE_LIMIT=0 tnt # disable (testing only)
Default: 64 total, 5 per IP, rate limiting enabled.
SSH Options
TNT_SSH_LOG_LEVEL=3 tnt # verbose logging (0-4)
Keys
INSERT (default)
ESC→ NORMALEnter→ sendBackspace→ delete
NORMAL
i→ INSERT:→ COMMANDj/k→ scrollg/G→ top/bottom?→ help
COMMAND
:list→ users:help→ commandsESC→ back
Build
make # normal
make debug # with symbols
make asan # sanitizer
make check # static analysis
Requires: libssh
Deploy
See DEPLOYMENT.md for systemd setup.
Files
messages.log chat history
host_key SSH key (auto-gen)
tnt.service systemd unit
Test
make test # run comprehensive test suite
# Individual tests are in tests/ directory
Docs
README- man page styleEASY_SETUP.md- 🚀 快速部署指南 / Quick Setup GuideHACKING- dev guideDEPLOYMENT.md- productionCICD.md- automationQUICKREF- cheat sheet
License
MIT