{"repo":"NousResearch/hermes-agent","public_id":"88667","display_label":"Callable api_key breaks custom provider resolution","summary":"A bug where a callable api_key causes an AttributeError during custom provider resolution, along with fixes to guard against this in auth and agent code paths.","subsystem":"agent","counts":{"members":7,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":2,"attempt_prs":4},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":113969},"resolution":{"state":"resolved","by":"pr-114333"},"freshness":{"state":"verified","last_verified_at":"2026-09-17T18:29:42+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.2857142857142857},"fix_edges":[{"issue_number":88667,"pr_number":113969,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":88667,"pr_number":114333,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":109595,"pr_number":113969,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true}],"members":[{"kind":"issue","number":88667,"title":"[Bug]: callable api_key from key_cmd crashes custom-provider resolution with AttributeError","url":null,"state":"closed"},{"kind":"pr","number":88668,"title":"fix(auth): keep callable api_key intact when resolving a custom provider","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#88667","number":88667},{"kind":"pr","value":"#114333","number":114333},{"kind":"pr","value":"#114333","number":114333}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":89106,"title":"fix(agent): guard callable api_key in resolve_provider_client (#88667)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#88668","number":88668},{"kind":"pr","value":"#88668","number":88668}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":105595,"title":"fix(auth): keep a callable key_cmd credential in the api_key branch","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#114333","number":114333}],"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":107344,"title":"fix(aux): keep callable key_cmd credentials intact in all custom-provider resolution branches","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#114333","number":114333},{"kind":"pr","value":"#113969","number":113969},{"kind":"pr","value":"#113969","number":113969},{"kind":"pr","value":"#114333","number":114333}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":113969,"title":"fix(aux): async aux calls to named custom providers keep their key_cmd bearer and extra_headers (#109595, salvage #109626)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/auxiliary_async_rebuild.py","agent/auxiliary_client.py","tests/agent/test_auxiliary_named_custom_providers.py"]},{"kind":"pr","number":114333,"title":"A callable key_cmd credential survives every auxiliary custom-provider branch (#88667, credit #107344)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["agent/auxiliary_client.py","contributors/emails/[redacted:email]","tests/agent/test_command_token_source.py"]}],"trust":{"default_tier":"verified","includes_suggested":false}}