56de3c1428
Bot Mode's bot-to-bot send (`hermes -p <bot> chat --in ~ -c "Bot Chat" --create-if-missing -Q -q "..."`) runs one turn and exits. When the turn's in-loop transcript flush failed transiently (state.db write-lock contention with a multiplex gateway), the one-shot path had no end-of-run durable retry: the reply reached stdout and agent.log while the resumed titled session's stored history never changed (#88583). The interactive CLI is immune — it retries the flush on the next persist point and finalizes the row on quit — but every one-shot exit path lacked both. Fix the whole class with cli._flush_one_shot_session_store(): - final _persist_session retry at one-shot exit (idempotent — per-message persisted-marker stamps mean already-written turns are not re-written) - drain queued async token-accounting deltas - end_session(..., "cli_close") so resumed/created titled session rows no longer dangle open forever after one-shot runs Wired into _finalize_single_query (quiet -Q -q AND human -q paths, ahead of memory-provider shutdown so nothing later can lose the turn) and into the kanban SIGTERM handler before os._exit(0), which skips atexit and the SessionDB token-drain hook entirely (same gap class as PR #50881). Handed-off sessions (#88234) and persistence-isolated forks (_persist_disabled) are skipped. Fixes #88583 🤖 Generated with Hermes Agent