Move provider adapters (anthropic, bedrock, azure), platform adapters (telegram, slack, discord, feishu, dingtalk, matrix), and terminal backends (modal, daytona) out of core into plugins/ workspace members. Core references them via the plugin registries (get_provider_namespace / get_provider_service / get_tool_provider / get_credential_pool_hook) instead of direct imports. - Provider/platform/terminal adapters relocated under plugins/; pyproject extras reference workspace members; nix variants aggregate per-platform extras. - Anthropic credential discovery + OAuth-masquerade guard live in the plugin's credential_pool_hook; browser-open guarded by _can_open_graphical_browser. - Vercel AI Gateway + Vercel Sandbox removed (upstream deletion); get_bedrock_model_ids removed (replaced by bedrock_model_ids_or_none + discover_bedrock_models). - Terminal backends resolve ModalEnvironment / DaytonaEnvironment lazily from the plugin registry. - uv.lock regenerated against the pluginified workspace. Plugin test suites updated for the relocation: imports point at hermes_agent_<plat>.adapter, caplog logger-name filters and monkeypatch targets use the new module paths, and credential/rollback tests patch registries.get_provider_service rather than the removed agent.*_adapter modules. Verified: zero dead imports of relocated modules in core (import smoke test + rename-map grep); nix develop succeeds; targeted plugin suites green (bedrock, anthropic-auxiliary, matrix, dingtalk, feishu, credential_pool, switch_model_rollback). Remaining full-suite failures are pre-existing on the pre-merge tree (telegram setUpModule __code__) or environmental (voice/media/ PTY/network-dependent), not introduced here.
58 lines
2.4 KiB
Python
58 lines
2.4 KiB
Python
"""hermes-agent-azure: Microsoft Entra ID / Azure Identity adapter for Hermes Agent."""
|
|
|
|
from hermes_agent_azure.adapter import ( # noqa: F401
|
|
SCOPE_AI_AZURE_DEFAULT,
|
|
EntraIdentityConfig,
|
|
_build_default_credential,
|
|
_require_azure_identity,
|
|
build_bearer_http_client,
|
|
build_credential,
|
|
build_token_provider,
|
|
describe_active_credential,
|
|
has_azure_identity_credentials,
|
|
has_azure_identity_installed,
|
|
is_token_provider,
|
|
materialize_bearer_for_http,
|
|
reset_credential_cache,
|
|
)
|
|
|
|
|
|
def register(ctx):
|
|
"""Entry point for the hermes_agent.plugins entry point group."""
|
|
from hermes_agent_azure import adapter
|
|
|
|
ctx.register_provider_services("azure", {
|
|
# Auth / credentials
|
|
"is_token_provider": adapter.is_token_provider,
|
|
"has_azure_identity_credentials": adapter.has_azure_identity_credentials,
|
|
"has_azure_identity_installed": adapter.has_azure_identity_installed,
|
|
# Client building
|
|
"build_bearer_http_client": adapter.build_bearer_http_client,
|
|
"build_credential": adapter.build_credential,
|
|
"build_token_provider": adapter.build_token_provider,
|
|
"materialize_bearer_for_http": adapter.materialize_bearer_for_http,
|
|
"reset_credential_cache": adapter.reset_credential_cache,
|
|
# Constants / config
|
|
"SCOPE_AI_AZURE_DEFAULT": adapter.SCOPE_AI_AZURE_DEFAULT,
|
|
"EntraIdentityConfig": adapter.EntraIdentityConfig,
|
|
# Internal helpers
|
|
"_build_default_credential": adapter._build_default_credential,
|
|
"_require_azure_identity": adapter._require_azure_identity,
|
|
"describe_active_credential": adapter.describe_active_credential,
|
|
})
|
|
|
|
# Register the provider resolver — core dispatches to this instead of
|
|
# having a per-azure-foundry if/elif branch in resolve_provider_client().
|
|
from hermes_agent_azure.resolve import resolve_auxiliary_client as _azure_resolver
|
|
ctx.register_provider_resolver("azure-foundry", _azure_resolver)
|
|
|
|
# Register the provider overlay — core merges this into HERMES_OVERLAYS
|
|
from agent.plugin_registries import ProviderOverlayEntry
|
|
ctx.register_provider_overlay(ProviderOverlayEntry(
|
|
provider_name="azure-foundry",
|
|
transport="openai_chat", # default; overridden by api_mode in config
|
|
base_url_env_var="AZURE_FOUNDRY_BASE_URL",
|
|
display_name="Azure AI Foundry",
|
|
aliases=[],
|
|
))
|