
Tomáš DvořákandDevin
3f066b3b1e
feat(nodes): SSH bootstrap + housekeeping — install script, bundled binaries, auto-prune (#50)
* feat(nodes): SSH bootstrap + housekeeping — install script, bundled binaries, auto-prune
- `containr nodes add <user@host>` mints an enroll token, SSHes once,
runs the install script remotely; --print emits the one-liner
- Public /api/agents/install.sh + /api/agents/download/{platform};
agent binaries built into the image under /agents
- Agent-side `prune` (bounded docker system prune, volumes opt-in)
and `system_df` commands
- node_agents.auto_prune + health sweep enqueues daily prune;
offline/online transitions notify admins
- CLI nodes update/prune/commands + MCP tools (prune confirm-gated)
- Usage page: install one-liner, per-node Prune + auto toggle
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* feat(nodes): node detail page — telemetry, containers, commands, controls
/nodes/:id (admin): cpu/mem sparklines from heartbeat history
(1h/24h/7d), containers on node, command history, inline rename,
auto-prune toggle, prune-now with volume opt-in, remove. Agent rows
on the Usage page link into it.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* feat(nodes): mesh awareness + node detail page
- agent reports tailscale/netbird/zerotier/wireguard interface IPs at
register (authoritative — absent interfaces clear stored state)
- backend stores under node_agents.metadata.mesh, merged on re-register
- node detail page shows mesh addresses under the primary IP
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
---------
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-09 12:41:26 +02:00
..
2026-10-09 12:41:26 +02:00
2026-10-09 10:52:15 +02:00
2026-10-09 10:52:15 +02:00
2026-10-09 10:43:12 +02:00
2026-04-10 12:02:36 +02:00
2026-10-09 12:41:26 +02:00
2026-09-17 09:40:08 +02:00
2026-04-10 12:02:36 +02:00
2026-10-09 10:52:15 +02:00
2026-09-21 18:05:22 +02:00
2026-10-09 10:43:12 +02:00
2026-10-08 22:54:36 +02:00
2026-10-08 23:07:27 +02:00
2026-10-09 10:10:18 +02:00
2026-04-10 12:02:36 +02:00
2026-04-10 12:02:36 +02:00
2026-09-22 19:58:59 +02:00
2026-09-22 19:58:59 +02:00
2026-10-04 09:01:28 +02:00
2026-10-09 12:12:21 +02:00
2026-10-08 22:09:42 +02:00
2026-10-08 22:09:42 +02:00
2026-10-08 17:21:27 +02:00
2026-10-08 16:51:03 +02:00
2026-10-08 15:38:36 +02:00
2026-09-22 19:58:59 +02:00
2026-04-10 12:02:36 +02:00
2026-09-17 10:30:36 +02:00
2026-10-09 11:13:37 +02:00
2026-04-10 12:02:36 +02:00
2026-10-09 10:43:12 +02:00
2026-10-09 10:43:12 +02:00
2026-09-22 19:58:59 +02:00
2026-10-09 10:35:12 +02:00
2026-09-22 19:58:59 +02:00
2026-09-22 19:58:59 +02:00
2026-10-09 12:12:21 +02:00
2026-10-09 12:41:26 +02:00
2026-09-17 17:52:37 +02:00
2026-10-09 09:51:38 +02:00
2026-10-08 15:38:36 +02:00
2026-10-08 15:38:36 +02:00
2026-09-17 09:40:08 +02:00
2026-09-22 19:58:59 +02:00
2026-09-22 19:58:59 +02:00
2026-10-09 10:52:15 +02:00
2026-10-09 01:04:19 +02:00
2026-04-10 12:02:36 +02:00
2026-10-08 17:21:27 +02:00
2026-10-08 17:08:35 +02:00
2026-10-09 12:12:21 +02:00
2026-10-09 05:12:38 +02:00
2026-09-22 19:58:59 +02:00
2026-09-22 19:58:59 +02:00
2026-10-09 12:12:21 +02:00
2026-10-08 17:21:27 +02:00
2026-10-09 09:44:08 +02:00
2026-10-09 10:22:58 +02:00
2026-10-09 00:22:28 +02:00
2026-10-09 00:22:28 +02:00
2026-10-08 16:23:28 +02:00
2026-10-09 09:33:38 +02:00
2026-10-09 00:33:27 +02:00
2026-10-09 09:33:38 +02:00
2026-04-10 12:02:36 +02:00
2026-10-09 00:33:27 +02:00
2026-10-09 11:13:34 +02:00
2026-10-08 15:38:36 +02:00
2026-10-08 17:08:35 +02:00
2026-10-08 16:38:46 +02:00
2026-10-09 09:44:08 +02:00
2026-10-09 09:44:08 +02:00
2026-04-10 12:02:36 +02:00