Commit Graph

10 Commits

Author SHA1 Message Date
Brooklyn Nicholson
0f510951c4 fix(docker): fall back to npm install for vendored Ink deps 2026-04-27 18:47:10 -05:00
Brooklyn Nicholson
2b81827dc0 fix(docker): use lockfile install for vendored Ink deps 2026-04-27 15:39:43 -05:00
Brooklyn Nicholson
7ada40e686 test(docker): skip dockerignore assertion in partial checkouts 2026-04-27 15:12:53 -05:00
Brooklyn Nicholson
05d1db0415 fix(docker): make TUI Ink smoke check deterministic 2026-04-27 14:56:23 -05:00
Brooklyn Nicholson
321e621096 fix(docker): keep nested deps out of build context 2026-04-27 14:52:27 -05:00
Brooklyn Nicholson
bac683d31d fix(docker): materialize bundled TUI Ink package 2026-04-27 14:44:18 -05:00
Brooklyn Nicholson
633f74504f fix(ci): resolve follow-up title edge case and flaky checks
Handle queued-title ValueError cleanup during session init, harden Discord message source building for test stubs, and fix the Dockerfile contract test syntax error. Also refresh the TUI lockfile and Nix build flags so nix ubuntu-latest no longer fails on npm lock/peer resolution drift.
2026-04-27 11:49:02 -05:00
Brooklyn Nicholson
b479205396 fix(docker): tighten TUI build contract 2026-04-27 10:15:00 -05:00
Brooklyn Nicholson
4424a0e0f7 fix(docker): prebuild TUI assets in image 2026-04-27 10:05:07 -05:00
Teknium
acd78a457e fix(docker): reap orphaned subprocesses via tini as PID 1 (#15116)
Install tini in the container image and route ENTRYPOINT through
`/usr/bin/tini -g -- /opt/hermes/docker/entrypoint.sh`.

Without a PID-1 init, orphans reparented to hermes (MCP stdio servers,
git, bun, browser daemons) never get waited() on and accumulate as
zombies. Long-running gateway containers eventually exhaust the PID
table and hit "fork: cannot allocate memory".

tini is the standard container init (same pattern Docker's --init flag
and Kubernetes pause container use). It handles SIGCHLD, reaps orphans,
and forwards SIGTERM/SIGINT to the entrypoint so hermes's existing
graceful-shutdown handlers still run. The -g flag sends signals to the
whole process group so `docker stop` cleanly terminates hermes and its
descendants, not just direct children.

Closes #15012.

E2E-verified with a minimal reproducer image: spawning 5 orphans that
reparent to PID 1 leaves 5 zombies without tini and 0 with tini.
2026-04-24 05:22:34 -07:00