Document dashboard systemd service and editable install on the box

This commit is contained in:
Denton Social
2026-09-23 22:20:00 -05:00
parent ea2e5b8045
commit 6c980efec0
+21 -17
View File
@@ -55,15 +55,13 @@ run here (`python3 -m pytest tests/ -q --ignore=tests/integration`).
engine/LLM paths). Copy `config.example.json` to `config.json` and edit. engine/LLM paths). Copy `config.example.json` to `config.json` and edit.
`data/decisions.jsonl`, `data/runs.jsonl`, and `data/drafts/` are runtime `data/decisions.jsonl`, `data/runs.jsonl`, and `data/drafts/` are runtime
artifacts and gitignored too. artifacts and gitignored too.
- **Known Gitea quirk**: `git fetch` from the box can fail with - The Gitea instance was rebuilt fresh (Sep 2026) after its git pack transfer
`remote: sh: bad option '--oneshot'` — a server-side `authorized_keys` broke (`sh: bad option '--oneshot'` — a stray system `uploadpack.packObjectsHook`
forced-command bug on this instance (deploy/account keys both hit it; the killed pack generation; the old AGENTS.md note blaming `authorized_keys` was
dev key's entry works, so pushes from dev are fine). Fallback when the box a misdiagnosis). Both the dev key (`shitass@nunya`) and the box key
can't pull: make a bundle on dev and fetch it on the box — (`guppy@semif-agent`) are re-registered; clone/fetch/push all work now. If a
`git bundle create /tmp/sf.bundle main` → scp to the box → fresh machine can't pull, the durable fix is on the Gitea host:
`git fetch /tmp/sf.bundle "+refs/heads/main:refs/remotes/origin/main"` `git config --system --unset-all uploadpack.packObjectsHook`.
`git checkout -f -B main refs/remotes/origin/main`. Fixing the Gitea SSH
(or using an HTTPS PAT on the box) is tracked as the durable solution.
- Decision rows logged before the `run_id` threading landed show up under - Decision rows logged before the `run_id` threading landed show up under
run_id `"?"` in the dashboard — that's expected, not a bug. run_id `"?"` in the dashboard — that's expected, not a bug.
@@ -77,6 +75,9 @@ The AMD box `guppy` (`abby@192.168.8.181`) is the real run target. Key facts:
SSH_ASKPASS=/tmp/opencode/askpass.sh SSH_ASKPASS_REQUIRE=force setsid -w ssh-add ~/.ssh/id_ed25519 SSH_ASKPASS=/tmp/opencode/askpass.sh SSH_ASKPASS_REQUIRE=force setsid -w ssh-add ~/.ssh/id_ed25519
``` ```
The agent dies if this machine restarts; redo it each session. The agent dies if this machine restarts; redo it each session.
- `semif_agent` is editable-installed into the box venv
(`pip install -e ~/semif-agent --no-deps`), so `python -m semif_agent.cli ...`
works from any directory on the box, not just the repo root.
- Run the agent on the box: - Run the agent on the box:
```sh ```sh
cd ~/semif-agent && export HF_HOME=/home/abby/hf cd ~/semif-agent && export HF_HOME=/home/abby/hf
@@ -86,14 +87,17 @@ The AMD box `guppy` (`abby@192.168.8.181`) is the real run target. Key facts:
~/semif-venv/bin/python -m semif_agent.cli relabel <id> <outcome> ~/semif-venv/bin/python -m semif_agent.cli relabel <id> <outcome>
~/semif-venv/bin/python -m semif_agent.cli dashboard --port 8765 ~/semif-venv/bin/python -m semif_agent.cli dashboard --port 8765
``` ```
- Dashboard: browser UI on the box at http://192.168.8.181:8765/ (bound to - Dashboard: runs as a systemd **user** service on the box
`0.0.0.0` via `dashboard.host` in config.json, so any LAN machine can reach (`semif-dashboard.service`, linger enabled, binds `0.0.0.0:8765`), so it's up
it; `--host`/`--port` override on the CLI). Note the submit/relabel POST after reboots with no manual launch — browser UI at http://192.168.8.181:8765/.
endpoints are therefore open to the whole LAN. It works in live mode on Manage it with `systemctl --user status/restart semif-dashboard.service`.
the box (submit runs the real engine + LLM) and in replay mode anywhere Note the submit/relabel POST endpoints are therefore open to the whole LAN.
(reads decisions.jsonl + runs.jsonl; submit degrades to a JSON error without It works in live mode on the box (submit runs the real engine + LLM) and in
the engine). Relabeling in the UI writes a human override (3x weight in replay mode anywhere (`--replay`; reads decisions.jsonl + runs.jsonl; submit
dream) via `POST /api/relabel`. degrades to a JSON error without the engine). Relabeling in the UI writes a
human override (3x weight in dream) via `POST /api/relabel`. On the dev
machine, replay mode: `cd ~/Repos/semif-agent && python3 -m semif_agent.cli
dashboard --replay` (binds 127.0.0.1:8765).
- Integration tests (real engine + real LLM) only run on the box: - Integration tests (real engine + real LLM) only run on the box:
`~/semif-venv/bin/python -m pytest tests/integration -q -s` `~/semif-venv/bin/python -m pytest tests/integration -q -s`
They take ~100s (model load ~34s). Run them in the background and poll — They take ~100s (model load ~34s). Run them in the background and poll —