chore: v2.8.5 — Trash opens on one folder per user, server setup installs S3
- Files → Trash: ONE sidebar entry. An admin's opens on a folder per user's Trash (My Trash first, item counts from GET /api/homes/trash, an unreadable one showing its error); a folder opens that user's Trash (path bar Trash › user, Up back to the folders). An admin may restore/purge in another user's Trash (audited); purging asks first. The merged "All users" list is gone from the UI. - A home's Trash is its user's whole recycle bin (home store + host store, items tagged `store`). - `agenthub server setup` installs one Linux user per account on Linux by default (`--no-system` opts out); install-system messages drop `sudo`. - Settings → Git: the author email suggests <username>@<AGENTHUB_EMAIL_DOMAIN>. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+34
-14
@@ -15,8 +15,9 @@ Local mode does not change at all. The login code stays dormant until
|
||||
> **What server mode separates, and what it does not.** In the dashboard and
|
||||
> its API, each developer sees only their own workspaces and the sessions,
|
||||
> prompts, events, tokens and cost under them (see [What each user sees](#what-each-user-sees)).
|
||||
> Until [one Linux user per account](#one-linux-user-per-account) is installed
|
||||
> (`agenthub server install-system`), every terminal pane runs as the one Linux
|
||||
> On Linux, `agenthub server setup` installs [one Linux user per account](#one-linux-user-per-account)
|
||||
> by default. Without it (`--no-system`, a machine that is not Linux, or an
|
||||
> install that failed), every terminal pane runs as the one Linux
|
||||
> account that runs the dashboard. An agent in a pane can then read every
|
||||
> user's folders, transcripts and the database straight from disk. Without it,
|
||||
> use server mode only with people you trust.
|
||||
@@ -27,12 +28,14 @@ On the machine that will host the dashboard, logged in as the account that
|
||||
runs it:
|
||||
|
||||
```bash
|
||||
# 1. Turn server mode on, allow the public name, and create the first admin
|
||||
# 1. Turn server mode on, allow the public name, create the first admin and,
|
||||
# on Linux, install one Linux user per account (one sudo; it moves the
|
||||
# dashboard to the system unit agenthub.service, which picks the mode up)
|
||||
agenthub server setup --hostname agenthub.example.com --admin boss
|
||||
# (asks for the admin's password twice; from a script: pipe it on stdin)
|
||||
|
||||
# 2. Restart the dashboard so it picks the mode up
|
||||
systemctl --user restart agenthub # or: agenthub start
|
||||
# 2. Log out and back in once, so your shell joins the agenthub groups
|
||||
# (with --no-system instead: systemctl --user restart agenthub)
|
||||
|
||||
# 3. Add the other people
|
||||
agenthub users add alice # developer
|
||||
@@ -42,7 +45,14 @@ agenthub users add carol --role analyst # reads everyone, works in their o
|
||||
`setup` writes `AGENTHUB_MODE=server` and `DASHBOARD_ALLOWED_HOSTS` into
|
||||
AgentHub's settings file (`~/.config/agenthub/settings.env`). The real
|
||||
environment and a checkout's `.env` still take priority over that file. Run
|
||||
setup again whenever you need to: it creates an admin only when none exists.
|
||||
setup again whenever you need to: it creates an admin only when none exists,
|
||||
runs `install-system` only while `/etc/agenthub/server.conf` is missing, and
|
||||
gives every user their Linux account (`users provision --all`, idempotent).
|
||||
The machine needs what [What a new machine needs](#what-a-new-machine-needs-before-install-system)
|
||||
lists first. If the install fails, server mode stays on with every pane on the
|
||||
host account, and the error says so: fix the cause and run
|
||||
`agenthub server install-system`, or choose that shared account on purpose
|
||||
with `agenthub server setup --no-system`.
|
||||
|
||||
## Put HTTPS in front of it
|
||||
|
||||
@@ -687,7 +697,7 @@ a pane really is. Each case below is refused or bounded, with a test in
|
||||
through `/opt/agenthub/libexec/tmux-member` (root's, in sudoers): it runs
|
||||
the call with the binary of the member's running server (`/proc/<pid>/exe`,
|
||||
found from their socket), else with `TMUX_BIN`, so a newer tmux never asks
|
||||
an older server. Until `sudo agenthub server install-system` has installed
|
||||
an older server. Until `agenthub server install-system` has installed
|
||||
it, calls use `TMUX_BIN` directly, as before. A member's server keeps its
|
||||
version until their last pane closes; the next start runs `TMUX_BIN`.
|
||||
- **Users → Members' tmux** (admin/analyst read, admin acts): each member's
|
||||
@@ -763,12 +773,21 @@ itself, once.
|
||||
`/opt/agenthub/libexec` by `install-system` only — an update of AgentHub does
|
||||
not touch root-owned files. When a release changes them (v2.7.7: `write-as`
|
||||
learned `move`/`copy` for the File Explorer; v2.8.4 added `tmux-member`),
|
||||
re-run it once:
|
||||
re-run it once, as the host account and **without** `sudo` in front (it asks
|
||||
for the sudo password itself; as root it refuses, and `sudo agenthub …` fails
|
||||
with `command not found` because sudo's `secure_path` has no `~/.local/bin`):
|
||||
|
||||
```bash
|
||||
sudo agenthub server install-system
|
||||
agenthub server install-system
|
||||
```
|
||||
|
||||
A member server that a newer tmux already reached before `tmux-member` was
|
||||
installed can stay wedged: every call on that socket — `tmux-member`'s too —
|
||||
prints `server exited unexpectedly`. If Users → Members' tmux shows it with
|
||||
no panes, stop that one server (its pid is the `ah-<name>` process running
|
||||
`tmux -S <USERS_ROOT>/<name>/.agenthub/tmux/sock`) with `sudo kill -9 <pid>`;
|
||||
the next start runs a fresh server on `TMUX_BIN`. Never `tmux kill-server`.
|
||||
|
||||
Until then the File Explorer's move, copy and delete in a member's folder
|
||||
answer `409 EUPGRADE` (listing, upload, new folder/file and zip work).
|
||||
The same re-run installs `agenthub-provision delete`, behind the Users page's
|
||||
@@ -803,9 +822,10 @@ again under the same name gets a NEW, empty Linux account and home.
|
||||
4. AgentHub installed for the host account, as the plugin or a checkout
|
||||
(`npm run setup && npm run build`), and running once
|
||||
(`agenthub start`).
|
||||
5. Server mode on, with the first admin:
|
||||
`agenthub server setup --hostname agenthub.example.com --admin boss`
|
||||
(see [Set it up](#set-it-up)).
|
||||
5. Server mode itself is NOT a step before this: `agenthub server setup`
|
||||
(see [Set it up](#set-it-up)) turns it on and then runs `install-system`
|
||||
and `users provision --all` below itself. Run the Install steps by hand only
|
||||
after a `setup --no-system` or a failed install, or to repeat one.
|
||||
6. The AI tools members will use, installed for the host account (the AI
|
||||
Tools page or by hand).
|
||||
7. The HTTPS reverse proxy (see [Put HTTPS in front of it](#put-https-in-front-of-it)).
|
||||
@@ -860,8 +880,8 @@ again changes nothing that is already in place):
|
||||
|
||||
What a new machine still needs by hand after it:
|
||||
|
||||
1. `agenthub users provision --all`: users created before S3 was on (the
|
||||
admin from `server setup` is one) have no Linux account yet.
|
||||
1. `agenthub users provision --all`: users created before S3 was on have no
|
||||
Linux account yet (`server setup` already ran this for you).
|
||||
2. Log out and back in once, so your own shell joins `agenthub` and
|
||||
`agenthub-proc` (the unit gets them on its own).
|
||||
3. `chmod o-rwx ~` for the host account if the installer warned: the database
|
||||
|
||||
Reference in New Issue
Block a user