mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-18 04:41:56 +00:00
68 lines
2.3 KiB
Python
68 lines
2.3 KiB
Python
"""ACP auth helpers — detect and advertise Hermes authentication methods."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any, Optional
|
|
|
|
|
|
TERMINAL_SETUP_AUTH_METHOD_ID = "hermes-setup"
|
|
|
|
|
|
def detect_provider() -> Optional[str]:
|
|
"""Resolve the active Hermes runtime provider, or None if unavailable."""
|
|
try:
|
|
from hermes_cli.runtime_provider import resolve_runtime_provider
|
|
runtime = resolve_runtime_provider()
|
|
api_key = runtime.get("api_key")
|
|
provider = runtime.get("provider")
|
|
if isinstance(api_key, str) and api_key.strip() and isinstance(provider, str) and provider.strip():
|
|
return provider.strip().lower()
|
|
except Exception:
|
|
return None
|
|
return None
|
|
|
|
|
|
def has_provider() -> bool:
|
|
"""Return True if Hermes can resolve any runtime provider credentials."""
|
|
return detect_provider() is not None
|
|
|
|
|
|
def build_auth_methods() -> list[Any]:
|
|
"""Return registry-compatible ACP auth methods for Hermes.
|
|
|
|
The official ACP registry validates that agents advertise at least one
|
|
usable auth method during the initial handshake. A fresh Zed install may
|
|
not have Hermes provider credentials configured yet, so Hermes always
|
|
advertises a terminal setup method. When credentials are already present,
|
|
it also advertises the resolved provider as the default agent-managed
|
|
runtime credential method.
|
|
"""
|
|
from acp.schema import AuthMethodAgent, TerminalAuthMethod
|
|
|
|
methods: list[Any] = []
|
|
provider = detect_provider()
|
|
if provider:
|
|
methods.append(
|
|
AuthMethodAgent(
|
|
id=provider,
|
|
name=f"{provider} runtime credentials",
|
|
description=(
|
|
"Authenticate Hermes using the currently configured "
|
|
f"{provider} runtime credentials."
|
|
),
|
|
)
|
|
)
|
|
|
|
methods.append(
|
|
TerminalAuthMethod(
|
|
id=TERMINAL_SETUP_AUTH_METHOD_ID,
|
|
name="Configure Hermes provider",
|
|
description=(
|
|
"Open Hermes' interactive model/provider setup in a terminal. "
|
|
"Use this when Hermes has not been configured on this machine yet."
|
|
),
|
|
type="terminal",
|
|
args=["--setup"],
|
|
)
|
|
)
|
|
return methods
|