Persist every device that has ever logged in to the Go server in a small JSON store (devices.json, overridable with YAMA_DEVICES_FILE and capped by YAMA_DEVICES_MAX, default 1000 newest). The store follows the users.json convention: atomic temp-file write with fsync and rename, a 500 ms debounce for bursts of reconnects, first_seen preserved across logins, and pruning that evicts offline records before devices that are still connected. Devices connected at shutdown are stamped offline before the final flush so last_seen stays accurate across restarts. The server advertises an offlineDevices capability and device_list now appends historical devices that are not online, marked with online:false and last_seen. The web UI shows an Offline checkbox after Total/Showing (state kept in localStorage), renders offline cards dimmed and dashed, and always lists them in the screen-wall sidebar. Older servers without the capability keep the online-only list. Grid and List cards gain a delete button after the terminal button, admin only, behind a confirmation dialog. Deleting an offline device removes its history record; deleting an online device first sends the single-byte TOKEN_UNINSTALL command (matching the MFC OnOnlineUninstall flow) and then removes the record too, so the device does not come back as a dead offline entry. The agent's own disconnect then runs the existing cleanup path: screen and terminal sub-connections are closed, the hub entry is removed, and browsers receive device_offline to release their watch sets, wall sessions, and stream references. Wall mode exposes no delete action. Tests cover history persistence/pruning/recovery, offline ordering, the device_list merge, and all three delete outcomes (offline removal, online uninstall with a single 0x3F byte, and viewer rejection). Co-Authored-By: deepseek-flash
100 lines
1.3 KiB
Plaintext
100 lines
1.3 KiB
Plaintext
# Prerequisites
|
|
*.d
|
|
.svn
|
|
Debug
|
|
Release
|
|
|
|
# Compiled Object files
|
|
*.slo
|
|
*.lo
|
|
*.o
|
|
*.obj
|
|
|
|
# Precompiled Headers
|
|
*.gch
|
|
*.pch
|
|
|
|
# Compiled Dynamic libraries
|
|
*.so
|
|
*.dylib
|
|
*.dll
|
|
|
|
# Fortran module files
|
|
*.mod
|
|
*.smod
|
|
|
|
# Compiled Static libraries
|
|
*.lai
|
|
*.la
|
|
*.a
|
|
|
|
# Executables
|
|
*.exe
|
|
*.out
|
|
*.app
|
|
|
|
# =========================
|
|
# Operating System Files
|
|
# =========================
|
|
|
|
# Windows
|
|
# =========================
|
|
|
|
# Windows thumbnail cache files
|
|
Thumbs.db
|
|
ehthumbs.db
|
|
ehthumbs_vista.db
|
|
|
|
# Folder config file
|
|
Desktop.ini
|
|
|
|
# Recycle Bin used on file shares
|
|
$RECYCLE.BIN/
|
|
|
|
# Windows Installer files
|
|
*.cab
|
|
*.msi
|
|
*.msm
|
|
*.msp
|
|
|
|
# Windows shortcuts
|
|
*.lnk
|
|
*.sdf
|
|
server/2015Remote/2015Remote.aps
|
|
*.ipch
|
|
*.aps
|
|
*.suo
|
|
server/2015Remote.VC.db
|
|
server/2015Remote.opensdf
|
|
*.7z
|
|
*.ini
|
|
test/build/
|
|
|
|
# Security-sensitive design documents
|
|
docs/MultiLayerLicense_Design.md
|
|
docs/MultiLayerLicense_Implementation.md
|
|
docs/_CodeReference.md
|
|
linux/CMakeFiles/*
|
|
Releases/*
|
|
*.log
|
|
*.txt
|
|
linux/Makefile
|
|
linux/cmake_install.cmake
|
|
.vs
|
|
client/ghost_vs2015.vcxproj.user
|
|
docs/macOS_Support_Design.md
|
|
settings.local.json
|
|
*.zip
|
|
*.lic
|
|
YAMA.code-workspace
|
|
.claude/settings.json
|
|
.vscode/settings.json
|
|
Bin/*
|
|
nul
|
|
server/go/web/assets/index.html
|
|
server/go/users.json
|
|
server/go/devices.json
|
|
server/go/build/
|
|
server/go/.claude/settings.json
|
|
android/app/.cxx/
|