Metadata-Version: 2.4
Name: abstract_host
Version: 0.0.4
Summary: A host's toolserver setup from a package: shared venv, hub node, router, log capture, nginx site, session hooks, per-account audit + activity log, one node per user.
Author-email: putkoff <partners@abstractendeavors.com>
License: MIT
Requires-Python: >=3.10
Description-Content-Type: text/markdown

# abstract_host

The host setup around [abstract_toolserver](https://pypi.org/project/abstract_toolserver/) as a
package, so a host can be rebuilt from PyPI alone. Run as root:

    abstract-host capture              # write /etc/abstract-host/host.json from the live host
    abstract-host status               # what install would change (dry run)
    abstract-host install [--only hub,router,…] [--dry-run]

`install` is idempotent: it writes only what differs, restarts only units whose files
changed, and reports `ok` / `changed` per item.

| component | what it maintains |
|---|---|
| venv | the shared venv every node runs from (`abstract_toolserver[server,db]`) |
| users | every node account exists with its home (system accounts created if missing) |
| hub | the host node unit, `TOOLSERVER_PERMIT_HUB=1`, journal tag |
| router | the public session/operator router unit |
| logs | log capture into the hub DB (`abstract-toolserver logs follow`) |
| nginx | the router's public site (+ Secure Files paths) via the abstract-nginx tier gate |
| hooks | SessionStart `abstract-toolserver session register --hook` in settings files |
| accounts | per watched account: audit rules (its uid anywhere + a watch on its home), ONE `abstract-host-activity.service` writing `/var/log/<user>/activity.log` (what the account does, wherever) and `home.log` (what anyone does inside its home), logrotate, home ACLs, linger, door key |
| nodes | `abstract-toolserver node install` for every node in the manifest |

`tool_venvs` in the manifest are upgraded by `abstract-toolserver node update` alongside the nodes.
