src/server/server.ts:912
- startVibeTunnelServer()
src/server/server.ts:330
- createApp()
src/server/server.ts:57
- Config
interfacesrc/server/cli.ts:51-56
- vibetunnel fwd
commandsrc/server/services/auth-service.ts:144-271
- SSH key verificationsrc/server/middleware/auth.ts:20-105
- JWT validationsrc/server/routes/auth.ts:20-178
- Auth endpointssrc/server/pty/pty-manager.ts:57
- Session Mapsrc/server/pty/session-manager.ts:40-141
- Session lifecyclesrc/server/routes/sessions.ts:134-1252
- Session APIsrc/server/services/terminal-manager.ts:378-574
- Buffer encodingsrc/server/services/buffer-aggregator.ts:44-344
- Buffer streamingsrc/server/routes/websocket-input.ts:156-164
- Input protocolsrc/client/app-entry.ts:1-28
- App initializationsrc/client/app.ts:44-1355
- <vibetunnel-app>
src/client/components/terminal.ts:23-1567
- xterm.js wrappersrc/server/server.ts
)port
: Server port (default: 4020)bind
: Bind address (default: 127.0.0.1)isHQMode
: Run as headquarters serverhqUrl/hqUsername/hqPassword
: Remote server registrationenableSSHKeys
: Enable SSH key authenticationnoAuth
: Disable all authenticationsrc/server/routes/auth.ts:52
)
~/.ssh/authorized_keys
src/server/routes/auth.ts:101
)
/api/auth/challenge
/api/auth/ssh-key
src/server/routes/sessions.ts:134
):
~/.vibetunnel/control/
session.json
PtyManager.sessions
Mapsrc/server/pty/session-manager.ts:297
):
@state()
decoratorsrc/client/services/auth-client.ts
):
src/client/services/buffer-subscription-service.ts
):
src/client/services/websocket-input-client.ts
):
GET /api/sessions
- List all sessionsPOST /api/sessions
- Create new sessionGET /api/sessions/:id
- Get session infoDELETE /api/sessions/:id
- Kill sessionPOST /api/sessions/:id/input
- Send inputPOST /api/sessions/:id/resize
- Resize terminalGET /api/sessions/:id/stream
- SSE output streamGET /api/sessions/:id/text
- Get text outputGET /api/sessions/:id/buffer
- Get binary bufferGET /api/sessions/activity
- Get all activityPOST /api/auth/challenge
- Request challengePOST /api/auth/ssh-key
- SSH key authPOST /api/auth/password
- Password authGET /api/auth/verify
- Verify tokenGET /api/auth/config
- Get auth configGET /api/remotes
- List remote serversPOST /api/remotes/register
- Register remoteDELETE /api/remotes/:id
- Unregister remoteGET /api/worktrees
- List worktreesPOST /api/worktrees
- Create worktreePOST /api/worktrees/follow
- Enable/disable follow modeGET /api/worktrees/follow
- Get follow mode statusPOST /api/git/events
- Git hook notifications/buffers
)/ws/input
)ws://host/ws/input?sessionId=X&token=Y
Message Format:
\x00key_name\x00
/api/sessions/:id/stream
)
Uses asciinema cast v2 format:
fwd.ts
tool (src/server/fwd.ts
) wraps any command in a VibeTunnel session:
Usage: pnpm exec tsx src/fwd.ts [options] <command> [args...]
Options:
--session-id <id>
: Use specific session ID--title-mode <mode>
: none|filter|static|dynamic--update-title <title>
: Update existing session titlesrc/server/pty/socket-protocol.ts
):
src/server/services/activity-monitor.ts
)activity.json
src/server/utils/activity-detector.ts
)/tmp/vibetunnel-terminal.sock
src/server/utils/git-hooks.ts
): Manages post-commit, post-checkout, post-merge hookssrc/server/routes/git.ts:186-482
): Processes git events and handles synchronizationsrc/server/api-socket-server.ts:217-267
): Socket-based follow mode controlweb/bin/vt
): Smart command handling with path/branch detectionvibetunnel.followWorktree
stores the worktree path being followed.git/config
vt git event
which notifies server via socket API.vtbak
extensionvt git event