Repository navigation
1.1.0
Added
- Per-device sessions: each login creates a device (id, name, platform from the User-Agent) kept in
devices.jsonbeside the token (mode 0600, at most 20; signing in on one more signs out the least recently seen).GET /api/deviceslists them (currentmarks the caller),PATCH /api/devices/{id}renames,DELETE /api/devices/{id}andDELETE /api/sessionsign a device out: its push subscriptions are removed and its open/wsand/api/chatstreams close within a second. - Pairing codes: a signed-in device gets a 6-character code with
POST /api/devices/pair(valid 5 minutes, single use, at most 5 live) and a new device logs in with{"code": "..."}onPOST /api/session. Ten wrong codes in ten minutes invalidate all codes and block code logins for ten minutes (token login keeps working). - Push subscriptions record the device that saved them (
deviceIdinpush.json; old entries stay valid). - An agent is recognized before its first message:
/api/chatsends an emptyresetwith the agent name (instead ofnone/not-found) and/api/chat/summarieslists the terminal withmessages: 0, so the app shows its icon and opens the chat right away (Claude Code, pi, Codex, opencode). - Chat transcripts show Claude Code messages typed while the agent was working: a message waiting in Claude's queue is sent with
queued: trueand removed through a newremoveSSE event ({"ids": [...]}) once Claude takes it; a queued message delivered in the middle of a turn is now kept as a user message (it used to be missing from the chat). Background task notifications in the queue are not shown.
Changed
- Host setup guide: a systemd user unit for herdr-core (
scripts/herdr-core.service) and a clean restart script (scripts/herdr-core-restart), signing out a lost device instead of rotating the token, and what lives in~/.config/spacee-herdr. - The session cookie no longer holds the access token: it is
<device id>.<device secret>and only the secret's hash is stored. Cookies from before (equal to the token) are upgraded to a device automatically on first use, so signed-in phones stay signed in.
Fixed
- Chat transcripts no longer show the raw markup of Claude Code slash commands:
/clearor/model opusappear as typed, and a command's output (for example "Set model to …") appears as a system message (empty output is dropped).
The web app changes for this version are in spacee-herdr-frontend v1.1.0; its build is embedded in this binary.