696470ce8a
Replaces the process-wide first-config-wins client singleton with a per-identity slot map. The singleton baked the first profile's workspace_id and bearer into one shared client, so in multi-profile processes (gateway multiplexer, dashboard, cron) every profile's memory landed in whichever workspace initialized first — cross-tenant bleed with no error (#69123, #74065). cache key: (host, workspace, base_url, environment, provenance paths, effective timeout, credential fingerprint). the fingerprint hashes the OAuth REFRESH token (stable across in-place access-token rotation, changes on re-auth/account switch) or the static api key — so re-running 'hermes honcho setup' to switch accounts produces a new identity instead of silently reusing the old account's client and writing tenant B's data with tenant A's bearer, a hole per-path keys alone cannot close. same-identity slots with a different fingerprint or timeout are EVICTED on replacement, so credential churn can't accumulate pinned clients — the replaced client's pools close when its last holder drops. timeout changes rebuild via the key (the old explicit staleness check is subsumed). failed in-place OAuth rotation resets only the client's own slot. reset_honcho_client() clears everything, preserving test and oauth-flow re-login semantics. per-config-identity caching was first proposed in #69142; the provenance-key shape follows #81401. this implementation adds the credential fingerprint and eviction they lacked. Co-authored-by: NaMinhyeok <NaMinhyeok@users.noreply.github.com> Co-authored-by: angel12 <angel12@users.noreply.github.com>