Skip to content

1.1.0

Choose a tag to compare

@spacecodee spacecodee released this 03 Nov 21:15
· 33 commits to main since this release

Added

  • Per-device sessions: each login creates a device (id, name, platform from the User-Agent) kept in devices.json beside the token (mode 0600, at most 20; signing in on one more signs out the least recently seen). GET /api/devices lists them (current marks the caller), PATCH /api/devices/{id} renames, DELETE /api/devices/{id} and DELETE /api/session sign a device out: its push subscriptions are removed and its open /ws and /api/chat streams 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": "..."} on POST /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 (deviceId in push.json; old entries stay valid).
  • An agent is recognized before its first message: /api/chat sends an empty reset with the agent name (instead of none/not-found) and /api/chat/summaries lists the terminal with messages: 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: true and removed through a new remove SSE 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: /clear or /model opus appear 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.