web: unify Agent management and add a draggable link board

Replace Probe pages with directed Agent links, shared deployment controls and unified display data. Add node dragging, canvas pan and zoom, saved layouts, and per-direction link controls.
This commit is contained in:
justme committed 2026-10-21 11:55:50 +08:00
1 parent 016dbc2bbf
commit 15f0023614
32 files changed
+937 -1093

No files matched your search

+3 -3
View File
@@ -30,7 +30,7 @@ function AddAgentDialog({ onClose, onCreated }: { onClose: () => void; onCreated
const [created, setCreated] = useState<CreatedJoinTokenDto>()
const [controllers, setControllers] = useState<string[] | null>(null)
if (created) return <JoinTokenCreated created={created} kind="Agent" onClose={onClose} />
if (created) return <JoinTokenCreated created={created} onClose={onClose} />
return (
<Dialog
@@ -151,7 +151,7 @@ export function Agents() {
<th>名称</th>
<th>地址</th>
<th>版本</th>
<th>连着的 Probe</th>
<th>连接(拨出 / 接入)</th>
<th>最后在线</th>
<th>标签</th>
</tr>
@@ -171,7 +171,7 @@ export function Agents() {
<td className="mono muted">{a.public_host || '—'}</td>
<td className="muted">{a.agent_version ?? '—'}</td>
<td>
<Chip tone={a.probes.length > 0 ? 'ok' : ''}>{a.probes.length} 个</Chip>
<Chip tone={a.outgoing.length + a.dialers.length > 0 ? 'ok' : ''}>{a.outgoing.length} / {a.dialers.length}</Chip>
</td>
<td className="muted">{fmtAgo(a.last_seen_at)}</td>
<td>