TNT/README.md
m1ngsama 07fd7b1513
refactor: optimize rendering, log loading, and migrate to libssh callback API (#9)
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)
2026-02-07 23:17:55 +08:00

114 lines
2.1 KiB
Markdown

# TNT
Terminal chat server. Vim-style interface. SSH-based.
## Install
```sh
curl -sSL https://raw.githubusercontent.com/m1ngsama/TNT/main/install.sh | sh
```
Or download from [releases](https://github.com/m1ngsama/TNT/releases).
## Run
```sh
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
```sh
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
```sh
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
```sh
TNT_SSH_LOG_LEVEL=3 tnt # verbose logging (0-4)
```
## Keys
**INSERT** (default)
- `ESC` → NORMAL
- `Enter` → send
- `Backspace` → delete
**NORMAL**
- `i` → INSERT
- `:` → COMMAND
- `j/k` → scroll
- `g/G` → top/bottom
- `?` → help
**COMMAND**
- `:list` → users
- `:help` → commands
- `ESC` → back
## Build
```sh
make # normal
make debug # with symbols
make asan # sanitizer
make check # static analysis
```
Requires: `libssh`
## Deploy
See [DEPLOYMENT.md](DEPLOYMENT.md) for systemd setup.
## Files
```
messages.log chat history
host_key SSH key (auto-gen)
tnt.service systemd unit
```
## Test
```sh
make test # run comprehensive test suite
# Individual tests are in tests/ directory
```
## Docs
- `README` - man page style
- `EASY_SETUP.md` - 🚀 **快速部署指南 / Quick Setup Guide**
- `HACKING` - dev guide
- `DEPLOYMENT.md` - production
- `CICD.md` - automation
- `QUICKREF` - cheat sheet
## License
MIT