Add VPN configuration tools and agent documentation
Created comprehensive VPN setup tooling for Peaceful Spirit L2TP/IPsec connection and enhanced agent documentation framework. VPN Configuration (PST-NW-VPN): - Setup-PST-L2TP-VPN.ps1: Automated L2TP/IPsec setup with split-tunnel and DNS - Connect-PST-VPN.ps1: Connection helper with PPP adapter detection, DNS (192.168.0.2), and route config (192.168.0.0/24) - Connect-PST-VPN-Standalone.ps1: Self-contained connection script for remote deployment - Fix-PST-VPN-Auth.ps1: Authentication troubleshooting for CHAP/MSChapv2 - Diagnose-VPN-Interface.ps1: Comprehensive VPN interface and routing diagnostic - Quick-Test-VPN.ps1: Fast connectivity verification (DNS/router/routes) - Add-PST-VPN-Route-Manual.ps1: Manual route configuration helper - vpn-connect.bat, vpn-disconnect.bat: Simple batch file shortcuts - OpenVPN config files (Windows-compatible, abandoned for L2TP) Key VPN Implementation Details: - L2TP creates PPP adapter with connection name as interface description - UniFi auto-configures DNS (192.168.0.2) but requires manual route to 192.168.0.0/24 - Split-tunnel enabled (only remote traffic through VPN) - All-user connection for pre-login auto-connect via scheduled task - Authentication: CHAP + MSChapv2 for UniFi compatibility Agent Documentation: - AGENT_QUICK_REFERENCE.md: Quick reference for all specialized agents - documentation-squire.md: Documentation and task management specialist agent - Updated all agent markdown files with standardized formatting Project Organization: - Moved conversation logs to dedicated directories (guru-connect-conversation-logs, guru-rmm-conversation-logs) - Cleaned up old session JSONL files from projects/msp-tools/ - Added guru-connect infrastructure (agent, dashboard, proto, scripts, .gitea workflows) - Added guru-rmm server components and deployment configs Technical Notes: - VPN IP pool: 192.168.4.x (client gets 192.168.4.6) - Remote network: 192.168.0.0/24 (router at 192.168.0.10) - PSK: rrClvnmUeXEFo90Ol+z7tfsAZHeSK6w7 - Credentials: pst-admin / 24Hearts$ Files: 15 VPN scripts, 2 agent docs, conversation log reorganization, guru-connect/guru-rmm infrastructure additions Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
378
projects/msp-tools/guru-connect/proto/guruconnect.proto
Normal file
378
projects/msp-tools/guru-connect/proto/guruconnect.proto
Normal file
@@ -0,0 +1,378 @@
|
||||
syntax = "proto3";
|
||||
package guruconnect;
|
||||
|
||||
// ============================================================================
|
||||
// Session Management
|
||||
// ============================================================================
|
||||
|
||||
message SessionRequest {
|
||||
string agent_id = 1;
|
||||
string session_token = 2;
|
||||
SessionType session_type = 3;
|
||||
string client_version = 4;
|
||||
}
|
||||
|
||||
message SessionResponse {
|
||||
bool success = 1;
|
||||
string session_id = 2;
|
||||
string error = 3;
|
||||
DisplayInfo display_info = 4;
|
||||
}
|
||||
|
||||
enum SessionType {
|
||||
SCREEN_CONTROL = 0;
|
||||
VIEW_ONLY = 1;
|
||||
BACKSTAGE = 2;
|
||||
FILE_TRANSFER = 3;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Display Information
|
||||
// ============================================================================
|
||||
|
||||
message DisplayInfo {
|
||||
repeated Display displays = 1;
|
||||
int32 primary_display = 2;
|
||||
}
|
||||
|
||||
message Display {
|
||||
int32 id = 1;
|
||||
string name = 2;
|
||||
int32 x = 3;
|
||||
int32 y = 4;
|
||||
int32 width = 5;
|
||||
int32 height = 6;
|
||||
bool is_primary = 7;
|
||||
}
|
||||
|
||||
message SwitchDisplay {
|
||||
int32 display_id = 1;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Video Frames
|
||||
// ============================================================================
|
||||
|
||||
message VideoFrame {
|
||||
int64 timestamp = 1;
|
||||
int32 display_id = 2;
|
||||
int32 sequence = 3;
|
||||
|
||||
oneof encoding {
|
||||
RawFrame raw = 10;
|
||||
EncodedFrame vp9 = 11;
|
||||
EncodedFrame h264 = 12;
|
||||
EncodedFrame h265 = 13;
|
||||
}
|
||||
}
|
||||
|
||||
message RawFrame {
|
||||
int32 width = 1;
|
||||
int32 height = 2;
|
||||
bytes data = 3; // Zstd compressed BGRA
|
||||
bool compressed = 4;
|
||||
repeated DirtyRect dirty_rects = 5;
|
||||
bool is_keyframe = 6; // Full frame vs incremental
|
||||
}
|
||||
|
||||
message DirtyRect {
|
||||
int32 x = 1;
|
||||
int32 y = 2;
|
||||
int32 width = 3;
|
||||
int32 height = 4;
|
||||
}
|
||||
|
||||
message EncodedFrame {
|
||||
bytes data = 1;
|
||||
bool keyframe = 2;
|
||||
int64 pts = 3;
|
||||
int64 dts = 4;
|
||||
}
|
||||
|
||||
message VideoAck {
|
||||
int32 sequence = 1;
|
||||
int64 timestamp = 2;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Cursor
|
||||
// ============================================================================
|
||||
|
||||
message CursorShape {
|
||||
uint64 id = 1;
|
||||
int32 hotspot_x = 2;
|
||||
int32 hotspot_y = 3;
|
||||
int32 width = 4;
|
||||
int32 height = 5;
|
||||
bytes data = 6; // BGRA bitmap
|
||||
}
|
||||
|
||||
message CursorPosition {
|
||||
int32 x = 1;
|
||||
int32 y = 2;
|
||||
bool visible = 3;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Input Events
|
||||
// ============================================================================
|
||||
|
||||
message MouseEvent {
|
||||
int32 x = 1;
|
||||
int32 y = 2;
|
||||
MouseButtons buttons = 3;
|
||||
int32 wheel_delta_x = 4;
|
||||
int32 wheel_delta_y = 5;
|
||||
MouseEventType event_type = 6;
|
||||
}
|
||||
|
||||
enum MouseEventType {
|
||||
MOUSE_MOVE = 0;
|
||||
MOUSE_DOWN = 1;
|
||||
MOUSE_UP = 2;
|
||||
MOUSE_WHEEL = 3;
|
||||
}
|
||||
|
||||
message MouseButtons {
|
||||
bool left = 1;
|
||||
bool right = 2;
|
||||
bool middle = 3;
|
||||
bool x1 = 4;
|
||||
bool x2 = 5;
|
||||
}
|
||||
|
||||
message KeyEvent {
|
||||
bool down = 1; // true = key down, false = key up
|
||||
KeyEventType key_type = 2;
|
||||
uint32 vk_code = 3; // Virtual key code (Windows VK_*)
|
||||
uint32 scan_code = 4; // Hardware scan code
|
||||
string unicode = 5; // Unicode character (for text input)
|
||||
Modifiers modifiers = 6;
|
||||
}
|
||||
|
||||
enum KeyEventType {
|
||||
KEY_VK = 0; // Virtual key code
|
||||
KEY_SCAN = 1; // Scan code
|
||||
KEY_UNICODE = 2; // Unicode character
|
||||
}
|
||||
|
||||
message Modifiers {
|
||||
bool ctrl = 1;
|
||||
bool alt = 2;
|
||||
bool shift = 3;
|
||||
bool meta = 4; // Windows key
|
||||
bool caps_lock = 5;
|
||||
bool num_lock = 6;
|
||||
}
|
||||
|
||||
message SpecialKeyEvent {
|
||||
SpecialKey key = 1;
|
||||
}
|
||||
|
||||
enum SpecialKey {
|
||||
CTRL_ALT_DEL = 0;
|
||||
LOCK_SCREEN = 1;
|
||||
PRINT_SCREEN = 2;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Clipboard
|
||||
// ============================================================================
|
||||
|
||||
message ClipboardData {
|
||||
ClipboardFormat format = 1;
|
||||
bytes data = 2;
|
||||
string mime_type = 3;
|
||||
}
|
||||
|
||||
enum ClipboardFormat {
|
||||
CLIPBOARD_TEXT = 0;
|
||||
CLIPBOARD_HTML = 1;
|
||||
CLIPBOARD_RTF = 2;
|
||||
CLIPBOARD_IMAGE = 3;
|
||||
CLIPBOARD_FILES = 4;
|
||||
}
|
||||
|
||||
message ClipboardRequest {
|
||||
// Request current clipboard content
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Quality Control
|
||||
// ============================================================================
|
||||
|
||||
message QualitySettings {
|
||||
QualityPreset preset = 1;
|
||||
int32 custom_fps = 2; // 1-60
|
||||
int32 custom_bitrate = 3; // kbps
|
||||
CodecPreference codec = 4;
|
||||
}
|
||||
|
||||
enum QualityPreset {
|
||||
QUALITY_AUTO = 0;
|
||||
QUALITY_LOW = 1; // Low bandwidth
|
||||
QUALITY_BALANCED = 2;
|
||||
QUALITY_HIGH = 3; // Best quality
|
||||
}
|
||||
|
||||
enum CodecPreference {
|
||||
CODEC_AUTO = 0;
|
||||
CODEC_RAW = 1; // Raw + Zstd (LAN)
|
||||
CODEC_VP9 = 2;
|
||||
CODEC_H264 = 3;
|
||||
CODEC_H265 = 4;
|
||||
}
|
||||
|
||||
message LatencyReport {
|
||||
int64 rtt_ms = 1;
|
||||
int32 fps = 2;
|
||||
int32 bitrate_kbps = 3;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Chat Messages
|
||||
// ============================================================================
|
||||
|
||||
message ChatMessage {
|
||||
string id = 1; // Unique message ID
|
||||
string sender = 2; // "technician" or "client"
|
||||
string content = 3; // Message text
|
||||
int64 timestamp = 4; // Unix timestamp
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Control Messages
|
||||
// ============================================================================
|
||||
|
||||
message Heartbeat {
|
||||
int64 timestamp = 1;
|
||||
}
|
||||
|
||||
message HeartbeatAck {
|
||||
int64 client_timestamp = 1;
|
||||
int64 server_timestamp = 2;
|
||||
}
|
||||
|
||||
message Disconnect {
|
||||
string reason = 1;
|
||||
}
|
||||
|
||||
// Server commands agent to start streaming video
|
||||
message StartStream {
|
||||
string viewer_id = 1; // ID of viewer requesting stream
|
||||
int32 display_id = 2; // Which display to stream (0 = primary)
|
||||
}
|
||||
|
||||
// Server commands agent to stop streaming
|
||||
message StopStream {
|
||||
string viewer_id = 1; // Which viewer disconnected
|
||||
}
|
||||
|
||||
// Agent reports its status periodically when idle
|
||||
message AgentStatus {
|
||||
string hostname = 1;
|
||||
string os_version = 2;
|
||||
bool is_elevated = 3;
|
||||
int64 uptime_secs = 4;
|
||||
int32 display_count = 5;
|
||||
bool is_streaming = 6;
|
||||
string agent_version = 7; // Agent version (e.g., "0.1.0-abc123")
|
||||
string organization = 8; // Company/organization name
|
||||
string site = 9; // Site/location name
|
||||
repeated string tags = 10; // Tags for categorization
|
||||
}
|
||||
|
||||
// Server commands agent to uninstall itself
|
||||
message AdminCommand {
|
||||
AdminCommandType command = 1;
|
||||
string reason = 2; // Why the command was issued
|
||||
}
|
||||
|
||||
enum AdminCommandType {
|
||||
ADMIN_UNINSTALL = 0; // Uninstall agent and remove from startup
|
||||
ADMIN_RESTART = 1; // Restart the agent process
|
||||
ADMIN_UPDATE = 2; // Download and install update
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Auto-Update Messages
|
||||
// ============================================================================
|
||||
|
||||
// Update command details (sent with AdminCommand or standalone)
|
||||
message UpdateInfo {
|
||||
string version = 1; // Target version (e.g., "0.2.0")
|
||||
string download_url = 2; // HTTPS URL to download new binary
|
||||
string checksum_sha256 = 3; // SHA-256 hash for verification
|
||||
bool mandatory = 4; // If true, agent must update immediately
|
||||
}
|
||||
|
||||
// Update status report (agent -> server)
|
||||
message UpdateStatus {
|
||||
string current_version = 1; // Current running version
|
||||
UpdateState state = 2; // Current update state
|
||||
string error_message = 3; // Error details if state is FAILED
|
||||
int32 progress_percent = 4; // Download progress (0-100)
|
||||
}
|
||||
|
||||
enum UpdateState {
|
||||
UPDATE_IDLE = 0; // No update in progress
|
||||
UPDATE_CHECKING = 1; // Checking for updates
|
||||
UPDATE_DOWNLOADING = 2; // Downloading new binary
|
||||
UPDATE_VERIFYING = 3; // Verifying checksum
|
||||
UPDATE_INSTALLING = 4; // Installing (rename/copy)
|
||||
UPDATE_RESTARTING = 5; // About to restart
|
||||
UPDATE_COMPLETE = 6; // Update successful (after restart)
|
||||
UPDATE_FAILED = 7; // Update failed
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Top-Level Message Wrapper
|
||||
// ============================================================================
|
||||
|
||||
message Message {
|
||||
oneof payload {
|
||||
// Session
|
||||
SessionRequest session_request = 1;
|
||||
SessionResponse session_response = 2;
|
||||
|
||||
// Video
|
||||
VideoFrame video_frame = 10;
|
||||
VideoAck video_ack = 11;
|
||||
SwitchDisplay switch_display = 12;
|
||||
|
||||
// Cursor
|
||||
CursorShape cursor_shape = 15;
|
||||
CursorPosition cursor_position = 16;
|
||||
|
||||
// Input
|
||||
MouseEvent mouse_event = 20;
|
||||
KeyEvent key_event = 21;
|
||||
SpecialKeyEvent special_key = 22;
|
||||
|
||||
// Clipboard
|
||||
ClipboardData clipboard_data = 30;
|
||||
ClipboardRequest clipboard_request = 31;
|
||||
|
||||
// Quality
|
||||
QualitySettings quality_settings = 40;
|
||||
LatencyReport latency_report = 41;
|
||||
|
||||
// Control
|
||||
Heartbeat heartbeat = 50;
|
||||
HeartbeatAck heartbeat_ack = 51;
|
||||
Disconnect disconnect = 52;
|
||||
StartStream start_stream = 53;
|
||||
StopStream stop_stream = 54;
|
||||
AgentStatus agent_status = 55;
|
||||
|
||||
// Chat
|
||||
ChatMessage chat_message = 60;
|
||||
|
||||
// Admin commands (server -> agent)
|
||||
AdminCommand admin_command = 70;
|
||||
|
||||
// Auto-update messages
|
||||
UpdateInfo update_info = 75; // Server -> Agent: update available
|
||||
UpdateStatus update_status = 76; // Agent -> Server: update progress
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user