mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-27 17:58:07 +00:00
The per-IP httpx transports were built once in __init__ and never torn down. A connect that reached ESTABLISHED and was then closed by the peer left its socket in CLOSE_WAIT inside the pool, and the failure path only logged and continued — so the poisoned pool was retained and leaked one descriptor per retry. With DNS for api.telegram.org failing, every poll fell through to the seed IP and leaked another fd every ~2.5s. The bot gateway reached 177 CLOSE_WAIT sockets against launchd's 256 soft limit and wedged: accept() on the gateway port, config reads and DNS resolution all failed with EMFILE, which in turn made the primary path fail and fed the loop. Build fallback transports lazily and discard them on a retryable connect failure, and bound every pool at 8 connections (httpx defaults to 100, so two seed IPs plus primary could alone exceed the fd ceiling). Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering> |
||
|---|---|---|
| .. | ||
| emails | ||
| README.md | ||
Contributor email → GitHub login mappings
This directory replaces appending entries to AUTHOR_MAP in
scripts/release.py. The old dict caused constant merge conflicts when
several salvage PRs landed at once — every PR edited the same lines of the
same file. Here, each mapping is its own file, and file additions never
conflict.
Adding a mapping
One file per commit-author email, under emails/:
python3 scripts/add_contributor.py <email> <github-login>
# or by hand:
echo "<github-login>" > contributors/emails/<email>
- File name = the exact commit-author email (as shown by
git log --format='%ae'). - File content = the GitHub login on the first non-comment line.
Lines starting with
#are comments (use them for the PR reference).
Example — contributors/emails/jane.doe@example.com:
janedoe
# PR #12345 salvage (gateway: fix session key routing)
Rules
- Do NOT add new entries to
AUTHOR_MAPinscripts/release.py. That dict is frozen legacy data; the release tooling merges it with this directory (directory entries win on duplicates). - GitHub noreply emails (
<id>+<login>@users.noreply.github.comand<login>@users.noreply.github.com) auto-resolve — no file needed. - The
Contributor Attribution CheckCI job fails a PR whose commits carry an unmapped email; the failure message prints the exact command to run.