hermes-agent/hermes_cli/web_routers
Brooklyn Nicholson 21aaa8b4f8 feat(desktop): resolve a session's pull request
A session row can say whether its work is open, merged or closed, and link
to it. The join is the session's own repo + branch, asked of GitHub in one
batched GraphQL request per repo (branch aliases, not a `gh pr list` page
that a busy repo crowds ours out of), through the remote-aware git facade so
a desktop on a remote gateway asks the backend's `gh`.

Two ways a session's branch can't answer, both covered:

- It ran on trunk. Fork PRs share our branch namespace, so asking about
  `main` badges a stranger's PR onto it — trunk is never asked about, and
  cross-repository PRs are dropped server-side either way.
- It worked in a worktree, so the branch it recorded at start isn't where
  the PR came from. Creating a PR from the review pane binds the session to
  the branch it actually used, and for sessions that predate that, the PR is
  recovered from the transcript: `gh pr create` prints a bare PR url and
  nothing else, so a tool result whose whole output is one is a claim rather
  than a mention. Scanned read-only across profiles, once per session ever.
2026-08-09 06:21:04 -05:00
..
__init__.py
cron.py fix(gateway): serialize config mutations and finish the router off-loop sweep 2026-08-08 13:28:28 +05:30
git.py feat(desktop): resolve a session's pull request 2026-08-09 06:21:04 -05:00
mcp.py fix(dashboard): close config-RMW gaps left by the off-loop sweep 2026-08-08 13:28:28 +05:30
profiles.py feat(desktop): resolve a session's pull request 2026-08-09 06:21:04 -05:00
sessions.py perf(dashboard): keyset pagination for streaming session export 2026-08-08 13:36:08 +05:30
skills.py fix(gateway): serialize config mutations and finish the router off-loop sweep 2026-08-08 13:28:28 +05:30
tools.py fix(dashboard): close config-RMW gaps left by the off-loop sweep 2026-08-08 13:28:28 +05:30