- scheduler.js: check agents every 2 min — alert on offline/online
transitions and CPU/memory/disk threshold breaches (90%)
- notificationService.js: sendAgentAlert() sends via email, webhook,
ntfy, and saves to in-app notifications table
- package.json: pin better-sqlite3 to 9.6.0 (compatible with Node 20)
- update-server.sh: add React client build step; use npm install
instead of rm -rf + npm ci for faster incremental updates
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Server fixes:
- database.js: auto-create data/ directory on startup — was crashing on
fresh clone because the gitignored directory didn't exist
- better-sqlite3 upgraded to latest (13.x) for Node 26 compatibility
Network discovery:
- discoverNetwork() accepts optional subnet param; scans that range instead
of auto-detecting when provided
- New GET /api/network-subnets endpoint returns detected local interfaces
so UI can offer quick-select buttons
- Discovery modal: subnet text input + Scan button + auto-detect quick-select;
local subnet buttons populate once the modal is open
- server/index.js: pass subnet from request body to discoverNetwork()
Infra:
- React client runs on PORT=3456 in dev to avoid port conflicts
- .claude/launch.json added for one-command preview via Express (serves
the pre-built client, no port conflict with the preview tool)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add in-app notification system with database storage
- Implement bell icon component with unread count badge in dashboard header
- Add full Notifications page tab with pagination and filtering (All/Unread/Read)
- Implement real-time WebSocket push notifications to all connected clients
- Add notification API endpoints: GET, PUT /read, DELETE, POST /clear
- Fix critical bug in notificationService where 'status' variable was undefined
- Add Notifications route to App.js routing
- Enhanced UI with notification popup in header and dedicated full-page view
- Auto-reconnect WebSocket with 5s timeout on disconnect
- Support rich notification content with resource details and timestamps