feat: expand discovery with systemd services, LXC/VMs, SSH terminal, and filebrowser

- Add systemd service discovery to backend
- Add Proxmox LXC/VM detection
- Add hostType field to config for better host categorization
- Fix SSH trust between hosts (ubuntu/grizzley -> truenas/proxmox)
- Add SSH terminal support via xterm.js
- Add filebrowser for browsing host filesystems
- Update frontend types and components for new node types
This commit is contained in:
2026-02-20 17:18:33 -08:00
parent a4cff9894c
commit 3dc5d236a2
23 changed files with 2680 additions and 70 deletions

60
server/AGENTS.md Normal file
View File

@@ -0,0 +1,60 @@
# Server (Express API Backend)
**Generated:** 2026-02-19
**Location:** server/
## OVERVIEW
Express 5 + TypeScript backend serving REST API endpoints for homelab topology discovery.
## STRUCTURE
```
server/
├── index.ts # Express app entry, CORS, route mounting
├── config.ts # Server configuration
├── types.ts # Shared TypeScript types
├── config.json # Runtime config (contains hosts, credentials)
├── config.example.json
└── routes/ # API endpoints
├── discover.ts # POST /api/discover - SSH discovery
├── config.ts # GET/PUT /api/config
├── stats.ts # GET /api/stats
└── files.ts # GET /api/files
```
## WHERE TO LOOK
| Task | File | Notes |
|------|------|-------|
| Add new endpoint | server/routes/{name}.ts | Create router, import in index.ts |
| Modify CORS | server/index.ts | CORS middleware (line 12-15) |
| Change port | server/index.ts | PORT const (line 9) |
## CONVENTIONS
- **Route files**: Export default router, mount in index.ts via `app.use('/api', router)`
- **Error handling**: Return JSON `{ error: string }` on failure
- **Config**: Use server/config.ts for shared config, not hardcode
- **Credentials**: Never log or expose SSH credentials in responses
## ANTI-PATTERNS
- **NEVER expose SSH credentials in API responses**
- **DO NOT store credentials in source** - use server/config.json
## API ENDPOINTS
| Method | Path | Purpose |
|--------|------|---------|
| POST | /api/discover | Run SSH discovery on hosts |
| GET | /api/config | Get configuration |
| PUT | /api/config | Update configuration |
| GET | /api/stats | Get statistics |
| GET | /api/files | Get file topology |
## NOTES
- Server runs on port 3001
- CORS allows only `http://localhost:3000`
- Health check: GET /api/health