- Restore agent_id in success output. Pre-PR the user saw the hub's
canonical identifier; the merge had reduced this to just `(name)`,
which made it impossible to correlate the registered agent with
anything on the hub side without inspecting the config file.
- Add a 15s timeout to the register POST. urllib's default is none,
so a stuck hub would block the CLI indefinitely.
- Read User-Agent version from package metadata instead of hardcoding
"0.1", so it tracks releases. Also corrected the URL to the canonical
Source URL listed in pyproject.toml (was pointing at a likely-404
github.com path).
- Add two tests guarding the User-Agent. The whole point of the Cloudflare
fix was to set a non-default UA; previously no test asserted this, so
a refactor could silently reintroduce the 403 code 1010 bug.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Map the hub's structured `{detail: {reason}}` responses (invalid_key,
expired, revoked, already_consumed) and 429 rate-limits to actionable
CLI messages so users know to mint a fresh key from Settings → RIA
Agents instead of seeing a raw HTTPError.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>