Add is_online/is_persistent for persistent agent sessions
- Sessions now track whether agent is online or offline - Persistent agents (no support code) stay in session list when disconnected - Dashboard shows online/offline status with color indicator - Connect/Chat buttons disabled when agent is offline - Agent reconnection reuses existing session
This commit is contained in:
@@ -670,12 +670,14 @@
|
||||
container.innerHTML = '<div style="padding: 12px;">' + machines.map(m => {
|
||||
const started = new Date(m.started_at).toLocaleString();
|
||||
const isSelected = selectedMachine?.id === m.id;
|
||||
const statusColor = m.is_online ? 'hsl(142, 76%, 50%)' : 'hsl(0, 0%, 50%)';
|
||||
const statusText = m.is_online ? 'Online' : 'Offline';
|
||||
return '<div class="sidebar-item' + (isSelected ? ' active' : '') + '" onclick="selectMachine(\'' + m.id + '\')" style="margin-bottom: 8px; padding: 12px;">' +
|
||||
'<div style="display: flex; align-items: center; gap: 12px;">' +
|
||||
'<div style="width: 10px; height: 10px; border-radius: 50%; background: hsl(142, 76%, 50%);"></div>' +
|
||||
'<div style="width: 10px; height: 10px; border-radius: 50%; background: ' + statusColor + ';"></div>' +
|
||||
'<div>' +
|
||||
'<div style="font-weight: 500;">' + (m.agent_name || m.agent_id.slice(0,8)) + '</div>' +
|
||||
'<div style="font-size: 12px; color: hsl(var(--muted-foreground));">Connected ' + started + '</div>' +
|
||||
'<div style="font-size: 12px; color: hsl(var(--muted-foreground));">' + statusText + ' • ' + started + '</div>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'</div>';
|
||||
@@ -698,10 +700,15 @@
|
||||
|
||||
const m = selectedMachine;
|
||||
const started = new Date(m.started_at).toLocaleString();
|
||||
const statusColor = m.is_online ? 'hsl(142, 76%, 50%)' : 'hsl(0, 0%, 50%)';
|
||||
const statusText = m.is_online ? 'Online' : 'Offline';
|
||||
const connectDisabled = m.is_online ? '' : 'disabled';
|
||||
const connectTitle = m.is_online ? '' : 'title="Agent is offline"';
|
||||
|
||||
container.innerHTML =
|
||||
'<div class="detail-section">' +
|
||||
'<div class="detail-section-title">Machine Info</div>' +
|
||||
'<div class="detail-row"><span class="detail-label">Status</span><span class="detail-value" style="color: ' + statusColor + ';">' + statusText + '</span></div>' +
|
||||
'<div class="detail-row"><span class="detail-label">Agent ID</span><span class="detail-value">' + m.agent_id.slice(0,8) + '...</span></div>' +
|
||||
'<div class="detail-row"><span class="detail-label">Session ID</span><span class="detail-value">' + m.id.slice(0,8) + '...</span></div>' +
|
||||
'<div class="detail-row"><span class="detail-label">Connected</span><span class="detail-value">' + started + '</span></div>' +
|
||||
@@ -709,8 +716,8 @@
|
||||
'</div>' +
|
||||
'<div class="detail-section">' +
|
||||
'<div class="detail-section-title">Actions</div>' +
|
||||
'<button class="btn btn-primary" style="width: 100%; margin-bottom: 8px;" onclick="connectToMachine(\'' + m.id + '\')">Connect</button>' +
|
||||
'<button class="btn btn-outline" style="width: 100%; margin-bottom: 8px;" onclick="openChat(\'' + m.id + '\', \'' + (m.agent_name || 'Client').replace(/'/g, "\\'") + '\')">Chat</button>' +
|
||||
'<button class="btn btn-primary" style="width: 100%; margin-bottom: 8px;" onclick="connectToMachine(\'' + m.id + '\')" ' + connectDisabled + ' ' + connectTitle + '>Connect</button>' +
|
||||
'<button class="btn btn-outline" style="width: 100%; margin-bottom: 8px;" onclick="openChat(\'' + m.id + '\', \'' + (m.agent_name || 'Client').replace(/'/g, "\\'") + '\')" ' + connectDisabled + '>Chat</button>' +
|
||||
'<button class="btn btn-outline" style="width: 100%; margin-bottom: 8px;" disabled>Transfer Files</button>' +
|
||||
'<button class="btn btn-outline" style="width: 100%; color: hsl(0, 62.8%, 50%);" onclick="disconnectMachine(\'' + m.id + '\', \'' + (m.agent_name || m.agent_id).replace(/'/g, "\\'") + '\')">Disconnect</button>' +
|
||||
'</div>';
|
||||
|
||||
Reference in New Issue
Block a user