4ee87f76ee
When Hermes Desktop works against a REGISTERED gateway connection, cron jobs execute on that gateway and persist their run sessions in the gateway's state.db. But every REST call in the app — the cron surface included — carried only `profile`, so `hermes:api` routed it through the local profile pool and `_list_cron_job_runs_sync` read a local state.db with zero `source='cron'` rows. Every job showed "No runs yet" while the same endpoint on the gateway returned the real runs (#87882). Fix at the routing seam: - HermesApiRequest gains an optional `connectionId`. The renderer's cron helpers (list/get/runs/delivery-targets/create/update/pause/resume/ trigger/delete/blueprints) now tag the active registry connection via a new connectionScoped() twin of profileScoped(), fed from the same setApiRequestConnection seam store/gateway already maintains for the plugin socket. - The hermes:api main-process handler resolves a tagged request through ensureRegistryBackend — the SAME pool the job list and WS traffic use — instead of the legacy profile route. Shared remote/cloud hosts (one gateway, many profiles) get the path scoped with ?profile= via the new pathWithProfileScope helper, factored out of pathWithGlobalRemoteProfile. - '' / 'local' / absent connectionId keep the byte-identical v1 route, so single-source and connection-config-remote users are unaffected. This covers the run-history panel, the sidebar cron peek, and every other cron surface in one place, since they all funnel through the same helpers. Fixes #87882