mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-31 19:16:29 +00:00
`/goal status` reported "No active goal" for a goal that was live: the desktop's slash pipeline resolved its target session differently than the submit pipeline, so the command ran against a different session than the chat on screen. `/goal` state is persisted per-session in SessionDB (`state_meta` key `goal:<session_id>`). slash.ts resolved with a bare `hint || activeRef || createBackendSessionForSend()`, so whenever the runtime binding was momentarily absent — profile swap, reconnect, orphan-reap, request timeout — it silently MINTED A NEW SESSION and ran there. submit.ts already handles this case by resuming the routed stored session on its owning profile (#55578, #67603). Extract that ladder into one shared resolver both pipelines use, per the "one resolver owns each policy" rule in apps/desktop/AGENTS.md. This fixes the whole class, not just `/goal`: every exec/rpc slash command (`/usage`, `/status`, `/tools`, …) had the same hole. A targeted durable conversation whose runtime cannot be rebound now returns null instead of forking the chat — reporting that a command could not run beats running it against the wrong session. |
||
|---|---|---|
| .. | ||
| bootstrap-installer | ||
| desktop | ||
| shared | ||