Restore the ACP editor-integration implementation that was present on the original PR branch but did not actually land in main. Includes: - acp_adapter/ server, session manager, event bridge, auth, permissions, and tool helpers - hermes acp subcommand and hermes-acp entry point - hermes-acp curated toolset - ACP registry manifest, setup guide, and ACP test suite - jupyter-live-kernel data science skill from the original branch Also updates the revived ACP code for current main by: - resolving runtime providers through the modern shared provider router - binding ACP sessions to per-session cwd task overrides - tracking duplicate same-name tool calls with FIFO IDs - restoring terminal approval callbacks after prompts - normalizing supporting docs/skill metadata Validated with tests/acp and the full pytest suite (-n0).
25 lines
831 B
Python
25 lines
831 B
Python
"""ACP auth helpers — detect the currently configured Hermes provider."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Optional
|
|
|
|
|
|
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
|