SYMBOL INDEX (8438 symbols across 482 files) FILE: agents/a2a/src/flight-booking-agent/agent.py function lifespan (line 44) | async def lifespan( function ping (line 65) | def ping(): function health (line 72) | def health(): function api_check_availability (line 79) | def api_check_availability( function api_reserve_flight (line 90) | def api_reserve_flight( function api_confirm_booking (line 105) | def api_confirm_booking( function api_process_payment (line 116) | def api_process_payment( function api_get_reservation (line 130) | def api_get_reservation( function api_cancel_reservation (line 141) | def api_cancel_reservation( function main (line 156) | def main() -> None: FILE: agents/a2a/src/flight-booking-agent/database.py function _create_tables (line 21) | def _create_tables( function _insert_seed_data (line 105) | def _insert_seed_data( class BookingDatabaseManager (line 249) | class BookingDatabaseManager: method __init__ (line 252) | def __init__( method init_database (line 261) | def init_database(self) -> None: method get_connection (line 269) | def get_connection(self) -> sqlite3.Connection: method get_flight_availability (line 273) | def get_flight_availability( method create_reservation (line 308) | def create_reservation( method confirm_booking (line 397) | def confirm_booking( method process_payment (line 455) | def process_payment( method get_booking_details (line 522) | def get_booking_details( method cancel_booking (line 576) | def cancel_booking( FILE: agents/a2a/src/flight-booking-agent/dependencies.py function get_env (line 20) | def get_env() -> EnvSettings: function get_db_manager (line 27) | def get_db_manager() -> BookingDatabaseManager: FILE: agents/a2a/src/flight-booking-agent/env_settings.py class EnvSettings (line 15) | class EnvSettings: method __init__ (line 18) | def __init__(self) -> None: FILE: agents/a2a/src/flight-booking-agent/tools.py function check_availability (line 19) | def check_availability( function reserve_flight (line 41) | def reserve_flight( function confirm_booking (line 63) | def confirm_booking( function process_payment (line 82) | def process_payment( function manage_reservation (line 106) | def manage_reservation( FILE: agents/a2a/src/travel-assistant-agent/agent.py function search_flights (line 17) | def search_flights( function check_prices (line 48) | def check_prices( function get_recommendations (line 70) | def get_recommendations( function create_trip_plan (line 96) | def create_trip_plan( function discover_remote_agents (line 149) | async def discover_remote_agents(query: str, max_results: int = 5) -> str: function view_cached_remote_agents (line 226) | async def view_cached_remote_agents() -> str: function invoke_remote_agent (line 270) | async def invoke_remote_agent(agent_id: str, message: str) -> str: function get_agent_instance (line 329) | def get_agent_instance(): FILE: agents/a2a/src/travel-assistant-agent/database.py function _insert_seed_data (line 17) | def _insert_seed_data( class FlightDatabaseManager (line 116) | class FlightDatabaseManager: method __init__ (line 119) | def __init__( method init_database (line 128) | def init_database(self) -> None: method get_connection (line 167) | def get_connection(self) -> sqlite3.Connection: method search_flights (line 171) | def search_flights( method get_flight_details (line 216) | def get_flight_details( method get_recommendations (line 252) | def get_recommendations( method create_trip_plan (line 297) | def create_trip_plan( FILE: agents/a2a/src/travel-assistant-agent/dependencies.py function get_env (line 19) | def get_env() -> EnvSettings: function get_db_manager (line 26) | def get_db_manager() -> FlightDatabaseManager: function get_registry_client (line 34) | def get_registry_client() -> RegistryDiscoveryClient | None: function get_remote_agent_cache (line 70) | def get_remote_agent_cache() -> RemoteAgentCache: FILE: agents/a2a/src/travel-assistant-agent/env_settings.py class EnvSettings (line 15) | class EnvSettings: method __init__ (line 18) | def __init__(self) -> None: FILE: agents/a2a/src/travel-assistant-agent/models.py class AgentSkill (line 8) | class AgentSkill(BaseModel): class DiscoveredAgent (line 21) | class DiscoveredAgent(BaseModel): method agent_name (line 38) | def agent_name(self) -> str: method skill_names (line 43) | def skill_names(self) -> list[str]: FILE: agents/a2a/src/travel-assistant-agent/registry_discovery_client.py class RegistryDiscoveryClient (line 16) | class RegistryDiscoveryClient: method __init__ (line 19) | def __init__( method _get_token (line 48) | async def _get_token(self) -> str: method discover_by_semantic_search (line 96) | async def discover_by_semantic_search( method discover_by_skills (line 149) | async def discover_by_skills( FILE: agents/a2a/src/travel-assistant-agent/remote_agent_client.py class RemoteAgentClient (line 18) | class RemoteAgentClient: method __init__ (line 27) | def __init__( method _ensure_initialized (line 48) | async def _ensure_initialized(self): method send_message (line 73) | async def send_message(self, message: str) -> str: method close (line 104) | async def close(self): class RemoteAgentCache (line 111) | class RemoteAgentCache: method __init__ (line 112) | def __init__(self): method get (line 116) | def get(self, agent_id: str) -> RemoteAgentClient | None: method get_all (line 119) | def get_all(self) -> dict[str, RemoteAgentClient]: method add (line 122) | def add(self, agent_id: str, agent_client: RemoteAgentClient): method cache_discovered_agents (line 126) | def cache_discovered_agents( method clear (line 155) | async def clear(self): method __len__ (line 163) | def __len__(self) -> int: method __contains__ (line 166) | def __contains__(self, agent_id: str) -> bool: FILE: agents/a2a/src/travel-assistant-agent/server.py function lifespan (line 36) | async def lifespan( function ping (line 55) | def ping(): function health (line 62) | def health(): function api_search_flights (line 69) | def api_search_flights( function api_check_prices (line 82) | def api_check_prices( function api_recommendations (line 93) | def api_recommendations( function api_create_trip_plan (line 108) | def api_create_trip_plan( function api_discover_agents (line 126) | async def api_discover_agents(query: str): function main (line 154) | def main() -> None: FILE: agents/a2a/src/travel-assistant-agent/tools.py function search_flights (line 19) | def search_flights( function check_prices (line 50) | def check_prices( function get_recommendations (line 72) | def get_recommendations( function create_trip_plan (line 98) | def create_trip_plan( FILE: agents/a2a/test/agent_discovery_test.py class AgentTester (line 28) | class AgentTester: method __init__ (line 31) | def __init__(self, endpoints, is_live=False): method send_agent_message (line 35) | def send_agent_message(self, agent_type, message): method extract_response_text (line 57) | def extract_response_text(self, response): class AgentDiscoveryTests (line 72) | class AgentDiscoveryTests: method __init__ (line 75) | def __init__(self, tester): method test_search_flight_solo (line 79) | def test_search_flight_solo(self): method test_book_flight_with_discovery (line 98) | def test_book_flight_with_discovery(self): function run_tests (line 121) | def run_tests(endpoint_type): function main (line 157) | def main(): FILE: agents/a2a/test/agent_simple_test.py class AgentTester (line 42) | class AgentTester: method __init__ (line 45) | def __init__( method send_agent_message (line 55) | def send_agent_message( method _invoke_agentcore_runtime (line 105) | def _invoke_agentcore_runtime( method call_api_endpoint (line 186) | def call_api_endpoint( method ping_agent (line 219) | def ping_agent( class TravelAssistantTests (line 245) | class TravelAssistantTests: method __init__ (line 248) | def __init__( method test_ping (line 255) | def test_ping(self) -> None: method test_agent_flight_search (line 262) | def test_agent_flight_search(self) -> None: method test_api_search_flights (line 288) | def test_api_search_flights(self) -> None: method test_api_recommendations (line 311) | def test_api_recommendations(self) -> None: class FlightBookingTests (line 334) | class FlightBookingTests: method __init__ (line 337) | def __init__( method test_ping (line 344) | def test_ping(self) -> None: method test_agent_availability_check (line 351) | def test_agent_availability_check(self) -> None: method test_agent_booking (line 367) | def test_agent_booking(self) -> None: method test_api_check_availability (line 382) | def test_api_check_availability(self) -> None: function run_tests (line 402) | def run_tests( function main (line 450) | def main() -> None: FILE: agents/a2a/test/simple_agents_test.py class AgentTester (line 42) | class AgentTester: method __init__ (line 45) | def __init__( method send_agent_message (line 55) | def send_agent_message( method _invoke_agentcore_runtime (line 105) | def _invoke_agentcore_runtime( method call_api_endpoint (line 186) | def call_api_endpoint( method ping_agent (line 219) | def ping_agent( class TravelAssistantTests (line 245) | class TravelAssistantTests: method __init__ (line 248) | def __init__( method test_ping (line 255) | def test_ping(self) -> None: method test_agent_flight_search (line 262) | def test_agent_flight_search(self) -> None: method test_api_search_flights (line 288) | def test_api_search_flights(self) -> None: method test_api_recommendations (line 311) | def test_api_recommendations(self) -> None: class FlightBookingTests (line 334) | class FlightBookingTests: method __init__ (line 337) | def __init__( method test_ping (line 344) | def test_ping(self) -> None: method test_agent_availability_check (line 351) | def test_agent_availability_check(self) -> None: method test_agent_booking (line 367) | def test_agent_booking(self) -> None: method test_api_check_availability (line 382) | def test_api_check_availability(self) -> None: class AgentDiscoveryTests (line 402) | class AgentDiscoveryTests: method __init__ (line 411) | def __init__( method _is_registry_available (line 419) | def _is_registry_available(self) -> bool: method test_discover_and_delegate_booking (line 427) | def test_discover_and_delegate_booking(self) -> None: function run_tests (line 494) | def run_tests( function main (line 553) | def main() -> None: FILE: agents/agent.py class ProgressSpinner (line 102) | class ProgressSpinner: method __init__ (line 107) | def __init__(self): method _spin (line 111) | def _spin(self) -> None: method start (line 120) | def start(self) -> "ProgressSpinner": method stop (line 126) | def stop( function print_step (line 140) | def print_step( function load_server_config (line 148) | def load_server_config(config_file: str = "server_config.yml") -> dict[s... function resolve_env_vars (line 179) | def resolve_env_vars(value: str, server_name: str = None) -> str: function get_server_headers (line 222) | def get_server_headers(server_name: str, config: dict[str, Any]) -> dict... function enable_verbose_logging (line 262) | def enable_verbose_logging(): function parse_arguments (line 285) | def parse_arguments() -> argparse.Namespace: function _safe_eval_arithmetic (line 388) | def _safe_eval_arithmetic(expression: str) -> int | float: function calculator (line 437) | def calculator(expression: str) -> str: function search_registry_tools (line 479) | async def search_registry_tools( function invoke_mcp_tool (line 582) | async def invoke_mcp_tool( function _add_egress_auth (line 662) | def _add_egress_auth( function _invoke_via_sse (line 701) | async def _invoke_via_sse( function _invoke_via_http (line 715) | async def _invoke_via_http( function _format_tool_response (line 733) | def _format_tool_response(result: Any) -> str: class AgentSettings (line 747) | class AgentSettings: method __init__ (line 750) | def __init__(self): function load_system_prompt (line 761) | def load_system_prompt(): function print_agent_response (line 788) | def print_agent_response( function _print_verbose_messages (line 819) | def _print_verbose_messages(messages: list[Any]) -> None: class InteractiveAgent (line 848) | class InteractiveAgent: method __init__ (line 851) | def __init__( method process_message (line 862) | async def process_message( method run_interactive_session (line 894) | async def run_interactive_session(self) -> None: method _print_history (line 935) | def _print_history(self) -> None: function main (line 949) | async def main(): function _create_model (line 1021) | def _create_model( FILE: agents/cli_user_auth.py class OAuthCallbackHandler (line 105) | class OAuthCallbackHandler(BaseHTTPRequestHandler): method log_message (line 108) | def log_message(self, format, *args): method do_GET (line 112) | def do_GET(self): method exchange_code_for_tokens (line 158) | def exchange_code_for_tokens(self, auth_code): method create_session_cookie (line 210) | def create_session_cookie(self, user_info): method send_success_response (line 235) | def send_success_response(self): method send_error_response (line 263) | def send_error_response(self, error_message): method send_404 (line 287) | def send_404(self): function generate_pkce_challenge (line 293) | def generate_pkce_challenge(): function start_callback_server (line 305) | def start_callback_server(): function save_cookie_to_file (line 316) | def save_cookie_to_file(cookie_value, file_path): function main (line 337) | def main(): FILE: agents/client.py class CustomFormatter (line 59) | class CustomFormatter(logging.Formatter): method format (line 60) | def format(self, record): function load_env_config (line 86) | def load_env_config() -> dict[str, str | None]: function parse_arguments (line 128) | def parse_arguments(): function main (line 213) | def main(): FILE: agents/registry_client.py class MatchingTool (line 24) | class MatchingTool(BaseModel): class ServerSearchResult (line 37) | class ServerSearchResult(BaseModel): class ToolSearchResult (line 53) | class ToolSearchResult(BaseModel): class SearchResponse (line 65) | class SearchResponse(BaseModel): class RegistryClient (line 75) | class RegistryClient: method __init__ (line 78) | def __init__( method _get_token (line 116) | async def _get_token(self) -> str: method search_tools (line 170) | async def search_tools( method get_server_info (line 237) | async def get_server_info( function _format_tool_result (line 299) | def _format_tool_result( function _format_server_result (line 329) | def _format_server_result( FILE: api/registry_client.py class HealthStatus (line 33) | class HealthStatus(str, Enum): class ServiceRegistration (line 42) | class ServiceRegistration(BaseModel): class InternalServiceRegistration (line 54) | class InternalServiceRegistration(BaseModel): class Server (line 100) | class Server(BaseModel): class ServerDetail (line 114) | class ServerDetail(BaseModel): class ServerDetailResponse (line 138) | class ServerDetailResponse(BaseModel): class ServerListResponse (line 159) | class ServerListResponse(BaseModel): class ServiceResponse (line 169) | class ServiceResponse(BaseModel): class ToggleResponse (line 177) | class ToggleResponse(BaseModel): class ErrorResponse (line 185) | class ErrorResponse(BaseModel): class SecurityScanResult (line 193) | class SecurityScanResult(BaseModel): class RescanResponse (line 200) | class RescanResponse(BaseModel): class AgentSecurityScanResponse (line 217) | class AgentSecurityScanResponse(BaseModel): class AgentRescanResponse (line 228) | class AgentRescanResponse(BaseModel): class SkillSecurityScanResponse (line 245) | class SkillSecurityScanResponse(BaseModel): class SkillRescanResponse (line 262) | class SkillRescanResponse(BaseModel): class GroupListResponse (line 279) | class GroupListResponse(BaseModel): class AgentProvider (line 289) | class AgentProvider(str, Enum): class AgentVisibility (line 297) | class AgentVisibility(str, Enum): class Provider (line 305) | class Provider(BaseModel): class SecuritySchemeType (line 317) | class SecuritySchemeType(str, Enum): class SecurityScheme (line 326) | class SecurityScheme(BaseModel): class Config (line 362) | class Config: class Skill (line 366) | class Skill(BaseModel): class Config (line 387) | class Config: class AgentRegistration (line 391) | class AgentRegistration(BaseModel): class Config (line 480) | class Config: class AgentCard (line 484) | class AgentCard(BaseModel): class Config (line 509) | class Config: class AgentRegistrationResponse (line 513) | class AgentRegistrationResponse(BaseModel): class SkillDetail (line 520) | class SkillDetail(BaseModel): class Config (line 541) | class Config: class AgentDetail (line 545) | class AgentDetail(BaseModel): class Config (line 644) | class Config: class AgentListItem (line 648) | class AgentListItem(BaseModel): class Config (line 685) | class Config: class AgentListResponse (line 689) | class AgentListResponse(BaseModel): class AgentToggleResponse (line 699) | class AgentToggleResponse(BaseModel): class SkillDiscoveryRequest (line 707) | class SkillDiscoveryRequest(BaseModel): class DiscoveredAgent (line 714) | class DiscoveredAgent(BaseModel): class AgentDiscoveryResponse (line 723) | class AgentDiscoveryResponse(BaseModel): class SemanticDiscoveredAgent (line 729) | class SemanticDiscoveredAgent(BaseModel): class Config (line 759) | class Config: class AgentSemanticDiscoveryResponse (line 763) | class AgentSemanticDiscoveryResponse(BaseModel): class MatchingToolResult (line 769) | class MatchingToolResult(BaseModel): class SyncMetadata (line 781) | class SyncMetadata(BaseModel): class SemanticDiscoveredServer (line 793) | class SemanticDiscoveredServer(BaseModel): class ToolSearchResult (line 825) | class ToolSearchResult(BaseModel): class AgentSearchResult (line 841) | class AgentSearchResult(BaseModel): class SkillSearchResult (line 854) | class SkillSearchResult(BaseModel): class VirtualServerSearchResult (line 874) | class VirtualServerSearchResult(BaseModel): class ToolMapping (line 896) | class ToolMapping(BaseModel): class ToolScopeOverride (line 906) | class ToolScopeOverride(BaseModel): class VirtualServerCreateRequest (line 915) | class VirtualServerCreateRequest(BaseModel): class VirtualServerConfig (line 937) | class VirtualServerConfig(BaseModel): class VirtualServerListResponse (line 962) | class VirtualServerListResponse(BaseModel): class VirtualServerToggleResponse (line 971) | class VirtualServerToggleResponse(BaseModel): class VirtualServerDeleteResponse (line 979) | class VirtualServerDeleteResponse(BaseModel): class SemanticSearchResponse (line 986) | class SemanticSearchResponse(BaseModel): class ServerSemanticSearchResponse (line 1007) | class ServerSemanticSearchResponse(BaseModel): class RatingDetail (line 1016) | class RatingDetail(BaseModel): class RatingRequest (line 1023) | class RatingRequest(BaseModel): class RatingResponse (line 1029) | class RatingResponse(BaseModel): class RatingInfoResponse (line 1036) | class RatingInfoResponse(BaseModel): class AnthropicRepository (line 1046) | class AnthropicRepository(BaseModel): class AnthropicStdioTransport (line 1055) | class AnthropicStdioTransport(BaseModel): class AnthropicStreamableHttpTransport (line 1064) | class AnthropicStreamableHttpTransport(BaseModel): class AnthropicSseTransport (line 1072) | class AnthropicSseTransport(BaseModel): class AnthropicPackage (line 1079) | class AnthropicPackage(BaseModel): class AnthropicServerDetail (line 1090) | class AnthropicServerDetail(BaseModel): class AnthropicServerResponse (line 1107) | class AnthropicServerResponse(BaseModel): class AnthropicPaginationMetadata (line 1118) | class AnthropicPaginationMetadata(BaseModel): class AnthropicServerList (line 1125) | class AnthropicServerList(BaseModel): class AnthropicErrorResponse (line 1132) | class AnthropicErrorResponse(BaseModel): class RegistryCapabilitiesResponse (line 1141) | class RegistryCapabilitiesResponse(BaseModel): class RegistryAuthConfigResponse (line 1153) | class RegistryAuthConfigResponse(BaseModel): class RegistryContactResponse (line 1162) | class RegistryContactResponse(BaseModel): class RegistryCardResponse (line 1169) | class RegistryCardResponse(BaseModel): class M2MAccountRequest (line 1194) | class M2MAccountRequest(BaseModel): class HumanUserRequest (line 1202) | class HumanUserRequest(BaseModel): class UserSummary (line 1213) | class UserSummary(BaseModel): class UserListResponse (line 1225) | class UserListResponse(BaseModel): class UserDeleteResponse (line 1232) | class UserDeleteResponse(BaseModel): class M2MAccountResponse (line 1239) | class M2MAccountResponse(BaseModel): class GroupCreateRequest (line 1249) | class GroupCreateRequest(BaseModel): class GroupSummary (line 1256) | class GroupSummary(BaseModel): class IdPM2MClient (line 1265) | class IdPM2MClient(BaseModel): class M2MClientListResponse (line 1286) | class M2MClientListResponse(BaseModel): class GroupSyncStatusResponse (line 1295) | class GroupSyncStatusResponse(BaseModel): class GroupDeleteResponse (line 1311) | class GroupDeleteResponse(BaseModel): class SkillRegistrationRequest (line 1323) | class SkillRegistrationRequest(BaseModel): class SkillCard (line 1344) | class SkillCard(BaseModel): class SkillListResponse (line 1374) | class SkillListResponse(BaseModel): class SkillHealthResponse (line 1384) | class SkillHealthResponse(BaseModel): class SkillContentResponse (line 1394) | class SkillContentResponse(BaseModel): class SkillSearchResponse (line 1401) | class SkillSearchResponse(BaseModel): class SkillToggleResponse (line 1409) | class SkillToggleResponse(BaseModel): class SkillRatingResponse (line 1416) | class SkillRatingResponse(BaseModel): class AppLogEntry (line 1425) | class AppLogEntry(BaseModel): class AppLogResponse (line 1440) | class AppLogResponse(BaseModel): class AppLogMetadataResponse (line 1450) | class AppLogMetadataResponse(BaseModel): class RegistryClient (line 1458) | class RegistryClient: method __init__ (line 1471) | def __init__(self, registry_url: str, token: str): method _get_headers (line 1486) | def _get_headers(self) -> dict[str, str]: method _make_request (line 1495) | def _make_request( method register_service (line 1563) | def register_service(self, registration: InternalServiceRegistration) ... method remove_service (line 1598) | def remove_service(self, service_path: str) -> dict[str, Any]: method toggle_service (line 1620) | def toggle_service(self, service_path: str) -> ToggleResponse: method update_server_credential (line 1643) | def update_server_credential( method list_services (line 1682) | def list_services( method healthcheck (line 1725) | def healthcheck(self) -> dict[str, Any]: method get_config (line 1743) | def get_config(self) -> dict[str, Any]: method get_well_known_registry_card (line 1765) | def get_well_known_registry_card(self) -> RegistryCardResponse: method get_registry_card (line 1789) | def get_registry_card(self) -> RegistryCardResponse: method update_registry_card (line 1813) | def update_registry_card(self, card_data: dict[str, Any]) -> dict[str,... method patch_registry_card (line 1839) | def patch_registry_card(self, updates: dict[str, Any]) -> dict[str, Any]: method add_server_to_groups (line 1865) | def add_server_to_groups(self, server_name: str, group_names: list[str... method remove_server_from_groups (line 1890) | def remove_server_from_groups(self, server_name: str, group_names: lis... method create_group (line 1915) | def create_group( method delete_group (line 1946) | def delete_group( method import_group (line 1978) | def import_group(self, group_definition: dict[str, Any]) -> dict[str, ... method list_groups (line 2011) | def list_groups( method get_group (line 2043) | def get_group(self, group_name: str) -> dict[str, Any]: method register_agent (line 2065) | def register_agent(self, agent: AgentRegistration) -> AgentRegistratio... method list_agents (line 2091) | def list_agents( method get_agent (line 2140) | def get_agent(self, path: str) -> AgentDetail: method update_agent (line 2161) | def update_agent(self, path: str, agent: AgentRegistration) -> AgentDe... method delete_agent (line 2187) | def delete_agent(self, path: str) -> None: method toggle_agent (line 2203) | def toggle_agent(self, path: str, enabled: bool) -> AgentToggleResponse: method discover_agents_by_skills (line 2231) | def discover_agents_by_skills( method discover_agents_semantic (line 2264) | def discover_agents_semantic( method semantic_search_servers (line 2292) | def semantic_search_servers( method semantic_search (line 2335) | def semantic_search( method rate_agent (line 2387) | def rate_agent(self, path: str, rating: int) -> RatingResponse: method get_agent_rating (line 2417) | def get_agent_rating(self, path: str) -> RatingInfoResponse: method rescan_agent (line 2443) | def rescan_agent(self, path: str) -> AgentRescanResponse: method get_agent_security_scan (line 2473) | def get_agent_security_scan(self, path: str) -> AgentSecurityScanRespo... method agent_ans_link (line 2498) | def agent_ans_link( method agent_ans_status (line 2528) | def agent_ans_status( method agent_ans_unlink (line 2555) | def agent_ans_unlink( method rate_server (line 2582) | def rate_server(self, path: str, rating: int) -> RatingResponse: method get_server (line 2612) | def get_server( method get_server_rating (line 2636) | def get_server_rating(self, path: str) -> RatingInfoResponse: method get_security_scan (line 2662) | def get_security_scan(self, path: str) -> SecurityScanResult: method rescan_server (line 2686) | def rescan_server(self, path: str) -> RescanResponse: method anthropic_list_servers (line 2717) | def anthropic_list_servers( method anthropic_list_server_versions (line 2750) | def anthropic_list_server_versions(self, server_name: str) -> Anthropi... method anthropic_get_server_version (line 2780) | def anthropic_get_server_version( method remove_server_version (line 2815) | def remove_server_version(self, path: str, version: str) -> dict: method set_default_version (line 2840) | def set_default_version(self, path: str, version: str) -> dict: method get_server_versions (line 2866) | def get_server_versions(self, path: str) -> dict: method list_users (line 2891) | def list_users(self, search: str | None = None, limit: int = 500) -> U... method create_m2m_account (line 2936) | def create_m2m_account( method create_human_user (line 2967) | def create_human_user( method delete_user (line 3013) | def delete_user(self, username: str) -> UserDeleteResponse: method list_keycloak_iam_groups (line 3036) | def list_keycloak_iam_groups(self) -> GroupListResponse: method create_keycloak_group (line 3057) | def create_keycloak_group(self, name: str, description: str | None = N... method delete_keycloak_group (line 3085) | def delete_keycloak_group(self, name: str) -> GroupDeleteResponse: method get_federation_config (line 3108) | def get_federation_config(self, config_id: str = "default") -> dict[st... method save_federation_config (line 3131) | def save_federation_config( method delete_federation_config (line 3160) | def delete_federation_config(self, config_id: str = "default") -> dict... method list_federation_configs (line 3183) | def list_federation_configs(self) -> dict[str, Any]: method add_anthropic_server (line 3201) | def add_anthropic_server(self, server_name: str, config_id: str = "def... method remove_anthropic_server (line 3227) | def remove_anthropic_server( method add_asor_agent (line 3254) | def add_asor_agent(self, agent_id: str, config_id: str = "default") ->... method remove_asor_agent (line 3280) | def remove_asor_agent(self, agent_id: str, config_id: str = "default")... method sync_federation (line 3304) | def sync_federation( method list_peers (line 3340) | def list_peers(self, enabled: bool | None = None) -> dict[str, Any]: method add_peer (line 3367) | def add_peer(self, config: dict[str, Any]) -> dict[str, Any]: method get_peer (line 3389) | def get_peer(self, peer_id: str) -> dict[str, Any]: method update_peer (line 3410) | def update_peer(self, peer_id: str, config: dict[str, Any]) -> dict[st... method update_peer_token (line 3432) | def update_peer_token(self, peer_id: str, federation_token: str) -> di... method remove_peer (line 3461) | def remove_peer(self, peer_id: str) -> dict[str, Any]: method sync_peer (line 3487) | def sync_peer(self, peer_id: str) -> dict[str, Any]: method sync_all_peers (line 3508) | def sync_all_peers(self) -> dict[str, Any]: method get_peer_status (line 3526) | def get_peer_status(self, peer_id: str) -> dict[str, Any]: method enable_peer (line 3547) | def enable_peer(self, peer_id: str) -> dict[str, Any]: method disable_peer (line 3568) | def disable_peer(self, peer_id: str) -> dict[str, Any]: method get_peer_connections (line 3589) | def get_peer_connections(self) -> dict[str, Any]: method get_shared_resources (line 3607) | def get_shared_resources(self) -> dict[str, Any]: method register_skill (line 3629) | def register_skill(self, request: SkillRegistrationRequest) -> SkillCard: method list_skills (line 3652) | def list_skills( method get_skill (line 3706) | def get_skill(self, path: str) -> SkillCard: method update_skill (line 3729) | def update_skill(self, path: str, request: SkillRegistrationRequest) -... method delete_skill (line 3756) | def delete_skill(self, path: str) -> bool: method toggle_skill (line 3777) | def toggle_skill(self, path: str, enabled: bool) -> SkillToggleResponse: method check_skill_health (line 3802) | def check_skill_health(self, path: str) -> SkillHealthResponse: method get_skill_content (line 3824) | def get_skill_content(self, path: str) -> SkillContentResponse: method search_skills (line 3847) | def search_skills(self, query: str, tags: str | None = None) -> SkillS... method rate_skill (line 3873) | def rate_skill(self, path: str, rating: int) -> dict[str, Any]: method get_skill_rating (line 3901) | def get_skill_rating(self, path: str) -> SkillRatingResponse: method get_skill_security_scan (line 3923) | def get_skill_security_scan(self, path: str) -> SkillSecurityScanRespo... method rescan_skill (line 3945) | def rescan_skill(self, path: str) -> SkillRescanResponse: method create_virtual_server (line 3976) | def create_virtual_server(self, request: VirtualServerCreateRequest) -... method list_virtual_servers (line 4000) | def list_virtual_servers( method get_virtual_server (line 4033) | def get_virtual_server(self, path: str) -> VirtualServerConfig: method update_virtual_server (line 4055) | def update_virtual_server( method delete_virtual_server (line 4083) | def delete_virtual_server(self, path: str) -> VirtualServerDeleteRespo... method toggle_virtual_server (line 4105) | def toggle_virtual_server(self, path: str, enable: bool) -> VirtualSer... method rate_virtual_server (line 4131) | def rate_virtual_server(self, path: str, rating: int) -> dict[str, Any]: method get_virtual_server_rating (line 4159) | def get_virtual_server_rating(self, path: str) -> dict[str, Any]: method force_heartbeat (line 4183) | def force_heartbeat(self) -> dict[str, Any]: method force_startup_ping (line 4205) | def force_startup_ping(self) -> dict[str, Any]: method create_m2m_client (line 4234) | def create_m2m_client( method list_m2m_clients (line 4273) | def list_m2m_clients( method get_m2m_client (line 4305) | def get_m2m_client(self, client_id: str) -> IdPM2MClient: method patch_m2m_client (line 4325) | def patch_m2m_client( method delete_m2m_client (line 4374) | def delete_m2m_client(self, client_id: str) -> None: method get_logs (line 4398) | def get_logs( method get_log_metadata (line 4445) | def get_log_metadata(self) -> AppLogMetadataResponse: method get_log_services (line 4457) | def get_log_services(self) -> list[str]: function _format_tool_result (line 4467) | def _format_tool_result( FILE: api/registry_management.py function _serialize_security_schemes (line 271) | def _serialize_security_schemes( function _get_registry_url (line 296) | def _get_registry_url(cli_value: str | None = None) -> str: function _mask_sensitive_fields (line 323) | def _mask_sensitive_fields( function _get_client_name (line 358) | def _get_client_name() -> str: function _get_token_script (line 370) | def _get_token_script() -> str: function _get_jwt_token (line 385) | def _get_jwt_token(aws_region: str | None = None, keycloak_url: str | No... function _load_json_config (line 434) | def _load_json_config(config_path: str) -> dict[str, Any]: function _create_client (line 460) | def _create_client(args: argparse.Namespace) -> RegistryClient: function cmd_register (line 561) | def cmd_register(args: argparse.Namespace) -> int: function cmd_list (line 618) | def cmd_list(args: argparse.Namespace) -> int: function cmd_toggle (line 688) | def cmd_toggle(args: argparse.Namespace) -> int: function cmd_remove (line 712) | def cmd_remove(args: argparse.Namespace) -> int: function cmd_healthcheck (line 740) | def cmd_healthcheck(args: argparse.Namespace) -> int: function cmd_config (line 764) | def cmd_config(args: argparse.Namespace) -> int: function cmd_add_to_groups (line 802) | def cmd_add_to_groups(args: argparse.Namespace) -> int: function cmd_remove_from_groups (line 825) | def cmd_remove_from_groups(args: argparse.Namespace) -> int: function cmd_create_group (line 848) | def cmd_create_group(args: argparse.Namespace) -> int: function cmd_delete_group (line 872) | def cmd_delete_group(args: argparse.Namespace) -> int: function cmd_import_group (line 902) | def cmd_import_group(args: argparse.Namespace) -> int: function cmd_list_groups (line 942) | def cmd_list_groups(args: argparse.Namespace) -> int: function cmd_describe_group (line 1011) | def cmd_describe_group(args: argparse.Namespace) -> int: function cmd_server_get (line 1093) | def cmd_server_get(args: argparse.Namespace) -> int: function cmd_server_rate (line 1131) | def cmd_server_rate(args: argparse.Namespace) -> int: function cmd_server_rating (line 1155) | def cmd_server_rating(args: argparse.Namespace) -> int: function cmd_security_scan (line 1189) | def cmd_security_scan(args: argparse.Namespace) -> int: function cmd_rescan (line 1241) | def cmd_rescan(args: argparse.Namespace) -> int: function cmd_server_update_credential (line 1285) | def cmd_server_update_credential(args: argparse.Namespace) -> int: function cmd_server_search (line 1327) | def cmd_server_search(args: argparse.Namespace) -> int: function cmd_list_versions (line 1461) | def cmd_list_versions(args: argparse.Namespace) -> int: function cmd_remove_version (line 1497) | def cmd_remove_version(args: argparse.Namespace) -> int: function cmd_set_default_version (line 1523) | def cmd_set_default_version(args: argparse.Namespace) -> int: function cmd_agent_register (line 1552) | def cmd_agent_register(args: argparse.Namespace) -> int: function cmd_agent_list (line 1693) | def cmd_agent_list(args: argparse.Namespace) -> int: function cmd_agent_get (line 1763) | def cmd_agent_get(args: argparse.Namespace) -> int: function cmd_agent_update (line 1810) | def cmd_agent_update(args: argparse.Namespace) -> int: function cmd_agent_delete (line 1927) | def cmd_agent_delete(args: argparse.Namespace) -> int: function cmd_agent_toggle (line 1955) | def cmd_agent_toggle(args: argparse.Namespace) -> int: function cmd_agent_discover (line 1979) | def cmd_agent_discover(args: argparse.Namespace) -> int: function cmd_agent_search (line 2016) | def cmd_agent_search(args: argparse.Namespace) -> int: function cmd_agent_rate (line 2062) | def cmd_agent_rate(args: argparse.Namespace) -> int: function cmd_agent_rating (line 2086) | def cmd_agent_rating(args: argparse.Namespace) -> int: function cmd_agent_security_scan (line 2120) | def cmd_agent_security_scan(args: argparse.Namespace) -> int: function cmd_agent_rescan (line 2143) | def cmd_agent_rescan(args: argparse.Namespace) -> int: function cmd_agent_ans_link (line 2195) | def cmd_agent_ans_link(args: argparse.Namespace) -> int: function cmd_agent_ans_status (line 2227) | def cmd_agent_ans_status(args: argparse.Namespace) -> int: function cmd_agent_ans_unlink (line 2260) | def cmd_agent_ans_unlink(args: argparse.Namespace) -> int: function cmd_skill_register (line 2292) | def cmd_skill_register(args: argparse.Namespace) -> int: function cmd_skill_list (line 2347) | def cmd_skill_list(args: argparse.Namespace) -> int: function cmd_skill_get (line 2402) | def cmd_skill_get(args: argparse.Namespace) -> int: function cmd_skill_delete (line 2447) | def cmd_skill_delete(args: argparse.Namespace) -> int: function cmd_skill_toggle (line 2470) | def cmd_skill_toggle(args: argparse.Namespace) -> int: function cmd_skill_health (line 2494) | def cmd_skill_health(args: argparse.Namespace) -> int: function cmd_skill_content (line 2529) | def cmd_skill_content(args: argparse.Namespace) -> int: function cmd_skill_search (line 2559) | def cmd_skill_search(args: argparse.Namespace) -> int: function cmd_skill_rate (line 2594) | def cmd_skill_rate(args: argparse.Namespace) -> int: function cmd_skill_rating (line 2629) | def cmd_skill_rating(args: argparse.Namespace) -> int: function cmd_skill_security_scan (line 2661) | def cmd_skill_security_scan(args: argparse.Namespace) -> int: function cmd_skill_rescan (line 2683) | def cmd_skill_rescan(args: argparse.Namespace) -> int: function cmd_anthropic_list_servers (line 2715) | def cmd_anthropic_list_servers(args: argparse.Namespace) -> int: function cmd_anthropic_list_versions (line 2763) | def cmd_anthropic_list_versions(args: argparse.Namespace) -> int: function cmd_anthropic_get_server (line 2800) | def cmd_anthropic_get_server(args: argparse.Namespace) -> int: function cmd_user_list (line 2865) | def cmd_user_list(args: argparse.Namespace) -> int: function cmd_user_create_m2m (line 2906) | def cmd_user_create_m2m(args: argparse.Namespace) -> int: function cmd_user_create_human (line 2943) | def cmd_user_create_human(args: argparse.Namespace) -> int: function cmd_user_delete (line 2982) | def cmd_user_delete(args: argparse.Namespace) -> int: function _print_m2m_client (line 3010) | def _print_m2m_client(client: Any) -> None: function cmd_m2m_client_create (line 3023) | def cmd_m2m_client_create(args: argparse.Namespace) -> int: function cmd_m2m_client_list (line 3049) | def cmd_m2m_client_list(args: argparse.Namespace) -> int: function cmd_m2m_client_get (line 3082) | def cmd_m2m_client_get(args: argparse.Namespace) -> int: function cmd_m2m_client_update (line 3106) | def cmd_m2m_client_update(args: argparse.Namespace) -> int: function cmd_m2m_client_delete (line 3141) | def cmd_m2m_client_delete(args: argparse.Namespace) -> int: function cmd_group_create (line 3166) | def cmd_group_create(args: argparse.Namespace) -> int: function cmd_group_delete (line 3194) | def cmd_group_delete(args: argparse.Namespace) -> int: function cmd_group_list (line 3222) | def cmd_group_list(args: argparse.Namespace) -> int: function cmd_federation_get (line 3257) | def cmd_federation_get(args: argparse.Namespace) -> int: function cmd_federation_save (line 3279) | def cmd_federation_save(args: argparse.Namespace) -> int: function cmd_federation_delete (line 3310) | def cmd_federation_delete(args: argparse.Namespace) -> int: function cmd_federation_list (line 3340) | def cmd_federation_list(args: argparse.Namespace) -> int: function cmd_federation_add_anthropic_server (line 3378) | def cmd_federation_add_anthropic_server(args: argparse.Namespace) -> int: function cmd_federation_remove_anthropic_server (line 3403) | def cmd_federation_remove_anthropic_server(args: argparse.Namespace) -> ... function cmd_federation_add_asor_agent (line 3428) | def cmd_federation_add_asor_agent(args: argparse.Namespace) -> int: function cmd_federation_remove_asor_agent (line 3451) | def cmd_federation_remove_asor_agent(args: argparse.Namespace) -> int: function cmd_federation_sync (line 3474) | def cmd_federation_sync(args: argparse.Namespace) -> int: function cmd_peer_list (line 3532) | def cmd_peer_list(args: argparse.Namespace) -> int: function cmd_peer_add (line 3580) | def cmd_peer_add(args: argparse.Namespace) -> int: function cmd_peer_get (line 3615) | def cmd_peer_get(args: argparse.Namespace) -> int: function cmd_peer_update (line 3663) | def cmd_peer_update(args: argparse.Namespace) -> int: function cmd_peer_update_token (line 3698) | def cmd_peer_update_token(args: argparse.Namespace) -> int: function cmd_peer_remove (line 3729) | def cmd_peer_remove(args: argparse.Namespace) -> int: function cmd_peer_sync (line 3759) | def cmd_peer_sync(args: argparse.Namespace) -> int: function cmd_peer_sync_all (line 3801) | def cmd_peer_sync_all(args: argparse.Namespace) -> int: function cmd_peer_status (line 3837) | def cmd_peer_status(args: argparse.Namespace) -> int: function cmd_peer_enable (line 3892) | def cmd_peer_enable(args: argparse.Namespace) -> int: function cmd_peer_disable (line 3916) | def cmd_peer_disable(args: argparse.Namespace) -> int: function cmd_peer_connections (line 3940) | def cmd_peer_connections(args: argparse.Namespace) -> int: function cmd_peer_shared_resources (line 3978) | def cmd_peer_shared_resources(args: argparse.Namespace) -> int: function cmd_vs_create (line 4010) | def cmd_vs_create(args: argparse.Namespace) -> int: function cmd_vs_list (line 4093) | def cmd_vs_list(args: argparse.Namespace) -> int: function cmd_vs_get (line 4137) | def cmd_vs_get(args: argparse.Namespace) -> int: function cmd_vs_update (line 4190) | def cmd_vs_update(args: argparse.Namespace) -> int: function cmd_vs_delete (line 4268) | def cmd_vs_delete(args: argparse.Namespace) -> int: function cmd_vs_toggle (line 4305) | def cmd_vs_toggle(args: argparse.Namespace) -> int: function cmd_vs_rate (line 4339) | def cmd_vs_rate(args: argparse.Namespace) -> int: function cmd_vs_rating (line 4366) | def cmd_vs_rating(args: argparse.Namespace) -> int: function cmd_registry_card_get (line 4388) | def cmd_registry_card_get(args: argparse.Namespace) -> int: function cmd_registry_card_discover (line 4410) | def cmd_registry_card_discover(args: argparse.Namespace) -> int: function cmd_registry_card_update (line 4432) | def cmd_registry_card_update(args: argparse.Namespace) -> int: function cmd_telemetry_heartbeat (line 4468) | def cmd_telemetry_heartbeat(args: argparse.Namespace) -> int: function cmd_telemetry_startup (line 4496) | def cmd_telemetry_startup(args: argparse.Namespace) -> int: function cmd_logs (line 4524) | def cmd_logs(args: argparse.Namespace) -> int: function main (line 4570) | def main() -> int: FILE: auth_server/cognito_utils.py function generate_token (line 12) | def generate_token( FILE: auth_server/metrics_middleware.py class AuthMetricsMiddleware (line 30) | class AuthMetricsMiddleware(BaseHTTPMiddleware): method __init__ (line 42) | def __init__(self, app, service_name: str = "auth-server"): method hash_username (line 64) | def hash_username(self, username: str) -> str: method _cleanup_sessions_if_needed (line 70) | async def _cleanup_sessions_if_needed(self): method extract_server_name_from_url (line 106) | def extract_server_name_from_url(self, original_url: str) -> str: method extract_tool_and_method_info (line 121) | async def extract_tool_and_method_info(self, request: Request) -> dict... method dispatch (line 161) | async def dispatch(self, request: Request, call_next: Callable) -> Res... method _emit_auth_metric (line 282) | async def _emit_auth_metric( method _emit_tool_execution_metric (line 328) | async def _emit_tool_execution_metric( method _emit_protocol_latency_metric (line 397) | async def _emit_protocol_latency_metric( function add_auth_metrics_middleware (line 512) | def add_auth_metrics_middleware(app, service_name: str = "auth-server"): FILE: auth_server/mongodb_groups_enrichment.py function _get_mongodb (line 27) | async def _get_mongodb() -> AsyncIOMotorDatabase: function enrich_groups_from_mongodb (line 67) | async def enrich_groups_from_mongodb( function should_enrich_groups (line 118) | def should_enrich_groups(validation_result: dict) -> bool: FILE: auth_server/providers/auth0.py class Auth0Provider (line 28) | class Auth0Provider(AuthProvider): method __init__ (line 39) | def __init__( method validate_token (line 87) | def validate_token(self, token: str, **kwargs: Any) -> dict[str, Any]: method _validate_self_signed_token (line 189) | def _validate_self_signed_token(self, token: str) -> dict[str, Any]: method get_jwks (line 261) | def get_jwks(self) -> dict[str, Any]: method exchange_code_for_token (line 292) | def exchange_code_for_token(self, code: str, redirect_uri: str) -> dic... method get_user_info (line 330) | def get_user_info(self, access_token: str) -> dict[str, Any]: method get_auth_url (line 358) | def get_auth_url(self, redirect_uri: str, state: str, scope: str | Non... method get_logout_url (line 388) | def get_logout_url(self, redirect_uri: str) -> str: method refresh_token (line 408) | def refresh_token(self, refresh_token: str) -> dict[str, Any]: method validate_m2m_token (line 444) | def validate_m2m_token(self, token: str) -> dict[str, Any]: method get_m2m_token (line 458) | def get_m2m_token( method extract_user_from_tokens (line 510) | def extract_user_from_tokens(self, token_data: dict[str, Any]) -> dict... method get_provider_info (line 577) | def get_provider_info(self) -> dict[str, Any]: FILE: auth_server/providers/base.py class AuthProvider (line 15) | class AuthProvider(ABC): method validate_token (line 19) | def validate_token(self, token: str, **kwargs: Any) -> dict[str, Any]: method get_jwks (line 43) | def get_jwks(self) -> dict[str, Any]: method exchange_code_for_token (line 55) | def exchange_code_for_token(self, code: str, redirect_uri: str) -> dic... method get_user_info (line 76) | def get_user_info(self, access_token: str) -> dict[str, Any]: method get_auth_url (line 95) | def get_auth_url(self, redirect_uri: str, state: str, scope: str | Non... method get_logout_url (line 109) | def get_logout_url(self, redirect_uri: str) -> str: method refresh_token (line 121) | def refresh_token(self, refresh_token: str) -> dict[str, Any]: method validate_m2m_token (line 136) | def validate_m2m_token(self, token: str) -> dict[str, Any]: method get_m2m_token (line 151) | def get_m2m_token( FILE: auth_server/providers/cognito.py class CognitoProvider (line 21) | class CognitoProvider(AuthProvider): method __init__ (line 24) | def __init__( method validate_token (line 72) | def validate_token(self, token: str, **kwargs: Any) -> dict[str, Any]: method get_jwks (line 135) | def get_jwks(self) -> dict[str, Any]: method exchange_code_for_token (line 159) | def exchange_code_for_token(self, code: str, redirect_uri: str) -> dic... method get_user_info (line 186) | def get_user_info(self, access_token: str) -> dict[str, Any]: method get_auth_url (line 204) | def get_auth_url(self, redirect_uri: str, state: str, scope: str | Non... method get_logout_url (line 221) | def get_logout_url(self, redirect_uri: str) -> str: method refresh_token (line 232) | def refresh_token(self, refresh_token: str) -> dict[str, Any]: method validate_m2m_token (line 258) | def validate_m2m_token(self, token: str) -> dict[str, Any]: method get_m2m_token (line 263) | def get_m2m_token( method get_provider_info (line 296) | def get_provider_info(self) -> dict[str, Any]: FILE: auth_server/providers/entra.py class EntraIdProvider (line 30) | class EntraIdProvider(AuthProvider): method __init__ (line 41) | def __init__(self, tenant_id: str, client_id: str, client_secret: str): method validate_token (line 78) | def validate_token(self, token: str, **kwargs: Any) -> dict[str, Any]: method _validate_self_signed_token (line 187) | def _validate_self_signed_token(self, token: str) -> dict[str, Any]: method get_jwks (line 259) | def get_jwks(self) -> dict[str, Any]: method exchange_code_for_token (line 290) | def exchange_code_for_token(self, code: str, redirect_uri: str) -> dic... method get_user_info (line 333) | def get_user_info(self, access_token: str) -> dict[str, Any]: method get_auth_url (line 366) | def get_auth_url(self, redirect_uri: str, state: str, scope: str | Non... method get_logout_url (line 392) | def get_logout_url(self, redirect_uri: str) -> str: method refresh_token (line 410) | def refresh_token(self, refresh_token: str) -> dict[str, Any]: method validate_m2m_token (line 446) | def validate_m2m_token(self, token: str) -> dict[str, Any]: method get_m2m_token (line 460) | def get_m2m_token( method initiate_device_code_flow (line 513) | def initiate_device_code_flow(self, scope: str | None = None) -> dict[... method poll_device_code_token (line 561) | def poll_device_code_token( method get_provider_info (line 632) | def get_provider_info(self) -> dict[str, Any]: FILE: auth_server/providers/factory.py function get_auth_provider (line 21) | def get_auth_provider(provider_type: str | None = None) -> AuthProvider: function _create_keycloak_provider (line 52) | def _create_keycloak_provider() -> KeycloakProvider: function _create_cognito_provider (line 95) | def _create_cognito_provider() -> CognitoProvider: function _create_entra_provider (line 134) | def _create_entra_provider() -> EntraIdProvider: function _create_okta_provider (line 161) | def _create_okta_provider() -> OktaProvider: function _create_auth0_provider (line 194) | def _create_auth0_provider() -> Auth0Provider: function _get_provider_health_info (line 235) | def _get_provider_health_info() -> dict: FILE: auth_server/providers/keycloak.py class KeycloakProvider (line 29) | class KeycloakProvider(AuthProvider): method __init__ (line 32) | def __init__( method validate_token (line 80) | def validate_token(self, token: str, **kwargs: Any) -> dict[str, Any]: method _validate_self_signed_token (line 170) | def _validate_self_signed_token(self, token: str) -> dict[str, Any]: method get_jwks (line 242) | def get_jwks(self) -> dict[str, Any]: method exchange_code_for_token (line 266) | def exchange_code_for_token(self, code: str, redirect_uri: str) -> dic... method get_user_info (line 291) | def get_user_info(self, access_token: str) -> dict[str, Any]: method get_auth_url (line 311) | def get_auth_url(self, redirect_uri: str, state: str, scope: str | Non... method get_logout_url (line 328) | def get_logout_url(self, redirect_uri: str) -> str: method refresh_token (line 339) | def refresh_token(self, refresh_token: str) -> dict[str, Any]: method validate_m2m_token (line 363) | def validate_m2m_token(self, token: str) -> dict[str, Any]: method get_m2m_token (line 368) | def get_m2m_token( method _get_openid_configuration (line 398) | def _get_openid_configuration(self) -> dict[str, Any]: method _check_keycloak_health (line 414) | def _check_keycloak_health(self) -> bool: method get_provider_info (line 423) | def get_provider_info(self) -> dict[str, Any]: FILE: auth_server/providers/okta.py class OktaProvider (line 28) | class OktaProvider(AuthProvider): method __init__ (line 39) | def __init__( method validate_token (line 103) | def validate_token(self, token: str, **kwargs: Any) -> dict[str, Any]: method _validate_self_signed_token (line 223) | def _validate_self_signed_token(self, token: str) -> dict[str, Any]: method get_jwks (line 299) | def get_jwks(self) -> dict[str, Any]: method exchange_code_for_token (line 354) | def exchange_code_for_token(self, code: str, redirect_uri: str) -> dic... method get_user_info (line 389) | def get_user_info(self, access_token: str) -> dict[str, Any]: method get_auth_url (line 413) | def get_auth_url(self, redirect_uri: str, state: str, scope: str | Non... method get_logout_url (line 436) | def get_logout_url(self, redirect_uri: str) -> str: method refresh_token (line 457) | def refresh_token(self, refresh_token: str) -> dict[str, Any]: method validate_m2m_token (line 501) | def validate_m2m_token(self, token: str) -> dict[str, Any]: method get_m2m_token (line 518) | def get_m2m_token( method get_provider_info (line 558) | def get_provider_info(self) -> dict[str, Any]: FILE: auth_server/server.py class _RegistryApiKeyEntry (line 140) | class _RegistryApiKeyEntry(BaseModel): method _validate_name (line 163) | def _validate_name( function _repair_stripped_json (line 176) | def _repair_stripped_json( function _parse_registry_api_keys (line 204) | def _parse_registry_api_keys( function _build_static_token_map (line 264) | async def _build_static_token_map() -> None: function is_request_https (line 386) | def is_request_https(request) -> bool: function mask_sensitive_id (line 415) | def mask_sensitive_id(value: str) -> str: function hash_username (line 422) | def hash_username(username: str) -> str: function anonymize_ip (line 429) | def anonymize_ip(ip_address: str) -> str: function mask_token (line 446) | def mask_token(token: str) -> str: function _is_safe_redirect_url (line 455) | def _is_safe_redirect_url( function _mask_sensitive_dict (line 488) | def _mask_sensitive_dict( function mask_headers (line 525) | def mask_headers(headers: dict) -> dict: function map_groups_to_scopes (line 547) | async def map_groups_to_scopes(groups: list[str]) -> list[str]: function validate_session_cookie (line 593) | async def validate_session_cookie(cookie_value: str) -> dict[str, any]: function parse_server_and_tool_from_url (line 652) | def parse_server_and_tool_from_url(original_url: str) -> tuple[str | Non... function _normalize_server_name (line 682) | def _normalize_server_name(name: str) -> str: function _server_names_match (line 700) | def _server_names_match(name1: str, name2: str) -> bool: function validate_server_tool_access (line 718) | async def validate_server_tool_access( function validate_scope_subset (line 838) | def validate_scope_subset(user_scopes: list[str], requested_scopes: list... function check_rate_limit (line 864) | def check_rate_limit(username: str) -> bool: function lifespan (line 903) | async def lifespan(app: FastAPI): function startup_event (line 938) | async def startup_event(): class TokenValidationResponse (line 956) | class TokenValidationResponse(BaseModel): class GenerateTokenRequest (line 967) | class GenerateTokenRequest(BaseModel): class GenerateTokenResponse (line 976) | class GenerateTokenResponse(BaseModel): class SimplifiedCognitoValidator (line 989) | class SimplifiedCognitoValidator: method __init__ (line 994) | def __init__(self, region: str = "us-east-1"): method _get_cognito_client (line 1005) | def _get_cognito_client(self, region: str): method _get_jwks (line 1011) | def _get_jwks(self, user_pool_id: str, region: str) -> dict: method validate_jwt_token (line 1037) | def validate_jwt_token( method validate_with_boto3 (line 1136) | def validate_with_boto3(self, access_token: str, region: str = None) -... method validate_self_signed_token (line 1195) | def validate_self_signed_token(self, access_token: str) -> dict: method validate_token (line 1269) | def validate_token( function _is_registry_api_request (line 1348) | def _is_registry_api_request( function _check_registry_static_token (line 1376) | def _check_registry_static_token( function _is_federation_api_request (line 1419) | def _is_federation_api_request( function health_check (line 1444) | async def health_check(): function validate_request (line 1450) | async def validate_request(request: Request): function get_auth_config (line 2046) | async def get_auth_config(): function manage_federation_token (line 2082) | async def manage_federation_token(request: Request): function generate_user_token (line 2147) | async def generate_user_token(request: GenerateTokenRequest): function reload_scopes (line 2327) | async def reload_scopes(request: Request, authorization: str | None = He... function parse_arguments (line 2400) | def parse_arguments(): function main (line 2428) | def main(): function load_oauth2_config (line 2447) | def load_oauth2_config(): function auto_derive_cognito_domain (line 2462) | def auto_derive_cognito_domain(user_pool_id: str) -> str: function substitute_env_vars (line 2477) | def substitute_env_vars(config): function get_mcp_logger (line 2536) | def get_mcp_logger() -> MCPLogger | None: function get_enabled_providers (line 2580) | def get_enabled_providers(): function get_oauth2_providers (line 2648) | async def get_oauth2_providers(): function oauth2_login (line 2663) | async def oauth2_login(provider: str, request: Request, redirect_uri: st... function oauth2_callback (line 2767) | async def oauth2_callback( function exchange_code_for_token (line 3113) | async def exchange_code_for_token( function get_user_info (line 3140) | async def get_user_info(access_token: str, provider_config: dict) -> dict: function map_user_info (line 3150) | def map_user_info(user_info: dict, provider_config: dict) -> dict: function oauth2_logout (line 3194) | async def oauth2_logout( FILE: cli/agent_mgmt.py function _extract_username_from_jwt (line 74) | def _extract_username_from_jwt(token: str) -> str: function _get_token_expiration (line 95) | def _get_token_expiration(token: str) -> int | None: function _is_token_expired (line 118) | def _is_token_expired(token: str, buffer_seconds: int = 30) -> bool: function _regenerate_token (line 136) | def _regenerate_token(token_file: str) -> bool: function _load_token (line 204) | def _load_token(token_file: str) -> tuple[str, str]: function _make_request (line 249) | def _make_request( function _print_response (line 333) | def _print_response(response: requests.Response) -> None: function list_agents (line 342) | def list_agents( function get_agent (line 384) | def get_agent( function _check_agent_health (line 419) | def _check_agent_health( function test_agent (line 466) | def test_agent( function test_all_agents (line 528) | def test_all_agents( function search_agents (line 596) | def search_agents( function register_agent (line 644) | def register_agent( function update_agent (line 735) | def update_agent( function delete_agent (line 790) | def delete_agent( function toggle_agent (line 825) | def toggle_agent( function main (line 866) | def main() -> None: FILE: cli/agentcore/discovery.py class AgentCoreScanner (line 21) | class AgentCoreScanner: method __init__ (line 29) | def __init__( method scan_gateways (line 72) | def scan_gateways(self) -> list[dict[str, Any]]: method _get_gateway_targets (line 102) | def _get_gateway_targets( method scan_runtimes (line 136) | def scan_runtimes(self) -> list[dict[str, Any]]: method _get_runtime_endpoints (line 167) | def _get_runtime_endpoints( FILE: cli/agentcore/models.py class TargetInfo (line 35) | class TargetInfo(BaseModel): class GatewayInfo (line 46) | class GatewayInfo(BaseModel): class RuntimeInfo (line 60) | class RuntimeInfo(BaseModel): class SyncResult (line 73) | class SyncResult(BaseModel): class SyncSummary (line 85) | class SyncSummary(BaseModel): function _slugify (line 105) | def _slugify(name: str) -> str: function _display_name (line 138) | def _display_name(name: str) -> str: function _validate_https_url (line 158) | def _validate_https_url(url: str, resource_name: str) -> bool: function _build_invocation_url (line 181) | def _build_invocation_url(region: str, runtime_arn: str) -> str: function _get_auth_scheme (line 190) | def _get_auth_scheme(authorizer_type: str) -> str: function _load_token (line 204) | def _load_token(token_file: str) -> str: FILE: cli/agentcore/registration.py function _detect_idp_vendor (line 62) | def _detect_idp_vendor(discovery_url: str) -> str: function _retry_registry_call (line 75) | def _retry_registry_call(func): function _is_conflict_error (line 99) | def _is_conflict_error(exc: Exception) -> bool: class RegistrationBuilder (line 134) | class RegistrationBuilder: method __init__ (line 137) | def __init__( method _get_account_id (line 148) | def _get_account_id(self) -> str: method build_gateway_registration (line 155) | def build_gateway_registration( method build_target_registration (line 205) | def build_target_registration( method build_runtime_mcp_registration (line 251) | def build_runtime_mcp_registration( method build_runtime_agent_registration (line 282) | def build_runtime_agent_registration( class SyncOrchestrator (line 332) | class SyncOrchestrator: method __init__ (line 345) | def __init__( method sync_gateways (line 371) | def sync_gateways(self) -> None: method sync_runtimes (line 383) | def sync_runtimes(self) -> None: method write_manifest (line 391) | def write_manifest(self) -> None: method print_summary (line 412) | def print_summary(self) -> None: method _collect_manifest_entry (line 466) | def _collect_manifest_entry( method _register_gateway (line 498) | def _register_gateway(self, gateway: dict[str, Any]) -> None: method _register_target (line 561) | def _register_target(self, gateway: dict[str, Any], target: dict[str, ... method _register_runtime (line 602) | def _register_runtime(self, runtime: dict[str, Any]) -> None: method _register_runtime_as_server (line 611) | def _register_runtime_as_server(self, runtime: dict[str, Any]) -> None: method _register_runtime_as_agent (line 644) | def _register_runtime_as_agent(self, runtime: dict[str, Any]) -> None: method _register_service_with_retry (line 693) | def _register_service_with_retry(self, registration: InternalServiceRe... method _register_agent_with_retry (line 697) | def _register_agent_with_retry(self, registration: AgentRegistration) ... method _update_agent_with_retry (line 701) | def _update_agent_with_retry( FILE: cli/agentcore/sync.py function build_parser (line 36) | def build_parser() -> argparse.ArgumentParser: function _parse_account_ids (line 172) | def _parse_account_ids(accounts_str: str) -> list[str]: function _assume_role_session (line 179) | def _assume_role_session( function cmd_sync (line 225) | def cmd_sync(args: argparse.Namespace) -> int: function cmd_list (line 310) | def cmd_list(args: argparse.Namespace) -> int: function _print_list_text (line 380) | def _print_list_text( function main (line 426) | def main(argv: list[str] | None = None) -> int: FILE: cli/agentcore/token_refresher.py function _read_manifest (line 74) | def _read_manifest( function _detect_idp_vendor (line 105) | def _detect_idp_vendor( function _get_cognito_client_secret (line 124) | def _get_cognito_client_secret( function _get_client_secret (line 161) | def _get_client_secret( function _get_token_endpoint (line 205) | def _get_token_endpoint( function _request_token (line 234) | def _request_token( function _update_registry_credential (line 270) | def _update_registry_credential( function _trigger_security_scan (line 324) | def _trigger_security_scan( function _load_registry_token (line 380) | def _load_registry_token( function refresh_all (line 423) | def refresh_all( function main (line 529) | def main() -> None: FILE: cli/anthropic_transformer.py function _substitute_env_vars_in_headers (line 33) | def _substitute_env_vars_in_headers(headers: list[dict[str, str]]) -> li... function _extract_remote_info (line 78) | def _extract_remote_info( function _generate_tags (line 132) | def _generate_tags(name: str) -> list[str]: function transform_anthropic_to_gateway (line 146) | def transform_anthropic_to_gateway( function _run_example (line 197) | def _run_example() -> None: FILE: cli/get_user_token.py function _get_env_or_error (line 44) | def _get_env_or_error(name: str, default: str | None = None) -> str: function _initiate_device_code_flow (line 63) | def _initiate_device_code_flow(tenant_id: str, client_id: str, scope: st... function _poll_for_token (line 96) | def _poll_for_token( function _save_token (line 154) | def _save_token(token_data: dict, output_path: str) -> None: function _extract_access_token (line 173) | def _extract_access_token(token_data: dict) -> str: function main (line 185) | def main() -> int: FILE: cli/mcp_client.py function _check_token_expiration (line 21) | def _check_token_expiration(access_token: str) -> None: function _load_token_from_file (line 95) | def _load_token_from_file(file_path: str) -> str | None: function _load_m2m_credentials (line 138) | def _load_m2m_credentials() -> str | None: function main (line 175) | def main(): FILE: cli/mcp_security_scanner.py class SecurityScanResult (line 37) | class SecurityScanResult(BaseModel): function _get_llm_api_key (line 51) | def _get_llm_api_key(cli_value: str | None = None) -> str: function _ensure_output_directory (line 73) | def _ensure_output_directory() -> Path: function _run_mcp_scanner (line 79) | def _run_mcp_scanner( function _analyze_scan_results (line 213) | def _analyze_scan_results(raw_output: dict) -> tuple[bool, int, int, int... function _save_scan_output (line 258) | def _save_scan_output(server_url: str, raw_output: dict) -> str: function _disable_unsafe_server (line 308) | def _disable_unsafe_server(server_path: str) -> bool: function _extract_server_path_from_url (line 340) | def _extract_server_path_from_url(server_url: str) -> str | None: function scan_server (line 370) | def scan_server( function main (line 501) | def main(): FILE: cli/mcp_utils.py function _validate_url_scheme (line 35) | def _validate_url_scheme(url: str) -> None: function _load_oauth_token_from_file (line 54) | def _load_oauth_token_from_file(token_file_path: str | Path) -> str | None: function _get_auth_token (line 95) | def _get_auth_token( class MCPClient (line 127) | class MCPClient: method __init__ (line 135) | def __init__( method _get_next_request_id (line 165) | def _get_next_request_id(self) -> int: method _build_headers (line 170) | def _build_headers(self) -> dict[str, str]: method _make_request (line 191) | def _make_request(self, payload: dict[str, Any]) -> dict[str, Any]: method _parse_sse_response (line 248) | def _parse_sse_response(self, sse_data: str) -> dict[str, Any]: method initialize (line 268) | def initialize(self) -> dict[str, Any]: method _send_initialized (line 293) | def _send_initialized(self) -> None: method ping (line 302) | def ping(self) -> dict[str, Any]: method list_tools (line 312) | def list_tools(self) -> dict[str, Any]: method call_tool (line 322) | def call_tool(self, tool_name: str, arguments: dict[str, Any] | None =... method call_mcpgw_tool (line 354) | def call_mcpgw_tool(self, tool_name: str, params: dict[str, Any]) -> d... class MCPSession (line 371) | class MCPSession: method __init__ (line 379) | def __init__(self, client: MCPClient): method __enter__ (line 389) | def __enter__(self) -> MCPClient: method __exit__ (line 400) | def __exit__(self, exc_type, exc_val, exc_tb): function create_mcp_client (line 406) | def create_mcp_client( function create_mcp_session (line 423) | def create_mcp_session( FILE: cli/registry_cli_wrapper.py function _load_token_from_file (line 33) | def _load_token_from_file( function _get_registry_client (line 52) | def _get_registry_client( function _print_json_response (line 76) | def _print_json_response( function _handle_service_add (line 87) | def _handle_service_add( function _handle_service_delete (line 101) | def _handle_service_delete( function _handle_service_list (line 111) | def _handle_service_list( function _handle_service_monitor (line 121) | def _handle_service_monitor( function _handle_group_create (line 129) | def _handle_group_create( function _handle_group_delete (line 139) | def _handle_group_delete( function _handle_group_list (line 149) | def _handle_group_list( function _handle_user_create_m2m (line 159) | def _handle_user_create_m2m( function _handle_user_create_human (line 171) | def _handle_user_create_human( function _handle_user_delete (line 190) | def _handle_user_delete( function _handle_user_list (line 200) | def _handle_user_list( function _handle_anthropic_list (line 210) | def _handle_anthropic_list( function _handle_anthropic_get (line 220) | def _handle_anthropic_get( function _handle_agent_list (line 230) | def _handle_agent_list( function _handle_agent_get (line 243) | def _handle_agent_get( function _handle_agent_search (line 253) | def _handle_agent_search( function main (line 263) | def main() -> None: FILE: cli/scan_all_servers.py function _run_security_scan (line 47) | def _run_security_scan( function _generate_markdown_report (line 197) | def _generate_markdown_report( function _scan_all_servers (line 361) | def _scan_all_servers( function main (line 509) | def main(): FILE: cli/src/agent/agentRunner.ts type AgentMessage (line 5) | interface AgentMessage { type AgentConfig (line 10) | interface AgentConfig { type AgentResult (line 19) | interface AgentResult { constant DEFAULT_PROVIDER (line 25) | const DEFAULT_PROVIDER = getDefaultProvider(); constant DEFAULT_MODEL (line 26) | const DEFAULT_MODEL = getDefaultModel(DEFAULT_PROVIDER); type ConversationEntry (line 28) | type ConversationEntry = { function runAgentTurn (line 34) | async function runAgentTurn(history: AgentMessage[], config: AgentConfig... function buildSystemPrompt (line 136) | function buildSystemPrompt(registryVersion?: string): string { FILE: cli/src/agent/anthropicClient.ts function getAnthropicClient (line 5) | function getAnthropicClient(): Anthropic { FILE: cli/src/agent/bedrockClient.ts function getBedrockClient (line 5) | function getBedrockClient(): BedrockRuntimeClient { FILE: cli/src/agent/modelClient.ts type ModelProvider (line 5) | type ModelProvider = "bedrock" | "anthropic"; type MessageRequest (line 7) | interface MessageRequest { type TokenUsage (line 15) | interface TokenUsage { type MessageResponse (line 21) | interface MessageResponse { function sendMessage (line 27) | async function sendMessage( function sendBedrockMessage (line 38) | async function sendBedrockMessage(request: MessageRequest): Promise = { constant SIMPLE_COMMANDS (line 62) | const SIMPLE_COMMANDS: Record = { function parseCommand (line 71) | function parseCommand(input: string): ParsedCommand { function parseCall (line 159) | function parseCall(tokens: string[]): CallCommand { function describeCategory (line 188) | function describeCategory(category: TaskCategory): string { function tokenize (line 203) | function tokenize(text: string): string[] { function unquote (line 214) | function unquote(token: string): string { function splitToken (line 226) | function splitToken(token: string): [string | undefined, string | undefi... FILE: cli/src/chat/taskInterpreter.ts type TaskResolutionSuccess (line 6) | interface TaskResolutionSuccess { type TaskResolutionError (line 11) | interface TaskResolutionError { type TaskResolution (line 15) | type TaskResolution = TaskResolutionSuccess | TaskResolutionError; function resolveTaskCommand (line 17) | function resolveTaskCommand(command: TaskCommand): TaskResolution { function resolveTaskKey (line 81) | function resolveTaskKey(category: TaskCategory, subcommand: string): str... function findField (line 96) | function findField(fields: TaskField[], inputKey: string): TaskField | u... FILE: cli/src/commands/executor.ts type CommandExecutionContext (line 9) | interface CommandExecutionContext extends TaskContext {} function callRegistryWrapper (line 12) | async function callRegistryWrapper(args: string[], context: CommandExecu... function executeSlashCommand (line 59) | async function executeSlashCommand( function executeMcp (line 109) | async function executeMcp(command: "ping" | "list" | "init", context: Co... function executeServers (line 120) | async function executeServers(context: CommandExecutionContext) { function executeCall (line 173) | async function executeCall(parsed: CallCommand, context: CommandExecutio... function executeAgents (line 198) | async function executeAgents(parsed: AgentsCommand, context: CommandExec... function executeAgentsList (line 234) | async function executeAgentsList(context: CommandExecutionContext) { function executeAgentsGet (line 247) | async function executeAgentsGet(agentPath: string, context: CommandExecu... function executeAgentsSearch (line 260) | async function executeAgentsSearch(query: string, context: CommandExecut... function executeAgentsTest (line 273) | async function executeAgentsTest(agentPath: string, context: CommandExec... function executeAgentsTestAll (line 302) | async function executeAgentsTestAll(context: CommandExecutionContext) { function describeAgents (line 346) | function describeAgents(): string { function overviewMessage (line 368) | function overviewMessage(): string { function detailedHelpMessage (line 391) | function detailedHelpMessage(): string { FILE: cli/src/components/Banner.tsx function Banner (line 4) | function Banner() { FILE: cli/src/components/CallToolForm.tsx type CallToolPayload (line 5) | interface CallToolPayload { type CallToolFormProps (line 10) | interface CallToolFormProps { constant DEFAULT_ARGS (line 17) | const DEFAULT_ARGS = "{}"; function CallToolForm (line 19) | function CallToolForm({initialTool, initialArgs, onSubmit, onCancel}: Ca... FILE: cli/src/components/CommandSuggestions.tsx type CommandSuggestionsProps (line 5) | interface CommandSuggestionsProps { function CommandSuggestions (line 10) | function CommandSuggestions({ suggestions, selectedIndex }: CommandSugge... FILE: cli/src/components/JsonViewer.tsx type JsonViewerProps (line 4) | interface JsonViewerProps { function JsonViewer (line 10) | function JsonViewer({data, label, raw}: JsonViewerProps) { function stringify (line 25) | function stringify(data: unknown, raw = false): string { FILE: cli/src/components/MultiStepForm.tsx type MultiStepFormProps (line 7) | interface MultiStepFormProps { function MultiStepForm (line 15) | function MultiStepForm({fields, initialValues = {}, onSubmit, onCancel, ... FILE: cli/src/components/StatusMessage.tsx type StatusMessageProps (line 4) | interface StatusMessageProps { function StatusMessage (line 9) | function StatusMessage({variant, message}: StatusMessageProps) { FILE: cli/src/components/TaskRunner.tsx type RunnerStatus (line 8) | type RunnerStatus = "running" | "success" | "error"; type LogEntry (line 10) | interface LogEntry { type TaskRunnerProps (line 16) | interface TaskRunnerProps { function TaskRunner (line 23) | function TaskRunner({title, description, command, onDone}: TaskRunnerPro... FILE: cli/src/components/TokenFileEditor.tsx type TokenFileEditorProps (line 5) | interface TokenFileEditorProps { function TokenFileEditor (line 11) | function TokenFileEditor({initialPath, onSubmit, onCancel}: TokenFileEdi... FILE: cli/src/components/TokenStatusFooter.tsx type TokenStatusFooterProps (line 3) | interface TokenStatusFooterProps { function TokenStatusFooter (line 16) | function TokenStatusFooter({ FILE: cli/src/components/UrlEditor.tsx type UrlEditorProps (line 5) | interface UrlEditorProps { function UrlEditor (line 11) | function UrlEditor({initialUrl, onSubmit, onCancel}: UrlEditorProps) { FILE: cli/src/parseArgs.ts type CommandName (line 1) | type CommandName = "ping" | "list" | "call" | "init"; type ParsedArgs (line 3) | interface ParsedArgs { constant COMMANDS (line 16) | const COMMANDS = new Set(["ping", "list", "call", "init"]); constant HELP_TEXT (line 18) | const HELP_TEXT = ` function parseArgs (line 41) | function parseArgs(argv: string[]): ParsedArgs { function isCommand (line 159) | function isCommand(value: string): value is CommandName { FILE: cli/src/paths.ts constant SRC_DIR (line 4) | const SRC_DIR = fileURLToPath(new URL(".", import.meta.url)); constant CLI_ROOT (line 5) | const CLI_ROOT = path.resolve(SRC_DIR, ".."); constant REPO_ROOT (line 6) | const REPO_ROOT = path.resolve(CLI_ROOT, ".."); constant REGISTRY_CLI_WRAPPER (line 9) | const REGISTRY_CLI_WRAPPER = path.join(CLI_ROOT, "registry_cli_wrapper.p... constant SERVICE_MANAGEMENT_SCRIPT (line 12) | const SERVICE_MANAGEMENT_SCRIPT = path.join(CLI_ROOT, "service_mgmt.sh"); constant IMPORT_ANTHROPIC_SCRIPT (line 13) | const IMPORT_ANTHROPIC_SCRIPT = path.join(CLI_ROOT, "import_from_anthrop... constant USER_MANAGEMENT_SCRIPT (line 14) | const USER_MANAGEMENT_SCRIPT = path.join(CLI_ROOT, "user_mgmt.sh"); constant TEST_ANTHROPIC_SCRIPT (line 15) | const TEST_ANTHROPIC_SCRIPT = path.join(CLI_ROOT, "test_anthropic_api.py"); constant DEFAULT_IMPORT_LIST (line 16) | const DEFAULT_IMPORT_LIST = path.join(CLI_ROOT, "import_server_list.txt"); FILE: cli/src/runtime/mcp.ts type McpExecutionResult (line 5) | interface McpExecutionResult { function executeMcpCommand (line 16) | async function executeMcpCommand( function formatMcpResult (line 33) | function formatMcpResult( FILE: cli/src/runtime/pythonClient.ts type PythonMcpExecutionResult (line 12) | interface PythonMcpExecutionResult { function executePythonMcpCommand (line 23) | async function executePythonMcpCommand( FILE: cli/src/runtime/script.ts type ScriptRunResult (line 7) | interface ScriptRunResult { function resolveTask (line 15) | function resolveTask(category: TaskCategory, key: string): ScriptTask | ... function runScriptTaskToString (line 19) | async function runScriptTaskToString( FILE: cli/src/tasks/index.ts method build (line 75) | build(values, context) { method build (line 102) | build(values, context) { method build (line 126) | build(values, context) { method build (line 151) | build(values, context) { method build (line 174) | build(values, context) { method build (line 190) | build(_values, context) { method build (line 213) | build(values, context) { method build (line 239) | build(values, context) { method build (line 277) | build(values, context) { method build (line 319) | build(values, context) { method build (line 360) | build(values, context) { method build (line 373) | build(_values, context) { method build (line 382) | build(_values, context) { method build (line 407) | build(values, context) { method build (line 449) | build(values, context) { FILE: cli/src/tasks/types.ts type TaskField (line 1) | interface TaskField { type ScriptCommand (line 9) | interface ScriptCommand { type TaskContext (line 15) | interface TaskContext { type ScriptTask (line 22) | interface ScriptTask { type TaskCategory (line 30) | type TaskCategory = "service" | "import" | "user" | "diagnostic"; FILE: cli/src/types/mcp.ts type JsonRpcRequest (line 8) | interface JsonRpcRequest { type JsonRpcResponse (line 15) | interface JsonRpcResponse { type ToolArguments (line 22) | type ToolArguments = Record; FILE: cli/src/utils/commands.ts type CommandOption (line 5) | interface CommandOption { constant AVAILABLE_COMMANDS (line 11) | const AVAILABLE_COMMANDS: CommandOption[] = [ function getCommandSuggestions (line 23) | function getCommandSuggestions(input: string): CommandOption[] { function getCommandsByCategory (line 38) | function getCommandsByCategory(category: string): CommandOption[] { FILE: cli/src/utils/costCalculator.ts type ModelCost (line 3) | interface ModelCost { function calculateCost (line 17) | function calculateCost( function formatCost (line 43) | function formatCost(cost: number): string { FILE: cli/src/utils/docsReader.ts constant DOCS_DIR (line 8) | const DOCS_DIR = path.resolve(__dirname, '../../..', 'docs'); type DocFile (line 10) | interface DocFile { function _walkDirectory (line 17) | function _walkDirectory(dir: string, baseDir: string, files: string[] = ... function _scoreDocument (line 47) | function _scoreDocument(content: string, fileName: string, keywords: str... function getAllDocFiles (line 69) | function getAllDocFiles(): string[] { function readDocFile (line 78) | function readDocFile(filePath: string): DocFile | null { function searchDocs (line 112) | function searchDocs(query: string): DocFile[] { FILE: cli/src/utils/markdown.ts function renderMarkdown (line 5) | function renderMarkdown(markdown: string): string { function renderMarkdownTables (line 42) | function renderMarkdownTables(text: string): string { function hasMarkdown (line 91) | function hasMarkdown(text: string): boolean { function formatToolOutput (line 109) | function formatToolOutput(toolName: string, output: string, isError: boo... FILE: cli/src/utils/tokenRefresh.ts type TokenRefreshResult (line 7) | interface TokenRefreshResult { function refreshTokens (line 17) | async function refreshTokens(projectRoot?: string): Promise None: function _check_token_expiration (line 64) | def _check_token_expiration(access_token: str) -> None: function _load_token_file (line 121) | def _load_token_file(token_file_path: Path) -> dict[str, Any]: function _make_api_request (line 141) | def _make_api_request( function _format_json_output (line 185) | def _format_json_output(data: Any, verbose: bool = False) -> str: function _print_test_result (line 201) | def _print_test_result(result: TestResult, verbose: bool = False) -> None: function _test_list_agents (line 224) | def _test_list_agents(access_token: str, base_url: str, limit: int = 10)... function _test_list_agents_paginated (line 260) | def _test_list_agents_paginated(access_token: str, base_url: str, limit:... function _test_get_agent (line 296) | def _test_get_agent(access_token: str, base_url: str, agent_name: str) -... function _test_get_agent_versions (line 332) | def _test_get_agent_versions(access_token: str, base_url: str, agent_nam... function _test_pagination_flow (line 364) | def _test_pagination_flow(access_token: str, base_url: str) -> TestResult: function _test_error_invalid_token (line 421) | def _test_error_invalid_token(base_url: str) -> TestResult: function _test_error_missing_agent (line 455) | def _test_error_missing_agent(access_token: str, base_url: str) -> TestR... function _run_all_tests (line 490) | def _run_all_tests( function _print_summary (line 545) | def _print_summary(results: list[TestResult]) -> None: function _parse_arguments (line 564) | def _parse_arguments() -> argparse.Namespace: function _execute_test (line 631) | def _execute_test( function main (line 689) | def main(): FILE: cli/test_anthropic_api.py function _check_token_expiration (line 64) | def _check_token_expiration(access_token: str) -> None: function _load_token_file (line 128) | def _load_token_file(token_file_path: Path) -> dict[str, Any]: function _save_token_file (line 148) | def _save_token_file(token_file_path: Path, token_data: dict[str, Any]) ... function _make_api_request (line 164) | def _make_api_request( function _test_list_servers (line 209) | def _test_list_servers(access_token: str, base_url: str, limit: int = 5)... function _test_get_server_versions (line 240) | def _test_get_server_versions(access_token: str, base_url: str, server_n... function _test_get_server_version_details (line 266) | def _test_get_server_version_details( function _run_all_tests (line 297) | def _run_all_tests(access_token: str, base_url: str) -> None: function main (line 320) | def main(): FILE: cli/test_asor_complete.py function get_token (line 20) | def get_token(): function api_call (line 68) | def api_call(token, method, endpoint, data=None): function test_agent_definition_crud (line 92) | def test_agent_definition_crud(token): function main (line 130) | def main(): FILE: credentials-provider/add_noauth_services.py function _load_env_file (line 27) | def _load_env_file() -> None: function _load_json_file (line 51) | def _load_json_file(file_path: Path) -> dict[str, Any] | None: function _save_json_file (line 61) | def _save_json_file(file_path: Path, data: dict[str, Any], description: ... function _get_registry_servers_dir (line 72) | def _get_registry_servers_dir() -> Path: function _get_oauth_tokens_dir (line 83) | def _get_oauth_tokens_dir() -> Path: function _scan_noauth_services (line 95) | def _scan_noauth_services() -> list[dict[str, Any]]: function _get_ingress_headers (line 131) | def _get_ingress_headers() -> dict[str, str] | None: function _update_vscode_config (line 175) | def _update_vscode_config( function _update_roocode_config (line 222) | def _update_roocode_config( function _parse_arguments (line 276) | def _parse_arguments() -> argparse.Namespace: function main (line 288) | def main() -> None: FILE: credentials-provider/agentcore-auth/get_m2m_token.py function _load_gateway_configs (line 45) | def _load_gateway_configs() -> list[dict[str, Any]]: function _extract_cognito_region_from_pool_id (line 80) | def _extract_cognito_region_from_pool_id(user_pool_id: str) -> str: function _get_cognito_token (line 97) | def _get_cognito_token( function _save_egress_token (line 161) | def _save_egress_token( function _get_cognito_domain_from_env (line 226) | def _get_cognito_domain_from_env() -> tuple[str, str | None]: function generate_access_token (line 245) | def generate_access_token( function _parse_arguments (line 353) | def _parse_arguments() -> argparse.Namespace: function main (line 434) | def main() -> None: FILE: credentials-provider/auth0/get_m2m_token.py function _get_auth0_domain (line 26) | def _get_auth0_domain() -> str: function _get_client_id (line 42) | def _get_client_id() -> str: function _get_client_secret (line 58) | def _get_client_secret() -> str: function _request_m2m_token (line 76) | def _request_m2m_token( function _decode_token (line 147) | def _decode_token(access_token: str) -> dict[str, str]: function _display_decoded_token (line 164) | def _display_decoded_token(claims: dict[str, str]) -> None: function _save_token_to_file (line 201) | def _save_token_to_file(token_data: dict[str, str]) -> str: function main (line 237) | def main() -> None: FILE: credentials-provider/entra/get_m2m_token.py class Colors (line 36) | class Colors: function _redact_sensitive_value (line 46) | def _redact_sensitive_value( function _get_token_from_entra (line 56) | def _get_token_from_entra( function _save_token_file (line 133) | def _save_token_file( function _load_identities_file (line 193) | def _load_identities_file( function generate_tokens (line 219) | def generate_tokens( function main (line 305) | def main() -> None: FILE: credentials-provider/keycloak/get_m2m_token.py class Colors (line 19) | class Colors: class TokenGenerator (line 29) | class TokenGenerator: method __init__ (line 32) | def __init__(self, verbose: bool = False): method setup_logging (line 36) | def setup_logging(self): method log (line 42) | def log(self, message: str): method error (line 47) | def error(self, message: str): method success (line 51) | def success(self, message: str): method warning (line 55) | def warning(self, message: str): method load_agent_config (line 59) | def load_agent_config(self, agent_name: str, oauth_tokens_dir: str) ->... method get_token_from_keycloak (line 80) | def get_token_from_keycloak( method save_token_files (line 125) | def save_token_files( method generate_token_for_agent (line 228) | def generate_token_for_agent( method find_agent_configs (line 291) | def find_agent_configs(self, oauth_tokens_dir: str) -> list[str]: method generate_tokens_for_all_agents (line 312) | def generate_tokens_for_all_agents( function main (line 361) | def main(): FILE: credentials-provider/oauth/egress_oauth.py function _find_available_configurations (line 70) | def _find_available_configurations() -> list[int]: function _validate_environment_variables (line 88) | def _validate_environment_variables() -> None: function _run_generic_oauth_flow_for_config (line 106) | def _run_generic_oauth_flow_for_config( function _run_generic_oauth_flow (line 192) | def _run_generic_oauth_flow( function _load_provider_tokens (line 241) | def _load_provider_tokens(provider: str) -> dict[str, Any]: function _save_egress_tokens (line 267) | def _save_egress_tokens( function _load_existing_tokens (line 314) | def _load_existing_tokens( function _get_supported_providers (line 357) | def _get_supported_providers() -> list[str]: function main (line 405) | def main() -> int: FILE: credentials-provider/oauth/generic_oauth_flow.py function _validate_environment_variables (line 91) | def _validate_environment_variables() -> None: function _load_oauth_providers (line 145) | def _load_oauth_providers() -> dict[str, Any]: class OAuthConfig (line 192) | class OAuthConfig: method is_token_expired (line 208) | def is_token_expired(self) -> bool: method get_authorization_url (line 214) | def get_authorization_url(self, state: str, pkce_challenge: str | None... method exchange_code_for_tokens (line 241) | def exchange_code_for_tokens(self, code: str, pkce_verifier: str | Non... method refresh_access_token (line 326) | def refresh_access_token(self) -> bool: method ensure_valid_token (line 362) | def ensure_valid_token(self) -> bool: method _get_provider_info (line 368) | def _get_provider_info(self) -> None: method _save_tokens (line 396) | def _save_tokens(self) -> None: method _save_tokens_to_file (line 414) | def _save_tokens_to_file(self, token_data: dict) -> None: method _create_vscode_mcp_config (line 483) | def _create_vscode_mcp_config(self, token_dir: Path) -> None: method _create_roocode_mcp_config (line 534) | def _create_roocode_mcp_config(self, token_dir: Path) -> None: method load_tokens (line 589) | def load_tokens(provider: str, client_id: str) -> dict[str, Any]: method _load_tokens_from_file (line 599) | def _load_tokens_from_file(provider: str, client_id: str) -> dict[str,... function generate_pkce_pair (line 616) | def generate_pkce_pair() -> tuple[str, str]: class CallbackHandler (line 631) | class CallbackHandler(http.server.BaseHTTPRequestHandler): method do_GET (line 634) | def do_GET(self) -> None: method _send_response (line 702) | def _send_response(self, message: str, status: int = 200) -> None: method log_message (line 806) | def log_message(self, format: str, *args) -> None: function start_callback_server (line 811) | def start_callback_server(port: int) -> socketserver.TCPServer: function wait_for_callback (line 822) | def wait_for_callback(timeout: int = 300) -> bool: function parse_redirect_uri (line 847) | def parse_redirect_uri(redirect_uri: str) -> tuple[str, int]: function load_config_file (line 854) | def load_config_file(config_path: str) -> dict[str, Any]: function interactive_provider_selection (line 864) | def interactive_provider_selection() -> str: function interactive_input (line 896) | def interactive_input(prompt: str, required: bool = True, is_secret: boo... function interactive_scopes_input (line 917) | def interactive_scopes_input(provider_config: dict[str, Any]) -> list[str]: function interactive_configuration (line 939) | def interactive_configuration() -> dict[str, Any]: function run_m2m_flow (line 1067) | def run_m2m_flow(config: OAuthConfig) -> bool: function run_oauth_flow (line 1148) | def run_oauth_flow(config: OAuthConfig, force_new: bool = False) -> bool: function _delete_existing_tokens (line 1283) | def _delete_existing_tokens(provider: str, client_id: str) -> None: function main (line 1313) | def main() -> int: FILE: credentials-provider/oauth/ingress_oauth.py function _validate_environment_variables (line 79) | def _validate_environment_variables() -> None: function _get_cognito_domain (line 117) | def _get_cognito_domain(user_pool_id: str, region: str) -> str: function _perform_keycloak_m2m_authentication (line 124) | def _perform_keycloak_m2m_authentication( function _perform_entra_m2m_authentication (line 203) | def _perform_entra_m2m_authentication( function _perform_m2m_authentication (line 282) | def _perform_m2m_authentication( function _save_ingress_tokens (line 368) | def _save_ingress_tokens(token_data: dict[str, Any]) -> str: function _load_existing_tokens (line 435) | def _load_existing_tokens() -> dict[str, Any] | None: function main (line 462) | def main() -> int: FILE: credentials-provider/okta/get_m2m_token.py function _get_okta_domain (line 26) | def _get_okta_domain() -> str: function _get_client_id (line 42) | def _get_client_id() -> str: function _get_client_secret (line 58) | def _get_client_secret() -> str: function _request_m2m_token (line 76) | def _request_m2m_token( function _decode_token (line 148) | def _decode_token(access_token: str) -> dict[str, str]: function _display_decoded_token (line 165) | def _display_decoded_token(claims: dict[str, str]) -> None: function _save_token_to_file (line 201) | def _save_token_to_file(token_data: dict[str, str]) -> str: function main (line 237) | def main() -> None: FILE: credentials-provider/token_refresher.py function _load_env_file (line 39) | def _load_env_file() -> None: function _should_ignore_file (line 84) | def _should_ignore_file(filename: str) -> bool: function _parse_token_file (line 105) | def _parse_token_file(filepath: Path) -> dict | None: function _get_all_tokens (line 130) | def _get_all_tokens() -> list[tuple[Path, dict]]: function _get_expiring_tokens (line 161) | def _get_expiring_tokens(buffer_seconds: int = DEFAULT_EXPIRY_BUFFER) ->... function _determine_refresh_method (line 226) | def _determine_refresh_method(token_data: dict, filename: str) -> str | ... function _refresh_agentcore_token (line 259) | def _refresh_agentcore_token(token_data: dict, filename: str) -> bool: function _refresh_oauth_token (line 314) | def _refresh_oauth_token(token_data: dict, filename: str) -> bool: function _refresh_token (line 386) | def _refresh_token(filepath: Path, token_data: dict) -> bool: function _scan_noauth_services (line 413) | def _scan_noauth_services() -> list[dict]: function _regenerate_mcp_configs (line 461) | def _regenerate_mcp_configs() -> bool: function _get_ingress_headers (line 512) | def _get_ingress_headers(ingress_file: Path) -> dict[str, str]: function _create_egress_server_config (line 599) | def _create_egress_server_config( function _create_noauth_server_config (line 674) | def _create_noauth_server_config( function _generate_vscode_config (line 720) | def _generate_vscode_config( function _generate_roocode_config (line 797) | def _generate_roocode_config( function _run_refresh_cycle (line 874) | def _run_refresh_cycle( function _get_pidfile_path (line 926) | def _get_pidfile_path() -> Path: function _write_pidfile (line 936) | def _write_pidfile() -> None: function _remove_pidfile (line 946) | def _remove_pidfile() -> None: function _kill_existing_instance (line 959) | def _kill_existing_instance() -> bool: function _setup_signal_handlers (line 1021) | def _setup_signal_handlers() -> None: function main (line 1035) | def main(): FILE: credentials-provider/utils.py function redact_sensitive_value (line 6) | def redact_sensitive_value(value: str, show_chars: int = 8) -> str: function redact_credentials_in_text (line 27) | def redact_credentials_in_text(text: str, show_chars: int = 8) -> str: FILE: frontend/e2e/helpers/auth.ts constant BASE_URL (line 3) | const BASE_URL = 'http://localhost'; constant BACKEND_URL (line 8) | const BACKEND_URL = 'http://localhost:7860'; constant ADMIN_AUTH_HEADERS (line 13) | const ADMIN_AUTH_HEADERS: Record = { constant ADMIN_ME_RESPONSE (line 24) | const ADMIN_ME_RESPONSE = { constant MOCK_RESPONSES (line 54) | const MOCK_RESPONSES: Record = { function loginAsAdmin (line 73) | async function loginAsAdmin(page: Page): Promise { function navigateToVirtualServers (line 163) | async function navigateToVirtualServers(page: Page): Promise { FILE: frontend/src/App.tsx function App (line 25) | function App() { FILE: frontend/src/components/ANSBadge.tsx type ANSFunction (line 4) | interface ANSFunction { type ANSEndpoint (line 10) | interface ANSEndpoint { type ANSLink (line 18) | interface ANSLink { type ANSMetadata (line 23) | interface ANSMetadata { type ANSBadgeProps (line 46) | interface ANSBadgeProps { constant STATUS_CONFIG (line 51) | const STATUS_CONFIG = { constant LINK_LABELS (line 99) | const LINK_LABELS: Record = { type ANSCertificateModalProps (line 138) | interface ANSCertificateModalProps { FILE: frontend/src/components/AddRegistryEntryModal.tsx type RegistrySourceType (line 9) | type RegistrySourceType = 'aws_registry' | 'anthropic' | 'asor'; type AddRegistryEntryModalProps (line 15) | interface AddRegistryEntryModalProps { type AwsRegistryFormData (line 27) | interface AwsRegistryFormData { constant ALL_DESCRIPTOR_TYPES (line 40) | const ALL_DESCRIPTOR_TYPES = ['MCP', 'A2A', 'CUSTOM', 'AGENT_SKILLS']; constant SOURCE_TITLES (line 46) | const SOURCE_TITLES: Record = { constant INPUT_CLASS (line 56) | const INPUT_CLASS = constant LABEL_CLASS (line 66) | const LABEL_CLASS = 'block text-sm font-medium text-gray-700 dark:text-g... function _defaultAwsFormData (line 72) | function _defaultAwsFormData(): AwsRegistryFormData { FILE: frontend/src/components/AgentCard.tsx type SyncMetadata (line 26) | interface SyncMetadata { type Agent (line 39) | interface Agent { type AgentCardProps (line 80) | interface AgentCardProps { FILE: frontend/src/components/AgentDetailsModal.tsx type AgentLike (line 5) | interface AgentLike { type AgentDetailsModalProps (line 16) | interface AgentDetailsModalProps { FILE: frontend/src/components/ApplicationLogs.tsx type LogEntry (line 14) | interface LogEntry { type LogQueryResponse (line 25) | interface LogQueryResponse { type LogMetadata (line 33) | interface LogMetadata { type LogFilters (line 39) | interface LogFilters { type ApplicationLogsProps (line 48) | interface ApplicationLogsProps { constant LEVEL_COLORS (line 52) | const LEVEL_COLORS: Record = { constant PAGE_SIZE (line 60) | const PAGE_SIZE = 50; FILE: frontend/src/components/AuditEventDetail.tsx type AuditEventDetailProps (line 9) | interface AuditEventDetailProps { FILE: frontend/src/components/AuditFilterBar.tsx type AuditFilters (line 10) | interface AuditFilters { type AuditFilterBarProps (line 21) | interface AuditFilterBarProps { constant REGISTRY_OPERATION_OPTIONS (line 28) | const REGISTRY_OPERATION_OPTIONS = [ constant MCP_OPERATION_OPTIONS (line 42) | const MCP_OPERATION_OPTIONS = [ constant REGISTRY_RESOURCE_TYPE_OPTIONS (line 52) | const REGISTRY_RESOURCE_TYPE_OPTIONS = [ constant MCP_RESOURCE_TYPE_OPTIONS (line 62) | const MCP_RESOURCE_TYPE_OPTIONS = [ constant STATUS_PRESETS (line 66) | const STATUS_PRESETS = [ type FilterOptionsCache (line 74) | interface FilterOptionsCache { FILE: frontend/src/components/AuditLogTable.tsx type AuditEvent (line 14) | interface AuditEvent { type AuditLogTableProps (line 79) | interface AuditLogTableProps { type PaginationState (line 85) | interface PaginationState { FILE: frontend/src/components/AuditStatistics.tsx type UsageSummaryItem (line 10) | interface UsageSummaryItem { type TimeSeriesBucket (line 15) | interface TimeSeriesBucket { type StatusDistribution (line 20) | interface StatusDistribution { type UserActivityItem (line 26) | interface UserActivityItem { type AuditStatisticsData (line 32) | interface AuditStatisticsData { type AuditStatisticsProps (line 42) | interface AuditStatisticsProps { constant STORAGE_KEY (line 48) | const STORAGE_KEY = 'audit-statistics-collapsed'; constant WEEKDAY_NAMES (line 125) | const WEEKDAY_NAMES = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; function _fillTimelineDays (line 131) | function _fillTimelineDays(timeline: TimeSeriesBucket[], days: number): ... function _formatDateLabel (line 146) | function _formatDateLabel(period: string): string { constant VB_W (line 154) | const VB_W = 600; constant VB_H (line 155) | const VB_H = 180; constant PAD (line 156) | const PAD = { top: 20, right: 50, bottom: 32, left: 45 }; FILE: frontend/src/components/ConfigPanel.tsx type ConfigField (line 19) | interface ConfigField { type ConfigSubgroup (line 28) | interface ConfigSubgroup { type ConfigGroup (line 34) | interface ConfigGroup { type ConfigResponse (line 42) | interface ConfigResponse { type ExportFormat (line 48) | type ExportFormat = 'env' | 'json' | 'tfvars' | 'yaml'; type ConfigPanelProps (line 50) | interface ConfigPanelProps { constant EXPORT_OPTIONS (line 59) | const EXPORT_OPTIONS: { format: ExportFormat; label: string }[] = [ constant DEFAULT_EXPANDED (line 66) | const DEFAULT_EXPANDED: Set = new Set(['deployment', 'storage']); function highlightMatch (line 71) | function highlightMatch(text: string, term: string): React.ReactNode { type ConfigGroupPanelProps (line 88) | interface ConfigGroupPanelProps { FILE: frontend/src/components/ConfirmModal.tsx type ConfirmModalProps (line 9) | interface ConfirmModalProps { FILE: frontend/src/components/DataExport.tsx type ExportableCollection (line 12) | interface ExportableCollection { constant EXPORTABLE_COLLECTIONS (line 26) | const EXPORTABLE_COLLECTIONS: ExportableCollection[] = [ function _buildDateSuffix (line 163) | function _buildDateSuffix(): string { function _fetchAllPages (line 168) | async function _fetchAllPages( function _triggerBlobDownload (line 204) | function _triggerBlobDownload( function _recordAuditEvent (line 219) | async function _recordAuditEvent( function _fetchCount (line 234) | async function _fetchCount( type DataExportProps (line 268) | interface DataExportProps { FILE: frontend/src/components/DeleteConfirmation.tsx type DeleteConfirmationProps (line 7) | interface DeleteConfirmationProps { FILE: frontend/src/components/DetailsModal.tsx type DetailsModalProps (line 4) | interface DetailsModalProps { constant MAX_WIDTH_CLASSES (line 14) | const MAX_WIDTH_CLASSES = { FILE: frontend/src/components/DiscoverListRow.tsx type ItemType (line 24) | type ItemType = 'server' | 'agent' | 'skill' | 'virtual'; type DiscoverListRowProps (line 27) | interface DiscoverListRowProps { function _getAverageRating (line 41) | function _getAverageRating( function _getTypeBadge (line 55) | function _getTypeBadge(type: ItemType) { function _getServerRegistrySource (line 89) | function _getServerRegistrySource(server: Server): string | null { function _extractDisplayFields (line 108) | function _extractDisplayFields( FILE: frontend/src/components/DiscoverTab.tsx constant AI_REGISTRY_TOOLS_PATH (line 12) | const AI_REGISTRY_TOOLS_PATH = '/airegistry-tools/'; constant MAX_FEATURED (line 15) | const MAX_FEATURED = 4; type DiscoverTabProps (line 18) | interface DiscoverTabProps { function _getAverageRating (line 46) | function _getAverageRating( function _sortServersByRating (line 60) | function _sortServersByRating(servers: Server[]): Server[] { function _sortSkillsByStars (line 72) | function _sortSkillsByStars(skills: Skill[]): Skill[] { function _sortVirtualServersByRating (line 84) | function _sortVirtualServersByRating(vs: VirtualServerInfo[]): VirtualSe... function _matchesKeyword (line 97) | function _matchesKeyword( function _countFragment (line 114) | function _countFragment( function _buildSummaryText (line 128) | function _buildSummaryText( function _virtualServerMatchesKeyword (line 165) | function _virtualServerMatchesKeyword( function _getFeaturedItems (line 184) | function _getFeaturedItems( FILE: frontend/src/components/ExternalRegistries.tsx type ExternalRegistriesProps (line 21) | interface ExternalRegistriesProps { type AnthropicServerConfig (line 29) | interface AnthropicServerConfig { type AnthropicConfig (line 37) | interface AnthropicConfig { type AsorAgentConfig (line 48) | interface AsorAgentConfig { type AsorConfig (line 56) | interface AsorConfig { type AgentCoreRegistryConfig (line 68) | interface AgentCoreRegistryConfig { type AgentCoreConfig (line 81) | interface AgentCoreConfig { type FederationConfig (line 95) | interface FederationConfig { type SyncResults (line 105) | interface SyncResults { function _formatRelativeTime (line 115) | function _formatRelativeTime(dateString: string | null | undefined): str... function _truncateArn (line 137) | function _truncateArn(arn: string, maxLen: number = 60): string { function _renderAgentCoreCard (line 414) | function _renderAgentCoreCard( function _renderAnthropicCard (line 612) | function _renderAnthropicCard( function _renderAsorCard (line 744) | function _renderAsorCard( function GlobeIcon (line 876) | function GlobeIcon(props: React.ComponentProps<'svg'>) { FILE: frontend/src/components/FederationPeerForm.tsx type FederationPeerFormProps (line 19) | interface FederationPeerFormProps { type FormErrors (line 28) | interface FormErrors { FILE: frontend/src/components/FederationPeers.tsx type FederationPeersProps (line 28) | interface FederationPeersProps { type PeerHealthStatus (line 36) | type PeerHealthStatus = 'healthy' | 'warning' | 'error' | 'unknown'; function getHealthColorClasses (line 42) | function getHealthColorClasses(health: PeerHealthStatus): string { function formatLastSync (line 59) | function formatLastSync(dateString: string | null | undefined): string { type PeerActionMenuProps (line 81) | interface PeerActionMenuProps { FILE: frontend/src/components/IAMGroups.tsx type IAMGroupsProps (line 30) | interface IAMGroupsProps { type View (line 34) | type View = 'list' | 'create' | 'edit'; type ServerAccessEntry (line 37) | interface ServerAccessEntry { constant UI_PERMISSION_KEYS (line 44) | const UI_PERMISSION_KEYS = [ constant COMMON_METHODS (line 58) | const COMMON_METHODS = [ constant EXAMPLE_SCOPE_JSON (line 73) | const EXAMPLE_SCOPE_JSON = { constant EMPTY_SERVER_ENTRY (line 92) | const EMPTY_SERVER_ENTRY: ServerAccessEntry = { server: '', methods: [..... type ServerToolsSelectorProps (line 99) | interface ServerToolsSelectorProps { function _buildScopeJson (line 234) | function _buildScopeJson( FILE: frontend/src/components/IAMM2M.tsx type IAMM2MProps (line 16) | interface IAMM2MProps { type View (line 20) | type View = 'list' | 'create' | 'credentials' | 'edit'; type FormErrors (line 22) | interface FormErrors { FILE: frontend/src/components/IAMUsers.tsx type IAMUsersProps (line 18) | interface IAMUsersProps { type View (line 22) | type View = 'list' | 'create'; type FormErrors (line 27) | interface FormErrors { FILE: frontend/src/components/Layout.tsx type LayoutProps (line 17) | interface LayoutProps { FILE: frontend/src/components/ProtectedRoute.tsx type ProtectedRouteProps (line 6) | interface ProtectedRouteProps { FILE: frontend/src/components/RegistryCardSettings.tsx type RegistryCardData (line 11) | interface RegistryCardData { type RegistryCardSettingsProps (line 40) | interface RegistryCardSettingsProps { FILE: frontend/src/components/SearchableSelect.tsx type SelectOption (line 12) | interface SelectOption { type SearchableSelectProps (line 18) | interface SearchableSelectProps { function _truncateWords (line 35) | function _truncateWords(text: string, maxWords: number): string { FILE: frontend/src/components/SecurityScanModal.tsx type SecurityScanResult (line 14) | interface SecurityScanResult { type SecurityScanModalProps (line 36) | interface SecurityScanModalProps { type StatusInfo (line 49) | interface StatusInfo { constant SEVERITY_BOX_STYLES (line 56) | const SEVERITY_BOX_STYLES: Record = { FILE: frontend/src/components/SemanticSearchResults.tsx type SemanticSearchResultsProps (line 28) | interface SemanticSearchResultsProps { type ToolSchemaModalProps (line 39) | interface ToolSchemaModalProps { type ServerDetailsModalProps (line 119) | interface ServerDetailsModalProps { type SkillContentModalProps (line 246) | interface SkillContentModalProps { type VirtualServerDetailsModalProps (line 443) | interface VirtualServerDetailsModalProps { type VirtualServerResultCardProps (line 667) | interface VirtualServerResultCardProps { FILE: frontend/src/components/ServerCard.tsx type ServerVersion (line 32) | interface ServerVersion { type SyncMetadata (line 42) | interface SyncMetadata { type Server (line 52) | interface Server { type ServerCardProps (line 98) | interface ServerCardProps { type Tool (line 113) | interface Tool { FILE: frontend/src/components/ServerConfigModal.tsx type IDE (line 8) | type IDE = 'cursor' | 'roo-code' | 'claude-code' | 'kiro'; type ServerConfigModalProps (line 10) | interface ServerConfigModalProps { FILE: frontend/src/components/ServerDetailsModal.tsx type ServerDetailsModalProps (line 5) | interface ServerDetailsModalProps { FILE: frontend/src/components/Sidebar.tsx type SidebarProps (line 20) | interface SidebarProps { FILE: frontend/src/components/SkillCard.tsx type SkillCardProps (line 33) | interface SkillCardProps { FILE: frontend/src/components/StarRatingWidget.tsx type RatingDetail (line 6) | interface RatingDetail { type RatingInfoResponse (line 11) | interface RatingInfoResponse { type StarRatingWidgetProps (line 16) | interface StarRatingWidgetProps { FILE: frontend/src/components/StatusBadge.tsx type LifecycleStatus (line 3) | type LifecycleStatus = 'active' | 'deprecated' | 'draft' | 'beta'; type StatusBadgeProps (line 5) | interface StatusBadgeProps { constant STATUS_CONFIG (line 10) | const STATUS_CONFIG: Record< FILE: frontend/src/components/ToolSelector.tsx type ToolSelectorProps (line 17) | interface ToolSelectorProps { type ServerGroup (line 26) | interface ServerGroup { FILE: frontend/src/components/VersionBadge.tsx type ServerVersion (line 5) | interface ServerVersion { type VersionBadgeProps (line 16) | interface VersionBadgeProps { FILE: frontend/src/components/VersionSelectorModal.tsx type ServerVersion (line 12) | interface ServerVersion { type VersionSelectorModalProps (line 23) | interface VersionSelectorModalProps { FILE: frontend/src/components/VirtualServerCard.tsx type VirtualServerCardProps (line 21) | interface VirtualServerCardProps { FILE: frontend/src/components/VirtualServerDetailsModal.tsx type VirtualServerDetailsModalProps (line 8) | interface VirtualServerDetailsModalProps { FILE: frontend/src/components/VirtualServerForm.tsx type VirtualServerFormProps (line 15) | interface VirtualServerFormProps { constant STEPS (line 27) | const STEPS = [ type StepId (line 34) | type StepId = typeof STEPS[number]['id']; function _generatePathFromName (line 40) | function _generatePathFromName(name: string): string { FILE: frontend/src/components/VirtualServerList.tsx type VirtualServerListProps (line 26) | interface VirtualServerListProps { FILE: frontend/src/components/__tests__/ServerConfigModal.test.tsx function renderModal (line 24) | function renderModal(serverOverrides: Partial = {}, configOverri... function getDisplayedConfig (line 36) | function getDisplayedConfig(): any { FILE: frontend/src/contexts/AuthContext.tsx type UIPermissions (line 19) | interface UIPermissions { type User (line 33) | interface User { type AuthContextType (line 45) | interface AuthContextType { type AuthProviderProps (line 61) | interface AuthProviderProps { FILE: frontend/src/contexts/ThemeContext.tsx type Theme (line 3) | type Theme = 'light' | 'dark'; type ThemeContextType (line 5) | interface ThemeContextType { type ThemeProviderProps (line 20) | interface ThemeProviderProps { FILE: frontend/src/hooks/useAgentList.ts type AgentInfo (line 12) | interface AgentInfo { type AgentListResponse (line 18) | interface AgentListResponse { type UseAgentListReturn (line 27) | interface UseAgentListReturn { function useAgentList (line 35) | function useAgentList(): UseAgentListReturn { FILE: frontend/src/hooks/useFederationPeers.ts type PeerRegistry (line 8) | interface PeerRegistry { type PeerSyncStatus (line 29) | interface PeerSyncStatus { type SyncResult (line 46) | interface SyncResult { type PeerFormData (line 62) | interface PeerFormData { type PeerWithStatus (line 79) | interface PeerWithStatus extends PeerRegistry { type UseFederationPeersReturn (line 87) | interface UseFederationPeersReturn { function fetchPeerStatus (line 100) | async function fetchPeerStatus(peerId: string): Promise { function updatePeer (line 245) | async function updatePeer( function deletePeer (line 254) | async function deletePeer(peerId: string): Promise { function syncPeer (line 259) | async function syncPeer(peerId: string): Promise { function enablePeer (line 265) | async function enablePeer(peerId: string): Promise { function disablePeer (line 271) | async function disablePeer(peerId: string): Promise { FILE: frontend/src/hooks/useIAM.ts type IAMGroup (line 6) | interface IAMGroup { type IAMUser (line 13) | interface IAMUser { type M2MCredentials (line 25) | interface M2MCredentials { type CreateHumanUserPayload (line 31) | interface CreateHumanUserPayload { type CreateM2MPayload (line 40) | interface CreateM2MPayload { type CreateGroupPayload (line 46) | interface CreateGroupPayload { function useIAMGroups (line 56) | function useIAMGroups() { function createGroup (line 79) | async function createGroup(payload: CreateGroupPayload): Promise { function deleteGroup (line 84) | async function deleteGroup(name: string): Promise { type GroupDetail (line 90) | interface GroupDetail { type UpdateGroupPayload (line 101) | interface UpdateGroupPayload { function getGroup (line 110) | async function getGroup(groupName: string): Promise { function updateGroup (line 115) | async function updateGroup( function useIAMUsers (line 128) | function useIAMUsers(search?: string) { function createHumanUser (line 153) | async function createHumanUser(payload: CreateHumanUserPayload): Promise... function createM2MAccount (line 158) | async function createM2MAccount(payload: CreateM2MPayload): Promise { type UpdateUserGroupsResponse (line 167) | interface UpdateUserGroupsResponse { function updateUserGroups (line 174) | async function updateUserGroups( FILE: frontend/src/hooks/useRegistryConfig.ts type RegistryConfig (line 4) | interface RegistryConfig { constant DEFAULT_CONFIG (line 18) | const DEFAULT_CONFIG: RegistryConfig = { function useRegistryConfig (line 34) | function useRegistryConfig(): { FILE: frontend/src/hooks/useSemanticSearch.ts type EntityType (line 4) | type EntityType = 'mcp_server' | 'tool' | 'a2a_agent' | 'skill' | 'virtu... constant DEFAULT_ENTITY_TYPES (line 6) | const DEFAULT_ENTITY_TYPES: EntityType[] = ['mcp_server', 'tool', 'a2a_a... constant DEFAULT_ENTITY_TYPES_KEY (line 7) | const DEFAULT_ENTITY_TYPES_KEY = DEFAULT_ENTITY_TYPES.join('|'); type MatchingToolHit (line 9) | interface MatchingToolHit { type SyncMetadata (line 16) | interface SyncMetadata { type SemanticServerHit (line 26) | interface SemanticServerHit { type SemanticToolHit (line 46) | interface SemanticToolHit { type SemanticAgentHit (line 58) | interface SemanticAgentHit { type SemanticSkillHit (line 67) | interface SemanticSkillHit { type VirtualServerToolHit (line 86) | interface VirtualServerToolHit { type SemanticVirtualServerHit (line 94) | interface SemanticVirtualServerHit { type SemanticSearchResponse (line 110) | interface SemanticSearchResponse { type UseSemanticSearchOptions (line 124) | interface UseSemanticSearchOptions { type UseSemanticSearchReturn (line 132) | interface UseSemanticSearchReturn { FILE: frontend/src/hooks/useServerStats.ts type ServerVersion (line 5) | interface ServerVersion { type SyncMetadata (line 12) | interface SyncMetadata { type Server (line 20) | interface Server { type ServerStats (line 60) | interface ServerStats { type UseServerStatsReturn (line 67) | interface UseServerStatsReturn { FILE: frontend/src/hooks/useSkills.ts type UseSkillsReturn (line 7) | interface UseSkillsReturn { FILE: frontend/src/hooks/useToolCatalog.ts type ServerInfo (line 12) | interface ServerInfo { type ToolInfo (line 19) | interface ToolInfo { type ServerListResponse (line 25) | interface ServerListResponse { type VirtualServerListResponse (line 35) | interface VirtualServerListResponse { type ToolCatalogResponse (line 45) | interface ToolCatalogResponse { type UseServerListReturn (line 58) | interface UseServerListReturn { type UseServerToolsReturn (line 65) | interface UseServerToolsReturn { function useServerList (line 76) | function useServerList(): UseServerListReturn { function useServerTools (line 148) | function useServerTools(serverPath: string): UseServerToolsReturn { FILE: frontend/src/hooks/useVirtualServers.ts type UseVirtualServersReturn (line 16) | interface UseVirtualServersReturn { function _encodeServerPath (line 34) | function _encodeServerPath(path: string): string { type UseVirtualServerReturn (line 134) | interface UseVirtualServerReturn { type UseVirtualServerToolsReturn (line 199) | interface UseVirtualServerToolsReturn { type UseToolCatalogReturn (line 267) | interface UseToolCatalogReturn { function createVirtualServer (line 324) | async function createVirtualServer( function updateVirtualServer (line 332) | async function updateVirtualServer( function deleteVirtualServer (line 344) | async function deleteVirtualServer(path: string): Promise { function toggleVirtualServer (line 349) | async function toggleVirtualServer( FILE: frontend/src/pages/AuditLogsPage.tsx type AuditLogsPageProps (line 9) | interface AuditLogsPageProps { FILE: frontend/src/pages/Dashboard.tsx type SyncMetadata (line 25) | interface SyncMetadata { type Server (line 35) | interface Server { type Agent (line 56) | interface Agent { type ToastProps (line 89) | interface ToastProps { type DashboardProps (line 140) | interface DashboardProps { FILE: frontend/src/pages/Login.tsx type OAuthProvider (line 6) | interface OAuthProvider { FILE: frontend/src/pages/RegisterPage.tsx type ToastProps (line 19) | interface ToastProps { type RegistrationType (line 58) | type RegistrationType = 'server' | 'agent'; type RegistrationMode (line 59) | type RegistrationMode = 'form' | 'json'; type ServerFormData (line 62) | interface ServerFormData { type AgentFormData (line 84) | interface AgentFormData { type FormErrors (line 113) | interface FormErrors { FILE: frontend/src/pages/SettingsPage.tsx type ToastState (line 32) | interface ToastState { type SettingsItem (line 38) | interface SettingsItem { type SettingsCategory (line 44) | interface SettingsCategory { constant SETTINGS_CATEGORIES (line 66) | const SETTINGS_CATEGORIES: SettingsCategory[] = [ FILE: frontend/src/types/skill.ts type AllowedTool (line 8) | interface AllowedTool { type SkillRequirement (line 18) | interface SkillRequirement { type SkillMetadata (line 32) | interface SkillMetadata { type Skill (line 39) | interface Skill { FILE: frontend/src/types/stats.ts type DatabaseStatus (line 11) | interface DatabaseStatus { type AuthStatus (line 21) | interface AuthStatus { type RegistryStatsData (line 31) | interface RegistryStatsData { type SystemStats (line 41) | interface SystemStats { FILE: frontend/src/types/virtualServer.ts type ToolMapping (line 15) | interface ToolMapping { type ToolScopeOverride (line 30) | interface ToolScopeOverride { type VirtualServerConfig (line 43) | interface VirtualServerConfig { type RatingDetail (line 68) | interface RatingDetail { type VirtualServerInfo (line 80) | interface VirtualServerInfo { type CreateVirtualServerRequest (line 104) | interface CreateVirtualServerRequest { type UpdateVirtualServerRequest (line 120) | interface UpdateVirtualServerRequest { type ToolCatalogEntry (line 136) | interface ToolCatalogEntry { type ResolvedTool (line 152) | interface ResolvedTool { FILE: frontend/src/utils/dateUtils.ts function formatRelativeTime (line 9) | function formatRelativeTime(date: string | Date | null | undefined): str... function formatAbsoluteDate (line 34) | function formatAbsoluteDate(date: string | Date | null | undefined): str... function formatDateWithTooltip (line 65) | function formatDateWithTooltip(date: string | Date | null | undefined): { FILE: frontend/src/utils/permissions.ts type SettingsUser (line 12) | interface SettingsUser { function canAccessSettings (line 20) | function canAccessSettings(user: SettingsUser | null): boolean { FILE: get_asor_token.py function get_asor_token (line 21) | def get_asor_token(): FILE: metrics-service/add_test_key.py function add_test_key (line 10) | async def add_test_key(): FILE: metrics-service/app/api/auth.py function verify_api_key (line 12) | async def verify_api_key(request: Request) -> str: function get_rate_limit_status (line 60) | async def get_rate_limit_status(api_key: str) -> dict: FILE: metrics-service/app/api/routes.py function collect_metrics (line 18) | async def collect_metrics( function flush_metrics (line 56) | async def flush_metrics( function get_rate_limit (line 76) | async def get_rate_limit(request: Request): function get_cleanup_preview (line 92) | async def get_cleanup_preview( function run_cleanup (line 123) | async def run_cleanup( function get_retention_policies (line 153) | async def get_retention_policies(api_key: str = Depends(verify_api_key)): function update_retention_policy (line 171) | async def update_retention_policy( function get_database_stats (line 208) | async def get_database_stats(api_key: str = Depends(verify_api_key)): function get_database_size (line 219) | async def get_database_size(api_key: str = Depends(verify_api_key)): FILE: metrics-service/app/config.py class Settings (line 5) | class Settings: FILE: metrics-service/app/core/models.py class MetricType (line 7) | class MetricType(StrEnum): class Metric (line 17) | class Metric(BaseModel): class MetricRequest (line 26) | class MetricRequest(BaseModel): class MetricResponse (line 33) | class MetricResponse(BaseModel): class ErrorResponse (line 41) | class ErrorResponse(BaseModel): FILE: metrics-service/app/core/processor.py function _normalize_label_value (line 12) | def _normalize_label_value(value: object) -> str: class ProcessingResult (line 24) | class ProcessingResult: method __init__ (line 25) | def __init__(self): class MetricsProcessor (line 31) | class MetricsProcessor: method __init__ (line 34) | def __init__(self): method process_metrics (line 49) | async def process_metrics( method _validate_metric (line 93) | def _validate_metric(self, metric: Metric) -> bool: method _emit_to_otel (line 101) | async def _emit_to_otel(self, metric: Metric, service: str): method _buffer_for_storage (line 137) | async def _buffer_for_storage(self, metric: Metric, request: MetricReq... method _flush_buffer (line 146) | async def _flush_buffer(self): method force_flush (line 162) | async def force_flush(self): FILE: metrics-service/app/core/rate_limiter.py class RateLimiter (line 13) | class RateLimiter: method __init__ (line 16) | def __init__(self): method check_rate_limit (line 21) | async def check_rate_limit(self, key_hash: str, rate_limit: int) -> Tu... method get_bucket_status (line 73) | async def get_bucket_status(self, key_hash: str, rate_limit: int) -> D... method cleanup_old_buckets (line 106) | async def cleanup_old_buckets(self, max_age_hours: int = 24): FILE: metrics-service/app/core/retention.py function _enable_test_tables (line 49) | def _enable_test_tables() -> None: function _disable_test_tables (line 59) | def _disable_test_tables() -> None: function _get_allowed_table_names (line 68) | def _get_allowed_table_names() -> Set[str]: function _validate_table_name (line 79) | def _validate_table_name(table_name: str) -> str: function _validate_timestamp_column (line 99) | def _validate_timestamp_column(column_name: str) -> str: function _validate_identifier (line 119) | def _validate_identifier(identifier: str) -> str: class RetentionPolicy (line 144) | class RetentionPolicy: method __init__ (line 147) | def __init__( method get_cleanup_query (line 162) | def get_cleanup_query(self) -> tuple[str, tuple]: method get_count_query (line 180) | def get_count_query(self) -> tuple[str, tuple]: class RetentionManager (line 196) | class RetentionManager: method __init__ (line 199) | def __init__(self): method _load_default_policies (line 204) | def _load_default_policies(self): method load_policies_from_database (line 244) | async def load_policies_from_database(self): method save_policies_to_database (line 276) | async def save_policies_to_database(self): method get_cleanup_preview (line 299) | async def get_cleanup_preview(self, table_name: str | None = None) -> ... method cleanup_table (line 375) | async def cleanup_table(self, table_name: str, dry_run: bool = False) ... method cleanup_all_tables (line 441) | async def cleanup_all_tables(self, dry_run: bool = False) -> Dict[str,... method update_policy (line 491) | async def update_policy(self, table_name: str, retention_days: int, is... method get_table_stats (line 521) | async def get_table_stats(self) -> Dict[str, Dict[str, Any]]: method get_database_size (line 606) | async def get_database_size(self) -> Dict[str, Any]: FILE: metrics-service/app/core/validator.py class ValidationError (line 12) | class ValidationError(Exception): method __init__ (line 15) | def __init__(self, field: str, message: str, value: Any = None): class ValidationResult (line 22) | class ValidationResult: method __init__ (line 25) | def __init__(self): method add_error (line 30) | def add_error(self, field: str, message: str, value: Any = None): method add_warning (line 35) | def add_warning(self, message: str): method get_error_messages (line 39) | def get_error_messages(self) -> List[str]: class MetricsValidator (line 44) | class MetricsValidator: method validate_metric_request (line 75) | def validate_metric_request(self, request: MetricRequest) -> Validatio... method _validate_service_name (line 103) | def _validate_service_name(self, service: str, result: ValidationResult): method _validate_version (line 128) | def _validate_version(self, version: str, result: ValidationResult): method _validate_instance_id (line 137) | def _validate_instance_id(self, instance_id: str, result: ValidationRe... method _validate_metric (line 158) | def _validate_metric(self, metric: Metric, field_prefix: str, result: ... method _validate_timestamp (line 182) | def _validate_timestamp(self, timestamp: datetime, field: str, result:... method _validate_metric_value (line 203) | def _validate_metric_value(self, value: float, field: str, result: Val... method _validate_duration (line 228) | def _validate_duration(self, duration: float, field: str, result: Vali... method _validate_dimensions (line 242) | def _validate_dimensions( method _validate_dimension_key (line 261) | def _validate_dimension_key(self, key: str, field: str, result: Valida... method _validate_dimension_value (line 280) | def _validate_dimension_value(self, value: Any, field: str, result: Va... method _validate_metadata (line 300) | def _validate_metadata(self, metadata: Dict[str, Any], field: str, res... method _validate_metadata_key (line 315) | def _validate_metadata_key(self, key: str, field: str, result: Validat... method _validate_metadata_value (line 327) | def _validate_metadata_value(self, value: Any, field: str, result: Val... FILE: metrics-service/app/main.py function lifespan (line 22) | async def lifespan(app: FastAPI): function rate_limit_cleanup_task (line 77) | async def rate_limit_cleanup_task(): function retention_cleanup_task (line 90) | async def retention_cleanup_task(): function metrics_flush_task (line 115) | async def metrics_flush_task(): function setup_preshared_api_keys (line 132) | async def setup_preshared_api_keys(): function health_check (line 177) | async def health_check(): function root (line 183) | async def root(): FILE: metrics-service/app/otel/exporters.py function setup_otel (line 25) | def setup_otel(): FILE: metrics-service/app/otel/instruments.py class MetricsInstruments (line 9) | class MetricsInstruments: method __init__ (line 12) | def __init__(self): FILE: metrics-service/app/storage/database.py function wait_for_database (line 13) | async def wait_for_database(max_retries: int = 10, delay: float = 2.0): function _migrate_schema_if_needed (line 35) | async def _migrate_schema_if_needed(db): function init_database (line 99) | async def init_database(): class MetricsStorage (line 225) | class MetricsStorage: method __init__ (line 228) | def __init__(self): method store_metrics_batch (line 231) | async def store_metrics_batch(self, metrics_batch: List[Dict[str, Any]]): method _store_specialized_metric (line 277) | async def _store_specialized_metric(self, db, metric, request, request... method get_api_key (line 352) | async def get_api_key(self, key_hash: str) -> Dict[str, Any] | None: method update_api_key_usage (line 373) | async def update_api_key_usage(self, key_hash: str): method create_api_key (line 386) | async def create_api_key( FILE: metrics-service/app/storage/migrations.py class Migration (line 16) | class Migration: method __init__ (line 19) | def __init__( method __str__ (line 35) | def __str__(self): class MigrationManager (line 39) | class MigrationManager: method __init__ (line 42) | def __init__(self, db_path: str = None): method _register_migrations (line 47) | def _register_migrations(self): method get_current_version (line 375) | async def get_current_version(self) -> int: method get_applied_migrations (line 400) | async def get_applied_migrations(self) -> List[Dict[str, Any]]: method apply_migration (line 415) | async def apply_migration(self, migration: Migration) -> bool: method rollback_migration (line 454) | async def rollback_migration(self, migration: Migration) -> bool: method migrate_up (line 492) | async def migrate_up(self, target_version: int | None = None) -> bool: method migrate_down (line 524) | async def migrate_down(self, target_version: int) -> bool: method list_migrations (line 556) | def list_migrations(self) -> List[Migration]: method get_migration_status (line 560) | async def get_migration_status(self) -> Dict[str, Any]: FILE: metrics-service/app/utils/helpers.py function generate_api_key (line 11) | def generate_api_key() -> str: function hash_api_key (line 16) | def hash_api_key(api_key: str) -> str: function generate_request_id (line 21) | def generate_request_id() -> str: FILE: metrics-service/create_api_key.py function create_api_key_for_service (line 18) | async def create_api_key_for_service(service_name: str): function main (line 48) | async def main(): FILE: metrics-service/metrics_client.py class MetricsClient (line 19) | class MetricsClient: method __init__ (line 22) | def __init__( method _get_client (line 47) | async def _get_client(self): method _emit_metric (line 53) | async def _emit_metric( method emit_metric_sync (line 120) | def emit_metric_sync(self, *args, **kwargs): method emit_auth_metric (line 127) | async def emit_auth_metric( method emit_auth_metric_sync (line 150) | def emit_auth_metric_sync(self, *args, **kwargs): method emit_registry_metric (line 155) | async def emit_registry_metric( method emit_registry_metric_sync (line 180) | def emit_registry_metric_sync(self, *args, **kwargs): method emit_discovery_metric (line 185) | async def emit_discovery_metric( method emit_discovery_metric_sync (line 212) | def emit_discovery_metric_sync(self, *args, **kwargs): method emit_tool_execution_metric (line 217) | async def emit_tool_execution_metric( method emit_tool_execution_metric_sync (line 246) | def emit_tool_execution_metric_sync(self, *args, **kwargs): method emit_health_metric (line 251) | async def emit_health_metric( method emit_health_metric_sync (line 262) | def emit_health_metric_sync(self, *args, **kwargs): method emit_custom_metric (line 267) | async def emit_custom_metric( method emit_custom_metric_sync (line 288) | def emit_custom_metric_sync(self, *args, **kwargs): method emit_metrics_batch (line 293) | async def emit_metrics_batch(self, metrics: List[Dict[str, Any]]) -> b... method close (line 336) | async def close(self): method __aenter__ (line 341) | async def __aenter__(self): method __aexit__ (line 345) | async def __aexit__(self, exc_type, exc_val, exc_tb): function create_metrics_client (line 351) | def create_metrics_client( function emit_auth_metric (line 359) | async def emit_auth_metric(success: bool, method: str, duration_ms: floa... function emit_registry_metric (line 368) | async def emit_registry_metric( function emit_discovery_metric (line 381) | async def emit_discovery_metric(query: str, results_count: int, duration... function emit_tool_execution_metric (line 390) | async def emit_tool_execution_metric( FILE: metrics-service/migrate.py function cmd_status (line 17) | async def cmd_status(): function cmd_up (line 50) | async def cmd_up(target_version: int = None): function cmd_down (line 75) | async def cmd_down(target_version: int): function cmd_list (line 110) | async def cmd_list(): function cmd_create (line 129) | async def cmd_create(name: str): function main (line 178) | async def main(): FILE: metrics-service/tests/conftest.py function event_loop (line 23) | def event_loop(): function temp_db (line 31) | def temp_db(): function initialized_db (line 51) | async def initialized_db(temp_db): function test_settings (line 58) | def test_settings(): function sample_metric (line 70) | def sample_metric(): function sample_metric_request (line 88) | def sample_metric_request(sample_metric): function test_api_key (line 96) | def test_api_key(): function storage_with_api_key (line 104) | async def storage_with_api_key(initialized_db, test_api_key): function mock_otel_instruments (line 115) | def mock_otel_instruments(): FILE: metrics-service/tests/test_api.py function client (line 14) | def client(): function valid_metric_request (line 20) | def valid_metric_request(): class TestHealthEndpoints (line 43) | class TestHealthEndpoints: method test_health_endpoint (line 46) | def test_health_endpoint(self, client): method test_root_endpoint (line 52) | def test_root_endpoint(self, client): class TestMetricsEndpoint (line 63) | class TestMetricsEndpoint: method test_metrics_without_api_key (line 66) | def test_metrics_without_api_key(self, client, valid_metric_request): method test_metrics_with_invalid_api_key (line 73) | def test_metrics_with_invalid_api_key(self, mock_storage_class, client... method test_metrics_with_valid_api_key (line 87) | def test_metrics_with_valid_api_key( method test_metrics_with_invalid_payload (line 123) | def test_metrics_with_invalid_payload(self, mock_storage_class, client): method test_metrics_with_missing_required_fields (line 142) | def test_metrics_with_missing_required_fields(self, mock_storage_class... method test_metrics_with_invalid_metric_type (line 164) | def test_metrics_with_invalid_metric_type(self, mock_storage_class, cl... method test_metrics_processor_error (line 192) | def test_metrics_processor_error( method test_metrics_with_multiple_metrics (line 218) | def test_metrics_with_multiple_metrics(self, mock_processor_class, moc... class TestFlushEndpoint (line 256) | class TestFlushEndpoint: method test_flush_without_api_key (line 259) | def test_flush_without_api_key(self, client): method test_flush_with_valid_api_key (line 267) | def test_flush_with_valid_api_key(self, mock_processor_class, mock_sto... FILE: metrics-service/tests/test_auth.py class TestAPIKeyVerification (line 13) | class TestAPIKeyVerification: method test_verify_valid_api_key (line 17) | async def test_verify_valid_api_key(self, mock_storage_class): method test_verify_missing_api_key (line 43) | async def test_verify_missing_api_key(self, mock_storage_class): method test_verify_invalid_api_key (line 57) | async def test_verify_invalid_api_key(self, mock_storage_class): method test_verify_inactive_api_key (line 76) | async def test_verify_inactive_api_key(self, mock_storage_class): method test_verify_api_key_updates_usage (line 100) | async def test_verify_api_key_updates_usage(self, mock_storage_class): class TestAPIKeyHashingHelpers (line 125) | class TestAPIKeyHashingHelpers: method test_hash_api_key_consistency (line 128) | def test_hash_api_key_consistency(self): method test_hash_different_keys_produce_different_hashes (line 137) | def test_hash_different_keys_produce_different_hashes(self): method test_hash_empty_string (line 147) | def test_hash_empty_string(self): class TestAuthenticationIntegration (line 154) | class TestAuthenticationIntegration: method test_metrics_endpoint_auth_integration (line 158) | def test_metrics_endpoint_auth_integration(self, mock_storage_class): method test_flush_endpoint_auth_integration (line 177) | def test_flush_endpoint_auth_integration(self, mock_storage_class): method test_health_endpoint_no_auth_required (line 195) | def test_health_endpoint_no_auth_required(self): method test_root_endpoint_no_auth_required (line 202) | def test_root_endpoint_no_auth_required(self): class TestSecurityBestPractices (line 210) | class TestSecurityBestPractices: method test_api_key_not_logged_in_error_messages (line 214) | async def test_api_key_not_logged_in_error_messages(self, mock_storage... method test_api_key_hashed_before_storage_lookup (line 234) | async def test_api_key_hashed_before_storage_lookup(self, mock_storage... FILE: metrics-service/tests/test_database.py class TestDatabaseInitialization (line 13) | class TestDatabaseInitialization: method test_wait_for_database_success (line 16) | async def test_wait_for_database_success(self, temp_db): method test_init_database_succeeds (line 21) | async def test_init_database_succeeds(self, temp_db): class TestAPIKeyManagement (line 31) | class TestAPIKeyManagement: method test_create_api_key (line 34) | async def test_create_api_key(self, initialized_db): method test_get_api_key_nonexistent (line 48) | async def test_get_api_key_nonexistent(self, initialized_db): method test_update_api_key_usage (line 54) | async def test_update_api_key_usage(self, storage_with_api_key): class TestMetricsStorage (line 70) | class TestMetricsStorage: method test_store_single_metric_batch (line 73) | async def test_store_single_metric_batch(self, initialized_db, sample_... method test_store_empty_batch (line 91) | async def test_store_empty_batch(self, initialized_db): method test_store_multiple_metrics_batch (line 100) | async def test_store_multiple_metrics_batch(self, initialized_db): method test_store_discovery_metric (line 128) | async def test_store_discovery_metric(self, initialized_db): FILE: metrics-service/tests/test_migrations.py class TestMigration (line 13) | class TestMigration: method test_migration_creation (line 16) | def test_migration_creation(self): method test_migration_with_python_functions (line 31) | def test_migration_with_python_functions(self): class TestMigrationManager (line 52) | class TestMigrationManager: method temp_db (line 56) | def temp_db(self): method migration_manager (line 64) | def migration_manager(self, temp_db): method test_get_current_version_no_table (line 69) | async def test_get_current_version_no_table(self, migration_manager): method test_get_current_version_empty_table (line 75) | async def test_get_current_version_empty_table(self, migration_manager... method test_get_current_version_with_data (line 92) | async def test_get_current_version_with_data(self, migration_manager, ... method test_get_applied_migrations (line 117) | async def test_get_applied_migrations(self, migration_manager, temp_db): method test_apply_migration_sql_only (line 142) | async def test_apply_migration_sql_only(self, migration_manager, temp_... method test_apply_migration_with_python (line 177) | async def test_apply_migration_with_python(self, migration_manager, te... method test_apply_migration_failure (line 214) | async def test_apply_migration_failure(self, migration_manager): method test_rollback_migration (line 226) | async def test_rollback_migration(self, migration_manager, temp_db): method test_list_migrations (line 263) | def test_list_migrations(self, migration_manager): method test_migrate_up_all (line 276) | async def test_migrate_up_all(self, migration_manager, temp_db): method test_migrate_up_to_target (line 311) | async def test_migrate_up_to_target(self, migration_manager, temp_db): method test_migrate_up_already_current (line 341) | async def test_migrate_up_already_current(self, migration_manager, tem... method test_migrate_down (line 363) | async def test_migrate_down(self, migration_manager, temp_db): method test_get_migration_status (line 404) | async def test_get_migration_status(self, migration_manager, temp_db): FILE: metrics-service/tests/test_processor.py class TestProcessingResult (line 12) | class TestProcessingResult: method test_processing_result_initialization (line 15) | def test_processing_result_initialization(self): method test_processing_result_modification (line 22) | def test_processing_result_modification(self): class TestMetricsProcessor (line 34) | class TestMetricsProcessor: method test_processor_initialization (line 38) | def test_processor_initialization(self, mock_storage_class): method test_processor_initialization_with_otel (line 49) | def test_processor_initialization_with_otel(self, mock_storage_class): method test_processor_initialization_without_otel (line 59) | def test_processor_initialization_without_otel(self, mock_storage_class): class TestMetricValidation (line 70) | class TestMetricValidation: method test_validate_valid_metric (line 74) | def test_validate_valid_metric(self, mock_storage_class): method test_validate_metric_with_null_value (line 83) | def test_validate_metric_with_null_value(self, mock_storage_class): method test_validate_metric_with_zero_value (line 97) | def test_validate_metric_with_zero_value(self, mock_storage_class): class TestMetricsProcessing (line 110) | class TestMetricsProcessing: method test_process_single_valid_metric (line 114) | async def test_process_single_valid_metric(self, mock_storage_class): method test_process_invalid_metric (line 135) | async def test_process_invalid_metric(self, mock_storage_class, mock_v... method test_process_mixed_valid_invalid_metrics (line 170) | async def test_process_mixed_valid_invalid_metrics(self, mock_storage_... method test_process_metrics_with_otel_emission (line 208) | async def test_process_metrics_with_otel_emission(self, mock_storage_c... method test_process_metrics_storage_error (line 239) | async def test_process_metrics_storage_error(self, mock_storage_class): class TestOTelEmission (line 269) | class TestOTelEmission: method test_emit_auth_metric_to_otel (line 273) | async def test_emit_auth_metric_to_otel(self, mock_storage_class): method test_emit_discovery_metric_to_otel (line 312) | async def test_emit_discovery_metric_to_otel(self, mock_storage_class): method test_emit_tool_metric_to_otel (line 332) | async def test_emit_tool_metric_to_otel(self, mock_storage_class): method test_emit_without_otel (line 352) | async def test_emit_without_otel(self, mock_storage_class): class TestBufferedStorage (line 363) | class TestBufferedStorage: method test_buffer_for_storage (line 367) | async def test_buffer_for_storage(self, mock_storage_class): method test_force_flush (line 385) | async def test_force_flush(self, mock_storage_class): FILE: metrics-service/tests/test_rate_limiter.py class TestRateLimiter (line 17) | class TestRateLimiter: method rate_limiter (line 21) | def rate_limiter(self): method test_rate_limiter_initialization (line 26) | async def test_rate_limiter_initialization(self, rate_limiter): method test_first_request_allowed (line 32) | async def test_first_request_allowed(self, rate_limiter): method test_rate_limit_enforcement (line 43) | async def test_rate_limit_enforcement(self, rate_limiter): method test_token_refill_over_time (line 64) | async def test_token_refill_over_time(self, rate_limiter): method test_different_keys_independent_limits (line 87) | async def test_different_keys_independent_limits(self, rate_limiter): method test_rate_limit_change (line 107) | async def test_rate_limit_change(self, rate_limiter): method test_get_bucket_status (line 123) | async def test_get_bucket_status(self, rate_limiter): method test_get_bucket_status_new_key (line 139) | async def test_get_bucket_status_new_key(self, rate_limiter): method test_cleanup_old_buckets (line 151) | async def test_cleanup_old_buckets(self, rate_limiter): class TestRateLimitIntegration (line 171) | class TestRateLimitIntegration: method clear_rate_limiter (line 175) | def clear_rate_limiter(self): method client (line 182) | def client(self): method mock_request (line 187) | def mock_request(self): method test_auth_with_rate_limiting (line 196) | async def test_auth_with_rate_limiting(self, mock_storage_class, mock_... method test_rate_limit_exceeded (line 219) | async def test_rate_limit_exceeded(self, mock_storage_class, mock_requ... method test_get_rate_limit_status_function (line 248) | async def test_get_rate_limit_status_function(self, mock_storage_class): method test_get_rate_limit_status_invalid_key (line 269) | async def test_get_rate_limit_status_invalid_key(self, mock_storage_cl... class TestRateLimitEndpoint (line 283) | class TestRateLimitEndpoint: method clear_rate_limiter (line 287) | def clear_rate_limiter(self): method client (line 294) | def client(self): method test_rate_limit_endpoint_without_key (line 298) | def test_rate_limit_endpoint_without_key(self, client): method test_rate_limit_endpoint_with_key (line 305) | def test_rate_limit_endpoint_with_key(self, mock_get_status, client): method test_rate_limit_endpoint_error (line 325) | def test_rate_limit_endpoint_error(self, mock_get_status, client): FILE: metrics-service/tests/test_retention.py function enable_test_tables (line 26) | def enable_test_tables(): function temp_db (line 34) | async def temp_db(): class TestRetentionPolicy (line 80) | class TestRetentionPolicy: method test_policy_creation (line 83) | def test_policy_creation(self): method test_custom_cleanup_query (line 92) | def test_custom_cleanup_query(self): method test_default_cleanup_query (line 103) | def test_default_cleanup_query(self): method test_count_query (line 114) | def test_count_query(self): class TestRetentionManager (line 127) | class TestRetentionManager: method manager (line 131) | async def manager(self, temp_db): method test_load_default_policies (line 138) | async def test_load_default_policies(self, manager): method test_update_policy (line 146) | async def test_update_policy(self, manager): method test_get_cleanup_preview (line 155) | async def test_get_cleanup_preview(self, manager, temp_db): method test_cleanup_table_dry_run (line 176) | async def test_cleanup_table_dry_run(self, manager, temp_db): method test_cleanup_table_actual (line 196) | async def test_cleanup_table_actual(self, manager, temp_db): method test_cleanup_inactive_policy (line 216) | async def test_cleanup_inactive_policy(self, manager): method test_cleanup_no_policy (line 228) | async def test_cleanup_no_policy(self, manager): method test_cleanup_all_tables (line 234) | async def test_cleanup_all_tables(self, manager, temp_db): method test_get_table_stats (line 248) | async def test_get_table_stats(self, manager, temp_db): method test_get_database_size (line 264) | async def test_get_database_size(self, manager): method test_save_and_load_policies (line 276) | async def test_save_and_load_policies(self, manager, temp_db): class TestRetentionIntegration (line 297) | class TestRetentionIntegration: method test_end_to_end_cleanup (line 301) | async def test_end_to_end_cleanup(self, temp_db): class TestSQLInjectionPrevention (line 340) | class TestSQLInjectionPrevention: method test_table_name_with_sql_injection_rejected (line 348) | def test_table_name_with_sql_injection_rejected(self): method test_table_name_with_spaces_rejected (line 365) | def test_table_name_with_spaces_rejected(self): method test_table_name_with_special_chars_rejected (line 370) | def test_table_name_with_special_chars_rejected(self): method test_timestamp_column_with_sql_injection_rejected (line 388) | def test_timestamp_column_with_sql_injection_rejected(self): method test_identifier_validation_rejects_invalid_patterns (line 400) | def test_identifier_validation_rejects_invalid_patterns(self): method test_identifier_validation_accepts_valid_patterns (line 417) | def test_identifier_validation_accepts_valid_patterns(self): method test_valid_table_names_accepted (line 432) | def test_valid_table_names_accepted(self): method test_valid_timestamp_columns_accepted (line 438) | def test_valid_timestamp_columns_accepted(self): method test_retention_policy_rejects_invalid_table (line 444) | def test_retention_policy_rejects_invalid_table(self): method test_retention_policy_rejects_invalid_timestamp_column (line 454) | def test_retention_policy_rejects_invalid_timestamp_column(self): method test_update_policy_rejects_invalid_table (line 462) | async def test_update_policy_rejects_invalid_table(self, temp_db): method test_get_cleanup_preview_rejects_invalid_table (line 476) | async def test_get_cleanup_preview_rejects_invalid_table(self, temp_db): method test_cleanup_table_rejects_invalid_table (line 490) | async def test_cleanup_table_rejects_invalid_table(self, temp_db): class TestAllowlistConfiguration (line 501) | class TestAllowlistConfiguration: method test_allowlist_contains_expected_tables (line 504) | def test_allowlist_contains_expected_tables(self): method test_allowlist_contains_expected_timestamp_columns (line 518) | def test_allowlist_contains_expected_timestamp_columns(self): method test_allowlist_is_immutable_set (line 528) | def test_allowlist_is_immutable_set(self): FILE: metrics-service/tests/test_validator.py class TestValidationResult (line 11) | class TestValidationResult: method test_validation_result_initialization (line 14) | def test_validation_result_initialization(self): method test_add_error (line 21) | def test_add_error(self): method test_add_warning (line 32) | def test_add_warning(self): method test_get_error_messages (line 41) | def test_get_error_messages(self): class TestValidationError (line 53) | class TestValidationError: method test_validation_error_creation (line 56) | def test_validation_error_creation(self): class TestServiceValidation (line 66) | class TestServiceValidation: method validator (line 70) | def validator(self): method test_valid_service_names (line 74) | def test_valid_service_names(self, validator): method test_invalid_service_names (line 92) | def test_invalid_service_names(self, validator): method test_non_string_service_name (line 109) | def test_non_string_service_name(self, validator): class TestVersionValidation (line 118) | class TestVersionValidation: method validator (line 122) | def validator(self): method test_valid_versions (line 126) | def test_valid_versions(self, validator): method test_invalid_versions (line 145) | def test_invalid_versions(self, validator): class TestMetricValueValidation (line 158) | class TestMetricValueValidation: method validator (line 162) | def validator(self): method test_valid_metric_values (line 166) | def test_valid_metric_values(self, validator): method test_invalid_metric_values (line 178) | def test_invalid_metric_values(self, validator): class TestDimensionsValidation (line 198) | class TestDimensionsValidation: method validator (line 202) | def validator(self): method test_valid_dimensions (line 206) | def test_valid_dimensions(self, validator): method test_invalid_dimension_keys (line 223) | def test_invalid_dimension_keys(self, validator): method test_too_many_dimensions (line 239) | def test_too_many_dimensions(self, validator): method test_dimension_value_length (line 251) | def test_dimension_value_length(self, validator): class TestTimestampValidation (line 264) | class TestTimestampValidation: method validator (line 268) | def validator(self): method test_valid_timestamps (line 272) | def test_valid_timestamps(self, validator): method test_future_timestamp (line 286) | def test_future_timestamp(self, validator): method test_old_timestamp (line 296) | def test_old_timestamp(self, validator): class TestFullRequestValidation (line 308) | class TestFullRequestValidation: method validator (line 312) | def validator(self): method test_valid_request (line 316) | def test_valid_request(self, validator): method test_empty_metrics_array (line 338) | def test_empty_metrics_array(self, validator): method test_too_many_metrics (line 347) | def test_too_many_metrics(self, validator): method test_invalid_service_propagates (line 361) | def test_invalid_service_propagates(self, validator): method test_metric_validation_with_index (line 373) | def test_metric_validation_with_index(self, validator): FILE: registry/api/agent_routes.py function get_search_repo (line 46) | def get_search_repo() -> SearchRepositoryBase: function _perform_agent_security_scan_on_registration (line 63) | async def _perform_agent_security_scan_on_registration( class RatingRequest (line 149) | class RatingRequest(BaseModel): function _build_agent_health_urls (line 153) | def _build_agent_health_urls( function _normalize_path (line 175) | def _normalize_path( function _check_agent_permission (line 209) | def _check_agent_permission( function _has_delete_agent_permission (line 242) | def _has_delete_agent_permission(user_context: dict[str, Any], agent_pat... function _filter_agents_by_access (line 281) | def _filter_agents_by_access( function register_agent (line 335) | async def register_agent( function list_agents (line 596) | async def list_agents( function check_agent_health (line 778) | async def check_agent_health( function rate_agent (line 911) | async def rate_agent( function get_agent_rating (line 969) | async def get_agent_rating( function toggle_agent (line 997) | async def toggle_agent( function get_agent_security_scan (line 1066) | async def get_agent_security_scan( function rescan_agent (line 1123) | async def rescan_agent( function get_agent (line 1199) | async def get_agent( function update_agent (line 1248) | async def update_agent( function delete_agent (line 1410) | async def delete_agent( function discover_agents_by_skills (line 1501) | async def discover_agents_by_skills( function discover_agents_semantic (line 1618) | async def discover_agents_semantic( FILE: registry/api/ans_routes.py function _check_rate_limit (line 48) | def _check_rate_limit( function _check_ans_enabled (line 73) | def _check_ans_enabled() -> None: function _get_username (line 82) | def _get_username( function _check_admin (line 98) | def _check_admin( function _normalize_path (line 123) | def _normalize_path(path: str) -> str: function link_ans_to_agent_endpoint (line 136) | async def link_ans_to_agent_endpoint( function get_agent_ans_status (line 165) | async def get_agent_ans_status( function unlink_ans_from_agent_endpoint (line 188) | async def unlink_ans_from_agent_endpoint( function link_ans_to_server_endpoint (line 218) | async def link_ans_to_server_endpoint( function get_server_ans_status (line 247) | async def get_server_ans_status( function unlink_ans_from_server_endpoint (line 270) | async def unlink_ans_from_server_endpoint( function trigger_ans_sync (line 300) | async def trigger_ans_sync( function get_ans_metrics_endpoint (line 318) | async def get_ans_metrics_endpoint( function get_ans_health (line 332) | async def get_ans_health( FILE: registry/api/auth0_m2m_routes.py class Auth0SyncRequest (line 31) | class Auth0SyncRequest(BaseModel): class Auth0SyncResponse (line 37) | class Auth0SyncResponse(BaseModel): function _require_admin (line 47) | def _require_admin(user_context: dict | None) -> None: function sync_auth0_m2m_clients (line 68) | async def sync_auth0_m2m_clients( function list_auth0_m2m_clients (line 111) | async def list_auth0_m2m_clients( function get_client_groups (line 151) | async def get_client_groups( function update_client_groups (line 189) | async def update_client_groups( FILE: registry/api/config_routes.py function _is_sensitive_field (line 314) | def _is_sensitive_field(field_name: str) -> bool: function _mask_sensitive_value (line 320) | def _mask_sensitive_value(value: Any) -> str: function _format_value (line 334) | def _format_value( function _get_field_value (line 380) | def _get_field_value(field_name: str) -> Any: function _check_rate_limit (line 400) | def _check_rate_limit(user_id: str) -> bool: function _get_cached_config_response (line 430) | def _get_cached_config_response() -> dict[str, Any]: function _build_fields_list (line 443) | def _build_fields_list( function _build_config_response (line 466) | def _build_config_response() -> dict[str, Any]: function get_full_config (line 515) | async def get_full_config( function get_config (line 601) | async def get_config() -> dict[str, Any]: class ExportFormat (line 637) | class ExportFormat(str, Enum): function _iter_group_fields (line 646) | def _iter_group_fields( function _export_as_env (line 663) | def _export_as_env(include_sensitive: bool = False) -> str: function _export_as_json (line 703) | def _export_as_json(include_sensitive: bool = False) -> str: function _export_as_tfvars (line 735) | def _export_as_tfvars(include_sensitive: bool = False) -> str: function _export_as_yaml (line 781) | def _export_as_yaml(include_sensitive: bool = False) -> str: function export_config (line 866) | async def export_config( FILE: registry/api/export_routes.py class ExportAuditRequest (line 34) | class ExportAuditRequest(BaseModel): function _require_admin (line 49) | def _require_admin( function record_export_audit_event (line 66) | async def record_export_audit_event( function export_scopes (line 91) | async def export_scopes( FILE: registry/api/federation_export_routes.py function _get_current_sync_generation (line 37) | async def _get_current_sync_generation() -> int: function _get_registry_id (line 66) | def _get_registry_id() -> str: function _check_federation_scope (line 89) | def _check_federation_scope( function _get_item_attr (line 117) | def _get_item_attr( function _is_federated_item (line 138) | def _is_federated_item( function _filter_by_visibility (line 163) | def _filter_by_visibility( function _filter_by_generation (line 223) | def _filter_by_generation( function _item_to_dict (line 269) | def _item_to_dict( function _paginate (line 288) | def _paginate( function federation_auth (line 312) | async def federation_auth( function federation_health (line 351) | async def federation_health(): function export_servers (line 372) | async def export_servers( function export_agents (line 485) | async def export_agents( function export_security_scans (line 595) | async def export_security_scans( FILE: registry/api/federation_routes.py function _get_federation_repo (line 33) | def _get_federation_repo() -> FederationConfigRepositoryBase: function get_federation_config (line 39) | async def get_federation_config( function save_federation_config (line 87) | async def save_federation_config( function update_federation_config (line 193) | async def update_federation_config( function delete_federation_config (line 272) | async def delete_federation_config( function list_federation_configs (line 311) | async def list_federation_configs( function add_anthropic_server (line 337) | async def add_anthropic_server( function remove_anthropic_server (line 391) | async def remove_anthropic_server( function add_asor_agent (line 473) | async def add_asor_agent( function remove_asor_agent (line 527) | async def remove_asor_agent( function add_aws_registry (line 578) | async def add_aws_registry( function remove_aws_registry (line 641) | async def remove_aws_registry( function _deregister_entities_from_registry (line 714) | async def _deregister_entities_from_registry( function _deregister_servers_from_registry (line 742) | async def _deregister_servers_from_registry( function _deregister_agents_from_registry (line 776) | async def _deregister_agents_from_registry( function _deregister_skills_from_registry (line 822) | async def _deregister_skills_from_registry( function sync_federation (line 877) | async def sync_federation( FILE: registry/api/internal_routes.py function _get_repo (line 32) | def _get_repo(): function create_client_session (line 48) | async def create_client_session( function validate_client_session (line 79) | async def validate_client_session( function get_backend_session (line 100) | async def get_backend_session( function store_backend_session (line 136) | async def store_backend_session( function delete_backend_session (line 172) | async def delete_backend_session( FILE: registry/api/log_routes.py function _check_rate_limit (line 39) | def _check_rate_limit(user_id: str) -> bool: function _sanitize_search (line 56) | def _sanitize_search(search: str | None) -> str | None: function _require_admin (line 63) | def _require_admin( function _get_repo (line 79) | def _get_repo() -> AppLogRepository: class LogEntry (line 90) | class LogEntry(BaseModel): class LogQueryResponse (line 105) | class LogQueryResponse(BaseModel): class LogMetadataResponse (line 115) | class LogMetadataResponse(BaseModel): function query_logs (line 131) | async def query_logs( function export_logs (line 184) | async def export_logs( function get_log_metadata (line 244) | async def get_log_metadata( FILE: registry/api/m2m_management_routes.py function _require_admin (line 49) | def _require_admin( function _get_service (line 62) | async def _get_service() -> M2MManagementService: function create_m2m_client (line 72) | async def create_m2m_client( function list_m2m_clients (line 101) | async def list_m2m_clients( function get_m2m_client (line 118) | async def get_m2m_client( function patch_m2m_client (line 140) | async def patch_m2m_client( function delete_m2m_client (line 178) | async def delete_m2m_client( FILE: registry/api/management_routes.py function _translate_iam_error (line 35) | def _translate_iam_error(exc: Exception) -> HTTPException: function _normalize_agent_path (line 57) | def _normalize_agent_path(path: str) -> str: function _normalize_agent_paths_in_scope_config (line 77) | def _normalize_agent_paths_in_scope_config( function _require_admin (line 109) | def _require_admin(user_context: dict) -> None: function management_list_users (line 127) | async def management_list_users( function management_create_m2m_user (line 191) | async def management_create_m2m_user( function management_create_human_user (line 246) | async def management_create_human_user( function management_delete_user (line 279) | async def management_delete_user( function management_update_user_groups (line 297) | async def management_update_user_groups( function management_list_groups (line 377) | async def management_list_groups( function management_create_group (line 406) | async def management_create_group( function management_delete_group (line 511) | async def management_delete_group( function management_get_group (line 568) | async def management_get_group( function management_update_group (line 612) | async def management_update_group( FILE: registry/api/okta_m2m_routes.py function _require_admin (line 32) | def _require_admin(user_context: dict | None) -> None: function sync_okta_m2m_clients (line 53) | async def sync_okta_m2m_clients( function list_okta_m2m_clients (line 96) | async def list_okta_m2m_clients( function get_client_groups (line 136) | async def get_client_groups( function update_client_groups (line 174) | async def update_client_groups( FILE: registry/api/peer_management_routes.py function _check_peer_management_scope (line 35) | def _check_peer_management_scope( function list_peers (line 87) | async def list_peers( function create_peer (line 117) | async def create_peer( function sync_all_peers (line 172) | async def sync_all_peers( function get_all_connections (line 215) | async def get_all_connections( function get_shared_resources (line 254) | async def get_shared_resources( function get_peer (line 289) | async def get_peer( function update_peer (line 326) | async def update_peer( function update_peer_token (line 381) | async def update_peer_token( function delete_peer (line 457) | async def delete_peer( function sync_peer (line 493) | async def sync_peer( function get_peer_status (line 544) | async def get_peer_status( function enable_peer (line 582) | async def enable_peer( function disable_peer (line 620) | async def disable_peer( function get_peer_connections (line 658) | async def get_peer_connections( function get_peer_shared_resources (line 702) | async def get_peer_shared_resources( FILE: registry/api/registry_management_routes.py function _require_admin (line 20) | def _require_admin(user_context: dict) -> None: function force_heartbeat (line 38) | async def force_heartbeat( function force_startup_ping (line 65) | async def force_startup_ping( FILE: registry/api/registry_routes.py function list_servers (line 49) | async def list_servers( function list_server_versions (line 123) | async def list_server_versions( function get_server_version (line 216) | async def get_server_version( function _auto_initialize_registry_card (line 312) | async def _auto_initialize_registry_card(): function get_registry_card (line 445) | async def get_registry_card(): function update_registry_card (line 469) | async def update_registry_card( function patch_registry_card (line 585) | async def patch_registry_card( FILE: registry/api/search_routes.py function get_search_repo (line 27) | def get_search_repo() -> SearchRepositoryBase: class MatchingToolResult (line 32) | class MatchingToolResult(BaseModel): class SyncMetadata (line 44) | class SyncMetadata(BaseModel): function _compute_endpoint_url (line 56) | def _compute_endpoint_url( class ServerSearchResult (line 97) | class ServerSearchResult(BaseModel): class ToolSearchResult (line 129) | class ToolSearchResult(BaseModel): class AgentSearchResult (line 143) | class AgentSearchResult(BaseModel): class SkillSearchResult (line 160) | class SkillSearchResult(BaseModel): class VirtualServerSearchResult (line 179) | class VirtualServerSearchResult(BaseModel): class SemanticSearchRequest (line 197) | class SemanticSearchRequest(BaseModel): class SemanticSearchResponse (line 227) | class SemanticSearchResponse(BaseModel): function _get_tool_schema_for_virtual_server (line 244) | async def _get_tool_schema_for_virtual_server( function _user_can_access_server (line 295) | async def _user_can_access_server(path: str, server_name: str, user_cont... function _user_can_access_agent (line 320) | async def _user_can_access_agent(agent_path: str, user_context: dict) ->... function _user_can_access_skill (line 347) | async def _user_can_access_skill( function _compute_trust_verified (line 383) | def _compute_trust_verified( function _parse_hashtags (line 404) | def _parse_hashtags( function _entity_has_all_tags (line 420) | def _entity_has_all_tags( function semantic_search (line 434) | async def semantic_search( function get_all_tags (line 813) | async def get_all_tags( FILE: registry/api/server_routes.py class RatingRequest (line 32) | class RatingRequest(BaseModel): function _build_scan_headers_from_credentials (line 40) | def _build_scan_headers_from_credentials( function _perform_security_scan_on_registration (line 89) | async def _perform_security_scan_on_registration( function read_root (line 184) | async def read_root( function get_servers_json (line 330) | async def get_servers_json( function toggle_service_route (line 544) | async def toggle_service_route( function register_service (line 652) | async def register_service( function internal_register_service (line 907) | async def internal_register_service( function internal_remove_service (line 1217) | async def internal_remove_service( function internal_toggle_service (line 1329) | async def internal_toggle_service( function internal_healthcheck (line 1442) | async def internal_healthcheck( function edit_server_form (line 1468) | async def edit_server_form( function edit_server_submit (line 1524) | async def edit_server_submit( function token_generation_page (line 1725) | async def token_generation_page( function get_server_details (line 1742) | async def get_server_details( function get_service_tools (line 1827) | async def get_service_tools( function refresh_service (line 1962) | async def refresh_service(service_path: str, user_context: Annotated[dic... function _add_server_to_groups_impl (line 2055) | async def _add_server_to_groups_impl( function internal_add_server_to_groups (line 2107) | async def internal_add_server_to_groups( function _remove_server_from_groups_impl (line 2120) | async def _remove_server_from_groups_impl( function internal_remove_server_from_groups (line 2172) | async def internal_remove_server_from_groups( function internal_list_services (line 2186) | async def internal_list_services( function internal_create_group (line 2243) | async def internal_create_group( function internal_delete_group (line 2258) | async def internal_delete_group( function _list_groups_impl (line 2272) | async def _list_groups_impl( function internal_list_groups (line 2344) | async def internal_list_groups( function generate_user_token (line 2358) | async def generate_user_token( function register_service_api (line 2532) | async def register_service_api( function update_server_auth_credential (line 2883) | async def update_server_auth_credential( function toggle_service_api (line 3006) | async def toggle_service_api( function remove_service_api (line 3118) | async def remove_service_api( function healthcheck_api (line 3268) | async def healthcheck_api( function add_server_to_groups_api (line 3309) | async def add_server_to_groups_api( function remove_server_from_groups_api (line 3348) | async def remove_server_from_groups_api( function _create_group_impl (line 3386) | async def _create_group_impl( function create_group_api (line 3460) | async def create_group_api( function _delete_group_impl (line 3501) | async def _delete_group_impl( function delete_group_api (line 3588) | async def delete_group_api( function list_groups_api (line 3630) | async def list_groups_api( function get_group_api (line 3663) | async def get_group_api( function import_group_definition (line 3723) | async def import_group_definition( function rate_server (line 3885) | async def rate_server( function get_server_rating (line 3956) | async def get_server_rating( function get_server_security_scan (line 3994) | async def get_server_security_scan( function rescan_server (line 4053) | async def rescan_server( function get_service_tools_api (line 4149) | async def get_service_tools_api( class SetDefaultVersion (line 4191) | class SetDefaultVersion(BaseModel): function remove_server_version (line 4198) | async def remove_server_version( function set_default_version (line 4233) | async def set_default_version( function get_server_versions (line 4271) | async def get_server_versions( function get_server (line 4295) | async def get_server( FILE: registry/api/skill_routes.py class RatingRequest (line 80) | class RatingRequest(BaseModel): function get_normalized_path (line 92) | def get_normalized_path( function discover_skills (line 104) | async def discover_skills( function list_skills (line 160) | async def list_skills( function parse_skill_md (line 251) | async def parse_skill_md( function search_skills (line 291) | async def search_skills( function get_integrity_status (line 385) | async def get_integrity_status( function check_skill_health (line 433) | async def check_skill_health( function get_skill_content (line 457) | async def get_skill_content( function get_skill_tools (line 587) | async def get_skill_tools( function get_skill_rating (line 606) | async def get_skill_rating( function get_skill_security_scan (line 645) | async def get_skill_security_scan( function rescan_skill (line 680) | async def rescan_skill( function refresh_skill_resources (line 733) | async def refresh_skill_resources( function get_skill (line 788) | async def get_skill( function register_skill (line 816) | async def register_skill( function update_skill (line 890) | async def update_skill( function delete_skill (line 975) | async def delete_skill( function toggle_skill (line 1022) | async def toggle_skill( function rate_skill (line 1064) | async def rate_skill( function _log_task_exception (line 1120) | def _log_task_exception(task: asyncio.Task) -> None: function _user_can_access_skill (line 1134) | def _user_can_access_skill( function _user_can_modify_skill (line 1157) | def _user_can_modify_skill( function _perform_skill_security_scan_on_registration (line 1168) | async def _perform_skill_security_scan_on_registration( FILE: registry/api/system_routes.py function set_server_start_time (line 27) | def set_server_start_time( function get_server_start_time (line 36) | def get_server_start_time() -> datetime | None: function _detect_deployment_type (line 45) | def _detect_deployment_type() -> str: function _get_registry_stats (line 73) | async def _get_registry_stats() -> dict: function _get_auth_status (line 114) | async def _get_auth_status() -> dict: function _get_database_status (line 163) | async def _get_database_status() -> dict: function _get_registry_card_status (line 206) | async def _get_registry_card_status() -> dict: function _get_cached_stats (line 239) | async def _get_cached_stats() -> dict: function get_version (line 294) | async def get_version(): function get_system_stats (line 304) | async def get_system_stats(): FILE: registry/api/virtual_server_routes.py function _require_admin (line 52) | def _require_admin( function _normalize_virtual_path (line 82) | def _normalize_virtual_path( function list_virtual_servers (line 135) | async def list_virtual_servers( function get_virtual_server_tools (line 170) | async def get_virtual_server_tools( class RatingRequest (line 198) | class RatingRequest(BaseModel): function rate_virtual_server (line 209) | async def rate_virtual_server( function get_virtual_server_rating (line 256) | async def get_virtual_server_rating( function get_virtual_server (line 278) | async def get_virtual_server( function create_virtual_server (line 302) | async def create_virtual_server( function update_virtual_server (line 357) | async def update_virtual_server( function delete_virtual_server (line 418) | async def delete_virtual_server( function toggle_virtual_server (line 459) | async def toggle_virtual_server( function get_tool_catalog (line 518) | async def get_tool_catalog( FILE: registry/api/wellknown_routes.py function get_wellknown_mcp_servers (line 19) | async def get_wellknown_mcp_servers( function _format_server_discovery (line 89) | def _format_server_discovery(server_info: dict, request: Request) -> dict: function _get_server_url (line 122) | def _get_server_url(server_path: str, request: Request, server_info: dic... function _get_transport_type (line 146) | def _get_transport_type(server_config: dict) -> str: function _get_authentication_info (line 153) | def _get_authentication_info(server_info: dict) -> dict: function _get_tools_preview (line 178) | def _get_tools_preview(server_info: dict, max_tools: int = 5) -> list: function _get_normalized_health_status (line 199) | def _get_normalized_health_status(server_path: str) -> str: function _auto_initialize_registry_card (line 232) | async def _auto_initialize_registry_card(): function get_well_known_registry_card (line 350) | async def get_well_known_registry_card(): FILE: registry/audit/context.py function set_audit_action (line 11) | def set_audit_action( function set_audit_authorization (line 45) | def set_audit_authorization( FILE: registry/audit/mcp_logger.py class MCPLogger (line 26) | class MCPLogger: method __init__ (line 38) | def __init__(self, audit_logger: AuditLogger): method parse_jsonrpc_body (line 47) | def parse_jsonrpc_body(self, body: bytes | str) -> dict: method log_mcp_access (line 116) | async def log_mcp_access( FILE: registry/audit/middleware.py class AuditMiddleware (line 37) | class AuditMiddleware(BaseHTTPMiddleware): method __init__ (line 51) | def __init__( method _should_log (line 75) | def _should_log(self, path: str) -> bool: method _get_credential_type (line 118) | def _get_credential_type(self, request: Request) -> str: method _get_credential_hint (line 141) | def _get_credential_hint(self, request: Request) -> str | None: method _extract_identity (line 167) | def _extract_identity(self, request: Request) -> Identity: method _extract_action (line 203) | def _extract_action(self, request: Request) -> Action | None: method _extract_authorization (line 228) | def _extract_authorization(self, request: Request) -> Authorization | ... method dispatch (line 252) | async def dispatch(self, request: Request, call_next: Callable) -> Res... function add_audit_middleware (line 341) | def add_audit_middleware( FILE: registry/audit/models.py function mask_credential (line 15) | def mask_credential(value: str) -> str: class Identity (line 49) | class Identity(BaseModel): method mask_credential_hint (line 74) | def mask_credential_hint(cls, v: str | None) -> str | None: class Request (line 81) | class Request(BaseModel): method mask_sensitive_params (line 103) | def mask_sensitive_params(cls, v: dict[str, Any] | None) -> dict[str, ... class Response (line 113) | class Response(BaseModel): class Action (line 125) | class Action(BaseModel): class Authorization (line 147) | class Authorization(BaseModel): class RegistryApiAccessRecord (line 161) | class RegistryApiAccessRecord(BaseModel): class MCPServer (line 191) | class MCPServer(BaseModel): class MCPRequest (line 205) | class MCPRequest(BaseModel): class MCPResponse (line 227) | class MCPResponse(BaseModel): class MCPServerAccessRecord (line 245) | class MCPServerAccessRecord(BaseModel): FILE: registry/audit/routes.py function get_audit_repository (line 36) | def get_audit_repository() -> DocumentDBAuditRepository: function require_admin (line 44) | def require_admin(user_context: dict[str, Any] = Depends(enhanced_auth))... class AuditEventSummary (line 70) | class AuditEventSummary(BaseModel): class AuditEventsResponse (line 88) | class AuditEventsResponse(BaseModel): class AuditEventDetail (line 97) | class AuditEventDetail(BaseModel): class AuditFilterOptions (line 103) | class AuditFilterOptions(BaseModel): class UsageSummaryItem (line 116) | class UsageSummaryItem(BaseModel): class TimeSeriesBucket (line 123) | class TimeSeriesBucket(BaseModel): class StatusDistribution (line 130) | class StatusDistribution(BaseModel): class UserActivityItem (line 138) | class UserActivityItem(BaseModel): class AuditStatisticsResponse (line 149) | class AuditStatisticsResponse(BaseModel): function _build_query (line 179) | def _build_query( function get_filter_options (line 283) | async def get_filter_options( function get_statistics (line 322) | async def get_statistics( function get_audit_events (line 568) | async def get_audit_events( function get_audit_event (line 694) | async def get_audit_event( function _generate_jsonl (line 745) | def _generate_jsonl(events: list[dict[str, Any]]): function _generate_csv (line 756) | def _generate_csv(events: list[dict[str, Any]]): function export_audit_events (line 822) | async def export_audit_events( FILE: registry/audit/service.py class AuditLogger (line 20) | class AuditLogger: method __init__ (line 32) | def __init__( method log_event (line 66) | async def log_event( method close (line 90) | async def close(self) -> None: method current_file_path (line 99) | def current_file_path(self) -> str | None: method is_open (line 104) | def is_open(self) -> bool: FILE: registry/auth/csrf.py function generate_csrf_token (line 21) | def generate_csrf_token( function validate_csrf_token (line 37) | def validate_csrf_token( function verify_csrf_token (line 72) | async def verify_csrf_token( function verify_csrf_token_flexible (line 107) | async def verify_csrf_token_flexible( FILE: registry/auth/dependencies.py function get_current_user (line 15) | def get_current_user( function get_user_session_data (line 59) | def get_user_session_data( function reload_scopes_from_repository (line 117) | async def reload_scopes_from_repository(): function map_cognito_groups_to_scopes (line 145) | async def map_cognito_groups_to_scopes(groups: list[str]) -> list[str]: function get_ui_permissions_for_user (line 180) | async def get_ui_permissions_for_user(user_scopes: list[str]) -> dict[st... function user_has_ui_permission_for_service (line 224) | def user_has_ui_permission_for_service( function get_accessible_services_for_user (line 252) | def get_accessible_services_for_user(user_ui_permissions: dict[str, list... function get_accessible_agents_for_user (line 270) | def get_accessible_agents_for_user(user_ui_permissions: dict[str, list[s... function get_servers_for_scope (line 288) | async def get_servers_for_scope(scope: str) -> list[str]: function user_has_wildcard_access (line 311) | async def user_has_wildcard_access(user_scopes: list[str]) -> bool: function _user_is_admin (line 353) | def _user_is_admin( function get_user_accessible_servers (line 384) | async def get_user_accessible_servers(user_scopes: list[str]) -> list[str]: function user_can_modify_servers (line 411) | def user_can_modify_servers(user_groups: list[str], user_scopes: list[st... function user_can_access_server (line 442) | async def user_can_access_server(server_name: str, user_scopes: list[str... function api_auth (line 457) | def api_auth( function web_auth (line 467) | def web_auth( function enhanced_auth (line 477) | async def enhanced_auth( function nginx_proxied_auth (line 538) | async def nginx_proxied_auth( function create_session_cookie (line 688) | def create_session_cookie( function ui_permission_required (line 696) | def ui_permission_required(permission: str, service_name: str = None): FILE: registry/auth/internal.py function generate_internal_token (line 30) | def generate_internal_token( function validate_internal_auth (line 66) | async def validate_internal_auth(request: Request) -> str: function _validate_bearer_token (line 99) | def _validate_bearer_token(auth_header: str) -> str: FILE: registry/auth/routes.py function _validate_jwt_format (line 46) | def _validate_jwt_format(token: str) -> bool: function get_oauth2_providers (line 59) | async def get_oauth2_providers(): function login_form (line 83) | async def login_form(request: Request, error: str | None = None): function oauth2_login_redirect (line 92) | async def oauth2_login_redirect(provider: str, request: Request): function oauth2_callback (line 128) | async def oauth2_callback(request: Request, error: str = None, details: ... function logout_handler (line 176) | async def logout_handler( function logout_get (line 289) | async def logout_get( function logout_post (line 298) | async def logout_post( function get_providers_api (line 308) | async def get_providers_api(): function get_auth_config (line 315) | async def get_auth_config(): function get_csrf_token (line 321) | async def get_csrf_token( FILE: registry/common/scopes_loader.py function load_scopes_from_repository (line 19) | async def load_scopes_from_repository( function load_scopes_from_yaml (line 125) | def load_scopes_from_yaml(scopes_path: str | None = None) -> dict[str, A... function reload_scopes_config (line 167) | async def reload_scopes_config(storage_backend: str | None = None) -> di... FILE: registry/constants.py class HealthStatus (line 11) | class HealthStatus(str, Enum): method get_healthy_statuses (line 24) | def get_healthy_statuses(cls) -> list[str]: method is_healthy (line 29) | def is_healthy(cls, status: str) -> bool: class TransportType (line 34) | class TransportType(str, Enum): class AuthScheme (line 41) | class AuthScheme(str, Enum): class RegistryConstants (line 55) | class RegistryConstants(BaseModel): class Config (line 58) | class Config: FILE: registry/core/config.py class DeploymentMode (line 11) | class DeploymentMode(str, Enum): class RegistryMode (line 18) | class RegistryMode(str, Enum): class Settings (line 27) | class Settings(BaseSettings): method nginx_updates_enabled (line 472) | def nginx_updates_enabled(self) -> bool: method is_local_dev (line 502) | def is_local_dev(self) -> bool: method __init__ (line 506) | def __init__(self, **kwargs): method embeddings_model_dir (line 513) | def embeddings_model_dir(self) -> Path: method servers_dir (line 519) | def servers_dir(self) -> Path: method static_dir (line 525) | def static_dir(self) -> Path: method templates_dir (line 531) | def templates_dir(self) -> Path: method nginx_config_path (line 537) | def nginx_config_path(self) -> Path: method state_file_path (line 541) | def state_file_path(self) -> Path: method log_dir (line 545) | def log_dir(self) -> Path: method log_file_path (line 552) | def log_file_path(self) -> Path: method faiss_index_path (line 558) | def faiss_index_path(self) -> Path: method faiss_metadata_path (line 562) | def faiss_metadata_path(self) -> Path: method dotenv_path (line 566) | def dotenv_path(self) -> Path: method agents_dir (line 572) | def agents_dir(self) -> Path: method agent_state_file_path (line 579) | def agent_state_file_path(self) -> Path: method peers_dir (line 584) | def peers_dir(self) -> Path: method peer_sync_state_file_path (line 590) | def peer_sync_state_file_path(self) -> Path: method audit_log_path (line 596) | def audit_log_path(self) -> Path: method data_dir (line 603) | def data_dir(self) -> Path: class EmbeddingConfig (line 610) | class EmbeddingConfig: method __init__ (line 613) | def __init__(self, settings_instance: Settings): method model_family (line 617) | def model_family(self) -> str: method index_name (line 638) | def index_name(self) -> str: method get_embedding_metadata (line 651) | def get_embedding_metadata(self) -> dict: function _validate_mode_combination (line 691) | def _validate_mode_combination( function _print_config_warning_banner (line 712) | def _print_config_warning_banner( function log_tab_visibility_warnings (line 735) | def log_tab_visibility_warnings(s: Settings) -> None: FILE: registry/core/endpoint_utils.py function _url_contains_transport_path (line 16) | def _url_contains_transport_path(url: str) -> bool: function get_endpoint_url (line 28) | def get_endpoint_url( function get_endpoint_url_from_server_info (line 91) | def get_endpoint_url_from_server_info( FILE: registry/core/mcp_client.py class MCPServerInfo (line 23) | class MCPServerInfo(TypedDict, total=False): class MCPConnectionResult (line 30) | class MCPConnectionResult(TypedDict, total=False): function normalize_sse_endpoint_url (line 37) | def normalize_sse_endpoint_url(endpoint_url: str) -> str: function _build_headers_for_server (line 73) | def _build_headers_for_server(server_info: dict = None) -> dict[str, str]: function normalize_sse_endpoint_url_for_request (line 130) | def normalize_sse_endpoint_url_for_request(url_str: str) -> str: function detect_server_transport_aware (line 160) | async def detect_server_transport_aware(base_url: str, server_info: dict... function detect_server_transport (line 204) | async def detect_server_transport(base_url: str) -> str: function get_tools_from_server_with_transport (line 240) | async def get_tools_from_server_with_transport( function _get_tools_streamable_http (line 279) | async def _get_tools_streamable_http(base_url: str, server_info: dict = ... function _get_tools_sse (line 390) | async def _get_tools_sse(base_url: str, server_info: dict = None) -> lis... function _extract_tool_details (line 441) | def _extract_tool_details(tools_response) -> list[dict]: function get_tools_from_server_with_server_info (line 525) | async def get_tools_from_server_with_server_info( function get_mcp_connection_result (line 567) | async def get_mcp_connection_result( class MCPClientService (line 703) | class MCPClientService: method get_tools_from_server_with_server_info (line 706) | async def get_tools_from_server_with_server_info( method get_mcp_connection_result (line 712) | async def get_mcp_connection_result( FILE: registry/core/nginx_service.py function _ensure_mcp_compliant_schema (line 20) | def _ensure_mcp_compliant_schema(input_schema: dict[str, Any]) -> dict[s... class NginxConfigService (line 63) | class NginxConfigService: method __init__ (line 66) | def __init__(self): method get_additional_server_names (line 89) | async def get_additional_server_names(self) -> str: method generate_config (line 191) | def generate_config(self, servers: dict[str, dict[str, Any]]) -> bool: method generate_config_async (line 218) | async def generate_config_async( method reload_nginx (line 524) | def reload_nginx(self, force: bool = False) -> bool: method _generate_registry_only_block (line 561) | def _generate_registry_only_block(self) -> str: method _generate_version_map (line 588) | async def _generate_version_map(self, servers: dict[str, dict[str, Any... method _sanitize_path_for_location (line 682) | def _sanitize_path_for_location( method _sanitize_for_nginx_comment (line 699) | def _sanitize_for_nginx_comment( method _sanitize_for_nginx_set (line 716) | def _sanitize_for_nginx_set( method _generate_virtual_server_blocks (line 734) | async def _generate_virtual_server_blocks(self) -> str: method _generate_virtual_backend_locations (line 781) | async def _generate_virtual_backend_locations( method _write_virtual_server_mappings (line 871) | async def _write_virtual_server_mappings( method _generate_transport_location_blocks (line 960) | def _generate_transport_location_blocks(self, path: str, server_info: ... method _create_location_block (line 1009) | def _create_location_block( FILE: registry/core/schemas.py class ServerVersion (line 11) | class ServerVersion(BaseModel): class ServerInfo (line 33) | class ServerInfo(BaseModel): method get_default_proxy_url (line 90) | def get_default_proxy_url(self) -> str: method has_multiple_versions (line 104) | def has_multiple_versions(self) -> bool: method _validate_visibility (line 168) | def _validate_visibility( method _populate_provider_default (line 182) | def _populate_provider_default(self) -> "ServerInfo": class ToolDescription (line 194) | class ToolDescription(BaseModel): class ToolInfo (line 203) | class ToolInfo(BaseModel): class Config (line 212) | class Config: class HealthStatus (line 216) | class HealthStatus(BaseModel): class SessionData (line 224) | class SessionData(BaseModel): class ServiceRegistrationRequest (line 232) | class ServiceRegistrationRequest(BaseModel): class AuthCredentialUpdateRequest (line 283) | class AuthCredentialUpdateRequest(BaseModel): class OAuth2Provider (line 295) | class OAuth2Provider(BaseModel): class FaissMetadata (line 303) | class FaissMetadata(BaseModel): FILE: registry/core/telemetry.py function _detect_cloud_provider (line 40) | def _detect_cloud_provider() -> str: function _detect_compute_platform (line 79) | def _detect_compute_platform() -> str: function _compute_signature (line 108) | def _compute_signature(body: bytes) -> str: function _get_registry_id (line 124) | async def _get_registry_id() -> str: function _is_telemetry_enabled (line 148) | def _is_telemetry_enabled() -> bool: function _is_heartbeat_enabled (line 158) | def _is_heartbeat_enabled() -> bool: function _get_heartbeat_interval_minutes (line 171) | def _get_heartbeat_interval_minutes() -> int: function _get_heartbeat_lock_interval_seconds (line 181) | def _get_heartbeat_lock_interval_seconds() -> int: function _get_or_create_instance_id (line 186) | async def _get_or_create_instance_id() -> str: function _acquire_telemetry_lock (line 250) | async def _acquire_telemetry_lock(event_type: str, interval_seconds: int... function _build_startup_payload (line 303) | async def _build_startup_payload() -> dict: function _build_heartbeat_payload (line 332) | async def _build_heartbeat_payload() -> dict: function _send_telemetry (line 413) | async def _send_telemetry(payload: dict) -> None: function _initialize_telemetry_collection (line 500) | async def _initialize_telemetry_collection() -> None: function initialize_telemetry (line 546) | async def initialize_telemetry() -> None: function send_startup_ping (line 555) | async def send_startup_ping() -> None: function start_heartbeat_scheduler (line 594) | async def start_heartbeat_scheduler() -> None: function stop_heartbeat_scheduler (line 616) | async def stop_heartbeat_scheduler() -> None: function send_forced_heartbeat (line 625) | async def send_forced_heartbeat() -> dict: function send_forced_startup (line 655) | async def send_forced_startup() -> dict: class TelemetryScheduler (line 684) | class TelemetryScheduler: method __init__ (line 691) | def __init__(self): method start (line 695) | async def start(self) -> None: method stop (line 705) | async def stop(self) -> None: method _scheduler_loop (line 717) | async def _scheduler_loop(self) -> None: method _send_heartbeat (line 731) | async def _send_heartbeat(self) -> None: FILE: registry/embeddings/client.py class EmbeddingsClient (line 21) | class EmbeddingsClient(ABC): method encode (line 25) | def encode( method get_embedding_dimension (line 44) | def get_embedding_dimension(self) -> int: class SentenceTransformersClient (line 54) | class SentenceTransformersClient(EmbeddingsClient): method __init__ (line 57) | def __init__( method _load_model (line 78) | def _load_model(self) -> None: method encode (line 131) | def encode( method get_embedding_dimension (line 157) | def get_embedding_dimension(self) -> int: class LiteLLMClient (line 172) | class LiteLLMClient(EmbeddingsClient): method __init__ (line 175) | def __init__( method _set_api_key_env (line 212) | def _set_api_key_env(self) -> None: method encode (line 235) | def encode( method get_embedding_dimension (line 292) | def get_embedding_dimension(self) -> int: function create_embeddings_client (line 323) | def create_embeddings_client( FILE: registry/exceptions.py class RegistryError (line 9) | class RegistryError(Exception): class SkillRegistryError (line 18) | class SkillRegistryError(RegistryError): class SkillNotFoundError (line 24) | class SkillNotFoundError(SkillRegistryError): method __init__ (line 27) | def __init__( class SkillAlreadyExistsError (line 35) | class SkillAlreadyExistsError(SkillRegistryError): method __init__ (line 38) | def __init__( class SkillValidationError (line 46) | class SkillValidationError(SkillRegistryError): class SkillServiceError (line 52) | class SkillServiceError(SkillRegistryError): class SkillUrlValidationError (line 58) | class SkillUrlValidationError(SkillRegistryError): method __init__ (line 61) | def __init__( class AgentRegistryError (line 74) | class AgentRegistryError(RegistryError): class AgentNotFoundError (line 80) | class AgentNotFoundError(AgentRegistryError): method __init__ (line 83) | def __init__( class AgentAlreadyExistsError (line 91) | class AgentAlreadyExistsError(AgentRegistryError): method __init__ (line 94) | def __init__( class ServerRegistryError (line 105) | class ServerRegistryError(RegistryError): class ServerNotFoundError (line 111) | class ServerNotFoundError(ServerRegistryError): method __init__ (line 114) | def __init__( class ServerAlreadyExistsError (line 122) | class ServerAlreadyExistsError(ServerRegistryError): method __init__ (line 125) | def __init__( class VirtualServerRegistryError (line 136) | class VirtualServerRegistryError(RegistryError): class VirtualServerNotFoundError (line 142) | class VirtualServerNotFoundError(VirtualServerRegistryError): method __init__ (line 145) | def __init__( class VirtualServerAlreadyExistsError (line 153) | class VirtualServerAlreadyExistsError(VirtualServerRegistryError): method __init__ (line 156) | def __init__( class VirtualServerValidationError (line 164) | class VirtualServerValidationError(VirtualServerRegistryError): class VirtualServerServiceError (line 170) | class VirtualServerServiceError(VirtualServerRegistryError): class SkillContentFetchError (line 179) | class SkillContentFetchError(SkillRegistryError): method __init__ (line 182) | def __init__( class SkillContentSSRFError (line 194) | class SkillContentSSRFError(SkillRegistryError): method __init__ (line 197) | def __init__( class SkillContentTooLargeError (line 207) | class SkillContentTooLargeError(SkillRegistryError): method __init__ (line 210) | def __init__( class RegistrationGateError (line 223) | class RegistrationGateError(RegistryError): class RegistrationGateDeniedError (line 229) | class RegistrationGateDeniedError(RegistrationGateError): method __init__ (line 232) | def __init__( class RegistrationGateUnavailableError (line 240) | class RegistrationGateUnavailableError(RegistrationGateError): method __init__ (line 243) | def __init__( FILE: registry/health/routes.py function websocket_endpoint (line 19) | async def websocket_endpoint(websocket: WebSocket): function health_status_http (line 107) | async def health_status_http(): function websocket_stats (line 116) | async def websocket_stats(): FILE: registry/health/service.py class HighPerformanceWebSocketManager (line 19) | class HighPerformanceWebSocketManager: method __init__ (line 22) | def __init__(self): method add_connection (line 40) | async def add_connection(self, websocket: WebSocket) -> bool: method remove_connection (line 69) | async def remove_connection(self, websocket: WebSocket): method _send_initial_status_optimized (line 77) | async def _send_initial_status_optimized(self, websocket: WebSocket): method broadcast_update (line 88) | async def broadcast_update( method _send_to_connections_optimized (line 125) | async def _send_to_connections_optimized(self, data: dict): method _safe_send_message (line 155) | async def _safe_send_message(self, connection: WebSocket, message: str): method _cleanup_failed_connections (line 168) | async def _cleanup_failed_connections(self): method get_stats (line 179) | def get_stats(self) -> dict: class HealthMonitoringService (line 190) | class HealthMonitoringService: method __init__ (line 193) | def __init__(self): method _check_secret_key_persistence (line 208) | async def _check_secret_key_persistence(self): method initialize (line 229) | async def initialize(self): method shutdown (line 241) | async def shutdown(self): method add_websocket_connection (line 265) | async def add_websocket_connection(self, websocket: WebSocket): method remove_websocket_connection (line 272) | async def remove_websocket_connection(self, websocket: WebSocket): method _send_initial_status (line 277) | async def _send_initial_status(self, websocket: WebSocket): method broadcast_health_update (line 282) | async def broadcast_health_update(self, service_path: str | None = None): method _get_cached_health_data (line 299) | async def _get_cached_health_data(self) -> dict: method get_websocket_stats (line 320) | def get_websocket_stats(self) -> dict: method _run_health_checks (line 324) | async def _run_health_checks(self): method _perform_health_checks (line 339) | async def _perform_health_checks(self): method _check_single_service (line 402) | async def _check_single_service( method _build_headers_for_server (line 465) | def _build_headers_for_server( method _initialize_mcp_session (line 526) | async def _initialize_mcp_session( method _try_ping_without_auth (line 593) | async def _try_ping_without_auth(self, client: httpx.AsyncClient, endp... method _check_server_endpoint_transport_aware (line 640) | async def _check_server_endpoint_transport_aware( method _mask_sensitive_headers (line 925) | def _mask_sensitive_headers(self, headers: dict[str, str]) -> dict[str... method _is_mcp_endpoint_healthy_streamable (line 945) | def _is_mcp_endpoint_healthy_streamable(self, response) -> bool: method _is_mcp_endpoint_healthy (line 988) | def _is_mcp_endpoint_healthy(self, response) -> bool: method _update_tools_background (line 1038) | async def _update_tools_background(self, service_path: str, proxy_pass... method get_all_health_status (line 1149) | async def get_all_health_status(self) -> dict: method perform_immediate_health_check (line 1161) | async def perform_immediate_health_check( method _get_service_health_data (line 1269) | def _get_service_health_data(self, service_path: str, server_info: dic... method _get_service_health_data_fast (line 1273) | def _get_service_health_data_fast(self, service_path: str, server_info... FILE: registry/main.py function _log_startup_configuration (line 103) | def _log_startup_configuration() -> None: function _initialize_deployment_metrics (line 134) | def _initialize_deployment_metrics() -> None: function _sync_agentcore_on_startup (line 144) | async def _sync_agentcore_on_startup( function _apply_aws_registry_env_vars (line 295) | async def _apply_aws_registry_env_vars() -> None: function lifespan (line 330) | async def lifespan(app: FastAPI): function custom_openapi (line 892) | def custom_openapi(): function get_current_user (line 935) | async def get_current_user(user_context: dict[str, Any] = Depends(nginx_... function health_check (line 961) | async def health_check(): function _build_cached_index_html (line 985) | def _build_cached_index_html() -> str | None: function serve_react_app (line 1022) | async def serve_react_app(full_path: str): FILE: registry/metrics/client.py class MetricsClient (line 24) | class MetricsClient: method __init__ (line 27) | def __init__( method _emit_metric (line 41) | async def _emit_metric( method emit_registry_metric (line 78) | async def emit_registry_metric( method emit_discovery_metric (line 103) | async def emit_discovery_metric( method emit_tool_execution_metric (line 130) | async def emit_tool_execution_metric( method emit_health_metric (line 159) | async def emit_health_metric( method emit_custom_metric (line 170) | async def emit_custom_metric( function create_metrics_client (line 192) | def create_metrics_client(service_name: str = "registry", **kwargs) -> M... class MetricsCollector (line 197) | class MetricsCollector: method __init__ (line 205) | def __init__(self, service_name: str = "registry"): method is_enabled (line 209) | def is_enabled(self) -> bool: method disable (line 213) | def disable(self): method enable (line 217) | def enable(self): method track_tool_discovery (line 222) | async def track_tool_discovery(self, server_url: str): method track_health_check (line 248) | async def track_health_check(self, server_url: str): class _ToolDiscoveryTracker (line 267) | class _ToolDiscoveryTracker: method __init__ (line 270) | def __init__(self, metrics_client, server_name: str, server_url: str, ... method set_result (line 279) | def set_result(self, tools: list[dict] | None): method set_error (line 285) | def set_error(self, error: Exception): method finish (line 290) | async def finish(self): class _HealthCheckTracker (line 316) | class _HealthCheckTracker: method __init__ (line 319) | def __init__(self, metrics_client, server_name: str, start_time: float): method set_success (line 326) | def set_success(self): method set_error (line 330) | def set_error(self, error: Exception): method finish (line 335) | async def finish(self): class _NoOpTracker (line 350) | class _NoOpTracker: method set_result (line 353) | def set_result(self, *args, **kwargs): method set_error (line 356) | def set_error(self, *args, **kwargs): method set_success (line 359) | def set_success(self, *args, **kwargs): method finish (line 362) | async def finish(self): class EnhancedMCPClientService (line 366) | class EnhancedMCPClientService: method __init__ (line 374) | def __init__(self, metrics_collector: MetricsCollector): method get_tools_from_server_with_server_info (line 381) | async def get_tools_from_server_with_server_info( function get_metrics_collector (line 402) | def get_metrics_collector() -> MetricsCollector: function get_enhanced_mcp_client (line 410) | def get_enhanced_mcp_client( FILE: registry/metrics/middleware.py class RegistryMetricsMiddleware (line 22) | class RegistryMetricsMiddleware(BaseHTTPMiddleware): method __init__ (line 32) | def __init__(self, app, service_name: str = "registry"): method extract_operation_info (line 36) | def extract_operation_info(self, request: Request) -> dict[str, Any]: method extract_user_info (line 95) | def extract_user_info(self, request: Request) -> str: method should_track_request (line 104) | def should_track_request(self, request: Request) -> bool: method dispatch (line 120) | async def dispatch(self, request: Request, call_next: Callable) -> Res... method _emit_registry_metric (line 202) | async def _emit_registry_metric( method _emit_headers_metric (line 226) | async def _emit_headers_metric( method _emit_discovery_metric_from_request (line 250) | async def _emit_discovery_metric_from_request(self, request: Request, ... function add_registry_metrics_middleware (line 268) | def add_registry_metrics_middleware(app, service_name: str = "registry"): FILE: registry/metrics/utils.py function extract_server_name_from_url (line 13) | def extract_server_name_from_url(url: str) -> str: function hash_user_id (line 27) | def hash_user_id(user_id: str) -> str: function categorize_user_agent (line 34) | def categorize_user_agent(user_agent: str) -> str: function extract_headers_for_analysis (line 59) | def extract_headers_for_analysis(headers: dict[str, str]) -> dict[str, A... FILE: registry/middleware/mode_filter.py function _is_path_allowed (line 64) | def _is_path_allowed(path: str, mode: RegistryMode) -> bool: function _get_path_category (line 120) | def _get_path_category(path: str) -> str: class RegistryModeMiddleware (line 144) | class RegistryModeMiddleware(BaseHTTPMiddleware): method dispatch (line 147) | async def dispatch(self, request: Request, call_next: Callable) -> Res... FILE: registry/models/idp_m2m_client.py class IdPM2MClient (line 16) | class IdPM2MClient(BaseModel): class Config (line 38) | class Config: class IdPM2MClientUpdate (line 54) | class IdPM2MClientUpdate(BaseModel): FILE: registry/repositories/app_log_repository.py class AppLogRepository (line 14) | class AppLogRepository: method __init__ (line 17) | def __init__(self): method _get_collection (line 21) | async def _get_collection(self) -> AsyncIOMotorCollection: method query (line 27) | async def query( method get_distinct_services (line 93) | async def get_distinct_services(self) -> list[str]: method get_distinct_hostnames (line 102) | async def get_distinct_hostnames(self) -> list[str]: FILE: registry/repositories/audit_repository.py class AuditRepositoryBase (line 26) | class AuditRepositoryBase(ABC): method find (line 35) | async def find( method find_one (line 59) | async def find_one( method count (line 75) | async def count( method distinct (line 91) | async def distinct( method aggregate (line 109) | async def aggregate( method insert (line 125) | async def insert( class DocumentDBAuditRepository (line 141) | class DocumentDBAuditRepository(AuditRepositoryBase): method __init__ (line 149) | def __init__(self): method _get_collection (line 153) | async def _get_collection(self) -> AsyncIOMotorCollection: method find (line 160) | async def find( method find_one (line 208) | async def find_one( method count (line 243) | async def count( method distinct (line 267) | async def distinct( method aggregate (line 284) | async def aggregate( method insert (line 301) | async def insert( FILE: registry/repositories/documentdb/agent_repository.py class DocumentDBAgentRepository (line 17) | class DocumentDBAgentRepository(AgentRepositoryBase): method __init__ (line 20) | def __init__(self): method _get_collection (line 24) | async def _get_collection(self) -> AsyncIOMotorCollection: method load_all (line 31) | async def load_all(self) -> None: method get (line 42) | async def get( method list_all (line 60) | async def list_all(self) -> list[AgentCard]: method list_paginated (line 80) | async def list_paginated( method create (line 103) | async def create( method update (line 134) | async def update( method delete (line 172) | async def delete( method get_state (line 199) | async def get_state( method get_all_states (line 209) | async def get_all_states(self) -> dict[str, bool]: method set_state (line 225) | async def set_state( method save_state (line 256) | async def save_state( method count (line 266) | async def count(self) -> int: method update_field (line 282) | async def update_field( method find_with_filter (line 304) | async def find_with_filter( FILE: registry/repositories/documentdb/backend_session_repository.py function _make_backend_session_id (line 29) | def _make_backend_session_id( function _make_client_session_id (line 37) | def _make_client_session_id( class DocumentDBBackendSessionRepository (line 44) | class DocumentDBBackendSessionRepository(BackendSessionRepositoryBase): method __init__ (line 47) | def __init__(self): method _get_collection (line 52) | async def _get_collection(self) -> AsyncIOMotorCollection: method ensure_indexes (line 60) | async def ensure_indexes(self) -> None: method get_backend_session (line 95) | async def get_backend_session( method store_backend_session (line 124) | async def store_backend_session( method delete_backend_session (line 163) | async def delete_backend_session( method create_client_session (line 181) | async def create_client_session( method validate_client_session (line 216) | async def validate_client_session( FILE: registry/repositories/documentdb/client.py function get_documentdb_client (line 16) | async def get_documentdb_client() -> AsyncIOMotorDatabase: function close_documentdb_client (line 42) | async def close_documentdb_client() -> None: function get_collection_name (line 51) | def get_collection_name( FILE: registry/repositories/documentdb/federation_config_repository.py class DocumentDBFederationConfigRepository (line 16) | class DocumentDBFederationConfigRepository(FederationConfigRepositoryBase): method __init__ (line 19) | def __init__(self): method _get_collection (line 27) | async def _get_collection(self) -> AsyncIOMotorCollection: method get_config (line 34) | async def get_config(self, config_id: str = "default") -> FederationCo... method save_config (line 57) | async def save_config( method delete_config (line 87) | async def delete_config(self, config_id: str = "default") -> bool: method list_configs (line 105) | async def list_configs(self) -> list[dict[str, Any]]: FILE: registry/repositories/documentdb/peer_federation_repository.py class DocumentDBPeerFederationRepository (line 32) | class DocumentDBPeerFederationRepository(PeerFederationRepositoryBase): method __init__ (line 42) | def __init__(self): method _get_peers_collection (line 52) | async def _get_peers_collection(self) -> AsyncIOMotorCollection: method _get_sync_state_collection (line 59) | async def _get_sync_state_collection(self) -> AsyncIOMotorCollection: method get_peer (line 66) | async def get_peer( method list_peers (line 94) | async def list_peers( method create_peer (line 129) | async def create_peer( method update_peer (line 170) | async def update_peer( method delete_peer (line 226) | async def delete_peer( method get_sync_status (line 259) | async def get_sync_status( method update_sync_status (line 285) | async def update_sync_status( method list_sync_statuses (line 308) | async def list_sync_statuses(self) -> list[PeerSyncStatus]: method load_all (line 334) | async def load_all(self) -> None: FILE: registry/repositories/documentdb/registry_card_repository.py class DocumentDBRegistryCardRepository (line 15) | class DocumentDBRegistryCardRepository(RegistryCardRepositoryBase): method __init__ (line 18) | def __init__(self): method _get_collection (line 26) | async def _get_collection(self) -> AsyncIOMotorCollection: method get (line 33) | async def get(self) -> RegistryCard | None: method save (line 54) | async def save( method exists (line 86) | async def exists(self) -> bool: FILE: registry/repositories/documentdb/scope_repository.py class DocumentDBScopeRepository (line 15) | class DocumentDBScopeRepository(ScopeRepositoryBase): method __init__ (line 18) | def __init__(self): method _get_collection (line 23) | async def _get_collection(self) -> AsyncIOMotorCollection: method load_all (line 30) | async def load_all(self) -> None: method get_ui_scopes (line 66) | async def get_ui_scopes( method get_group_mappings (line 87) | async def get_group_mappings( method get_server_scopes (line 116) | async def get_server_scopes( method add_server_scope (line 159) | async def add_server_scope( method remove_server_scope (line 197) | async def remove_server_scope( method create_group (line 235) | async def create_group( method delete_group (line 266) | async def delete_group( method get_group (line 290) | async def get_group( method list_groups (line 308) | async def list_groups(self) -> dict[str, Any]: method group_exists (line 328) | async def group_exists( method add_server_to_ui_scopes (line 342) | async def add_server_to_ui_scopes( method remove_server_from_ui_scopes (line 369) | async def remove_server_from_ui_scopes( method add_group_mapping (line 398) | async def add_group_mapping( method remove_group_mapping (line 425) | async def remove_group_mapping( method get_all_group_mappings (line 452) | async def get_all_group_mappings(self) -> dict[str, list[str]]: method add_server_to_multiple_scopes (line 467) | async def add_server_to_multiple_scopes( method remove_server_from_all_scopes (line 485) | async def remove_server_from_all_scopes( method import_group (line 516) | async def import_group( FILE: registry/repositories/documentdb/search_repository.py function _tokenize_query (line 70) | def _tokenize_query(query: str) -> list[str]: function _tokens_match_text (line 89) | def _tokens_match_text( function _tool_extraction_limit (line 118) | def _tool_extraction_limit( function _distribute_results (line 134) | def _distribute_results( function _build_status_filter (line 215) | def _build_status_filter( function _build_keyword_match_filter (line 277) | def _build_keyword_match_filter( function _build_text_boost_stage (line 306) | def _build_text_boost_stage( class DocumentDBSearchRepository (line 482) | class DocumentDBSearchRepository(SearchRepositoryBase): method __init__ (line 485) | def __init__(self): method _get_collection (line 493) | async def _get_collection(self) -> AsyncIOMotorCollection: method _get_embedding_model (line 500) | async def _get_embedding_model(self): method initialize (line 516) | async def initialize(self) -> None: method index_server (line 567) | async def index_server( method index_agent (line 643) | async def index_agent( method index_skill (line 713) | async def index_skill( method index_virtual_server (line 824) | async def index_virtual_server( method _calculate_cosine_similarity (line 954) | def _calculate_cosine_similarity(self, vec1: list[float], vec2: list[f... method search_by_tags (line 973) | async def search_by_tags( method get_all_tags (line 1019) | async def get_all_tags(self) -> list[str]: method remove_entity (line 1036) | async def remove_entity( method _client_side_search (line 1052) | async def _client_side_search( method _lexical_only_search (line 1380) | async def _lexical_only_search( method _format_lexical_results (line 1458) | def _format_lexical_results( method search (line 1616) | async def search( FILE: registry/repositories/documentdb/security_scan_repository.py class DocumentDBSecurityScanRepository (line 15) | class DocumentDBSecurityScanRepository(SecurityScanRepositoryBase): method __init__ (line 18) | def __init__(self): method _get_collection (line 22) | async def _get_collection(self) -> AsyncIOMotorCollection: method load_all (line 29) | async def load_all(self) -> None: method get (line 40) | async def get( method list_all (line 47) | async def list_all(self) -> list[dict[str, Any]]: method create (line 62) | async def create( method get_latest (line 104) | async def get_latest( method query_by_status (line 138) | async def query_by_status( FILE: registry/repositories/documentdb/server_repository.py class DocumentDBServerRepository (line 16) | class DocumentDBServerRepository(ServerRepositoryBase): method __init__ (line 19) | def __init__(self): method _get_collection (line 23) | async def _get_collection(self) -> AsyncIOMotorCollection: method load_all (line 30) | async def load_all(self) -> None: method get (line 41) | async def get( method list_all (line 79) | async def list_all(self) -> dict[str, dict[str, Any]]: method list_paginated (line 101) | async def list_paginated( method list_by_source (line 137) | async def list_by_source( method create (line 171) | async def create( method update (line 203) | async def update( method delete (line 234) | async def delete( method delete_with_versions (line 264) | async def delete_with_versions( method get_state (line 313) | async def get_state( method set_state (line 323) | async def set_state( method count (line 354) | async def count(self) -> int: method update_field (line 371) | async def update_field( method find_with_filter (line 393) | async def find_with_filter( FILE: registry/repositories/documentdb/skill_repository.py function _skill_to_document (line 36) | def _skill_to_document( function _normalize_metadata (line 45) | def _normalize_metadata( function _document_to_skill (line 68) | def _document_to_skill( class DocumentDBSkillRepository (line 78) | class DocumentDBSkillRepository(SkillRepositoryBase): method __init__ (line 81) | def __init__(self): method _get_collection (line 86) | async def _get_collection(self) -> AsyncIOMotorCollection: method ensure_indexes (line 93) | async def ensure_indexes(self) -> None: method get (line 126) | async def get( method list_all (line 138) | async def list_all( method list_paginated (line 163) | async def list_paginated( method list_filtered (line 188) | async def list_filtered( method create (line 222) | async def create( method update (line 242) | async def update( method delete (line 265) | async def delete( method get_state (line 278) | async def get_state( method set_state (line 288) | async def set_state( method create_many (line 305) | async def create_many( method update_many (line 326) | async def update_many( method count (line 347) | async def count(self) -> int: FILE: registry/repositories/documentdb/skill_security_scan_repository.py class DocumentDBSkillSecurityScanRepository (line 15) | class DocumentDBSkillSecurityScanRepository(SkillSecurityScanRepositoryB... method __init__ (line 18) | def __init__(self): method _get_collection (line 22) | async def _get_collection(self) -> AsyncIOMotorCollection: method load_all (line 29) | async def load_all(self) -> None: method get (line 42) | async def get( method list_all (line 49) | async def list_all(self) -> list[dict[str, Any]]: method create (line 64) | async def create( method get_latest (line 88) | async def get_latest( method query_by_status (line 109) | async def query_by_status( FILE: registry/repositories/documentdb/virtual_server_repository.py function _config_to_document (line 34) | def _config_to_document( function _document_to_config (line 43) | def _document_to_config( class DocumentDBVirtualServerRepository (line 52) | class DocumentDBVirtualServerRepository(VirtualServerRepositoryBase): method __init__ (line 55) | def __init__(self): method _get_collection (line 60) | async def _get_collection(self) -> AsyncIOMotorCollection: method ensure_indexes (line 68) | async def ensure_indexes(self) -> None: method get (line 102) | async def get( method list_all (line 113) | async def list_all(self) -> list[VirtualServerConfig]: method list_enabled (line 125) | async def list_enabled(self) -> list[VirtualServerConfig]: method create (line 137) | async def create( method update (line 156) | async def update( method delete (line 180) | async def delete( method get_state (line 192) | async def get_state( method set_state (line 204) | async def set_state( method update_rating (line 225) | async def update_rating( method get_rating (line 257) | async def get_rating( FILE: registry/repositories/factory.py function get_server_repository (line 44) | def get_server_repository() -> ServerRepositoryBase: function get_agent_repository (line 66) | def get_agent_repository() -> AgentRepositoryBase: function get_scope_repository (line 88) | def get_scope_repository() -> ScopeRepositoryBase: function get_security_scan_repository (line 110) | def get_security_scan_repository() -> SecurityScanRepositoryBase: function get_search_repository (line 132) | def get_search_repository() -> SearchRepositoryBase: function get_federation_config_repository (line 154) | def get_federation_config_repository() -> FederationConfigRepositoryBase: function get_peer_federation_repository (line 176) | def get_peer_federation_repository() -> PeerFederationRepositoryBase: function get_audit_repository (line 198) | def get_audit_repository() -> AuditRepositoryBase: function get_skill_repository (line 224) | def get_skill_repository() -> SkillRepositoryBase: function get_skill_security_scan_repository (line 248) | def get_skill_security_scan_repository() -> SkillSecurityScanRepositoryB... function get_virtual_server_repository (line 270) | def get_virtual_server_repository() -> VirtualServerRepositoryBase: function get_backend_session_repository (line 294) | def get_backend_session_repository() -> BackendSessionRepositoryBase | N... function get_registry_card_repository (line 321) | def get_registry_card_repository() -> RegistryCardRepositoryBase: function get_app_log_repository (line 338) | def get_app_log_repository() -> AppLogRepository | None: function reset_repositories (line 360) | def reset_repositories() -> None: FILE: registry/repositories/file/agent_repository.py function _path_to_filename (line 15) | def _path_to_filename(path: str) -> str: class FileAgentRepository (line 26) | class FileAgentRepository(AgentRepositoryBase): method __init__ (line 29) | def __init__(self): method get_all (line 34) | async def get_all(self) -> dict[str, AgentCard]: method get (line 53) | async def get(self, path: str) -> AgentCard | None: method save (line 58) | async def save(self, agent: AgentCard) -> AgentCard: method delete (line 72) | async def delete(self, path: str) -> bool: method _load_state_file (line 82) | async def _load_state_file(self) -> dict[str, list[str]]: method get_state (line 98) | async def get_state(self, path: str) -> bool: method get_all_states (line 103) | async def get_all_states(self) -> dict[str, bool]: method save_state (line 113) | async def save_state(self, state: dict[str, list[str]]) -> None: method is_enabled (line 118) | async def is_enabled(self, path: str) -> bool: method set_enabled (line 123) | async def set_enabled(self, path: str, enabled: bool) -> None: method create (line 140) | async def create(self, agent: AgentCard) -> AgentCard: method update (line 144) | async def update(self, path: str, agent: AgentCard) -> AgentCard | None: method list_all (line 151) | async def list_all(self) -> list[AgentCard]: method list_paginated (line 156) | async def list_paginated( method load_all (line 165) | async def load_all(self) -> dict[str, AgentCard]: method set_state (line 169) | async def set_state(self, path: str, enabled: bool) -> None: method count (line 173) | async def count(self) -> int: method update_field (line 182) | async def update_field( method find_with_filter (line 214) | async def find_with_filter( FILE: registry/repositories/file/federation_config_repository.py class FileFederationConfigRepository (line 15) | class FileFederationConfigRepository(FederationConfigRepositoryBase): method __init__ (line 18) | def __init__(self, config_dir: Path | None = None): method _get_config_path (line 35) | def _get_config_path(self, config_id: str) -> Path: method get_config (line 39) | async def get_config(self, config_id: str = "default") -> FederationCo... method save_config (line 72) | async def save_config( method delete_config (line 119) | async def delete_config(self, config_id: str = "default") -> bool: method list_configs (line 144) | async def list_configs(self) -> list[dict[str, Any]]: FILE: registry/repositories/file/peer_federation_repository.py function _validate_peer_id (line 32) | def _validate_peer_id( function _get_safe_file_path (line 62) | def _get_safe_file_path( class FilePeerFederationRepository (line 94) | class FilePeerFederationRepository(PeerFederationRepositoryBase): method __init__ (line 100) | def __init__( method _load_peer_from_file (line 136) | def _load_peer_from_file( method _save_peer_to_file (line 169) | def _save_peer_to_file( method _load_sync_state_file (line 195) | def _load_sync_state_file(self) -> dict[str, PeerSyncStatus]: method _save_sync_state_file (line 228) | def _save_sync_state_file(self) -> None: method get_peer (line 246) | async def get_peer( method list_peers (line 253) | async def list_peers( method create_peer (line 265) | async def create_peer( method update_peer (line 298) | async def update_peer( method delete_peer (line 335) | async def delete_peer( method get_sync_status (line 369) | async def get_sync_status( method update_sync_status (line 376) | async def update_sync_status( method list_sync_statuses (line 388) | async def list_sync_statuses(self) -> list[PeerSyncStatus]: method load_all (line 392) | async def load_all(self) -> None: FILE: registry/repositories/file/scope_repository.py class FileScopeRepository (line 19) | class FileScopeRepository(ScopeRepositoryBase): method __init__ (line 22) | def __init__(self): method load_all (line 27) | async def load_all(self) -> None: method _save_scopes (line 56) | async def _save_scopes(self) -> bool: method get_ui_scopes (line 90) | async def get_ui_scopes( method get_group_mappings (line 98) | async def get_group_mappings( method get_server_scopes (line 106) | async def get_server_scopes( method add_server_scope (line 113) | async def add_server_scope( method remove_server_scope (line 150) | async def remove_server_scope( method create_group (line 183) | async def create_group( method delete_group (line 217) | async def delete_group( method import_group (line 255) | async def import_group( method get_group (line 304) | async def get_group(self, group_name: str) -> dict[str, Any]: method list_groups (line 340) | async def list_groups( method group_exists (line 378) | async def group_exists( method add_server_to_ui_scopes (line 389) | async def add_server_to_ui_scopes( method remove_server_from_ui_scopes (line 417) | async def remove_server_from_ui_scopes( method add_group_mapping (line 450) | async def add_group_mapping( method remove_group_mapping (line 475) | async def remove_group_mapping( method get_all_group_mappings (line 502) | async def get_all_group_mappings( method add_server_to_multiple_scopes (line 512) | async def add_server_to_multiple_scopes( method remove_server_from_all_scopes (line 534) | async def remove_server_from_all_scopes( FILE: registry/repositories/file/search_repository.py class FaissSearchRepository (line 11) | class FaissSearchRepository(SearchRepositoryBase): method __init__ (line 14) | def __init__(self): method index_entity (line 20) | async def index_entity( method remove_entity (line 31) | async def remove_entity(self, entity_path: str) -> None: method search_by_tags (line 35) | async def search_by_tags( method get_all_tags (line 85) | async def get_all_tags(self) -> list[str]: method search (line 94) | async def search( method rebuild_index (line 117) | async def rebuild_index(self) -> None: method initialize (line 121) | async def initialize(self) -> None: method index_server (line 126) | async def index_server( method index_agent (line 132) | async def index_agent( FILE: registry/repositories/file/security_scan_repository.py class FileSecurityScanRepository (line 17) | class FileSecurityScanRepository(SecurityScanRepositoryBase): method __init__ (line 20) | def __init__(self): method load_all (line 24) | async def load_all(self) -> None: method get (line 58) | async def get( method list_all (line 65) | async def list_all(self) -> list[dict[str, Any]]: method create (line 69) | async def create( method get_latest (line 97) | async def get_latest( method query_by_status (line 104) | async def query_by_status( FILE: registry/repositories/file/server_repository.py class FileServerRepository (line 17) | class FileServerRepository(ServerRepositoryBase): method __init__ (line 20) | def __init__(self): method load_all (line 24) | async def load_all(self) -> None: method _load_state (line 69) | async def _load_state(self) -> None: method _save_state (line 101) | async def _save_state(self) -> None: method _path_to_filename (line 110) | def _path_to_filename( method _save_to_file (line 120) | async def _save_to_file( method get (line 141) | async def get( method list_all (line 157) | async def list_all(self) -> dict[str, dict[str, Any]]: method list_paginated (line 161) | async def list_paginated( method list_by_source (line 179) | async def list_by_source( method create (line 193) | async def create( method update (line 215) | async def update( method delete (line 235) | async def delete( method delete_with_versions (line 269) | async def delete_with_versions( method get_state (line 317) | async def get_state( method set_state (line 335) | async def set_state( method count (line 353) | async def count(self) -> int: method update_field (line 361) | async def update_field( method find_with_filter (line 391) | async def find_with_filter( FILE: registry/repositories/file/skill_security_scan_repository.py class FileSkillSecurityScanRepository (line 17) | class FileSkillSecurityScanRepository(SkillSecurityScanRepositoryBase): method __init__ (line 20) | def __init__(self): method load_all (line 24) | async def load_all(self) -> None: method get (line 58) | async def get( method list_all (line 65) | async def list_all(self) -> list[dict[str, Any]]: method create (line 69) | async def create( method get_latest (line 97) | async def get_latest( method query_by_status (line 104) | async def query_by_status( FILE: registry/repositories/interfaces.py class ServerRepositoryBase (line 26) | class ServerRepositoryBase(ABC): method get (line 30) | async def get( method list_all (line 38) | async def list_all(self) -> dict[str, dict[str, Any]]: method list_paginated (line 43) | async def list_paginated( method list_by_source (line 60) | async def list_by_source( method create (line 75) | async def create( method update (line 83) | async def update( method delete (line 92) | async def delete( method delete_with_versions (line 100) | async def delete_with_versions( method get_state (line 118) | async def get_state( method set_state (line 126) | async def set_state( method load_all (line 135) | async def load_all(self) -> None: method count (line 140) | async def count(self) -> int: method update_field (line 149) | async def update_field( method find_with_filter (line 168) | async def find_with_filter( class AgentRepositoryBase (line 183) | class AgentRepositoryBase(ABC): method get (line 187) | async def get( method list_all (line 195) | async def list_all(self) -> list[AgentCard]: method list_paginated (line 200) | async def list_paginated( method create (line 217) | async def create( method update (line 225) | async def update( method delete (line 234) | async def delete( method get_state (line 242) | async def get_state( method get_all_states (line 250) | async def get_all_states(self) -> dict[str, bool]: method set_state (line 259) | async def set_state( method load_all (line 268) | async def load_all(self) -> None: method count (line 273) | async def count(self) -> int: method update_field (line 282) | async def update_field( method find_with_filter (line 301) | async def find_with_filter( class ScopeRepositoryBase (line 316) | class ScopeRepositoryBase(ABC): method get_ui_scopes (line 326) | async def get_ui_scopes( method get_group_mappings (line 343) | async def get_group_mappings( method get_server_scopes (line 359) | async def get_server_scopes( method load_all (line 376) | async def load_all(self) -> None: method add_server_scope (line 384) | async def add_server_scope( method remove_server_scope (line 406) | async def remove_server_scope( method create_group (line 424) | async def create_group( method delete_group (line 445) | async def delete_group( method get_group (line 466) | async def get_group(self, group_name: str) -> dict[str, Any]: method list_groups (line 488) | async def list_groups(self) -> dict[str, Any]: method group_exists (line 510) | async def group_exists( method add_server_to_ui_scopes (line 526) | async def add_server_to_ui_scopes( method remove_server_from_ui_scopes (line 548) | async def remove_server_from_ui_scopes( method add_group_mapping (line 570) | async def add_group_mapping( method remove_group_mapping (line 592) | async def remove_group_mapping( method get_all_group_mappings (line 614) | async def get_all_group_mappings(self) -> dict[str, list[str]]: method add_server_to_multiple_scopes (line 635) | async def add_server_to_multiple_scopes( method remove_server_from_all_scopes (line 661) | async def remove_server_from_all_scopes( class SecurityScanRepositoryBase (line 681) | class SecurityScanRepositoryBase(ABC): method get (line 691) | async def get( method list_all (line 707) | async def list_all(self) -> list[dict[str, Any]]: method create (line 717) | async def create( method get_latest (line 733) | async def get_latest( method query_by_status (line 749) | async def query_by_status( method load_all (line 765) | async def load_all(self) -> None: class SkillSecurityScanRepositoryBase (line 773) | class SkillSecurityScanRepositoryBase(ABC): method get (line 783) | async def get( method list_all (line 799) | async def list_all(self) -> list[dict[str, Any]]: method create (line 809) | async def create( method get_latest (line 825) | async def get_latest( method query_by_status (line 841) | async def query_by_status( method load_all (line 857) | async def load_all(self) -> None: class SearchRepositoryBase (line 865) | class SearchRepositoryBase(ABC): method initialize (line 869) | async def initialize(self) -> None: method index_server (line 874) | async def index_server( method index_agent (line 884) | async def index_agent( method remove_entity (line 894) | async def remove_entity( method search (line 902) | async def search( method index_skill (line 914) | async def index_skill( method index_virtual_server (line 932) | async def index_virtual_server( method search_by_tags (line 950) | async def search_by_tags( method get_all_tags (line 978) | async def get_all_tags(self) -> list[str]: class PeerFederationRepositoryBase (line 990) | class PeerFederationRepositoryBase(ABC): method load_all (line 994) | async def load_all(self) -> None: method get_peer (line 999) | async def get_peer( method list_peers (line 1007) | async def list_peers( method create_peer (line 1015) | async def create_peer( method update_peer (line 1023) | async def update_peer( method delete_peer (line 1032) | async def delete_peer( method get_sync_status (line 1040) | async def get_sync_status( method update_sync_status (line 1048) | async def update_sync_status( method list_sync_statuses (line 1057) | async def list_sync_statuses(self) -> list[Any]: class FederationConfigRepositoryBase (line 1062) | class FederationConfigRepositoryBase(ABC): method get_config (line 1066) | async def get_config(self, config_id: str = "default") -> FederationCo... method save_config (line 1079) | async def save_config( method delete_config (line 1095) | async def delete_config(self, config_id: str = "default") -> bool: method list_configs (line 1108) | async def list_configs(self) -> list[dict[str, Any]]: class SkillRepositoryBase (line 1118) | class SkillRepositoryBase(ABC): method ensure_indexes (line 1122) | async def ensure_indexes(self) -> None: method get (line 1127) | async def get( method list_all (line 1135) | async def list_all( method list_paginated (line 1152) | async def list_paginated( method list_filtered (line 1169) | async def list_filtered( method create (line 1180) | async def create( method update (line 1188) | async def update( method delete (line 1197) | async def delete( method get_state (line 1205) | async def get_state( method set_state (line 1213) | async def set_state( method create_many (line 1223) | async def create_many( method update_many (line 1231) | async def update_many( method count (line 1239) | async def count(self) -> int: class BackendSessionRepositoryBase (line 1248) | class BackendSessionRepositoryBase(ABC): method ensure_indexes (line 1258) | async def ensure_indexes(self) -> None: method get_backend_session (line 1263) | async def get_backend_session( method store_backend_session (line 1280) | async def store_backend_session( method delete_backend_session (line 1300) | async def delete_backend_session( method create_client_session (line 1314) | async def create_client_session( method validate_client_session (line 1330) | async def validate_client_session( class VirtualServerRepositoryBase (line 1345) | class VirtualServerRepositoryBase(ABC): method ensure_indexes (line 1349) | async def ensure_indexes(self) -> None: method get (line 1354) | async def get( method list_all (line 1369) | async def list_all(self) -> list[VirtualServerConfig]: method list_enabled (line 1378) | async def list_enabled(self) -> list[VirtualServerConfig]: method create (line 1387) | async def create( method update (line 1405) | async def update( method delete (line 1422) | async def delete( method get_state (line 1437) | async def get_state( method set_state (line 1452) | async def set_state( class RegistryCardRepositoryBase (line 1469) | class RegistryCardRepositoryBase(ABC): method get (line 1473) | async def get(self) -> RegistryCard | None: method save (line 1478) | async def save( method exists (line 1486) | async def exists(self) -> bool: FILE: registry/repositories/stats_repository.py function increment_search_counter (line 24) | async def increment_search_counter() -> None: function get_search_count (line 38) | async def get_search_count() -> int: function get_search_counts (line 54) | async def get_search_counts() -> dict[str, int]: function _increment_mongodb (line 70) | async def _increment_mongodb() -> None: function _get_count_mongodb (line 132) | async def _get_count_mongodb() -> int: function _get_counts_mongodb (line 146) | async def _get_counts_mongodb() -> dict[str, int]: function _get_stats_file (line 164) | def _get_stats_file() -> Path: function _read_file_stats (line 169) | def _read_file_stats() -> dict: function _write_file_stats (line 183) | def _write_file_stats(stats: dict) -> None: function _increment_file (line 190) | def _increment_file() -> None: function _get_count_file (line 247) | def _get_count_file() -> int: function _get_counts_file (line 253) | def _get_counts_file() -> dict[str, int]: FILE: registry/schemas/agent_models.py function _validate_path_format (line 35) | def _validate_path_format( function _validate_protocol_version (line 62) | def _validate_protocol_version( function _validate_skill_ids_unique (line 91) | def _validate_skill_ids_unique( function _validate_url_format (line 119) | def _validate_url_format( function _validate_security_references (line 155) | def _validate_security_references( class SecurityScheme (line 183) | class SecurityScheme(BaseModel): method _validate_security_type (line 231) | def _validate_security_type( method _validate_api_key_location (line 243) | def _validate_api_key_location( class AgentProvider (line 255) | class AgentProvider(BaseModel): class Skill (line 275) | class Skill(BaseModel): method _validate_skill_id (line 326) | def _validate_skill_id( method _validate_skill_name (line 339) | def _validate_skill_name( class AgentCard (line 349) | class AgentCard(BaseModel): method _validate_protocol_version_field (line 578) | def _validate_protocol_version_field( method _validate_url_field (line 587) | def _validate_url_field( method _validate_path_field (line 596) | def _validate_path_field( method _validate_visibility_field (line 607) | def _validate_visibility_field( method _validate_trust_level_field (line 622) | def _validate_trust_level_field( method _convert_tags_field (line 634) | def _convert_tags_field( method _validate_skills_field (line 652) | def _validate_skills_field( method _validate_security_requirements (line 660) | def _validate_security_requirements( method _validate_group_restricted_access (line 669) | def _validate_group_restricted_access( class AgentInfo (line 678) | class AgentInfo(BaseModel): class AgentRegistrationRequest (line 826) | class AgentRegistrationRequest(BaseModel): method _normalize_tags (line 951) | def _normalize_tags( method _normalize_external_tags (line 964) | def _normalize_external_tags( method _validate_path_request (line 977) | def _validate_path_request( method _validate_protocol_version_request (line 988) | def _validate_protocol_version_request( method _validate_supported_protocol (line 997) | def _validate_supported_protocol( method _validate_visibility_request (line 1010) | def _validate_visibility_request( method _validate_trust_level_request (line 1025) | def _validate_trust_level_request( method _normalize_allowed_groups (line 1037) | def _normalize_allowed_groups( method _validate_group_name_format (line 1052) | def _validate_group_name_format( method _validate_group_restricted_groups (line 1066) | def _validate_group_restricted_groups( FILE: registry/schemas/agent_security.py class AgentSecurityScanFinding (line 11) | class AgentSecurityScanFinding(BaseModel): class AgentSecurityScanAnalyzerResult (line 28) | class AgentSecurityScanAnalyzerResult(BaseModel): class AgentSecurityScanResult (line 39) | class AgentSecurityScanResult(BaseModel): class AgentSecurityScanConfig (line 59) | class AgentSecurityScanConfig(BaseModel): class AgentSecurityStatus (line 79) | class AgentSecurityStatus(BaseModel): FILE: registry/schemas/ans_models.py class ANSCertificateInfo (line 21) | class ANSCertificateInfo(BaseModel): class ANSFunctionInfo (line 46) | class ANSFunctionInfo(BaseModel): class ANSEndpointInfo (line 54) | class ANSEndpointInfo(BaseModel): class ANSMetadata (line 77) | class ANSMetadata(BaseModel): class LinkANSRequest (line 139) | class LinkANSRequest(BaseModel): class LinkANSResponse (line 149) | class LinkANSResponse(BaseModel): class ANSSyncStats (line 164) | class ANSSyncStats(BaseModel): class ANSIntegrationMetrics (line 185) | class ANSIntegrationMetrics(BaseModel): FILE: registry/schemas/anthropic_schema.py class Repository (line 20) | class Repository(BaseModel): class StdioTransport (line 29) | class StdioTransport(BaseModel): class StreamableHttpTransport (line 38) | class StreamableHttpTransport(BaseModel): class SseTransport (line 46) | class SseTransport(BaseModel): class Package (line 53) | class Package(BaseModel): class ServerDetail (line 64) | class ServerDetail(BaseModel): class ServerResponse (line 81) | class ServerResponse(BaseModel): class PaginationMetadata (line 92) | class PaginationMetadata(BaseModel): class ServerList (line 99) | class ServerList(BaseModel): class ErrorResponse (line 106) | class ErrorResponse(BaseModel): FILE: registry/schemas/backend_session_models.py function _utc_now (line 14) | def _utc_now() -> datetime: class BackendSessionDocument (line 19) | class BackendSessionDocument(BaseModel): class ClientSessionDocument (line 56) | class ClientSessionDocument(BaseModel): class StoreSessionRequest (line 85) | class StoreSessionRequest(BaseModel): class CreateClientSessionRequest (line 106) | class CreateClientSessionRequest(BaseModel): class CreateClientSessionResponse (line 119) | class CreateClientSessionResponse(BaseModel): class GetBackendSessionResponse (line 128) | class GetBackendSessionResponse(BaseModel): FILE: registry/schemas/federation_schema.py class AnthropicServerConfig (line 8) | class AnthropicServerConfig(BaseModel): class AnthropicFederationConfig (line 14) | class AnthropicFederationConfig(BaseModel): class AsorAgentConfig (line 23) | class AsorAgentConfig(BaseModel): class AsorFederationConfig (line 29) | class AsorFederationConfig(BaseModel): class AwsRegistryConfig (line 39) | class AwsRegistryConfig(BaseModel): class AwsRegistryFederationConfig (line 57) | class AwsRegistryFederationConfig(BaseModel): class FederationConfig (line 69) | class FederationConfig(BaseModel): method _migrate_agentcore_key (line 78) | def _migrate_agentcore_key(cls, data: Any) -> Any: method is_any_federation_enabled (line 89) | def is_any_federation_enabled(self) -> bool: method get_enabled_federations (line 93) | def get_enabled_federations(self) -> list[str]: class FederatedServer (line 111) | class FederatedServer(BaseModel): FILE: registry/schemas/idp_m2m_client.py function _validate_client_id (line 21) | def _validate_client_id(value: str) -> str: class IdPM2MClient (line 31) | class IdPM2MClient(BaseModel): class Config (line 60) | class Config: class IdPM2MClientUpdate (line 76) | class IdPM2MClientUpdate(BaseModel): class IdPM2MClientCreate (line 83) | class IdPM2MClientCreate(BaseModel): method _validate_client_id_format (line 114) | def _validate_client_id_format(cls, v: str) -> str: class IdPM2MClientPatch (line 118) | class IdPM2MClientPatch(BaseModel): class M2MClientListResponse (line 142) | class M2MClientListResponse(BaseModel): FILE: registry/schemas/management.py class M2MAccountRequest (line 6) | class M2MAccountRequest(BaseModel): class HumanUserRequest (line 14) | class HumanUserRequest(BaseModel): class UserDeleteResponse (line 29) | class UserDeleteResponse(BaseModel): class UserSummary (line 36) | class UserSummary(BaseModel): class UserListResponse (line 48) | class UserListResponse(BaseModel): class GroupCreateRequest (line 55) | class GroupCreateRequest(BaseModel): class GroupSummary (line 73) | class GroupSummary(BaseModel): class GroupListResponse (line 82) | class GroupListResponse(BaseModel): class GroupDeleteResponse (line 89) | class GroupDeleteResponse(BaseModel): class UpdateUserGroupsRequest (line 96) | class UpdateUserGroupsRequest(BaseModel): class UpdateUserGroupsResponse (line 102) | class UpdateUserGroupsResponse(BaseModel): class GroupUpdateRequest (line 111) | class GroupUpdateRequest(BaseModel): class GroupDetailResponse (line 121) | class GroupDetailResponse(BaseModel): FILE: registry/schemas/okta_m2m_client.py class OktaM2MClient (line 12) | class OktaM2MClient(BaseModel): class Config (line 29) | class Config: class OktaM2MClientUpdate (line 44) | class OktaM2MClientUpdate(BaseModel): class OktaSyncRequest (line 50) | class OktaSyncRequest(BaseModel): class OktaSyncResponse (line 56) | class OktaSyncResponse(BaseModel): FILE: registry/schemas/peer_federation_schema.py function _validate_endpoint_url (line 32) | def _validate_endpoint_url( function _validate_peer_id (line 68) | def _validate_peer_id( class SyncMetadata (line 102) | class SyncMetadata(BaseModel): method _validate_orphan_timestamp (line 160) | def _validate_orphan_timestamp( class PeerRegistryConfig (line 170) | class PeerRegistryConfig(BaseModel): method _validate_peer_id_field (line 274) | def _validate_peer_id_field( method _validate_endpoint_field (line 283) | def _validate_endpoint_field( method _validate_sync_mode_config (line 291) | def _validate_sync_mode_config( class SyncHistoryEntry (line 311) | class SyncHistoryEntry(BaseModel): class PeerSyncStatus (line 388) | class PeerSyncStatus(BaseModel): method add_history_entry (line 462) | def add_history_entry( class SyncResult (line 477) | class SyncResult(BaseModel): class FederationExportResponse (line 533) | class FederationExportResponse(BaseModel): FILE: registry/schemas/registration_gate_models.py class RegistrationGateAuthType (line 11) | class RegistrationGateAuthType(str, Enum): class RegistrationGateRequest (line 19) | class RegistrationGateRequest(BaseModel): class RegistrationGateResponse (line 50) | class RegistrationGateResponse(BaseModel): class RegistrationGateResult (line 63) | class RegistrationGateResult(BaseModel): FILE: registry/schemas/registry_card.py class LifecycleStatus (line 27) | class LifecycleStatus(str, Enum): function _validate_lifecycle_status (line 36) | def _validate_lifecycle_status( class RegistryCapabilities (line 55) | class RegistryCapabilities(BaseModel): class RegistryAuthConfig (line 67) | class RegistryAuthConfig(BaseModel): class RegistryContact (line 82) | class RegistryContact(BaseModel): class RegistryCard (line 89) | class RegistryCard(BaseModel): method _validate_visibility_policy (line 145) | def _validate_visibility_policy(cls, v: str) -> str: method _validate_https_endpoint (line 154) | def _validate_https_endpoint(cls, v: HttpUrl) -> HttpUrl: method _validate_metadata_size (line 169) | def _validate_metadata_size(cls, v: dict[str, Any]) -> dict[str, Any]: FILE: registry/schemas/security.py class SecurityScanFinding (line 11) | class SecurityScanFinding(BaseModel): class SecurityScanAnalyzerResult (line 23) | class SecurityScanAnalyzerResult(BaseModel): class SecurityScanResult (line 32) | class SecurityScanResult(BaseModel): class SecurityScanConfig (line 52) | class SecurityScanConfig(BaseModel): class ServerSecurityStatus (line 70) | class ServerSecurityStatus(BaseModel): FILE: registry/schemas/skill_models.py function _utc_now (line 40) | def _utc_now() -> datetime: class VisibilityEnum (line 45) | class VisibilityEnum(str, Enum): class SkillMetadata (line 53) | class SkillMetadata(BaseModel): class CompatibilityRequirement (line 61) | class CompatibilityRequirement(BaseModel): class ToolReference (line 73) | class ToolReference(BaseModel): class SkillResource (line 86) | class SkillResource(BaseModel): class SkillResourceManifest (line 96) | class SkillResourceManifest(BaseModel): class FileHash (line 105) | class FileHash(BaseModel): class ContentIntegrity (line 113) | class ContentIntegrity(BaseModel): class SkillCard (line 136) | class SkillCard(BaseModel): method validate_name (line 282) | def validate_name( method validate_path (line 298) | def validate_path( class SkillInfo (line 308) | class SkillInfo(BaseModel): class SkillRegistrationRequest (line 365) | class SkillRegistrationRequest(BaseModel): method validate_name (line 403) | def validate_name( class SkillSearchResult (line 418) | class SkillSearchResult(BaseModel): class ToggleStateRequest (line 432) | class ToggleStateRequest(BaseModel): class SkillTier1_Metadata (line 441) | class SkillTier1_Metadata(BaseModel): class SkillTier2_Instructions (line 458) | class SkillTier2_Instructions(BaseModel): class SkillTier3_Resources (line 467) | class SkillTier3_Resources(BaseModel): class ToolValidationResult (line 473) | class ToolValidationResult(BaseModel): class DiscoveryResponse (line 482) | class DiscoveryResponse(BaseModel): FILE: registry/schemas/skill_security.py class SkillSecurityScanFinding (line 11) | class SkillSecurityScanFinding(BaseModel): class SkillSecurityScanResult (line 28) | class SkillSecurityScanResult(BaseModel): class SkillSecurityScanConfig (line 48) | class SkillSecurityScanConfig(BaseModel): class SkillSecurityStatus (line 68) | class SkillSecurityStatus(BaseModel): FILE: registry/schemas/virtual_server_models.py function _utc_now (line 29) | def _utc_now() -> datetime: class ToolMapping (line 34) | class ToolMapping(BaseModel): method validate_backend_path (line 69) | def validate_backend_path( class ToolScopeOverride (line 79) | class ToolScopeOverride(BaseModel): class VirtualServerConfig (line 100) | class VirtualServerConfig(BaseModel): method validate_path (line 189) | def validate_path( method validate_tags (line 209) | def validate_tags( method validate_server_name (line 221) | def validate_server_name( class VirtualServerInfo (line 232) | class VirtualServerInfo(BaseModel): class CreateVirtualServerRequest (line 258) | class CreateVirtualServerRequest(BaseModel): class UpdateVirtualServerRequest (line 302) | class UpdateVirtualServerRequest(BaseModel): class ToggleVirtualServerRequest (line 340) | class ToggleVirtualServerRequest(BaseModel): class ToolCatalogEntry (line 346) | class ToolCatalogEntry(BaseModel): class ResolvedTool (line 368) | class ResolvedTool(BaseModel): FILE: registry/scripts/inspect-documentdb.py function inspect_documentdb (line 17) | async def inspect_documentdb(): FILE: registry/search/service.py class _PydanticAwareJSONEncoder (line 22) | class _PydanticAwareJSONEncoder(json.JSONEncoder): method default (line 25) | def default( class FaissService (line 37) | class FaissService: method __init__ (line 40) | def __init__(self): method initialize (line 46) | async def initialize(self): method _load_embedding_model (line 51) | async def _load_embedding_model(self): method _load_faiss_data (line 104) | async def _load_faiss_data(self): method _initialize_new_index (line 135) | def _initialize_new_index(self): method save_data (line 148) | async def save_data(self): method _get_text_for_embedding (line 176) | def _get_text_for_embedding(self, server_info: dict[str, Any]) -> str: method _get_text_for_agent (line 218) | def _get_text_for_agent(self, agent_card: AgentCard) -> str: method add_or_update_service (line 261) | async def add_or_update_service( method remove_service (line 361) | async def remove_service(self, service_path: str): method add_or_update_agent (line 392) | async def add_or_update_agent( method remove_agent (line 499) | async def remove_agent(self, agent_path: str) -> None: method search_agents (line 525) | async def search_agents( method add_or_update_entity (line 538) | async def add_or_update_entity( method remove_entity (line 556) | async def remove_entity( method search_entities (line 573) | async def search_entities( method _distance_to_relevance (line 614) | def _distance_to_relevance(self, distance: float) -> float: method _normalize_embedding (line 670) | def _normalize_embedding( method _calculate_keyword_boost (line 691) | def _calculate_keyword_boost( method _extract_matching_tools (line 820) | def _extract_matching_tools( method search_mixed (line 980) | async def search_mixed( FILE: registry/services/agent_scanner.py class AgentScannerService (line 30) | class AgentScannerService: method __init__ (line 33) | def __init__(self): method _ensure_output_directory (line 38) | def _ensure_output_directory(self) -> Path: method get_scan_config (line 43) | def get_scan_config(self) -> AgentSecurityScanConfig: method scan_agent (line 55) | async def scan_agent( method _run_a2a_scanner (line 166) | def _run_a2a_scanner( method _analyze_scan_results (line 285) | def _analyze_scan_results(self, raw_output: dict) -> tuple[bool, int, ... method get_scan_result (line 326) | async def get_scan_result(self, agent_path: str) -> dict | None: FILE: registry/services/agent_service.py class AgentService (line 21) | class AgentService: method __init__ (line 24) | def __init__(self): method load_agents_and_state (line 29) | async def load_agents_and_state(self) -> None: method register_agent (line 36) | async def register_agent( method get_agent (line 73) | async def get_agent( method list_agents (line 103) | async def list_agents(self) -> list[AgentCard]: method update_rating (line 112) | async def update_rating( method update_agent (line 164) | async def update_agent( method delete_agent (line 209) | async def delete_agent( method enable_agent (line 247) | async def enable_agent( method disable_agent (line 271) | async def disable_agent( method is_agent_enabled (line 295) | async def is_agent_enabled( method get_enabled_agents (line 318) | async def get_enabled_agents(self) -> list[str]: method get_disabled_agents (line 328) | async def get_disabled_agents(self) -> list[str]: method get_all_agent_states (line 338) | async def get_all_agent_states(self) -> dict[str, bool]: method index_agent (line 347) | async def index_agent( method get_agent_info (line 370) | async def get_agent_info( method get_all_agents (line 385) | async def get_all_agents(self) -> list[AgentCard]: method get_agents_paginated (line 394) | async def get_agents_paginated( method remove_agent (line 420) | async def remove_agent( method toggle_agent (line 439) | async def toggle_agent( FILE: registry/services/agent_transform_service.py function _create_agent_transport_config (line 28) | def _create_agent_transport_config( function _determine_agent_version (line 47) | def _determine_agent_version(agent_info: dict[str, Any]) -> str: function _create_agent_name (line 71) | def _create_agent_name(agent_info: dict[str, Any]) -> str: function transform_to_agent_detail (line 94) | def transform_to_agent_detail( function transform_to_agent_response (line 157) | def transform_to_agent_response( function transform_to_agent_list (line 186) | def transform_to_agent_list( FILE: registry/services/ans_client.py function _build_auth_header (line 44) | def _build_auth_header() -> dict[str, str]: function _check_circuit_breaker (line 52) | def _check_circuit_breaker() -> bool: function _record_failure (line 68) | def _record_failure() -> None: function _record_success (line 80) | def _record_success() -> None: function _determine_status (line 87) | def _determine_status( function _extract_metadata (line 118) | def _extract_metadata( function _resolve_ans_id (line 186) | async def _resolve_ans_id( function verify_ans_agent (line 249) | async def verify_ans_agent( FILE: registry/services/ans_service.py function _store_sync_history (line 37) | def _store_sync_history( function _sync_asset_type (line 52) | async def _sync_asset_type( function link_ans_to_agent (line 99) | async def link_ans_to_agent( function link_ans_to_server (line 149) | async def link_ans_to_server( function unlink_ans_from_agent (line 199) | async def unlink_ans_from_agent( function unlink_ans_from_server (line 226) | async def unlink_ans_from_server( function sync_all_ans_status (line 253) | async def sync_all_ans_status() -> ANSSyncStats: function get_sync_history (line 285) | def get_sync_history() -> list[dict]: function get_ans_metrics (line 290) | async def get_ans_metrics() -> ANSIntegrationMetrics: FILE: registry/services/ans_sync_scheduler.py class ANSSyncScheduler (line 18) | class ANSSyncScheduler: method __init__ (line 21) | def __init__(self): method start (line 25) | async def start(self) -> None: method stop (line 37) | async def stop(self) -> None: method _scheduler_loop (line 48) | async def _scheduler_loop(self) -> None: function get_ans_sync_scheduler (line 69) | def get_ans_sync_scheduler() -> ANSSyncScheduler: FILE: registry/services/auth0_m2m_sync.py class Auth0M2MSync (line 33) | class Auth0M2MSync: method __init__ (line 36) | def __init__( method _get_management_api_token (line 60) | async def _get_management_api_token(self) -> str: method _get_auth0_clients (line 94) | async def _get_auth0_clients(self, access_token: str) -> list[dict]: method _filter_m2m_clients (line 125) | def _filter_m2m_clients(self, clients: list[dict]) -> list[dict]: method _determine_groups (line 149) | def _determine_groups(self, client_id: str) -> list[str]: method sync_from_auth0 (line 166) | async def sync_from_auth0(self, force_full_sync: bool = False) -> dict: method get_all_clients (line 285) | async def get_all_clients(self) -> list[IdPM2MClient]: method get_client_groups (line 317) | async def get_client_groups(self, client_id: str) -> list[str]: method update_client_groups (line 331) | async def update_client_groups( function get_auth0_m2m_sync (line 375) | def get_auth0_m2m_sync(db: AsyncIOMotorDatabase) -> Auth0M2MSync | None: FILE: registry/services/demo_servers_init.py function _load_server_config (line 19) | def _load_server_config(config_path: str) -> dict[str, Any]: function initialize_airegistry_server (line 45) | async def initialize_airegistry_server() -> bool: function initialize_demo_servers (line 139) | async def initialize_demo_servers() -> None: FILE: registry/services/federation/agentcore_client.py function _safe_parse_json (line 54) | def _safe_parse_json( function _sanitize_path_segment (line 74) | def _sanitize_path_segment( function _extract_transport_info (line 90) | def _extract_transport_info( class AgentCoreFederationClient (line 120) | class AgentCoreFederationClient: method __init__ (line 129) | def __init__( method _get_client_for_registry (line 170) | def _get_client_for_registry( method _create_registry_client (line 205) | def _create_registry_client( method _create_cross_account_client (line 252) | def _create_cross_account_client( method get_health_status (line 294) | def get_health_status(self) -> dict[str, Any]: method list_registries (line 309) | def list_registries(self) -> list[dict[str, Any]]: method list_registry_records (line 341) | def list_registry_records( method get_registry_record (line 396) | def get_registry_record( method fetch_all_records (line 433) | def fetch_all_records( method _fetch_from_registry (line 502) | def _fetch_from_registry( method _fetch_records_parallel (line 584) | def _fetch_records_parallel( method _transform_record (line 652) | def _transform_record( method _transform_mcp_record (line 681) | def _transform_mcp_record( method _transform_a2a_record (line 772) | def _transform_a2a_record( method _transform_custom_record (line 849) | def _transform_custom_record( method _transform_skills_record (line 951) | def _transform_skills_record( method fetch_server (line 1041) | def fetch_server( method fetch_all_servers (line 1074) | def fetch_all_servers( FILE: registry/services/federation/anthropic_client.py class AnthropicFederationClient (line 24) | class AnthropicFederationClient(BaseFederationClient): method __init__ (line 27) | def __init__( method fetch_server (line 46) | def fetch_server( method fetch_all_servers (line 79) | def fetch_all_servers( method _transform_server_response (line 103) | def _transform_server_response( FILE: registry/services/federation/asor_client.py class AsorFederationClient (line 26) | class AsorFederationClient(BaseFederationClient): method __init__ (line 29) | def __init__( method _get_access_token (line 56) | def _get_access_token(self) -> str | None: method fetch_agent (line 166) | def fetch_agent( method list_all_agents (line 208) | def list_all_agents(self) -> list[dict[str, Any]]: method fetch_all_agents (line 258) | def fetch_all_agents(self, agent_configs: list[AsorAgentConfig]) -> li... method fetch_server (line 285) | def fetch_server(self, server_name: str, **kwargs) -> dict[str, Any] |... method fetch_all_servers (line 298) | def fetch_all_servers(self, server_names: list[str], **kwargs) -> list... method _transform_agent_response (line 313) | def _transform_agent_response( FILE: registry/services/federation/base_client.py class BaseFederationClient (line 21) | class BaseFederationClient(ABC): method __init__ (line 24) | def __init__(self, endpoint: str, timeout_seconds: int = 30, retry_att... method __del__ (line 38) | def __del__(self): method fetch_server (line 44) | def fetch_server(self, server_name: str, **kwargs) -> dict[str, Any] |... method fetch_all_servers (line 58) | def fetch_all_servers(self, server_names: list[str], **kwargs) -> list... method _make_request (line 71) | def _make_request( FILE: registry/services/federation/federation_auth.py class FederationAuthManager (line 24) | class FederationAuthManager: method __new__ (line 35) | def __new__(cls) -> "FederationAuthManager": method __init__ (line 44) | def __init__(self): method _validate_config (line 67) | def _validate_config(self) -> None: method is_configured (line 98) | def is_configured(self) -> bool: method get_token (line 113) | def get_token(self) -> str | None: method _is_token_valid (line 143) | def _is_token_valid(self) -> bool: method _refresh_token (line 159) | def _refresh_token(self) -> str | None: method clear_token (line 223) | def clear_token(self) -> None: method __del__ (line 234) | def __del__(self): FILE: registry/services/federation/peer_registry_client.py class PeerRegistryClient (line 18) | class PeerRegistryClient(BaseFederationClient): method __init__ (line 21) | def __init__( method _get_auth_token (line 54) | def _get_auth_token(self) -> str | None: method fetch_servers (line 73) | def fetch_servers(self, since_generation: int | None = None) -> list[d... method fetch_security_scans (line 153) | def fetch_security_scans(self) -> list[dict[str, Any]] | None: method fetch_agents (line 222) | def fetch_agents(self, since_generation: int | None = None) -> list[di... method check_peer_health (line 302) | def check_peer_health(self) -> bool: method fetch_server (line 337) | def fetch_server(self, server_name: str, **kwargs) -> dict[str, Any] |... method fetch_all_servers (line 366) | def fetch_all_servers(self, server_names: list[str], **kwargs) -> list... FILE: registry/services/federation_audit_service.py class FederationConnectionLog (line 23) | class FederationConnectionLog(BaseModel): class PeerSyncSummary (line 65) | class PeerSyncSummary(BaseModel): class FederationAuditService (line 107) | class FederationAuditService: method __new__ (line 118) | def __new__(cls) -> "FederationAuditService": method __init__ (line 127) | def __init__(self): method log_connection (line 139) | async def log_connection( method get_peer_connections (line 210) | async def get_peer_connections( method get_all_connections (line 238) | async def get_all_connections( method get_shared_resources_summary (line 263) | async def get_shared_resources_summary(self) -> dict[str, PeerSyncSumm... method get_peer_summary (line 273) | async def get_peer_summary( method clear_logs (line 289) | def clear_logs(self) -> None: function get_federation_audit_service (line 301) | def get_federation_audit_service() -> FederationAuditService: FILE: registry/services/federation_reconciliation.py function _config_server_names_to_paths (line 40) | def _config_server_names_to_paths( function _record_reconciliation_metrics (line 61) | def _record_reconciliation_metrics( function reconcile_anthropic_servers (line 89) | async def reconcile_anthropic_servers( function _build_expected_agentcore_paths (line 228) | def _build_expected_agentcore_paths( function _reconcile_agentcore_servers (line 254) | async def _reconcile_agentcore_servers( function _reconcile_agentcore_agents (line 292) | async def _reconcile_agentcore_agents( function _reconcile_agentcore_skills (line 334) | async def _reconcile_agentcore_skills( function reconcile_agentcore_records (line 376) | async def reconcile_agentcore_records( FILE: registry/services/github_auth.py class GitHubAuthProvider (line 37) | class GitHubAuthProvider: method __init__ (line 47) | def __init__(self) -> None: method _build_allowed_hosts (line 55) | def _build_allowed_hosts(self) -> frozenset[str]: method _is_allowed_host (line 61) | def _is_allowed_host(self, url: str) -> bool: method _log_active_tier (line 70) | def _log_active_tier(self) -> None: method _has_app_credentials (line 79) | def _has_app_credentials(self) -> bool: method get_auth_headers (line 87) | async def get_auth_headers(self, url: str) -> dict[str, str]: method _create_jwt (line 112) | def _create_jwt(self) -> str: method _get_github_app_token (line 128) | async def _get_github_app_token(self) -> str | None: FILE: registry/services/m2m_management_service.py class M2MClientConflict (line 30) | class M2MClientConflict(Exception): class M2MClientNotFound (line 34) | class M2MClientNotFound(Exception): class M2MClientImmutable (line 38) | class M2MClientImmutable(Exception): class M2MManagementService (line 42) | class M2MManagementService: method __init__ (line 45) | def __init__( method ensure_indexes (line 51) | async def ensure_indexes(self) -> None: method create (line 63) | async def create( method list_paged (line 109) | async def list_paged( method get (line 133) | async def get( method patch (line 147) | async def patch( method delete (line 197) | async def delete( FILE: registry/services/okta_m2m_sync.py class OktaM2MSync (line 33) | class OktaM2MSync: method __init__ (line 36) | def __init__( method _get_okta_applications (line 57) | async def _get_okta_applications(self) -> list[dict]: method _filter_m2m_applications (line 86) | def _filter_m2m_applications(self, apps: list[dict]) -> list[dict]: method _determine_groups (line 116) | def _determine_groups(self, client_id: str) -> list[str]: method sync_from_okta (line 134) | async def sync_from_okta(self, force_full_sync: bool = False) -> dict: method get_all_clients (line 253) | async def get_all_clients(self) -> list[OktaM2MClient]: method get_client_groups (line 274) | async def get_client_groups(self, client_id: str) -> list[str]: method update_client_groups (line 288) | async def update_client_groups( function get_okta_m2m_sync (line 331) | def get_okta_m2m_sync(db: AsyncIOMotorDatabase) -> OktaM2MSync | None: FILE: registry/services/peer_federation_service.py class PeerFederationService (line 40) | class PeerFederationService: method __new__ (line 49) | def __new__(cls) -> "PeerFederationService": method __init__ (line 58) | def __init__(self): method _get_repo (line 73) | def _get_repo(self) -> PeerFederationRepositoryBase: method load_peers_and_state (line 79) | async def load_peers_and_state(self) -> None: method load_peers_and_state_sync (line 106) | def load_peers_and_state_sync(self) -> None: method add_peer (line 120) | async def add_peer( method get_peer (line 157) | async def get_peer( method update_peer (line 188) | async def update_peer( method remove_peer (line 239) | async def remove_peer( method _cleanup_synced_servers (line 292) | async def _cleanup_synced_servers( method _cleanup_synced_agents (line 330) | async def _cleanup_synced_agents( method list_peers (line 368) | async def list_peers( method get_peer_by_client_id (line 390) | async def get_peer_by_client_id( method get_sync_status (line 418) | async def get_sync_status( method update_sync_status (line 444) | async def update_sync_status( method sync_peer (line 464) | async def sync_peer( method sync_all_peers (line 701) | async def sync_all_peers( method _filter_servers_by_config (line 765) | def _filter_servers_by_config( method _filter_agents_by_config (line 834) | def _filter_agents_by_config( method _matches_tag_filter (line 902) | def _matches_tag_filter( method detect_orphaned_items (line 937) | async def detect_orphaned_items( method mark_item_as_orphaned (line 1010) | async def mark_item_as_orphaned( method handle_orphaned_items (line 1082) | async def handle_orphaned_items( method set_local_override (line 1151) | async def set_local_override( method is_locally_overridden (line 1225) | def is_locally_overridden( method _index_server_for_search (line 1241) | async def _index_server_for_search( method _index_agent_for_search (line 1265) | async def _index_agent_for_search( method _store_synced_servers (line 1289) | async def _store_synced_servers( method _store_synced_agents (line 1385) | async def _store_synced_agents( method _store_synced_security_scans (line 1483) | async def _store_synced_security_scans( function get_peer_federation_service (line 1570) | def get_peer_federation_service() -> PeerFederationService: FILE: registry/services/peer_sync_scheduler.py class PeerSyncScheduler (line 27) | class PeerSyncScheduler: method __init__ (line 35) | def __init__(self): method start (line 39) | async def start(self) -> None: method stop (line 49) | async def stop(self) -> None: method _scheduler_loop (line 61) | async def _scheduler_loop(self) -> None: method _check_and_sync_peers (line 76) | async def _check_and_sync_peers(self) -> None: method _should_sync_peer (line 125) | async def _should_sync_peer(self, peer_id: str, interval_minutes: int,... function get_peer_sync_scheduler (line 172) | def get_peer_sync_scheduler() -> PeerSyncScheduler: FILE: registry/services/rating_service.py function validate_rating (line 20) | def validate_rating(rating: int) -> None: function update_rating_details (line 43) | def update_rating_details( function calculate_average_rating (line 99) | def calculate_average_rating(rating_details: list[dict[str, Any]]) -> fl... FILE: registry/services/registration_gate_service.py function _sanitize_payload (line 57) | def _sanitize_payload( function _build_auth_headers (line 79) | def _build_auth_headers() -> dict[str, str]: function _extract_request_headers (line 98) | def _extract_request_headers( function _is_gate_configured (line 117) | def _is_gate_configured() -> bool: function _truncate_error (line 136) | def _truncate_error( function _call_gate_endpoint (line 152) | async def _call_gate_endpoint( function check_registration_gate (line 264) | async def check_registration_gate( function verify_gate_connectivity (line 314) | async def verify_gate_connectivity() -> None: FILE: registry/services/scope_service.py function _trigger_auth_server_reload (line 40) | async def _trigger_auth_server_reload() -> bool: function update_server_scopes (line 78) | async def update_server_scopes( function remove_server_scopes (line 126) | async def remove_server_scopes( function add_server_to_groups (line 156) | async def add_server_to_groups( function remove_server_from_groups (line 224) | async def remove_server_from_groups( function create_group (line 280) | async def create_group( function delete_group (line 322) | async def delete_group( function import_group (line 362) | async def import_group( function get_group (line 417) | async def get_group(group_name: str) -> dict[str, Any]: function list_groups (line 445) | async def list_groups() -> dict[str, Any]: function group_exists (line 471) | async def group_exists( function trigger_auth_server_reload (line 491) | async def trigger_auth_server_reload() -> bool: function add_group_mapping_to_scope (line 503) | async def add_group_mapping_to_scope( FILE: registry/services/security_scanner.py function _extract_bearer_token_from_headers (line 30) | def _extract_bearer_token_from_headers(headers: str) -> str | None: function _parse_scanner_json_output (line 60) | def _parse_scanner_json_output(stdout: str) -> list: function _organize_findings_by_analyzer (line 103) | def _organize_findings_by_analyzer(tool_results: list) -> dict: class SecurityScannerService (line 135) | class SecurityScannerService: method __init__ (line 138) | def __init__(self) -> None: method _ensure_output_directory (line 143) | def _ensure_output_directory(self) -> Path: method get_scan_config (line 148) | def get_scan_config(self) -> SecurityScanConfig: method scan_server (line 160) | async def scan_server( method _run_mcp_scanner (line 325) | def _run_mcp_scanner( method _analyze_scan_results (line 418) | def _analyze_scan_results(self, raw_output: dict) -> tuple[bool, int, ... method get_scan_result (line 462) | async def get_scan_result(self, server_path: str) -> dict | None: FILE: registry/services/server_service.py class ServerService (line 15) | class ServerService: method __init__ (line 18) | def __init__(self): method _prepare_server_dict (line 24) | def _prepare_server_dict( method load_servers_and_state (line 44) | async def load_servers_and_state(self): method register_server (line 49) | async def register_server( method update_server (line 142) | async def update_server(self, path: str, server_info: dict[str, Any]) ... method toggle_service (line 173) | async def toggle_service(self, path: str, enabled: bool) -> bool: method get_server_info (line 193) | async def get_server_info( method get_all_servers (line 213) | async def get_all_servers( method get_servers_paginated (line 245) | async def get_servers_paginated( method get_filtered_servers (line 282) | async def get_filtered_servers( method get_all_servers_with_permissions (line 349) | async def get_all_servers_with_permissions( method user_can_access_server_path (line 411) | async def user_can_access_server_path(self, path: str, accessible_serv... method is_service_enabled (line 441) | async def is_service_enabled(self, path: str) -> bool: method get_enabled_services (line 445) | async def get_enabled_services(self) -> list[str]: method reload_state_from_disk (line 470) | async def reload_state_from_disk(self): method update_rating (line 501) | async def update_rating( method remove_server (line 556) | async def remove_server(self, path: str) -> bool: method add_server_version (line 579) | async def add_server_version( method remove_server_version (line 669) | async def remove_server_version(self, path: str, version: str) -> bool: method set_default_version (line 722) | async def set_default_version(self, path: str, version: str) -> bool: method get_server_versions (line 821) | async def get_server_versions(self, path: str) -> dict[str, Any]: method _regenerate_nginx_config (line 887) | async def _regenerate_nginx_config(self) -> None: FILE: registry/services/skill_scanner.py class SkillScannerService (line 27) | class SkillScannerService: method __init__ (line 30) | def __init__(self) -> None: method scan_repo (line 36) | def scan_repo(self): method _ensure_output_directory (line 42) | def _ensure_output_directory(self) -> Path: method get_scan_config (line 47) | def get_scan_config(self) -> SkillSecurityScanConfig: method scan_skill (line 64) | async def scan_skill( method _run_skill_scanner (line 149) | def _run_skill_scanner( method _download_skill_content (line 234) | def _download_skill_content( method _parse_scanner_output (line 266) | def _parse_scanner_output(self, stdout: str) -> dict: method _analyze_scan_results (line 301) | def _analyze_scan_results(self, raw_output: dict) -> tuple[bool, int, ... method get_scan_result (line 334) | async def get_scan_result(self, skill_path: str) -> dict | None: FILE: registry/services/skill_service.py function _is_private_ip (line 71) | def _is_private_ip( function _is_safe_url (line 105) | def _is_safe_url( function _build_fetch_headers (line 170) | def _build_fetch_headers( function _resolve_tree_api (line 218) | def _resolve_tree_api( function _discover_skill_resources (line 244) | async def _discover_skill_resources( function _validate_skill_md_url (line 324) | async def _validate_skill_md_url( function _parse_skill_md_content (line 384) | async def _parse_skill_md_content( function _check_skill_health (line 588) | async def _check_skill_health( function _compute_content_integrity (line 673) | async def _compute_content_integrity( function _decrypt_skill_auth (line 741) | def _decrypt_skill_auth( function _fetch_authenticated_content (line 758) | async def _fetch_authenticated_content( function _check_drift_inline (line 824) | async def _check_drift_inline( function _build_skill_card (line 894) | def _build_skill_card( class SkillService (line 978) | class SkillService: method __init__ (line 985) | def __init__(self): method _get_repo (line 989) | def _get_repo(self) -> SkillRepositoryBase: method _get_search_repo (line 995) | def _get_search_repo(self) -> SearchRepositoryBase: method register_skill (line 1001) | async def register_skill( method get_skill (line 1096) | async def get_skill( method list_skills (line 1105) | async def list_skills( method list_skills_for_user (line 1163) | async def list_skills_for_user( method get_skills_paginated (line 1208) | async def get_skills_paginated( method update_skill (line 1234) | async def update_skill( method delete_skill (line 1259) | async def delete_skill( method toggle_skill (line 1279) | async def toggle_skill( method parse_skill_md (line 1306) | async def parse_skill_md( method check_skill_health (line 1331) | async def check_skill_health( method update_rating (line 1382) | async def update_rating( method get_rating (line 1443) | async def get_rating( function get_skill_service (line 1475) | def get_skill_service() -> SkillService: FILE: registry/services/tool_catalog_service.py class ToolCatalogService (line 30) | class ToolCatalogService: method __init__ (line 33) | def __init__(self): method get_tool_catalog (line 36) | async def get_tool_catalog( method _get_available_versions (line 119) | def _get_available_versions( function get_tool_catalog_service (line 150) | def get_tool_catalog_service() -> ToolCatalogService: FILE: registry/services/tool_validation_service.py class ToolValidationService (line 26) | class ToolValidationService: method __init__ (line 29) | def __init__(self): method _get_server_repo (line 32) | def _get_server_repo(self) -> ServerRepositoryBase: method validate_tools_available (line 38) | async def validate_tools_available( method get_tools_with_servers (line 142) | async def get_tools_with_servers( function get_tool_validation_service (line 211) | def get_tool_validation_service() -> ToolValidationService: FILE: registry/services/transform_service.py function _create_transport_config (line 28) | def _create_transport_config(server_info: dict[str, Any]) -> dict[str, A... function _extract_repository_from_description (line 43) | def _extract_repository_from_description(description: str) -> Repository... function _determine_version (line 60) | def _determine_version(server_info: dict[str, Any]) -> str: function _create_server_name (line 80) | def _create_server_name(server_info: dict[str, Any]) -> str: function transform_to_server_detail (line 103) | def transform_to_server_detail(server_info: dict[str, Any]) -> ServerDet... function transform_to_server_response (line 162) | def transform_to_server_response( function transform_to_server_list (line 191) | def transform_to_server_list( FILE: registry/services/virtual_server_service.py function _generate_path_from_name (line 58) | def _generate_path_from_name( function _get_unique_backends (line 79) | def _get_unique_backends( function _get_effective_tool_name (line 86) | def _get_effective_tool_name( class VirtualServerService (line 93) | class VirtualServerService: method __init__ (line 96) | def __init__(self): method list_virtual_servers (line 100) | async def list_virtual_servers(self) -> list[VirtualServerInfo]: method get_virtual_server (line 109) | async def get_virtual_server( method create_virtual_server (line 123) | async def create_virtual_server( method update_virtual_server (line 185) | async def update_virtual_server( method delete_virtual_server (line 224) | async def delete_virtual_server( method toggle_virtual_server (line 251) | async def toggle_virtual_server( method resolve_tools (line 293) | async def resolve_tools( method rate_virtual_server (line 314) | async def rate_virtual_server( method get_virtual_server_rating (line 363) | async def get_virtual_server_rating( method _validate_tool_mappings (line 384) | async def _validate_tool_mappings( method _validate_unique_tool_names (line 433) | def _validate_unique_tool_names( method _resolve_tool_list (line 465) | async def _resolve_tool_list( method _config_to_info (line 536) | def _config_to_info( method _index_for_search (line 565) | async def _index_for_search( method _remove_from_search (line 584) | async def _remove_from_search( method _trigger_nginx_reload (line 599) | async def _trigger_nginx_reload(self) -> bool: function get_virtual_server_service (line 637) | def get_virtual_server_service() -> VirtualServerService: FILE: registry/services/webhook_service.py function _build_auth_headers (line 26) | def _build_auth_headers() -> dict[str, str]: function send_registration_webhook (line 47) | async def send_registration_webhook( FILE: registry/static/static/js/main.d2eb0b7d.js method 240 (line 2) | 240(e){var t=Object.prototype.hasOwnProperty,r=Object.prototype.toString... method 106 (line 2) | 106(e){var t=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,r=/\n/g,a=/^\s*/,n=/^(\*?... method 730 (line 2) | 730(e,t,r){var a=r(43),n=r(853);function s(e){for(var t="https://reactjs... method 391 (line 2) | 391(e,t,r){var a=r(950);t.createRoot=a.createRoot,t.hydrateRoot=a.hydrat... method 950 (line 2) | 950(e,t,r){!function e(){if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL... method 153 (line 2) | 153(e,t,r){var a=r(43),n=Symbol.for("react.element"),s=Symbol.for("react... method 202 (line 2) | 202(e,t){var r=Symbol.for("react.element"),a=Symbol.for("react.portal"),... method 43 (line 2) | 43(e,t,r){e.exports=r(202)} method 579 (line 2) | 579(e,t,r){e.exports=r(153)} method 234 (line 2) | 234(e,t){function r(e,t){var r=e.length;e.push(t);e:for(;0=0&&(t.hash=e.substr... function v (line 2) | function v(e,t,r,a){void 0===a&&(a={});let{window:n=document.defaultView... function k (line 2) | function k(e,t,r){return void 0===r&&(r="/"),w(e,t,r,!1)} function w (line 2) | function w(e,t,r,a){let n=O(("string"===typeof t?b(t):t).pathname||"/",r... function j (line 2) | function j(e,t,r,a){void 0===t&&(t=[]),void 0===r&&(r=[]),void 0===a&&(a... function C (line 2) | function C(e){let t=e.split("/");if(0===t.length)return[];let[r,...a]=t,... function T (line 2) | function T(e,t){let r=e.split("/"),a=r.length;return r.some(B)&&(a+=S),t... function L (line 2) | function L(e,t,r){void 0===r&&(r=!1);let{routesMeta:a}=e,n={},s="/",l=[]... function R (line 2) | function R(e,t){"string"===typeof e&&(e={path:e,caseSensitive:!1,end:!0}... function P (line 2) | function P(e){try{return e.split("/").map(e=>decodeURIComponent(e).repla... function O (line 2) | function O(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toL... function I (line 2) | function I(e,t){void 0===t&&(t="/");let r,{pathname:a,search:n="",hash:s... function z (line 2) | function z(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/"... function U (line 2) | function U(e,t,r,a){return"Cannot include a '"+e+"' character in a manua... function V (line 2) | function V(e){return e.filter((e,t)=>0===t||e.route.path&&e.route.path.l... function H (line 2) | function H(e,t){let r=V(e);return t?r.map((e,t)=>t===r.length-1?e.pathna... function W (line 2) | function W(e,t,r,a){let n;void 0===a&&(a=!1),"string"===typeof e?n=b(e):... function Q (line 2) | function Q(e){return null!=e&&"number"===typeof e.status&&"string"===typ... function Y (line 2) | function Y(){return Y=Object.assign?Object.assign.bind():function(e){for... function se (line 2) | function se(){return null!=i.useContext(re)} function le (line 2) | function le(){return se()||p(!1),i.useContext(re).location} function ie (line 2) | function ie(e){i.useContext(te).static||i.useLayoutEffect(e)} function oe (line 2) | function oe(){let{isDataRoute:e}=i.useContext(ae);return e?function(){le... function ue (line 2) | function ue(e,t){let{relative:r}=void 0===t?{}:t,{future:a}=i.useContext... function ce (line 2) | function ce(e,t,r,a){se()||p(!1);let{navigator:n}=i.useContext(te),{matc... function de (line 2) | function de(){let e=function(){var e;let t=i.useContext(ne),r=be(fe.UseR... class ge (line 2) | class ge extends i.Component{constructor(e){super(e),this.state={locatio... method constructor (line 2) | constructor(e){super(e),this.state={location:e.location,revalidation:e... method getDerivedStateFromError (line 2) | static getDerivedStateFromError(e){return{error:e}} method getDerivedStateFromProps (line 2) | static getDerivedStateFromProps(e,t){return t.location!==e.location||"... method componentDidCatch (line 2) | componentDidCatch(e,t){console.error("React Router caught the followin... method render (line 2) | render(){return void 0!==this.state.error?i.createElement(ae.Provider,... function pe (line 2) | function pe(e){let{routeContext:t,match:r,children:a}=e,n=i.useContext(X... function he (line 2) | function he(e,t,r,a){var n;if(void 0===t&&(t=[]),void 0===r&&(r=null),vo... function ye (line 2) | function ye(e){let t=i.useContext(X);return t||p(!1),t} function be (line 2) | function be(e){let t=i.useContext(ee);return t||p(!1),t} function ve (line 2) | function ve(e){let t=function(){let e=i.useContext(ae);return e||p(!1),e... function ke (line 2) | function ke(e,t){null==e||e.v7_startTransition,void 0===(null==e?void 0:... function we (line 2) | function we(e){p(!1)} function je (line 2) | function je(e){let{basename:t="/",children:r=null,location:a,navigationT... function Ce (line 2) | function Ce(e){let{children:t,location:r}=e;return ce(Ne(t),r)} function Ne (line 2) | function Ne(e,t){void 0===t&&(t=[]);let r=[];return i.Children.forEach(e... function Fe (line 2) | function Fe(){return Fe=Object.assign?Object.assign.bind():function(e){f... function Ee (line 2) | function Ee(e,t){if(null==e)return{};var r,a,n={},s=Object.keys(e);for(a... function Ae (line 2) | function Ae(e){return void 0===e&&(e=""),new URLSearchParams("string"===... function Be (line 2) | function Be(e){let{basename:t,children:r,future:a,window:n}=e,s=i.useRef... function Me (line 2) | function Me(e){let t=i.useRef(Ae(e)),r=i.useRef(!1),a=le(),n=i.useMemo((... function Ie (line 2) | function Ie(e,t){return function(){return e.apply(t,arguments)}} function Ze (line 2) | function Ze(e){return null!==e&&!Qe(e)&&null!==e.constructor&&!Qe(e.cons... function pt (line 2) | function pt(e,t){let r,a,{allOwnKeys:n=!1}=arguments.length>2&&void 0!==... function ht (line 2) | function ht(e,t){if(Ze(e))return null;t=t.toLowerCase();const r=Object.k... class Et (line 2) | class Et extends Error{static from(e,t,r,a,n,s){const l=new Et(e.message... method from (line 2) | static from(e,t,r,a,n,s){const l=new Et(e.message,t||e.code,r,a,n);ret... method constructor (line 2) | constructor(e,t,r,a,n){super(e),Object.defineProperty(this,"message",{... method toJSON (line 2) | toJSON(){return{message:this.message,name:this.name,description:this.d... function _t (line 2) | function _t(e){return Ft.isPlainObject(e)||Ft.isArray(e)} function St (line 2) | function St(e){return Ft.endsWith(e,"[]")?e.slice(0,-2):e} function Bt (line 2) | function Bt(e,t,r){return e?e.concat(t).map(function(e,t){return e=St(e)... function o (line 2) | function o(e){if(null===e)return"";if(Ft.isDate(e))return e.toISOString(... function u (line 2) | function u(e,r,n){let i=e;if(Ft.isReactNative(t)&&Ft.isReactNativeBlob(e... function Rt (line 2) | function Rt(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E... function Pt (line 2) | function Pt(e,t){this._pairs=[],e&&Lt(e,this,t)} function It (line 2) | function It(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace... function zt (line 2) | function zt(e,t,r){if(!t)return e;const a=r&&r.encode||It,n=Ft.isFunctio... method constructor (line 2) | constructor(){this.handlers=[]} method use (line 2) | use(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous... method eject (line 2) | eject(e){this.handlers[e]&&(this.handlers[e]=null)} method clear (line 2) | clear(){this.handlers&&(this.handlers=[])} method forEach (line 2) | forEach(e){Ft.forEach(this.handlers,function(t){null!==t&&e(t)})} function Ht (line 2) | function Ht(e){return Ht="function"==typeof Symbol&&"symbol"==typeof Sym... function Wt (line 2) | function Wt(e){var t=function(e,t){if("object"!=Ht(e)||!e)return e;var r... function qt (line 2) | function qt(e,t,r){return(t=Wt(t))in e?Object.defineProperty(e,t,{value:... function Jt (line 2) | function Jt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){v... function Kt (line 2) | function Kt(e){for(var t=1;tlr(e,t... function ir (line 2) | function ir(e){return e&&String(e).trim().toLowerCase()} function or (line 2) | function or(e){return!1===e||null==e?e:Ft.isArray(e)?e.map(or):function(... function ur (line 2) | function ur(e,t,r,a,n){return Ft.isFunction(a)?a.call(this,t,r):(n&&(t=r... class cr (line 2) | class cr{constructor(e){e&&this.set(e)}set(e,t,r){const a=this;function ... method constructor (line 2) | constructor(e){e&&this.set(e)} method set (line 2) | set(e,t,r){const a=this;function n(e,t,r){const n=ir(t);if(!n)throw ne... method get (line 2) | get(e,t){if(e=ir(e)){const r=Ft.findKey(this,e);if(r){const e=this[r];... method has (line 2) | has(e,t){if(e=ir(e)){const r=Ft.findKey(this,e);return!(!r||void 0===t... method delete (line 2) | delete(e,t){const r=this;let a=!1;function n(e){if(e=ir(e)){const n=Ft... method clear (line 2) | clear(e){const t=Object.keys(this);let r=t.length,a=!1;for(;r--;){cons... method normalize (line 2) | normalize(e){const t=this,r={};return Ft.forEach(this,(a,n)=>{const s=... method concat (line 2) | concat(){for(var e=arguments.length,t=new Array(e),r=0;r{n... method toString (line 2) | toString(){return Object.entries(this.toJSON()).map(e=>{let[t,r]=e;ret... method getSetCookie (line 2) | getSetCookie(){return this.get("set-cookie")||[]} method from (line 2) | static from(e){return e instanceof this?e:new this(e)} method concat (line 2) | static concat(e){const t=new this(e);for(var r=arguments.length,a=new ... method accessor (line 2) | static accessor(e){const t=(this[sr]=this[sr]={accessors:{}}).accessor... method [Symbol.iterator] (line 2) | [Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator... method [Symbol.toStringTag] (line 2) | get[Symbol.toStringTag](){return"AxiosHeaders"} method set (line 2) | set(e){this[a]=e} function mr (line 2) | function mr(e,t){const r=this||ar,a=t||r,n=dr.from(a.headers);let s=a.da... function gr (line 2) | function gr(e){return!(!e||!e.__CANCEL__)} method constructor (line 2) | constructor(e,t,r){super(null==e?"canceled":e,At.ERR_CANCELED,t,r),this.... function hr (line 2) | function hr(e,t,r){const a=r.config.validateStatus;r.status&&a&&!a(r.sta... method write (line 2) | write(e,t,r,a,n,s,l){if("undefined"===typeof document)return;const i=[""... method read (line 2) | read(e){if("undefined"===typeof document)return null;const t=document.co... method remove (line 2) | remove(e){this.write(e,"",Date.now()-864e5,"/")} method write (line 2) | write(){} method remove (line 2) | remove(){} function wr (line 2) | function wr(e,t,r){let a=!("string"===typeof(n=t)&&/^([a-z][a-z\d+\-.]*:... function Cr (line 2) | function Cr(e,t){t=t||{};const r={};function a(e,t,r,a){return Ft.isPlai... function p (line 2) | function p(){u&&u(),c&&c(),a.cancelToken&&a.cancelToken.unsubscribe(l),a... function x (line 2) | function x(){if(!h)return;const a=dr.from("getAllResponseHeaders"in h&&h... function Ar (line 2) | function Ar(e,t){this.v=e,this.k=t} function _r (line 2) | function _r(e){return function(){return new Sr(e.apply(this,arguments))}} function Sr (line 2) | function Sr(e){var t,r;function a(t,r){try{var s=e[t](r),l=s.value,i=l i... function Br (line 2) | function Br(e){return new Ar(e,0)} function Tr (line 2) | function Tr(e){var t={},r=!1;function a(t,a){return r=!0,a=new Promise(f... function Lr (line 2) | function Lr(e){var t,r,a,n=2;for("undefined"!=typeof Symbol&&(r=Symbol.a... function Rr (line 2) | function Rr(e){function t(e){if(Object(e)!==e)return Promise.reject(new ... method pull (line 2) | async pull(e){try{const{done:t,value:a}=await n.next();if(t)return i(),v... method duplex (line 2) | get duplex(){return e=!0,"half"} function Yr (line 2) | function Yr(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.sign... function Xr (line 2) | function Xr(e){Yr(e),e.headers=dr.from(e.headers),e.data=mr.call(e,e.tra... function a (line 2) | function a(e,t){return"[Axios v"+ea+"] Transitional option '"+e+"'"+t+(r... class sa (line 2) | class sa{constructor(e){this.defaults=e||{},this.interceptors={request:n... method constructor (line 2) | constructor(e){this.defaults=e||{},this.interceptors={request:new Ut,r... method request (line 2) | async request(e,t){try{return await this._request(e,t)}catch(r){if(r i... method _request (line 2) | _request(e,t){"string"===typeof e?(t=t||{}).url=e:t=e||{},t=Cr(this.de... method getUri (line 2) | getUri(e){return zt(wr((e=Cr(this.defaults,e)).baseURL,e.url,e.allowAb... function t (line 2) | function t(t){return function(r,a,n){return this.request(Cr(n||{},{metho... class ia (line 2) | class ia{constructor(e){if("function"!==typeof e)throw new TypeError("ex... method constructor (line 2) | constructor(e){if("function"!==typeof e)throw new TypeError("executor ... method throwIfRequested (line 2) | throwIfRequested(){if(this.reason)throw this.reason} method subscribe (line 2) | subscribe(e){this.reason?e(this.reason):this._listeners?this._listener... method unsubscribe (line 2) | unsubscribe(e){if(!this._listeners)return;const t=this._listeners.inde... method toAbortSignal (line 2) | toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return t... method source (line 2) | static source(){let e;const t=new ia(function(t){e=t});return{token:t,... function va (line 2) | function va(e,t){if(null==e)return{};var r,a,n=function(e,t){if(null==e)... function Da (line 2) | function Da(e){"function"==typeof queueMicrotask?queueMicrotask(e):Promi... function ka (line 2) | function ka(){let e=[],t={addEventListener:(e,r,a,n)=>(e.addEventListene... function wa (line 2) | function wa(){let[e]=(0,i.useState)(ka);return(0,i.useEffect)(()=>()=>e.... method constructor (line 2) | constructor(){Ca(this,"current",this.detect()),Ca(this,"handoffState","p... method set (line 2) | set(e){this.current!==e&&(this.handoffState="pending",this.currentId=0,t... method reset (line 2) | reset(){this.set(this.detect())} method nextId (line 2) | nextId(){return++this.currentId} method isServer (line 2) | get isServer(){return"server"===this.current} method isClient (line 2) | get isClient(){return"client"===this.current} method detect (line 2) | detect(){return"undefined"==typeof window||"undefined"==typeof document?... method handoff (line 2) | handoff(){"pending"===this.handoffState&&(this.handoffState="complete")} method isHandoffComplete (line 2) | get isHandoffComplete(){return"complete"===this.handoffState} function Ea (line 2) | function Ea(e){let t=(0,i.useRef)(e);return Fa(()=>{t.current=e},[e]),t} function _a (line 2) | function _a(){let e=function(){let e="undefined"==typeof document;return... function Ta (line 2) | function Ta(e,t){if(e in t){let s=t[e];for(var r=arguments.length,a=new ... function La (line 2) | function La(e){return Na.isServer?null:e instanceof Node?e.ownerDocument... function Ia (line 2) | function Ia(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[... function Ua (line 2) | function Ua(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments... function Va (line 2) | function Va(e){let t=La(e);ka().nextFrame(()=>{t&&!Ua(t.activeElement,0)... function Wa (line 2) | function Wa(e){null==e||e.focus({preventScroll:!0})} function Ja (line 2) | function Ja(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments... function Ka (line 2) | function Ka(e,t){return $a(Ia(),t,{relativeTo:e})} function $a (line 2) | function $a(e,t){let{sorted:r=!0,relativeTo:a=null,skipElements:n=[]}=ar... function Qa (line 2) | function Qa(){return/iPhone/gi.test(window.navigator.platform)||/Mac/gi.... function Za (line 2) | function Za(){return Qa()||/Android/gi.test(window.navigator.userAgent)} function Ga (line 2) | function Ga(e,t,r){let a=Ea(t);(0,i.useEffect)(()=>{function t(e){a.curr... function Ya (line 2) | function Ya(e,t,r){let a=Ea(t);(0,i.useEffect)(()=>{function t(e){a.curr... function Xa (line 2) | function Xa(e,t){let r=!(arguments.length>2&&void 0!==arguments[2])||arg... function en (line 2) | function en(){for(var e=arguments.length,t=new Array(e),r=0;rtn(e));return Fa(()=>{a(tn(... function nn (line 2) | function nn(){for(var e=arguments.length,t=new Array(e),r=0;r{... function un (line 2) | function un(e){return[e.screenX,e.screenY]} function mn (line 2) | function mn(){return(0,i.useContext)(cn)} function gn (line 2) | function gn(e){let{value:t,children:r}=e;return i.createElement(cn.Provi... function pn (line 2) | function pn(e){let t=e.parentElement,r=null;for(;t&&!(t instanceof HTMLF... function xn (line 2) | function xn(e,t){let r=t.resolveItems();if(r.length<=0)return null;let a... function fn (line 2) | function fn(){for(var e=arguments.length,t=new Array(e),r=0;r1&&void 0!==arguments[1]?arguments... function Cn (line 2) | function Cn(){for(var e=arguments.length,t=new Array(e),r=0;r1&&void 0!==arguments[1]?arguments... function Mn (line 2) | function Mn(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments... function Un (line 2) | function Un(e){let t=(0,i.useContext)(zn);if(null===t){let t=new Error("... function Vn (line 2) | function Vn(e,t){return Ta(t.type,In,e,t)} method walk (line 2) | walk(e){e.setAttribute("role","none")} method textValue (line 2) | get textValue(){return m()} method wasMoved (line 2) | wasMoved(t){let r=un(t);return(e.current[0]!==r[0]||e.current[1]!==r[1])... method update (line 2) | update(t){e.current=un(t)} function Gn (line 2) | function Gn(){let e=(0,i.useRef)(!1);return Fa(()=>(e.current=!0,()=>{e.... function Yn (line 2) | function Yn(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),a=1;a1?t-1:0),a=1;a0&&void 0!==arguments[0]?arguments... function is (line 2) | function is(e){return"children"in e?is(e.children):e.current.filter(e=>{... function os (line 2) | function os(e,t){let r=Ea(e),a=(0,i.useRef)([]),n=Gn(),s=wa(),l=Aa(funct... function us (line 2) | function us(){} function ds (line 2) | function ds(e){var t;let r={};for(let a of cs)r[a]=null!=(t=e[a])?t:us;r... function ys (line 2) | function ys(e,t){let{title:r,titleId:a}=e,n=va(e,fs);return i.createElem... function Ds (line 2) | function Ds(e,t){let{title:r,titleId:a}=e,n=va(e,vs);return i.createElem... function js (line 2) | function js(e,t){let{title:r,titleId:a}=e,n=va(e,ws);return i.createElem... function Fs (line 2) | function Fs(e,t){let{title:r,titleId:a}=e,n=va(e,Ns);return i.createElem... function _s (line 2) | function _s(e,t){let{title:r,titleId:a}=e,n=va(e,As);return i.createElem... function Bs (line 2) | function Bs(e,t,r,a){let n=Ea(r);(0,i.useEffect)(()=>{function r(e){n.cu... function Ts (line 2) | function Ts(e){let t=Aa(e),r=(0,i.useRef)(!1);(0,i.useEffect)(()=>(r.cur... function Rs (line 2) | function Rs(e,t){let r=(0,i.useRef)([]),a=Aa(e);(0,i.useEffect)(()=>{let... function t (line 2) | function t(){"loading"!==document.readyState&&(e(),document.removeEventL... function e (line 2) | function e(e){e.target instanceof HTMLElement&&e.target!==document.body&... function Us (line 2) | function Us(e){if(!e)return new Set;if("function"==typeof e)return new S... method onKeyDown (line 2) | onKeyDown(e){"Tab"==e.key&&(p.current=!0,g.requestAnimationFrame(()=>{p.... method onBlur (line 2) | onBlur(e){let t=Us(s);r.current instanceof HTMLElement&&t.add(r.current)... function qs (line 2) | function qs(e,t){for(let r of e)if(r.contains(t))return!0;return!1} function Ks (line 2) | function Ks(){return(0,i.useContext)(Js)} function $s (line 2) | function $s(e){return i.createElement(Js.Provider,{value:e.force},e.chil... function ol (line 2) | function ol(e){const t=e.getSnapshot,r=e.value;try{const e=t();return!al... function dl (line 2) | function dl(){let e;return{before(t){let{doc:r}=t;var a;let n=r.document... function ml (line 2) | function ml(){return Qa()?{before(e){let{doc:t,d:r,meta:a}=e;function n(... function gl (line 2) | function gl(e){let t={};for(let r of e)Object.assign(t,r(t));return t} method dispatch (line 2) | dispatch(e){for(var n=arguments.length,s=new Array(n>1?n-1:0),l=1;l1&&void 0!==arguments[1])||argum... function Dl (line 2) | function Dl(e){let{children:t,onUpdate:r,type:a,element:n,enabled:s}=e,l... function jl (line 2) | function jl(){let e=(0,i.useContext)(wl);if(null===e){let e=new Error("Y... function Pl (line 2) | function Pl(e){let t=(0,i.useContext)(Rl);if(null===t){let t=new Error("... function Ol (line 2) | function Ol(e,t){return Ta(t.type,Ll,e,t)} method current (line 2) | get current(){var e;return null!=(e=D.panelRef.current)?e:h.current} function Jl (line 2) | function Jl(e,t){let{title:r,titleId:a}=e,n=va(e,ql);return i.createElem... function Ql (line 2) | function Ql(e,t){let{title:r,titleId:a}=e,n=va(e,$l);return i.createElem... function Yl (line 2) | function Yl(e,t){let{title:r,titleId:a}=e,n=va(e,Gl);return i.createElem... function ti (line 2) | function ti(e,t){let{title:r,titleId:a}=e,n=va(e,ei);return i.createElem... function ni (line 2) | function ni(e,t){let{title:r,titleId:a}=e,n=va(e,ai);return i.createElem... function ii (line 2) | function ii(e,t){let{title:r,titleId:a}=e,n=va(e,li);return i.createElem... function ci (line 2) | function ci(e,t){let{title:r,titleId:a}=e,n=va(e,ui);return i.createElem... function gi (line 2) | function gi(e,t){let{title:r,titleId:a}=e,n=va(e,mi);return i.createElem... function xi (line 2) | function xi(e,t){let{title:r,titleId:a}=e,n=va(e,hi);return i.createElem... function bi (line 2) | function bi(e,t){let{title:r,titleId:a}=e,n=va(e,yi);return i.createElem... function Ci (line 2) | function Ci(){const[e,t]=(0,i.useState)(ji),[r,a]=(0,i.useState)(!ji),[n... function _i (line 2) | function _i(e,t){let{title:r,titleId:a}=e,n=va(e,Ai);return i.createElem... function Ti (line 2) | function Ti(e,t){let{title:r,titleId:a}=e,n=va(e,Bi);return i.createElem... function Pi (line 2) | function Pi(e,t){let{title:r,titleId:a}=e,n=va(e,Ri);return i.createElem... function Ii (line 2) | function Ii(e,t){let{title:r,titleId:a}=e,n=va(e,Mi);return i.createElem... function Vi (line 2) | function Vi(e,t){let{title:r,titleId:a}=e,n=va(e,Ui);return i.createElem... function qi (line 2) | function qi(e,t){let{title:r,titleId:a}=e,n=va(e,Wi);return i.createElem... function $i (line 2) | function $i(e,t){let{title:r,titleId:a}=e,n=va(e,Ki);return i.createElem... function Gi (line 2) | function Gi(e,t){let{title:r,titleId:a}=e,n=va(e,Zi);return i.createElem... function eo (line 2) | function eo(e,t){let{title:r,titleId:a}=e,n=va(e,Xi);return i.createElem... function ao (line 2) | function ao(e,t){let{title:r,titleId:a}=e,n=va(e,ro);return i.createElem... function lo (line 2) | function lo(e,t){let{title:r,titleId:a}=e,n=va(e,so);return i.createElem... function uo (line 2) | function uo(e,t){let{title:r,titleId:a}=e,n=va(e,oo);return i.createElem... function go (line 2) | function go(e,t){let{title:r,titleId:a}=e,n=va(e,mo);return i.createElem... function xo (line 2) | function xo(e,t){let{title:r,titleId:a}=e,n=va(e,ho);return i.createElem... function bo (line 2) | function bo(e,t){let{title:r,titleId:a}=e,n=va(e,yo);return i.createElem... function jo (line 2) | function jo(e,t){let{title:r,titleId:a}=e,n=va(e,wo);return i.createElem... function Bo (line 2) | function Bo(e,t){let{title:r,titleId:a}=e,n=va(e,So);return i.createElem... function Ro (line 2) | function Ro(e,t){let{title:r,titleId:a}=e,n=va(e,Lo);return i.createElem... function Wo (line 2) | function Wo(e,t){let{title:r,titleId:a}=e,n=va(e,Ho);return i.createElem... function Ko (line 2) | function Ko(e,t){let{title:r,titleId:a}=e,n=va(e,Jo);return i.createElem... function Zo (line 2) | function Zo(e,t){let{title:r,titleId:a}=e,n=va(e,Qo);return i.createElem... function Xo (line 2) | function Xo(e,t){let{title:r,titleId:a}=e,n=va(e,Yo);return i.createElem... function gu (line 2) | function gu(e,t){return"function"===typeof e?e(t):e&&"object"===typeof e... function pu (line 2) | function pu(e,t){return gu(t||e,e)} function hu (line 2) | function hu(e,t){var r;const a=()=>gu(null===t||void 0===t?void 0:t.in,N... function vu (line 2) | function vu(e){return e?parseInt(e):1} function Du (line 2) | function Du(e){return e&&parseFloat(e.replace(",","."))||0} function wu (line 2) | function wu(e){return e%400===0||e%4===0&&e%100!==0} function ju (line 2) | function ju(e){return e instanceof Date||"object"===typeof e&&"[object D... function Cu (line 2) | function Cu(e){return!(!ju(e)&&"number"!==typeof e||isNaN(+pu(e)))} function Nu (line 2) | function Nu(e){return gu(e,Date.now())} function Eu (line 2) | function Eu(e){return function(){let t=arguments.length>0&&void 0!==argu... function Su (line 2) | function Su(e){return(t,r)=>{let a;if("formatting"===(null!==r&&void 0!=... function Tu (line 2) | function Tu(e){return function(t){let r=arguments.length>1&&void 0!==arg... function Mu (line 2) | function Mu(){return Ou} function Iu (line 2) | function Iu(e){const t=pu(e),r=new Date(Date.UTC(t.getFullYear(),t.getMo... function zu (line 2) | function zu(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),a=1;a0?1:r} function Vu (line 2) | function Vu(e,t,r){const[a,n]=zu(null===r||void 0===r?void 0:r.in,e,t);r... function Hu (line 2) | function Hu(e,t){const r=pu(e,null===t||void 0===t?void 0:t.in);return r... function Wu (line 2) | function Wu(e,t){const r=pu(e,null===t||void 0===t?void 0:t.in),a=r.getM... function qu (line 2) | function qu(e,t){const r=pu(e,null===t||void 0===t?void 0:t.in);return+H... function Ju (line 2) | function Ju(e,t,r){const[a,n,s]=zu(null===r||void 0===r?void 0:r.in,e,e,... function Ku (line 2) | function Ku(e,t){return+pu(e)-+pu(t)} function $u (line 2) | function $u(e,t,r){const a=Ku(e,t)/1e3;return(n=null===r||void 0===r?voi... function Qu (line 2) | function Qu(e,t,r){var a,n;const s=Mu(),l=null!==(a=null!==(n=null===r||... function Zu (line 2) | function Zu(e,t){return Qu(e,Nu(e),t)} function Gu (line 2) | function Gu(e){if(!e)return"Unknown";try{const t="string"===typeof e?hu(... function tc (line 2) | function tc(e,t){let{title:r,titleId:a}=e,n=va(e,ec);return i.createElem... function nc (line 2) | function nc(e,t){let{title:r,titleId:a}=e,n=va(e,ac);return i.createElem... function ic (line 2) | function ic(e,t){let{title:r,titleId:a}=e,n=va(e,lc);return i.createElem... function mc (line 2) | function mc(){} function gc (line 2) | function gc(){} function fc (line 2) | function fc(e,t){return((t||xc).jsx?hc:pc).test(e)} function bc (line 2) | function bc(e){return""===e.replace(yc,"")} class vc (line 2) | class vc{constructor(e,t,r){this.normal=t,this.property=e,r&&(this.space... method constructor (line 2) | constructor(e,t,r){this.normal=t,this.property=e,r&&(this.space=r)} function Dc (line 2) | function Dc(e,t){const r={},a={};for(const n of e)Object.assign(r,n.prop... function kc (line 2) | function kc(e){return e.toLowerCase()} class wc (line 2) | class wc{constructor(e,t){this.attribute=t,this.property=e}} method constructor (line 2) | constructor(e,t){this.attribute=t,this.property=e} function Bc (line 2) | function Bc(){return 2**++jc} class Lc (line 2) | class Lc extends wc{constructor(e,t,r,a){let s=-1;if(super(e,t),Rc(this,... method constructor (line 2) | constructor(e,t,r,a){let s=-1;if(super(e,t),Rc(this,"space",a),"number... function Rc (line 2) | function Rc(e,t,r){r&&(e[t]=r)} function Pc (line 2) | function Pc(e){const t={},r={};for(const[a,n]of Object.entries(e.propert... function Mc (line 2) | function Mc(e,t){return t in e?e[t]:t} function Ic (line 2) | function Ic(e,t){return Mc(e,t.toLowerCase())} function Zc (line 2) | function Zc(e){return"-"+e.toLowerCase()} function Gc (line 2) | function Gc(e){return e.charAt(1).toUpperCase()} function rd (line 2) | function rd(e){return function(t){const r=t&&t.position&&t.position[e]||... function ad (line 2) | function ad(e){return e&&"object"===typeof e?"position"in e||"type"in e?... function nd (line 2) | function nd(e){return ld(e&&e.line)+":"+ld(e&&e.column)} function sd (line 2) | function sd(e){return nd(e&&e.start)+"-"+nd(e&&e.end)} function ld (line 2) | function ld(e){return e&&"number"===typeof e?e:1} class id (line 2) | class id extends Error{constructor(e,t,r){super(),"string"===typeof t&&(... method constructor (line 2) | constructor(e,t,r){super(),"string"===typeof t&&(r=t,t=void 0);let a="... function pd (line 2) | function pd(e,t){if(!t||void 0===t.Fragment)throw new TypeError("Expecte... function hd (line 2) | function hd(e,t,r){return"element"===t.type?function(e,t,r){const a=e.sc... function xd (line 2) | function xd(e,t,r,a){"string"!==typeof r&&r!==e.Fragment&&e.passNode&&(t... function fd (line 2) | function fd(e,t){if(t.length>0){const r=t.length>1?t:t[0];r&&(e.children... function yd (line 2) | function yd(e,t){const r=[];let a=-1;const n=e.passKeys?new Map:ud;for(;... function bd (line 2) | function bd(e,t,r){const a=function(e,t){const r=kc(t);let a=t,n=wc;if(r... function vd (line 2) | function vd(e,t,r){let a;if(r)if(t.includes(".")){const e=t.split(".");l... function Dd (line 2) | function Dd(e,t){const r=new id("Cannot handle MDX estrees without `crea... function kd (line 2) | function kd(e){let t=e.replace(cd,wd);return"ms-"===t.slice(0,3)&&(t="-"... function wd (line 2) | function wd(e){return"-"+e.toLowerCase()} function Nd (line 2) | function Nd(e,t){const r=t||Cd;return Fd(e,"boolean"!==typeof r.includeI... function Fd (line 2) | function Fd(e,t,r){if(function(e){return Boolean(e&&"object"===typeof e)... function Ed (line 2) | function Ed(e,t,r){const a=[];let n=-1;for(;++nn?0:n+t:t>n?... function _d (line 2) | function _d(e,t){return e.length>0?(Ad(e,e.length,0,t),e):t} class Sd (line 2) | class Sd{constructor(e){this.left=e?[...e]:[],this.right=[]}get(e){if(e<... method constructor (line 2) | constructor(e){this.left=e?[...e]:[],this.right=[]} method get (line 2) | get(e){if(e<0||e>=this.left.length+this.right.length)throw new RangeEr... method length (line 2) | get length(){return this.left.length+this.right.length} method shift (line 2) | shift(){return this.setCursor(0),this.right.pop()} method slice (line 2) | slice(e,t){const r=null===t||void 0===t?Number.POSITIVE_INFINITY:t;ret... method splice (line 2) | splice(e,t,r){const a=t||0;this.setCursor(Math.trunc(e));const n=this.... method pop (line 2) | pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()} method push (line 2) | push(e){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(e)} method pushMany (line 2) | pushMany(e){this.setCursor(Number.POSITIVE_INFINITY),Bd(this.left,e)} method unshift (line 2) | unshift(e){this.setCursor(0),this.right.push(e)} method unshiftMany (line 2) | unshiftMany(e){this.setCursor(0),Bd(this.right,e.reverse())} method setCursor (line 2) | setCursor(e){if(!(e===this.left.length||e>this.left.length&&0===this.r... function Bd (line 2) | function Bd(e,t){let r=0;if(t.length<1e4)e.push(...t);else for(;r-1&&e.test(String.f... function Yd (line 2) | function Yd(e,t,r,a){const n=a?a-1:Number.POSITIVE_INFINITY;let s=0;retu... function a (line 2) | function a(t){const a=e.enter("chunkText",{contentType:"text",previous:r... function n (line 2) | function n(t){return null===t?(e.exit("chunkText"),e.exit("paragraph"),v... function i (line 2) | function i(a){if(la;){const a=r[n];t.containerState... function y (line 2) | function y(){a.write([null]),n=void 0,a=void 0,t.containerState._closeFl... function a (line 2) | function a(e){return null===e||Jd(e)?t(e):r(e)} function a (line 2) | function a(t){return null===t?n(t):Jd(t)?e.check(nm,s,n)(t):(e.consume(t... function n (line 2) | function n(r){return e.exit("chunkContent"),e.exit("content"),t(r)} function s (line 2) | function s(t){return e.consume(t),e.exit("chunkContent"),r.next=e.enter(... function n (line 2) | function n(n){if(null===n||Jd(n))return r(n);const s=a.events[a.events.l... function a (line 2) | function a(a){if(null!==a)return e.enter("lineEnding"),e.consume(a),e.ex... function um (line 2) | function um(e){return{resolveAll:cm("text"===e?dm:void 0),tokenize:funct... function cm (line 2) | function cm(e){return function(t,r){let a,n=-1;for(;++n<=t.length;)void ... function dm (line 2) | function dm(e,t){let r=0;for(;++r<=e.length;)if((r===e.length||"lineEndi... function s (line 2) | function s(s){return s===a?(e.enter("thematicBreakSequence"),l(s)):n>=3&... function l (line 2) | function l(t){return t===a?(e.consume(t),n++,l):(e.exit("thematicBreakSe... function n (line 2) | function n(r){return a.containerState.furtherBlankLines=a.containerState... function s (line 2) | function s(r){return a.containerState.furtherBlankLines||!$d(r)?(a.conta... function l (line 2) | function l(n){return a.containerState._closeFlow=!0,a.interrupt=void 0,Y... function i (line 2) | function i(t){return Hd(t)&&++l<10?(e.consume(t),i):(!a.interrupt||l<2)&... function o (line 2) | function o(t){return e.enter("listItemMarker"),e.consume(t),e.exit("list... function u (line 2) | function u(e){return a.containerState.initialBlankLine=!0,s++,d(e)} function c (line 2) | function c(t){return $d(t)?(e.enter("listItemPrefixWhitespace"),e.consum... function d (line 2) | function d(r){return a.containerState.size=s+a.sliceSerialize(e.exit("li... function n (line 2) | function n(a){return e.attempt(xm,t,r)(a)} function n (line 2) | function n(r){return $d(r)?(e.enter("blockQuotePrefixWhitespace"),e.cons... function fm (line 2) | function fm(e,t,r,a,n,s,l,i,o){const u=o||Number.POSITIVE_INFINITY;let c... function ym (line 2) | function ym(e,t,r,a,n,s){const l=this;let i,o=0;return function(t){retur... function bm (line 2) | function bm(e,t,r,a,n,s){let l;return function(t){if(34===t||39===t||40=... function vm (line 2) | function vm(e,t){let r;return function a(n){if(Jd(n))return e.enter("lin... function Dm (line 2) | function Dm(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").... function s (line 2) | function s(t){return n=Dm(a.sliceSerialize(a.events[a.events.length-1][1... function l (line 2) | function l(t){return Kd(t)?vm(e,i)(t):i(t)} function i (line 2) | function i(t){return fm(e,o,r,"definitionDestination","definitionDestina... function o (line 2) | function o(t){return e.attempt(wm,u,u)(t)} function u (line 2) | function u(t){return $d(t)?Yd(e,c,"whitespace")(t):c(t)} function c (line 2) | function c(s){return null===s||Jd(s)?(e.exit("definition"),a.parser.defi... function a (line 2) | function a(t){return bm(e,n,r,"definitionTitle","definitionTitleMarker",... function n (line 2) | function n(t){return $d(t)?Yd(e,s,"whitespace")(t):s(t)} function s (line 2) | function s(e){return null===e||Jd(e)?t(e):r(e)} function n (line 2) | function n(e){const t=a.events[a.events.length-1];return t&&"linePrefix"... function s (line 2) | function s(t){return null===t?i(t):Jd(t)?e.attempt(Cm,s,i)(t):(e.enter("... function l (line 2) | function l(t){return null===t||Jd(t)?(e.exit("codeFlowValue"),s(t)):(e.c... function i (line 2) | function i(r){return e.exit("codeIndented"),t(r)} function n (line 2) | function n(t){return a.parser.lazy[a.now().line]?r(t):Jd(t)?(e.enter("li... function s (line 2) | function s(e){const s=a.events[a.events.length-1];return s&&"linePrefix"... function n (line 2) | function n(t){return 35===t&&a++<6?(e.consume(t),n):null===t||Kd(t)?(e.e... function s (line 2) | function s(r){return 35===r?(e.enter("atxHeadingSequence"),l(r)):null===... function l (line 2) | function l(t){return 35===t?(e.consume(t),l):(e.exit("atxHeadingSequence... function i (line 2) | function i(t){return null===t||35===t||Kd(t)?(e.exit("atxHeadingText"),s... function s (line 2) | function s(t){return t===n?(e.consume(t),s):(e.exit("setextHeadingLineSe... function l (line 2) | function l(a){return null===a||Jd(a)?(e.exit("setextHeadingLine"),t(a)):... function u (line 2) | function u(i){return 33===i?(e.consume(i),c):47===i?(e.consume(i),s=!0,g... function c (line 2) | function c(s){return 45===s?(e.consume(s),n=2,d):91===s?(e.consume(s),n=... function d (line 2) | function d(n){return 45===n?(e.consume(n),a.interrupt?t:L):r(n)} function m (line 2) | function m(n){const s="CDATA[";return n===s.charCodeAt(i++)?(e.consume(n... function g (line 2) | function g(t){return Id(t)?(e.consume(t),l=String.fromCharCode(t),p):r(t)} function p (line 2) | function p(i){if(null===i||47===i||62===i||Kd(i)){const o=47===i,u=l.toL... function h (line 2) | function h(n){return 62===n?(e.consume(n),a.interrupt?t:N):r(n)} function x (line 2) | function x(t){return $d(t)?(e.consume(t),x):j(t)} function f (line 2) | function f(t){return 47===t?(e.consume(t),j):58===t||95===t||Id(t)?(e.co... function y (line 2) | function y(t){return 45===t||46===t||58===t||95===t||zd(t)?(e.consume(t)... function b (line 2) | function b(t){return 61===t?(e.consume(t),v):$d(t)?(e.consume(t),b):f(t)} function v (line 2) | function v(t){return null===t||60===t||61===t||62===t||96===t?r(t):34===... function D (line 2) | function D(t){return t===o?(e.consume(t),o=null,w):null===t||Jd(t)?r(t):... function k (line 2) | function k(t){return null===t||34===t||39===t||47===t||60===t||61===t||6... function w (line 2) | function w(e){return 47===e||62===e||$d(e)?f(e):r(e)} function j (line 2) | function j(t){return 62===t?(e.consume(t),C):r(t)} function C (line 2) | function C(t){return null===t||Jd(t)?N(t):$d(t)?(e.consume(t),C):r(t)} function N (line 2) | function N(t){return 45===t&&2===n?(e.consume(t),_):60===t&&1===n?(e.con... function F (line 2) | function F(t){return e.check(Bm,E,P)(t)} function E (line 2) | function E(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEndi... function A (line 2) | function A(t){return null===t||Jd(t)?F(t):(e.enter("htmlFlowData"),N(t))} function _ (line 2) | function _(t){return 45===t?(e.consume(t),L):N(t)} function S (line 2) | function S(t){return 47===t?(e.consume(t),l="",B):N(t)} function B (line 2) | function B(t){if(62===t){const r=l.toLowerCase();return Am.includes(r)?(... function T (line 2) | function T(t){return 93===t?(e.consume(t),L):N(t)} function L (line 2) | function L(t){return 62===t?(e.consume(t),R):45===t&&2===n?(e.consume(t)... function R (line 2) | function R(t){return null===t||Jd(t)?(e.exit("htmlFlowData"),P(t)):(e.co... function P (line 2) | function P(r){return e.exit("htmlFlow"),t(r)} function n (line 2) | function n(e){return a.parser.lazy[a.now().line]?r(e):t(e)} function n (line 2) | function n(e){return a.parser.lazy[a.now().line]?r(e):t(e)} function l (line 2) | function l(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEndi... function o (line 2) | function o(t){return e.enter("codeFencedFence"),$d(t)?Yd(e,u,"linePrefix... function u (line 2) | function u(t){return t===s?(e.enter("codeFencedFenceSequence"),c(t)):r(t)} function c (line 2) | function c(t){return t===s?(n++,e.consume(t),c):n>=i?(e.exit("codeFenced... function d (line 2) | function d(a){return null===a||Jd(a)?(e.exit("codeFencedFence"),t(a)):r(a)} function o (line 2) | function o(t){return t===s?(i++,e.consume(t),o):i<3?r(t):(e.exit("codeFe... function u (line 2) | function u(r){return null===r||Jd(r)?(e.exit("codeFencedFence"),a.interr... function c (line 2) | function c(t){return null===t||Jd(t)?(e.exit("chunkString"),e.exit("code... function d (line 2) | function d(t){return null===t||Jd(t)?u(t):(e.enter("codeFencedFenceMeta"... function m (line 2) | function m(t){return null===t||Jd(t)?(e.exit("chunkString"),e.exit("code... function g (line 2) | function g(t){return e.attempt(n,y,p)(t)} function p (line 2) | function p(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEndi... function h (line 2) | function h(t){return l>0&&$d(t)?Yd(e,x,"linePrefix",l+1)(t):x(t)} function x (line 2) | function x(t){return null===t||Jd(t)?e.check(Tm,g,y)(t):(e.enter("codeFl... function f (line 2) | function f(t){return null===t||Jd(t)?(e.exit("codeFlowValue"),x(t)):(e.c... function y (line 2) | function y(r){return e.exit("codeFenced"),t(r)} function Pm (line 2) | function Pm(e){const t="&"+e+";";Rm.innerHTML=t;const r=Rm.textContent;r... function i (line 2) | function i(t){return 35===t?(e.enter("characterReferenceMarkerNumeric"),... function o (line 2) | function o(t){return 88===t||120===t?(e.enter("characterReferenceMarkerH... function u (line 2) | function u(i){if(59===i&&l){const n=e.exit("characterReferenceValue");re... function a (line 2) | function a(a){return qd(a)?(e.enter("characterEscapeValue"),e.consume(a)... function zm (line 2) | function zm(e,t,r){const a=[];let n=-1;for(;++n13&&... function gg (line 2) | function gg(e,t,r){if(t)return t;if(35===r.charCodeAt(0)){const e=r.char... function hg (line 2) | function hg(e,t,r){return"string"!==typeof t&&(r=t,t=void 0),function(e)... function xg (line 2) | function xg(e){return{line:e.line,column:e.column,offset:e.offset}} function fg (line 2) | function fg(e,t){let r=-1;for(;++r1&&r.pu... function Bg (line 2) | function Bg(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")} function a (line 2) | function a(){let e=-1;for(var r=arguments.length,a=new Array(r),n=0;n"+(r?"":" ")+e} function bh (line 2) | function bh(e,t){return vh(e,t.inConstruct,!0)&&!vh(e,t.notInConstruct,!1)} function vh (line 2) | function vh(e,t,r){if("string"===typeof t&&(t=[t]),!t||0===t.length)retu... function Dh (line 2) | function Dh(e,t,r,a){let n=-1;for(;++ne+t.... function Ff (line 2) | function Ff(e){var t,r;if(null!==(t=e.sync_metadata)&&void 0!==t&&t.is_f... function _f (line 2) | function _f(e){if(!e||0===e.length)return 0;const t=e.reduce((e,t)=>e+t.... function Sf (line 2) | function Sf(e){return[...e].sort((e,t)=>{const r=_f(t.rating_details)-_f... function Bf (line 2) | function Bf(e,t){const r=t.toLowerCase();return e.name.toLowerCase().inc... function Tf (line 2) | function Tf(e,t){const r=1!==e?"s":"";return"".concat(e," ").concat(t).c... function Lf (line 2) | function Lf(e,t,r){const a=[],n=[{total:e.servers,match:t.servers,label:... function Rf (line 2) | function Rf(e,t,r,a,n,s,l){const i=e.filter(e=>e.enabled),o=t.filter(e=>... function Uf (line 2) | function Uf(e,t){let{title:r,titleId:a}=e,n=va(e,zf);return i.createElem... function Wf (line 2) | function Wf(e,t){let{title:r,titleId:a}=e,n=va(e,Hf);return i.createElem... function ty (line 2) | function ty(e,t){let{title:r,titleId:a}=e,n=va(e,ey);return i.createElem... function ny (line 2) | function ny(e,t){let{title:r,titleId:a}=e,n=va(e,ay);return i.createElem... function iy (line 2) | function iy(e,t){let{title:r,titleId:a}=e,n=va(e,ly);return i.createElem... function cy (line 2) | function cy(e,t){let{title:r,titleId:a}=e,n=va(e,uy);return i.createElem... function gy (line 2) | function gy(e,t){let{title:r,titleId:a}=e,n=va(e,my);return i.createElem... function xy (line 2) | function xy(e,t){let{title:r,titleId:a}=e,n=va(e,hy);return i.createElem... function yy (line 2) | function yy(){const[e,t]=(0,i.useState)([]),[r,a]=(0,i.useState)(!0),[n,... function by (line 2) | function by(e){switch(e){case"healthy":return"bg-green-500";case"warning... function vy (line 2) | function vy(e){if(!e)return"Never";const t=new Date(e),r=(new Date).getT... function Ny (line 2) | function Ny(e,t){if(!t)return e;const r=e.toLowerCase().indexOf(t.toLowe... function Sy (line 2) | function Sy(e,t){const r=e.split(/\s+/);return r.length<=t?e:r.slice(0,t... function zy (line 2) | function zy(e,t){let{title:r,titleId:a}=e,n=va(e,Iy);return i.createElem... function Hy (line 2) | function Hy(e,t){let{title:r,titleId:a}=e,n=va(e,Vy);return i.createElem... function Jy (line 2) | function Jy(e,t){let{title:r,titleId:a}=e,n=va(e,qy);return i.createElem... function ab (line 2) | function ab(e){const t=new Date(e+"T00:00:00"),r=rb[t.getDay()],a=String... function hb (line 2) | function hb(e,t){let{title:r,titleId:a}=e,n=va(e,pb);return i.createElem... function fb (line 2) | function fb(){const[e,t]=(0,i.useState)([]),[r,a]=(0,i.useState)(!0),[n,... function yb (line 2) | function yb(e){const[t,r]=(0,i.useState)([]),[a,n]=(0,i.useState)(!0),[s... function bb (line 2) | async function bb(e){await ma.delete("/api/management/iam/users/".concat... function vb (line 2) | async function vb(e,t){return(await ma.patch("/api/management/iam/users/... function Fb (line 2) | function Fb(e,t,r,a,n,s,l){const i={scope_name:e};t&&(i.description=t);c... function _b (line 2) | function _b(e,t){let{title:r,titleId:a}=e,n=va(e,Ab);return i.createElem... function Tb (line 2) | function Tb(e,t){let{title:r,titleId:a}=e,n=va(e,Bb);return i.createElem... function Mb (line 2) | function Mb(e,t){let{title:r,titleId:a}=e,n=va(e,Ob);return i.createElem... function Vb (line 2) | function Vb(e,t){let{title:r,titleId:a}=e,n=va(e,Ub);return i.createElem... function $b (line 2) | function $b(){return{registry_id:"",aws_account_id:"",aws_region:"",assu... function Gb (line 2) | function Gb(e){if(!e)return"Never";const t=new Date(e),r=(new Date).getT... function Yb (line 2) | function Yb(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments... function Xb (line 2) | function Xb(e,t,r,a,n,s,l){return(0,ga.jsxs)("div",{className:"border ro... function ev (line 2) | function ev(e,t,r,a,n,s,l){return(0,ga.jsxs)("div",{className:"border ro... function tv (line 2) | function tv(e,t,r,a,n,s,l){return(0,ga.jsxs)("div",{className:"border ro... function rv (line 2) | function rv(e){return(0,ga.jsx)("svg",Kt(Kt({xmlns:"http://www.w3.org/20... function nv (line 2) | function nv(e){return!!e&&!0===e.is_admin} FILE: registry/utils/agent_validator.py class ValidationResult (line 33) | class ValidationResult(BaseModel): function _validate_agent_url (line 41) | def _validate_agent_url( function _validate_skills (line 73) | def _validate_skills( function _validate_security_schemes (line 106) | def _validate_security_schemes( function _validate_tags (line 166) | def _validate_tags( function _check_endpoint_reachability (line 196) | def _check_endpoint_reachability( function _validate_agent_card (line 233) | def _validate_agent_card( function validate_agent_card (line 292) | def validate_agent_card( class AgentValidator (line 335) | class AgentValidator: method validate_agent_card (line 338) | async def validate_agent_card( FILE: registry/utils/auth0_manager.py function _get_management_api_token (line 30) | async def _get_management_api_token() -> str: function _get_api_headers (line 72) | async def _get_api_headers() -> dict[str, str]: function _get_base_url (line 82) | def _get_base_url() -> str: function _check_rate_limit (line 88) | def _check_rate_limit(response: httpx.Response) -> None: function list_auth0_users (line 110) | async def list_auth0_users( function create_auth0_human_user (line 174) | async def create_auth0_human_user( function delete_auth0_user (line 251) | async def delete_auth0_user(username_or_id: str) -> bool: function list_auth0_groups (line 296) | async def list_auth0_groups() -> list[dict[str, Any]]: function create_auth0_group (line 335) | async def create_auth0_group( function delete_auth0_group (line 373) | async def delete_auth0_group(group_name_or_id: str) -> bool: function create_auth0_service_account (line 420) | async def create_auth0_service_account( function update_auth0_user_groups (line 475) | async def update_auth0_user_groups( function update_auth0_group (line 550) | async def update_auth0_group( FILE: registry/utils/credential_encryption.py function _derive_fernet_key (line 33) | def _derive_fernet_key( function _get_fernet (line 53) | def _get_fernet() -> Fernet | None: function encrypt_credential (line 78) | def encrypt_credential( function decrypt_credential (line 103) | def decrypt_credential( function encrypt_credential_in_server_dict (line 134) | def encrypt_credential_in_server_dict( function strip_credentials_from_dict (line 170) | def strip_credentials_from_dict( function _migrate_auth_type_to_auth_scheme (line 186) | def _migrate_auth_type_to_auth_scheme( FILE: registry/utils/entra_manager.py class EntraAdminError (line 35) | class EntraAdminError(RuntimeError): function _is_guid (line 39) | def _is_guid(value: str) -> bool: function _generate_temp_password (line 47) | def _generate_temp_password() -> str: function _auth_headers (line 56) | def _auth_headers(token: str) -> dict[str, str]: function _build_prefix_odata_filter (line 61) | def _build_prefix_odata_filter( function _get_entra_admin_token (line 80) | async def _get_entra_admin_token() -> str: function _get_default_domain (line 136) | async def _get_default_domain(token: str) -> str: function _find_group_id_by_name (line 160) | async def _find_group_id_by_name( function _find_user_id (line 179) | async def _find_user_id( function _get_user_groups (line 225) | async def _get_user_groups(client: httpx.AsyncClient, token: str, user_i... function _add_user_to_group_by_name (line 250) | async def _add_user_to_group_by_name( function _remove_user_from_group_by_name (line 273) | async def _remove_user_from_group_by_name( function _add_service_principal_to_group (line 294) | async def _add_service_principal_to_group( function list_entra_users (line 375) | async def list_entra_users( function create_entra_human_user (line 434) | async def create_entra_human_user( function delete_entra_user (line 506) | async def delete_entra_user(username_or_id: str) -> bool: function list_entra_groups (line 536) | async def list_entra_groups() -> list[dict[str, Any]]: function create_entra_group (line 593) | async def create_entra_group(group_name: str, description: str = "") -> ... function delete_entra_group (line 639) | async def delete_entra_group(group_name_or_id: str) -> bool: function update_entra_group (line 673) | async def update_entra_group( function create_service_principal_client (line 742) | async def create_service_principal_client( function update_entra_user_groups (line 901) | async def update_entra_user_groups( FILE: registry/utils/federation_encryption.py function _get_fernet (line 28) | def _get_fernet() -> Fernet | None: function encrypt_federation_token (line 49) | def encrypt_federation_token( function decrypt_federation_token (line 76) | def decrypt_federation_token( function encrypt_token_in_peer_dict (line 109) | def encrypt_token_in_peer_dict( function decrypt_token_in_peer_dict (line 146) | def decrypt_token_in_peer_dict( FILE: registry/utils/iam_manager.py function _filter_groups_by_prefix (line 44) | def _filter_groups_by_prefix( class IAMManager (line 67) | class IAMManager(Protocol): method list_users (line 70) | async def list_users( method create_human_user (line 86) | async def create_human_user( method delete_user (line 111) | async def delete_user(self, username: str) -> bool: method list_groups (line 123) | async def list_groups(self) -> list[dict[str, Any]]: method create_group (line 132) | async def create_group(self, group_name: str, description: str = "") -... method delete_group (line 145) | async def delete_group(self, group_name: str) -> bool: method group_exists (line 157) | async def group_exists(self, group_name: str) -> bool: method create_service_account (line 169) | async def create_service_account( method update_user_groups (line 185) | async def update_user_groups(self, username: str, groups: list[str]) -... method update_group (line 198) | async def update_group( class KeycloakIAMManager (line 216) | class KeycloakIAMManager: method list_users (line 219) | async def list_users( method create_human_user (line 229) | async def create_human_user( method delete_user (line 250) | async def delete_user(self, username: str) -> bool: method list_groups (line 256) | async def list_groups(self) -> list[dict[str, Any]]: method create_group (line 263) | async def create_group(self, group_name: str, description: str = "") -... method delete_group (line 269) | async def delete_group(self, group_name: str) -> bool: method group_exists (line 275) | async def group_exists(self, group_name: str) -> bool: method create_service_account (line 281) | async def create_service_account( method update_user_groups (line 291) | async def update_user_groups(self, username: str, groups: list[str]) -... method update_group (line 297) | async def update_group( class EntraIAMManager (line 308) | class EntraIAMManager: method list_users (line 311) | async def list_users( method create_human_user (line 321) | async def create_human_user( method delete_user (line 342) | async def delete_user(self, username: str) -> bool: method list_groups (line 348) | async def list_groups(self) -> list[dict[str, Any]]: method create_group (line 354) | async def create_group(self, group_name: str, description: str = "") -... method delete_group (line 360) | async def delete_group(self, group_name: str) -> bool: method group_exists (line 366) | async def group_exists(self, group_name: str) -> bool: method create_service_account (line 376) | async def create_service_account( method update_user_groups (line 386) | async def update_user_groups(self, username: str, groups: list[str]) -... method update_group (line 392) | async def update_group( class OktaIAMManager (line 403) | class OktaIAMManager: method list_users (line 406) | async def list_users( method create_human_user (line 416) | async def create_human_user( method delete_user (line 437) | async def delete_user(self, username: str) -> bool: method list_groups (line 443) | async def list_groups(self) -> list[dict[str, Any]]: method create_group (line 450) | async def create_group(self, group_name: str, description: str = "") -... method delete_group (line 456) | async def delete_group(self, group_name: str) -> bool: method group_exists (line 462) | async def group_exists(self, group_name: str) -> bool: method create_service_account (line 472) | async def create_service_account( method update_user_groups (line 482) | async def update_user_groups(self, username: str, groups: list[str]) -... method update_group (line 488) | async def update_group( class Auth0IAMManager (line 499) | class Auth0IAMManager: method list_users (line 502) | async def list_users( method create_human_user (line 512) | async def create_human_user( method delete_user (line 533) | async def delete_user(self, username: str) -> bool: method list_groups (line 539) | async def list_groups(self) -> list[dict[str, Any]]: method create_group (line 546) | async def create_group(self, group_name: str, description: str = "") -... method delete_group (line 552) | async def delete_group(self, group_name: str) -> bool: method group_exists (line 558) | async def group_exists(self, group_name: str) -> bool: method create_service_account (line 568) | async def create_service_account( method update_user_groups (line 578) | async def update_user_groups(self, username: str, groups: list[str]) -... method update_group (line 584) | async def update_group( function get_iam_manager (line 595) | def get_iam_manager() -> IAMManager: FILE: registry/utils/keycloak_manager.py class KeycloakAdminError (line 23) | class KeycloakAdminError(RuntimeError): function _get_keycloak_admin_token (line 27) | async def _get_keycloak_admin_token() -> str: function _auth_headers (line 73) | def _auth_headers(token: str, content_type: str | None = "application/js... function _get_group_name_map (line 81) | async def _get_group_name_map( function _find_client_uuid (line 93) | async def _find_client_uuid( function _extract_resource_id (line 112) | def _extract_resource_id(location_header: str | None) -> str | None: function create_keycloak_group (line 119) | async def create_keycloak_group(group_name: str, description: str = "") ... function delete_keycloak_group (line 174) | async def delete_keycloak_group(group_name: str) -> bool: function get_keycloak_group (line 228) | async def get_keycloak_group(group_name: str) -> dict[str, Any]: function list_keycloak_groups (line 274) | async def list_keycloak_groups() -> list[dict[str, Any]]: function group_exists_in_keycloak (line 313) | async def group_exists_in_keycloak(group_name: str) -> bool: function update_keycloak_group (line 330) | async def update_keycloak_group(group_name: str, description: str) -> di... function _normalize_group_list (line 397) | def _normalize_group_list(groups: list[str]) -> list[str]: function _assign_user_to_groups_by_name (line 405) | async def _assign_user_to_groups_by_name( function _remove_user_from_groups_by_name (line 434) | async def _remove_user_from_groups_by_name( function _get_user_groups (line 464) | async def _get_user_groups( function _get_user_by_username (line 477) | async def _get_user_by_username( function _get_user_by_id (line 497) | async def _get_user_by_id( function _ensure_client (line 509) | async def _ensure_client( function _ensure_groups_mapper (line 552) | async def _ensure_groups_mapper( function _get_service_account_user_id (line 594) | async def _get_service_account_user_id( function _get_client_secret_value (line 610) | async def _get_client_secret_value( function _set_initial_password (line 628) | async def _set_initial_password( function create_service_account_client (line 650) | async def create_service_account_client( function create_human_user_account (line 687) | async def create_human_user_account( function delete_keycloak_user (line 743) | async def delete_keycloak_user(username: str) -> bool: function list_keycloak_users (line 787) | async def list_keycloak_users( function update_keycloak_user_groups (line 879) | async def update_keycloak_user_groups( FILE: registry/utils/logging_setup.py function setup_logging (line 16) | def setup_logging( FILE: registry/utils/metadata.py function flatten_metadata_to_text (line 6) | def flatten_metadata_to_text(metadata: dict[str, Any]) -> str: FILE: registry/utils/mongodb_connection.py function build_connection_string (line 11) | def build_connection_string() -> str: function build_tls_kwargs (line 52) | def build_tls_kwargs() -> dict[str, Any]: function build_client_options (line 64) | def build_client_options() -> dict[str, Any]: FILE: registry/utils/mongodb_log_handler.py class MongoDBLogHandler (line 33) | class MongoDBLogHandler(logging.Handler): method __init__ (line 43) | def __init__( method _ensure_connection (line 81) | def _ensure_connection(self) -> bool: method _is_excluded (line 125) | def _is_excluded(self, logger_name: str) -> bool: method flush_failure_count (line 132) | def flush_failure_count(self) -> int: method emit (line 135) | def emit(self, record: logging.LogRecord) -> None: method _flush (line 167) | def _flush(self) -> None: method _periodic_flush (line 189) | def _periodic_flush(self) -> None: method close (line 198) | def close(self) -> None: FILE: registry/utils/okta_manager.py function _get_api_headers (line 25) | def _get_api_headers() -> dict[str, str]: function _get_base_url (line 39) | def _get_base_url() -> str: function _check_rate_limit (line 45) | def _check_rate_limit(response: httpx.Response) -> None: function list_okta_users (line 67) | async def list_okta_users( function create_okta_human_user (line 132) | async def create_okta_human_user( function delete_okta_user (line 211) | async def delete_okta_user(username_or_id: str) -> bool: function list_okta_groups (line 257) | async def list_okta_groups() -> list[dict[str, Any]]: function create_okta_group (line 295) | async def create_okta_group( function delete_okta_group (line 335) | async def delete_okta_group(group_name_or_id: str) -> bool: function create_okta_service_account (line 384) | async def create_okta_service_account( function update_okta_user_groups (line 466) | async def update_okta_user_groups( function update_okta_group (line 541) | async def update_okta_group( FILE: registry/utils/path_utils.py function normalize_skill_path (line 10) | def normalize_skill_path( function extract_skill_name (line 36) | def extract_skill_name( function validate_skill_name (line 51) | def validate_skill_name( FILE: registry/utils/request_utils.py function get_client_ip (line 15) | def get_client_ip(request: Request) -> str: FILE: registry/utils/scopes_manager.py function update_server_scopes (line 46) | async def update_server_scopes( function remove_server_scopes (line 71) | async def remove_server_scopes( function add_server_to_groups (line 92) | async def add_server_to_groups( function remove_server_from_groups (line 115) | async def remove_server_from_groups( function create_group_in_scopes (line 138) | async def create_group_in_scopes( function delete_group_from_scopes (line 161) | async def delete_group_from_scopes( function list_groups_from_scopes (line 184) | async def list_groups_from_scopes() -> dict[str, Any]: function group_exists_in_scopes (line 200) | async def group_exists_in_scopes( function trigger_auth_server_reload (line 221) | async def trigger_auth_server_reload() -> bool: FILE: registry/utils/scopes_manager_old.py function _get_scopes_file_path (line 15) | def _get_scopes_file_path() -> Path: function _read_scopes_file (line 21) | def _read_scopes_file() -> dict[str, Any]: function _write_scopes_file (line 33) | def _write_scopes_file(scopes_data: dict[str, Any]) -> None: function _create_server_entry (line 73) | def _create_server_entry(server_path: str, tools: list[str]) -> dict[str... function add_server_to_scopes (line 93) | async def add_server_to_scopes(server_path: str, server_name: str, tools... function remove_server_from_scopes (line 151) | async def remove_server_from_scopes(server_path: str) -> bool: function trigger_auth_server_reload (line 202) | async def trigger_auth_server_reload() -> bool: function update_server_scopes (line 241) | async def update_server_scopes(server_path: str, server_name: str, tools... function remove_server_scopes (line 266) | async def remove_server_scopes(server_path: str) -> bool: function add_server_to_groups (line 289) | async def add_server_to_groups(server_path: str, group_names: list[str])... function remove_server_from_groups (line 388) | async def remove_server_from_groups(server_path: str, group_names: list[... function create_group_in_scopes (line 466) | async def create_group_in_scopes(group_name: str, description: str = "")... function delete_group_from_scopes (line 528) | async def delete_group_from_scopes(group_name: str, remove_from_mappings... function list_groups_from_scopes (line 584) | async def list_groups_from_scopes() -> dict[str, Any]: function group_exists_in_scopes (line 631) | async def group_exists_in_scopes(group_name: str) -> bool: FILE: registry/utils/url_utils.py function _is_github_hostname (line 20) | def _is_github_hostname( function _is_raw_github_url (line 45) | def _is_raw_github_url( function _map_to_base_hostname (line 70) | def _map_to_base_hostname( function _translate_github_url_to_raw (line 100) | def _translate_github_url_to_raw( function translate_skill_url (line 153) | def translate_skill_url( function extract_repository_url (line 196) | def extract_repository_url( function derive_resource_url (line 257) | def derive_resource_url(skill_md_url: str, resource_path: str) -> str: FILE: registry/utils/visibility.py function _normalize_visibility (line 17) | def _normalize_visibility( function validate_visibility (line 38) | def validate_visibility( FILE: registry/version.py function _get_git_version (line 18) | def _get_git_version() -> str: function get_version (line 65) | def get_version() -> str: FILE: scripts/backfill_agent_fields.py function _backfill_supported_protocol (line 19) | def _backfill_supported_protocol( function _backfill_trust_level (line 30) | def _backfill_trust_level( function _backfill_visibility (line 41) | def _backfill_visibility( function backfill_agent_fields (line 59) | def backfill_agent_fields() -> None: FILE: scripts/debug-scopes.py function debug_scopes (line 11) | async def debug_scopes(): FILE: scripts/fix_auth_tests.py function fix_test_file (line 11) | def fix_test_file(): FILE: scripts/init-documentdb-indexes.py function _get_documentdb_connection_string (line 58) | async def _get_documentdb_connection_string( function _create_vector_index (line 126) | async def _create_vector_index( function _create_embeddings_indexes (line 225) | async def _create_embeddings_indexes( function _create_servers_indexes (line 263) | async def _create_servers_indexes( function _create_agents_indexes (line 299) | async def _create_agents_indexes( function _create_scopes_indexes (line 335) | async def _create_scopes_indexes( function _load_default_scopes (line 368) | async def _load_default_scopes( function _create_security_scans_indexes (line 422) | async def _create_security_scans_indexes( function _create_federation_config_indexes (line 458) | async def _create_federation_config_indexes( function _create_audit_events_indexes (line 468) | async def _create_audit_events_indexes( function _print_collection_summary (line 591) | async def _print_collection_summary( function _initialize_collections (line 644) | async def _initialize_collections( function main (line 700) | async def main(): FILE: scripts/init-mongodb-ce.py function _get_config_from_env (line 45) | def _get_config_from_env() -> dict: function _initialize_replica_set (line 58) | def _initialize_replica_set( function _create_standard_indexes (line 113) | async def _create_standard_indexes( function _load_default_scopes (line 217) | async def _load_default_scopes( function _initialize_mongodb_ce (line 290) | async def _initialize_mongodb_ce() -> None: function main (line 397) | def main() -> None: FILE: scripts/load-scopes.py function _get_documentdb_connection_string (line 28) | async def _get_documentdb_connection_string( function load_scopes_from_yaml (line 100) | async def load_scopes_from_yaml( function main (line 210) | async def main(): FILE: scripts/manage-documentdb.py function _get_documentdb_connection_string (line 47) | async def _get_documentdb_connection_string( function _get_client (line 119) | async def _get_client( function list_collections (line 151) | async def list_collections( function inspect_collection (line 215) | async def inspect_collection( function count_documents (line 293) | async def count_documents( function search_documents (line 329) | async def search_documents( function sample_document (line 373) | async def sample_document( function query_documents (line 416) | async def query_documents( function drop_collection (line 468) | async def drop_collection( function _get_schema (line 526) | def _get_schema(doc: dict[str, Any], prefix: str = "") -> dict[str, str]: function main (line 546) | async def main(): FILE: scripts/migrate-file-to-mongodb.py function _get_config_from_env (line 39) | def _get_config_from_env( function _get_mongodb_client (line 60) | async def _get_mongodb_client( function _load_server_json (line 98) | def _load_server_json(filepath: Path) -> dict[str, Any] | None: function _load_agent_json (line 142) | def _load_agent_json(filepath: Path) -> dict[str, Any] | None: function _migrate_servers (line 192) | async def _migrate_servers( function _migrate_agents (line 255) | async def _migrate_agents( function main (line 310) | async def main(): FILE: scripts/migrate-servers-add-is-active.py function _parse_args (line 49) | def _parse_args() -> argparse.Namespace: function _migrate_documentdb (line 121) | async def _migrate_documentdb(args: argparse.Namespace, dry_run: bool) -... function _migrate_file_storage (line 217) | async def _migrate_file_storage(args: argparse.Namespace, dry_run: bool)... function main (line 288) | async def main() -> None: FILE: scripts/test.py class Colors (line 26) | class Colors: function _print_colored (line 55) | def _print_colored(message: str, color: str = Colors.RESET) -> None: function _print_header (line 65) | def _print_header(message: str) -> None: function _check_dependency (line 76) | def _check_dependency(module_name: str) -> bool: function _check_dependencies (line 92) | def _check_dependencies() -> bool: function _run_pytest (line 118) | def _run_pytest(args: list[str], description: str, workers: str | None =... function _run_check (line 171) | def _run_check() -> int: function _run_unit (line 182) | def _run_unit(workers: str | None = None) -> int: function _run_integration (line 195) | def _run_integration(workers: str | None = None) -> int: function _run_e2e (line 209) | def _run_e2e(workers: str | None = None) -> int: function _run_fast (line 222) | def _run_fast(workers: str | None = None) -> int: function _run_full (line 238) | def _run_full(workers: str | None = None) -> int: function _run_coverage (line 252) | def _run_coverage(workers: str | None = None) -> int: function _run_domain (line 271) | def _run_domain(domain: str, workers: str | None = None) -> int: function main (line 286) | def main() -> int: FILE: servers/currenttime/server.py function parse_arguments (line 23) | def parse_arguments(): function system_prompt_for_agent (line 59) | def system_prompt_for_agent(location: str) -> str: function get_current_time_in_timezone (line 84) | def get_current_time_in_timezone(timezone_name): function current_time_by_timezone (line 103) | def current_time_by_timezone( function get_config (line 134) | def get_config() -> str: function main (line 139) | def main(): FILE: servers/example-server/server.py function _parse_arguments (line 22) | def _parse_arguments(): function system_prompt_for_agent (line 61) | def system_prompt_for_agent(task: str) -> str: function _process_message (line 89) | def _process_message(message: str) -> dict[str, Any]: function example_tool (line 110) | def example_tool( function echo_tool (line 139) | def echo_tool( function status_tool (line 180) | def status_tool() -> dict[str, Any]: function get_config (line 208) | def get_config() -> str: function main (line 220) | def main(): FILE: servers/fininfo/client.py function run (line 28) | async def run(server_url, args): FILE: servers/fininfo/encrypt_secrets.py function main (line 26) | def main(): FILE: servers/fininfo/secrets_manager.py class SecretsManager (line 27) | class SecretsManager: method __init__ (line 38) | def __init__(self, secrets_file_path: str = "/app/fininfo/.keys.yml"): method _get_encryption_key (line 53) | def _get_encryption_key(self) -> bytes | None: method _decrypt_file_content (line 70) | def _decrypt_file_content(self, encrypted_content: bytes) -> str: method load_secrets (line 97) | def load_secrets(self) -> None: method reload_secrets (line 176) | def reload_secrets(self) -> None: method get_api_key (line 193) | def get_api_key(self, client_id: str) -> str | None: method has_client (line 225) | def has_client(self, client_id: str) -> bool: method get_all_client_ids (line 237) | def get_all_client_ids(self) -> list: method encrypt_secrets_file (line 250) | def encrypt_secrets_file(self, input_file: str = None, output_file: st... method get_stats (line 304) | def get_stats(self) -> dict[str, any]: FILE: servers/fininfo/server.py class Constants (line 40) | class Constants(BaseModel): class Config (line 50) | class Config: function parse_arguments (line 54) | def parse_arguments(): function get_api_key_for_request (line 83) | def get_api_key_for_request() -> str: function get_http_headers (line 136) | async def get_http_headers(ctx: Context = None) -> dict[str, Any]: function print_all_http_headers (line 249) | async def print_all_http_headers(ctx: Context = None) -> str: function _fetch_stock_data (line 323) | async def _fetch_stock_data( function get_stock_aggregates (line 424) | async def get_stock_aggregates( function print_stock_data (line 481) | async def print_stock_data( function get_config (line 607) | def get_config() -> str: function main (line 612) | def main(): FILE: servers/mcpgw/models.py class ServerInfo (line 10) | class ServerInfo(BaseModel): class AgentInfo (line 25) | class AgentInfo(BaseModel): class SkillInfo (line 34) | class SkillInfo(BaseModel): class ToolSearchResult (line 48) | class ToolSearchResult(BaseModel): class RegistryStats (line 58) | class RegistryStats(BaseModel): class Config (line 64) | class Config: class ErrorResponse (line 68) | class ErrorResponse(BaseModel): FILE: servers/mcpgw/server.py class _M2MTokenManager (line 51) | class _M2MTokenManager: method __init__ (line 54) | def __init__(self, token_url: str, client_id: str, client_secret: str)... method get_token (line 61) | async def get_token(self) -> str: function _redirect_protected_resource (line 127) | async def _redirect_protected_resource(_): # noqa: ANN001 function _validate_top_n (line 134) | def _validate_top_n(top_n: int) -> int: function _validate_query (line 151) | def _validate_query(query: str) -> str: function _extract_bearer_token (line 172) | def _extract_bearer_token(ctx: Context | None) -> str: function _get_registry_headers (line 199) | async def _get_registry_headers(ctx: Context | None) -> dict[str, str]: function list_services (line 214) | async def list_services(ctx: Context | None = None) -> dict[str, Any]: function list_agents (line 280) | async def list_agents(ctx: Context | None = None) -> dict[str, Any]: function list_skills (line 333) | async def list_skills(ctx: Context | None = None) -> dict[str, Any]: function get_skill_content (line 387) | async def get_skill_content( function intelligent_tool_finder (line 459) | async def intelligent_tool_finder( function healthcheck (line 553) | async def healthcheck(ctx: Context | None = None) -> dict[str, Any]: FILE: servers/realserverfaketools/server.py function secure_uniform (line 27) | def secure_uniform(min_val, max_val, precision=2): function secure_random (line 33) | def secure_random(): function secure_choice (line 38) | def secure_choice(sequence): function secure_sample (line 43) | def secure_sample(population, k): class Constants (line 53) | class Constants(BaseModel): class Config (line 61) | class Config: function parse_arguments (line 65) | def parse_arguments(): class GeoCoordinates (line 101) | class GeoCoordinates(BaseModel): class UserProfile (line 107) | class UserProfile(BaseModel): class AnalysisOptions (line 114) | class AnalysisOptions(BaseModel): function system_prompt_for_agent (line 121) | def system_prompt_for_agent(task_description: str) -> str: function quantum_flux_analyzer (line 144) | def quantum_flux_analyzer( function neural_pattern_synthesizer (line 192) | def neural_pattern_synthesizer( function hyper_dimensional_mapper (line 251) | def hyper_dimensional_mapper( function temporal_anomaly_detector (line 306) | def temporal_anomaly_detector( function user_profile_analyzer (line 369) | def user_profile_analyzer( function synthetic_data_generator (line 434) | def synthetic_data_generator( function get_config (line 488) | def get_config() -> str: function get_tools_documentation (line 510) | def get_tools_documentation() -> str: function main (line 599) | def main(): FILE: terraform/aws-ecs/lambda/rotate-documentdb/index.py function lambda_handler (line 33) | def lambda_handler(event: dict, context: dict) -> dict: function _create_secret (line 77) | def _create_secret(arn: str, token: str) -> None: function _set_secret (line 114) | def _set_secret(arn: str, token: str) -> None: function _test_secret (line 158) | def _test_secret(arn: str, token: str) -> None: function _finish_secret (line 209) | def _finish_secret(arn: str, token: str) -> None: FILE: terraform/aws-ecs/lambda/rotate-rds/index.py function lambda_handler (line 33) | def lambda_handler(event: dict, context: dict) -> dict: function _create_secret (line 77) | def _create_secret(arn: str, token: str) -> None: function _set_secret (line 114) | def _set_secret(arn: str, token: str) -> None: function _test_secret (line 157) | def _test_secret(arn: str, token: str) -> None: function _finish_secret (line 207) | def _finish_secret(arn: str, token: str) -> None: FILE: terraform/telemetry-collector/bastion-scripts/telemetry_db.py function _load_bastion_env (line 127) | def _load_bastion_env() -> dict[str, str]: function _get_credentials (line 158) | def _get_credentials( function _run_mongosh (line 214) | def _run_mongosh( function _get_collection_count (line 269) | def _get_collection_count( function _fetch_documents (line 302) | def _fetch_documents( function _delete_documents (line 344) | def _delete_documents( function _write_csv (line 381) | def _write_csv( function _resolve_collections (line 412) | def _resolve_collections( function _print_summary (line 428) | def _print_summary(documents: list[dict]) -> None: function _connect (line 643) | def _connect(args: argparse.Namespace) -> tuple[dict[str, str], dict[str... function cmd_export (line 666) | def cmd_export(args: argparse.Namespace) -> None: function cmd_purge (line 711) | def cmd_purge(args: argparse.Namespace) -> None: function main (line 766) | def main(): FILE: terraform/telemetry-collector/lambda/collector/index.py function _init_aws_clients (line 42) | def _init_aws_clients(): function _get_credentials (line 64) | def _get_credentials() -> dict: function _get_database (line 82) | def _get_database(): function _verify_signature (line 114) | def _verify_signature(body: str, signature: str) -> bool: function _hash_ip (line 136) | def _hash_ip(ip: str) -> str: function _check_rate_limit (line 141) | def _check_rate_limit(ip_hash: str) -> bool: function _store_event (line 189) | def _store_event(event_type: str, payload: dict) -> None: function lambda_handler (line 213) | def lambda_handler(event: dict, context: dict) -> dict: FILE: terraform/telemetry-collector/lambda/collector/schemas.py class StartupEvent (line 12) | class StartupEvent(BaseModel): method validate_timestamp (line 66) | def validate_timestamp(cls, v: str) -> str: class HeartbeatEvent (line 99) | class HeartbeatEvent(BaseModel): method validate_timestamp (line 143) | def validate_timestamp(cls, v: str) -> str: FILE: terraform/telemetry-collector/lambda/index-setup/index.py function _get_credentials (line 26) | def _get_credentials() -> dict: function _connect (line 36) | def _connect() -> pymongo.database.Database: function lambda_handler (line 58) | def lambda_handler(event, context): FILE: tests/auth_server/conftest.py function _setup_auth_server_mocks (line 32) | def _setup_auth_server_mocks() -> None: function mock_jwks_response (line 62) | def mock_jwks_response() -> dict: function mock_requests_get (line 92) | def mock_requests_get(mock_jwks_response): function valid_jwt_token (line 119) | def valid_jwt_token() -> str: function expired_jwt_token (line 135) | def expired_jwt_token() -> str: function malformed_jwt_token (line 146) | def malformed_jwt_token() -> str: function self_signed_token (line 157) | def self_signed_token(auth_env_vars) -> str: function m2m_token (line 185) | def m2m_token() -> str: function mock_jwt_validator (line 207) | def mock_jwt_validator() -> MockJWTValidator: function mock_session_validator (line 218) | def mock_session_validator() -> MockSessionValidator: function auth_env_vars (line 234) | def auth_env_vars(monkeypatch) -> dict[str, str]: function keycloak_env_vars (line 262) | def keycloak_env_vars(monkeypatch) -> dict[str, str]: function entra_env_vars (line 291) | def entra_env_vars(monkeypatch) -> dict[str, str]: function mock_cognito_provider (line 321) | def mock_cognito_provider(): function mock_keycloak_provider (line 359) | def mock_keycloak_provider(): function auth0_env_vars (line 397) | def auth0_env_vars(monkeypatch) -> dict[str, str]: function mock_auth0_provider (line 424) | def mock_auth0_provider(): function mock_entra_provider (line 461) | def mock_entra_provider(): function valid_session_cookie (line 503) | def valid_session_cookie(auth_env_vars) -> str: function expired_session_cookie (line 530) | def expired_session_cookie() -> str: function mock_scopes_config (line 547) | def mock_scopes_config() -> dict: function mock_scopes_config_file (line 575) | def mock_scopes_config_file(tmp_path, mock_scopes_config): function mock_scope_repository_with_data (line 597) | def mock_scope_repository_with_data(mock_scopes_config): function mock_rate_limiter (line 638) | def mock_rate_limiter(): function okta_env_vars (line 654) | def okta_env_vars(monkeypatch) -> dict[str, str]: function mock_okta_provider (line 681) | def mock_okta_provider(): FILE: tests/auth_server/fixtures/mock_jwt.py function create_mock_jwt_token (line 17) | def create_mock_jwt_token( function decode_mock_jwt_token (line 74) | def decode_mock_jwt_token( function create_expired_jwt_token (line 100) | def create_expired_jwt_token( function create_malformed_jwt_token (line 130) | def create_malformed_jwt_token() -> str: FILE: tests/auth_server/fixtures/mock_providers.py class MockKeycloakProvider (line 14) | class MockKeycloakProvider: method __init__ (line 22) | def __init__( method register_token (line 41) | def register_token( method validate_token (line 64) | def validate_token(self, access_token: str) -> dict[str, Any]: method get_provider_info (line 92) | def get_provider_info(self) -> dict[str, Any]: class MockCognitoValidator (line 107) | class MockCognitoValidator: method __init__ (line 115) | def __init__( method register_token (line 134) | def register_token( method validate_token (line 154) | def validate_token( method get_provider_info (line 191) | def get_provider_info(self) -> dict[str, Any]: function create_mock_provider (line 206) | def create_mock_provider(provider_type: str = "cognito", **kwargs: Any) ... FILE: tests/auth_server/unit/providers/test_auth0.py class TestAuth0ProviderInit (line 28) | class TestAuth0ProviderInit: method test_provider_initialization_basic (line 31) | def test_provider_initialization_basic(self): method test_provider_initialization_with_audience (line 48) | def test_provider_initialization_with_audience(self): method test_provider_initialization_removes_trailing_slashes (line 63) | def test_provider_initialization_removes_trailing_slashes(self): method test_provider_initialization_m2m_defaults (line 77) | def test_provider_initialization_m2m_defaults(self): method test_provider_initialization_separate_m2m_client (line 92) | def test_provider_initialization_separate_m2m_client(self): method test_provider_initialization_custom_groups_claim (line 110) | def test_provider_initialization_custom_groups_claim(self): method test_provider_endpoints (line 125) | def test_provider_endpoints(self): class TestAuth0JWKS (line 150) | class TestAuth0JWKS: method test_get_jwks_success (line 154) | def test_get_jwks_success(self, mock_get, mock_jwks_response): method test_get_jwks_caching (line 180) | def test_get_jwks_caching(self, mock_get, mock_jwks_response): method test_get_jwks_cache_expiration (line 207) | def test_get_jwks_cache_expiration(self, mock_time, mock_get, mock_jwk... method test_get_jwks_network_error (line 239) | def test_get_jwks_network_error(self, mock_get): class TestAuth0TokenValidation (line 262) | class TestAuth0TokenValidation: method test_validate_token_success (line 266) | def test_validate_token_success(self, mock_get, mock_jwks_response): method test_validate_token_with_permissions_fallback (line 316) | def test_validate_token_with_permissions_fallback(self, mock_get, mock... method test_validate_token_expired (line 358) | def test_validate_token_expired(self, mock_get, mock_jwks_response): method test_validate_token_no_kid (line 383) | def test_validate_token_no_kid(self, mock_get, mock_jwks_response): method test_validate_token_key_not_found (line 406) | def test_validate_token_key_not_found(self, mock_get, mock_jwks_respon... method test_validate_token_with_audience (line 429) | def test_validate_token_with_audience(self, mock_get, mock_jwks_respon... class TestAuth0OAuth2 (line 479) | class TestAuth0OAuth2: method test_exchange_code_for_token_success (line 483) | def test_exchange_code_for_token_success(self, mock_post): method test_exchange_code_for_token_error (line 517) | def test_exchange_code_for_token_error(self, mock_post): method test_get_auth_url (line 536) | def test_get_auth_url(self): method test_get_auth_url_includes_audience (line 561) | def test_get_auth_url_includes_audience(self): method test_get_auth_url_no_audience (line 582) | def test_get_auth_url_no_audience(self): method test_get_logout_url (line 602) | def test_get_logout_url(self): class TestAuth0UserInfo (line 627) | class TestAuth0UserInfo: method test_get_user_info_success (line 631) | def test_get_user_info_success(self, mock_get): method test_get_user_info_error (line 661) | def test_get_user_info_error(self, mock_get): class TestAuth0TokenRefresh (line 684) | class TestAuth0TokenRefresh: method test_refresh_token_success (line 688) | def test_refresh_token_success(self, mock_post): method test_refresh_token_error (line 717) | def test_refresh_token_error(self, mock_post): class TestAuth0M2M (line 740) | class TestAuth0M2M: method test_get_m2m_token_success (line 744) | def test_get_m2m_token_success(self, mock_post): method test_get_m2m_token_custom_credentials (line 781) | def test_get_m2m_token_custom_credentials(self, mock_post): method test_get_m2m_token_no_audience (line 815) | def test_get_m2m_token_no_audience(self, mock_post): method test_validate_m2m_token (line 841) | def test_validate_m2m_token(self): class TestAuth0ProviderInfo (line 869) | class TestAuth0ProviderInfo: method test_get_provider_info (line 872) | def test_get_provider_info(self): class TestAuth0Factory (line 906) | class TestAuth0Factory: method test_factory_creates_auth0_provider (line 909) | def test_factory_creates_auth0_provider(self, auth0_env_vars): method test_factory_missing_domain (line 924) | def test_factory_missing_domain(self, monkeypatch): method test_factory_missing_client_id (line 937) | def test_factory_missing_client_id(self, monkeypatch): method test_factory_missing_client_secret (line 950) | def test_factory_missing_client_secret(self, monkeypatch): FILE: tests/auth_server/unit/providers/test_base.py class TestAuthProviderInterface (line 24) | class TestAuthProviderInterface: method test_auth_provider_is_abstract (line 27) | def test_auth_provider_is_abstract(self): method test_auth_provider_has_required_methods (line 35) | def test_auth_provider_has_required_methods(self): class TestConcreteImplementation (line 64) | class TestConcreteImplementation: method test_concrete_provider_implementation (line 67) | def test_concrete_provider_implementation(self): class TestAuthProviderDocstrings (line 119) | class TestAuthProviderDocstrings: method test_validate_token_docstring (line 122) | def test_validate_token_docstring(self): method test_get_jwks_docstring (line 134) | def test_get_jwks_docstring(self): method test_exchange_code_for_token_docstring (line 145) | def test_exchange_code_for_token_docstring(self): method test_get_user_info_docstring (line 157) | def test_get_user_info_docstring(self): class TestAuthProviderTypeHints (line 170) | class TestAuthProviderTypeHints: method test_validate_token_signature (line 173) | def test_validate_token_signature(self): method test_get_jwks_signature (line 189) | def test_get_jwks_signature(self): method test_exchange_code_for_token_signature (line 203) | def test_exchange_code_for_token_signature(self): FILE: tests/auth_server/unit/providers/test_keycloak.py class TestKeycloakProviderInit (line 29) | class TestKeycloakProviderInit: method test_provider_initialization_basic (line 32) | def test_provider_initialization_basic(self): method test_provider_initialization_with_external_url (line 50) | def test_provider_initialization_with_external_url(self): method test_provider_initialization_removes_trailing_slashes (line 71) | def test_provider_initialization_removes_trailing_slashes(self): method test_provider_initialization_m2m_defaults (line 87) | def test_provider_initialization_m2m_defaults(self): method test_provider_initialization_separate_m2m_client (line 103) | def test_provider_initialization_separate_m2m_client(self): class TestKeycloakJWKS (line 128) | class TestKeycloakJWKS: method test_get_jwks_success (line 132) | def test_get_jwks_success(self, mock_get, mock_jwks_response): method test_get_jwks_caching (line 159) | def test_get_jwks_caching(self, mock_get, mock_jwks_response): method test_get_jwks_cache_expiration (line 187) | def test_get_jwks_cache_expiration(self, mock_time, mock_get, mock_jwk... method test_get_jwks_network_error (line 220) | def test_get_jwks_network_error(self, mock_get): class TestKeycloakTokenValidation (line 244) | class TestKeycloakTokenValidation: method test_validate_token_success (line 248) | def test_validate_token_success(self, mock_get, mock_jwks_response): method test_validate_token_expired (line 302) | def test_validate_token_expired(self, mock_get, mock_jwks_response): method test_validate_token_no_kid (line 328) | def test_validate_token_no_kid(self, mock_get, mock_jwks_response): method test_validate_token_key_not_found (line 352) | def test_validate_token_key_not_found(self, mock_get, mock_jwks_respon... method test_validate_token_multiple_issuers (line 376) | def test_validate_token_multiple_issuers(self, mock_get, mock_jwks_res... class TestKeycloakOAuth2 (line 426) | class TestKeycloakOAuth2: method test_exchange_code_for_token_success (line 430) | def test_exchange_code_for_token_success(self, mock_post): method test_exchange_code_for_token_error (line 465) | def test_exchange_code_for_token_error(self, mock_post): method test_get_auth_url (line 485) | def test_get_auth_url(self): method test_get_logout_url (line 511) | def test_get_logout_url(self): class TestKeycloakUserInfo (line 537) | class TestKeycloakUserInfo: method test_get_user_info_success (line 541) | def test_get_user_info_success(self, mock_get): method test_get_user_info_error (line 573) | def test_get_user_info_error(self, mock_get): class TestKeycloakTokenRefresh (line 597) | class TestKeycloakTokenRefresh: method test_refresh_token_success (line 601) | def test_refresh_token_success(self, mock_post): method test_refresh_token_error (line 631) | def test_refresh_token_error(self, mock_post): class TestKeycloakM2M (line 655) | class TestKeycloakM2M: method test_get_m2m_token_success (line 659) | def test_get_m2m_token_success(self, mock_post): method test_get_m2m_token_custom_credentials (line 695) | def test_get_m2m_token_custom_credentials(self, mock_post): method test_validate_m2m_token (line 728) | def test_validate_m2m_token(self): class TestKeycloakProviderInfo (line 757) | class TestKeycloakProviderInfo: method test_get_provider_info (line 760) | def test_get_provider_info(self): method test_check_keycloak_health (line 785) | def test_check_keycloak_health(self, mock_get): FILE: tests/auth_server/unit/providers/test_okta.py class TestOktaProviderInit (line 16) | class TestOktaProviderInit: method test_provider_initialization (line 19) | def test_provider_initialization(self): method test_provider_initialization_removes_https (line 31) | def test_provider_initialization_removes_https(self): method test_provider_initialization_m2m_defaults (line 40) | def test_provider_initialization_m2m_defaults(self): class TestOktaJWKS (line 56) | class TestOktaJWKS: method test_get_jwks_success (line 60) | def test_get_jwks_success(self, mock_get): method test_get_jwks_caching (line 75) | def test_get_jwks_caching(self, mock_get): method test_get_jwks_cache_expiration (line 91) | def test_get_jwks_cache_expiration(self, mock_get): class TestOktaTokenValidation (line 118) | class TestOktaTokenValidation: method test_validate_token_success (line 122) | def test_validate_token_success(self, mock_get): method test_validate_token_expired (line 165) | def test_validate_token_expired(self): method test_validate_token_no_kid (line 182) | def test_validate_token_no_kid(self): method test_validate_token_self_signed (line 193) | def test_validate_token_self_signed(self): class TestOktaOAuth2 (line 226) | class TestOktaOAuth2: method test_exchange_code_for_token (line 230) | def test_exchange_code_for_token(self, mock_post): method test_get_auth_url (line 246) | def test_get_auth_url(self): method test_get_logout_url (line 260) | def test_get_logout_url(self): method test_refresh_token (line 270) | def test_refresh_token(self, mock_post): class TestOktaM2M (line 292) | class TestOktaM2M: method test_get_m2m_token (line 296) | def test_get_m2m_token(self, mock_post): class TestOktaProviderInfo (line 324) | class TestOktaProviderInfo: method test_get_provider_info (line 327) | def test_get_provider_info(self): class TestOktaFactoryIntegration (line 347) | class TestOktaFactoryIntegration: method test_factory_creates_okta_provider (line 350) | def test_factory_creates_okta_provider(self, monkeypatch): FILE: tests/auth_server/unit/test_server.py class TestMaskingFunctions (line 28) | class TestMaskingFunctions: method test_mask_sensitive_id_short (line 31) | def test_mask_sensitive_id_short(self): method test_mask_sensitive_id_normal (line 44) | def test_mask_sensitive_id_normal(self): method test_mask_token (line 59) | def test_mask_token(self): method test_anonymize_ip_ipv4 (line 74) | def test_anonymize_ip_ipv4(self): method test_anonymize_ip_ipv6 (line 87) | def test_anonymize_ip_ipv6(self): method test_hash_username (line 101) | def test_hash_username(self): class TestServerNameNormalization (line 118) | class TestServerNameNormalization: method test_normalize_server_name_with_trailing_slash (line 121) | def test_normalize_server_name_with_trailing_slash(self): method test_normalize_server_name_without_trailing_slash (line 134) | def test_normalize_server_name_without_trailing_slash(self): method test_server_names_match_exact (line 147) | def test_server_names_match_exact(self): method test_server_names_match_with_trailing_slash (line 154) | def test_server_names_match_with_trailing_slash(self): method test_server_names_match_wildcard (line 162) | def test_server_names_match_wildcard(self): class TestGroupToScopeMapping (line 171) | class TestGroupToScopeMapping: method test_map_groups_to_scopes_basic (line 175) | async def test_map_groups_to_scopes_basic(self, mock_scopes_config): method test_map_groups_to_scopes_no_duplicates (line 198) | async def test_map_groups_to_scopes_no_duplicates(self, mock_scopes_co... method test_map_groups_to_scopes_unknown_group (line 224) | async def test_map_groups_to_scopes_unknown_group(self, mock_scopes_co... class TestScopeValidation (line 242) | class TestScopeValidation: method test_validate_server_tool_access_allowed (line 246) | async def test_validate_server_tool_access_allowed(self, mock_scope_re... method test_validate_server_tool_access_denied (line 266) | async def test_validate_server_tool_access_denied(self, mock_scope_rep... method test_validate_server_tool_access_wildcard_server (line 286) | async def test_validate_server_tool_access_wildcard_server( method test_validate_server_tool_access_tools_call (line 308) | async def test_validate_server_tool_access_tools_call(self, mock_scope... method test_validate_scope_subset_valid (line 327) | def test_validate_scope_subset_valid(self): method test_validate_scope_subset_invalid (line 341) | def test_validate_scope_subset_invalid(self): class TestRateLimiting (line 356) | class TestRateLimiting: method test_check_rate_limit_under_limit (line 359) | def test_check_rate_limit_under_limit(self): method test_check_rate_limit_exceeded (line 373) | def test_check_rate_limit_exceeded(self, monkeypatch): method test_check_rate_limit_cleanup_old_entries (line 396) | def test_check_rate_limit_cleanup_old_entries(self): class TestSessionCookieValidation (line 421) | class TestSessionCookieValidation: method test_validate_session_cookie_valid (line 425) | async def test_validate_session_cookie_valid(self, auth_env_vars, vali... method test_validate_session_cookie_expired (line 446) | async def test_validate_session_cookie_expired(self, auth_env_vars): method test_validate_session_cookie_invalid_signature (line 470) | async def test_validate_session_cookie_invalid_signature(self, auth_en... class TestSimplifiedCognitoValidator (line 487) | class TestSimplifiedCognitoValidator: method test_validator_initialization (line 490) | def test_validator_initialization(self): method test_get_jwks_success (line 502) | def test_get_jwks_success(self, mock_get, mock_jwks_response): method test_get_jwks_cached (line 525) | def test_get_jwks_cached(self, mock_get, mock_jwks_response): method test_validate_self_signed_token_valid (line 546) | def test_validate_self_signed_token_valid(self, auth_env_vars, self_si... method test_validate_self_signed_token_expired (line 564) | def test_validate_self_signed_token_expired(self, auth_env_vars): class TestHealthEndpoint (line 596) | class TestHealthEndpoint: method test_health_check (line 600) | def test_health_check(self, mock_get_provider): class TestValidateEndpoint (line 617) | class TestValidateEndpoint: method test_validate_with_valid_token (line 621) | def test_validate_with_valid_token( method test_validate_missing_auth_header (line 657) | def test_validate_missing_auth_header(self, mock_get_provider, auth_en... method test_validate_with_session_cookie (line 672) | def test_validate_with_session_cookie( class TestConfigEndpoint (line 710) | class TestConfigEndpoint: method test_config_keycloak (line 714) | def test_config_keycloak(self, mock_get_provider, mock_keycloak_provid... class TestGenerateTokenEndpoint (line 732) | class TestGenerateTokenEndpoint: method test_generate_token_success (line 736) | def test_generate_token_success(self, mock_get_provider, auth_env_vars): method test_generate_token_missing_username (line 778) | def test_generate_token_missing_username(self, mock_get_provider, auth... method test_generate_token_invalid_scopes (line 799) | def test_generate_token_invalid_scopes(self, mock_get_provider, auth_e... method test_generate_token_rate_limit (line 820) | def test_generate_token_rate_limit(self, mock_get_provider, auth_env_v... class TestReloadScopesEndpoint (line 863) | class TestReloadScopesEndpoint: method test_reload_scopes_success_with_jwt (line 868) | def test_reload_scopes_success_with_jwt( method test_reload_scopes_no_auth (line 916) | def test_reload_scopes_no_auth(self, mock_get_provider): method test_reload_scopes_invalid_jwt (line 930) | def test_reload_scopes_invalid_jwt(self, mock_get_provider, auth_env_v... method test_reload_scopes_basic_auth_rejected (line 947) | def test_reload_scopes_basic_auth_rejected(self, mock_get_provider, au... class TestNetworkTrustedMode (line 973) | class TestNetworkTrustedMode: method test_network_trusted_bypasses_registry_api (line 976) | def test_network_trusted_bypasses_registry_api(self): method test_network_trusted_missing_auth_falls_through_to_jwt (line 1010) | def test_network_trusted_missing_auth_falls_through_to_jwt(self): method test_network_trusted_does_not_bypass_mcp_gateway (line 1043) | def test_network_trusted_does_not_bypass_mcp_gateway( method test_network_trusted_disabled_by_default (line 1076) | def test_network_trusted_disabled_by_default(self, auth_env_vars): method test_network_trusted_bypasses_v01_api (line 1097) | def test_network_trusted_bypasses_v01_api(self): method test_network_trusted_valid_api_token (line 1126) | def test_network_trusted_valid_api_token(self): method test_network_trusted_invalid_api_token_falls_through_to_jwt (line 1155) | def test_network_trusted_invalid_api_token_falls_through_to_jwt( method test_network_trusted_disabled_when_no_token_configured (line 1198) | def test_network_trusted_disabled_when_no_token_configured(self): method test_network_trusted_skips_bypass_when_session_cookie_present (line 1223) | def test_network_trusted_skips_bypass_when_session_cookie_present(self): method test_network_trusted_non_bearer_scheme_falls_through_to_jwt (line 1250) | def test_network_trusted_non_bearer_scheme_falls_through_to_jwt(self): method test_network_trusted_empty_bearer_falls_through_to_jwt (line 1282) | def test_network_trusted_empty_bearer_falls_through_to_jwt( function _make_legacy_token_map (line 1323) | def _make_legacy_token_map(token: str) -> dict[str, dict]: class TestCheckRegistryStaticToken (line 1340) | class TestCheckRegistryStaticToken: method test_legacy_match_returns_network_trusted_identity (line 1346) | def test_legacy_match_returns_network_trusted_identity(self): method test_mismatch_returns_none (line 1361) | def test_mismatch_returns_none(self): method test_empty_bearer_returns_none (line 1369) | def test_empty_bearer_returns_none(self): method test_empty_map_returns_none (line 1377) | def test_empty_map_returns_none(self): method test_uses_timing_safe_comparison (line 1384) | def test_uses_timing_safe_comparison(self): method test_multi_key_match_returns_correct_identity (line 1393) | def test_multi_key_match_returns_correct_identity(self): method test_multi_key_no_match_returns_none (line 1417) | def test_multi_key_no_match_returns_none(self): method test_legacy_username_override_preserved (line 1431) | def test_legacy_username_override_preserved(self): method test_non_legacy_key_uses_name_as_username (line 1442) | def test_non_legacy_key_uses_name_as_username(self): class TestStaticTokenFallthrough (line 1465) | class TestStaticTokenFallthrough: method test_valid_jwt_accepted_when_static_token_enabled (line 1471) | def test_valid_jwt_accepted_when_static_token_enabled( method test_static_token_match_still_returns_network_trusted (line 1515) | def test_static_token_match_still_returns_network_trusted(self): method test_mismatched_bearer_and_invalid_jwt_returns_401 (line 1542) | def test_mismatched_bearer_and_invalid_jwt_returns_401( class TestOAuthTokenStorageConfiguration (line 1586) | class TestOAuthTokenStorageConfiguration: method test_oauth_store_tokens_default_true (line 1589) | def test_oauth_store_tokens_default_true(self, monkeypatch): method test_oauth_store_tokens_env_true (line 1602) | def test_oauth_store_tokens_env_true(self, monkeypatch): method test_oauth_store_tokens_env_false (line 1615) | def test_oauth_store_tokens_env_false(self, monkeypatch): method test_oauth_store_tokens_env_false_uppercase (line 1628) | def test_oauth_store_tokens_env_false_uppercase(self, monkeypatch): method test_session_data_includes_tokens_when_enabled (line 1641) | def test_session_data_includes_tokens_when_enabled(self): method test_session_data_excludes_tokens_when_disabled (line 1686) | def test_session_data_excludes_tokens_when_disabled(self): method test_session_data_size_reduction_when_disabled (line 1734) | def test_session_data_size_reduction_when_disabled(self): class TestOAuth2CallbackTokenStorage (line 1796) | class TestOAuth2CallbackTokenStorage: method _call_oauth2_callback (line 1799) | def _call_oauth2_callback( method test_tokens_excluded_when_disabled (line 1877) | def test_tokens_excluded_when_disabled(self): method test_tokens_included_when_enabled (line 1892) | def test_tokens_included_when_enabled(self): class TestParseRegistryApiKeys (line 1913) | class TestParseRegistryApiKeys: method test_empty_string_returns_empty_list (line 1916) | def test_empty_string_returns_empty_list(self): method test_valid_single_entry (line 1923) | def test_valid_single_entry(self): method test_valid_multiple_entries (line 1943) | def test_valid_multiple_entries(self): method test_malformed_json_raises (line 1960) | def test_malformed_json_raises(self): method test_non_object_json_raises (line 1967) | def test_non_object_json_raises(self): method test_reserved_name_legacy_raises (line 1974) | def test_reserved_name_legacy_raises(self): method test_reserved_name_network_user_raises (line 1988) | def test_reserved_name_network_user_raises(self): method test_reserved_name_network_trusted_raises (line 2002) | def test_reserved_name_network_trusted_raises(self): method test_key_too_short_raises (line 2016) | def test_key_too_short_raises(self): method test_empty_groups_raises (line 2030) | def test_empty_groups_raises(self): method test_duplicate_key_value_raises (line 2044) | def test_duplicate_key_value_raises(self): method test_invalid_name_format_raises (line 2060) | def test_invalid_name_format_raises(self): method test_entry_not_object_raises (line 2074) | def test_entry_not_object_raises(self): method test_empty_object_returns_empty_list (line 2088) | def test_empty_object_returns_empty_list(self): class TestBuildStaticTokenMap (line 2101) | class TestBuildStaticTokenMap: method test_disabled_flag_does_nothing (line 2105) | async def test_disabled_flag_does_nothing(self): method test_legacy_only_builds_single_entry (line 2117) | async def test_legacy_only_builds_single_entry(self): method test_bad_json_disables_feature (line 2135) | async def test_bad_json_disables_feature(self): method test_valid_keys_plus_legacy_merged (line 2149) | async def test_valid_keys_plus_legacy_merged(self): method test_zero_keys_warns_but_stays_enabled (line 2180) | async def test_zero_keys_warns_but_stays_enabled(self): class TestMultiKeyStaticTokenValidate (line 2201) | class TestMultiKeyStaticTokenValidate: method test_named_key_returns_key_name_as_username (line 2204) | def test_named_key_returns_key_name_as_username(self): method test_readonly_key_gets_limited_scopes (line 2235) | def test_readonly_key_gets_limited_scopes(self): method test_key_with_empty_scopes_still_matches (line 2264) | def test_key_with_empty_scopes_still_matches(self): FILE: tests/conftest.py function _patched_stat (line 19) | def _patched_stat(path, *args, **kwargs): function pytest_configure (line 62) | def pytest_configure(config): function _setup_auto_mocking (line 128) | def _setup_auto_mocking() -> None: function tmp_test_dir (line 165) | def tmp_test_dir() -> Generator[Path, None, None]: function tmp_path (line 187) | def tmp_path(tmp_path_factory) -> Path: function test_settings (line 201) | def test_settings(tmp_path: Path) -> Settings: function mock_settings (line 268) | def mock_settings(test_settings: Settings, monkeypatch): function mock_scope_repository (line 288) | def mock_scope_repository(): function mock_server_repository (line 306) | def mock_server_repository(): function mock_agent_repository (line 328) | def mock_agent_repository(): function mock_search_repository (line 351) | def mock_search_repository(): function mock_federation_config_repository (line 369) | def mock_federation_config_repository(): function mock_security_scan_repository (line 384) | def mock_security_scan_repository(): function mock_virtual_server_repository (line 399) | def mock_virtual_server_repository(): function mock_backend_session_repository (line 420) | def mock_backend_session_repository(): function mock_skill_security_scan_repository (line 438) | def mock_skill_security_scan_repository(): function mock_all_repositories (line 456) | def mock_all_repositories( function sample_server_info (line 529) | def sample_server_info() -> dict[str, Any]: function sample_agent_card (line 571) | def sample_agent_card() -> dict[str, Any]: function pytest_collection_modifyitems (line 606) | def pytest_collection_modifyitems(config, items): function client_registry_only (line 630) | def client_registry_only(mock_settings) -> Generator[Any, None, None]: function client_skills_only (line 646) | def client_skills_only(mock_settings) -> Generator[Any, None, None]: FILE: tests/e2e/test_virtual_mcp_latency.py function _refresh_token (line 43) | def _refresh_token() -> str: function _parse_sse_response (line 70) | def _parse_sse_response( function _send_mcp_request (line 109) | def _send_mcp_request( function _initialize_session (line 161) | def _initialize_session( function _timed_request (line 201) | def _timed_request( function _run_benchmark (line 214) | def _run_benchmark( function _compute_overhead (line 289) | def _compute_overhead( function _print_table (line 300) | def _print_table( function _build_method_configs (line 335) | def _build_method_configs() -> list[dict[str, Any]]: function main (line 448) | def main() -> None: function _print_results_table (line 536) | def _print_results_table( FILE: tests/e2e/test_virtual_mcp_protocol.py function _refresh_token (line 36) | def _refresh_token() -> str: function _build_headers (line 64) | def _build_headers( function _parse_response (line 79) | def _parse_response( function _send_request (line 96) | def _send_request( function _send_raw_http (line 137) | def _send_raw_http( class VirtualMCPProtocolTests (line 172) | class VirtualMCPProtocolTests: method __init__ (line 175) | def __init__(self) -> None: method _next_id (line 181) | def _next_id(self) -> int: method _record (line 185) | def _record( method setup (line 198) | def setup(self) -> None: method test_01_initialize (line 208) | def test_01_initialize(self) -> None: method test_01a_initialize_version_negotiation (line 244) | def test_01a_initialize_version_negotiation(self) -> None: method test_01b_initialize_version_unsupported (line 267) | def test_01b_initialize_version_unsupported(self) -> None: method test_01c_notifications_initialized_returns_202 (line 291) | def test_01c_notifications_initialized_returns_202(self) -> None: method test_01d_get_returns_405 (line 307) | def test_01d_get_returns_405(self) -> None: method test_01e_delete_returns_405 (line 317) | def test_01e_delete_returns_405(self) -> None: method test_02_ping (line 327) | def test_02_ping(self) -> None: method test_03_tools_list (line 343) | def test_03_tools_list(self) -> None: method test_04_call_get_time (line 367) | def test_04_call_get_time(self) -> None: method test_05_call_quantum_flux_analyzer (line 392) | def test_05_call_quantum_flux_analyzer(self) -> None: method test_06_call_synth_patterns (line 417) | def test_06_call_synth_patterns(self) -> None: method test_07_call_synthetic_data_generator (line 442) | def test_07_call_synthetic_data_generator(self) -> None: method test_08_resources_list (line 470) | def test_08_resources_list(self) -> None: method test_09_resources_read_error (line 486) | def test_09_resources_read_error(self) -> None: method test_10_prompts_list (line 502) | def test_10_prompts_list(self) -> None: method test_11_prompts_get_error (line 518) | def test_11_prompts_get_error(self) -> None: method test_12_error_nonexistent_tool (line 534) | def test_12_error_nonexistent_tool(self) -> None: method test_13_error_unknown_method (line 553) | def test_13_error_unknown_method(self) -> None: method run_all (line 572) | def run_all(self) -> bool: function main (line 620) | def main() -> None: FILE: tests/e2e/test_virtual_mcp_stress.py function _next_request_id (line 47) | def _next_request_id() -> int: function _refresh_token (line 55) | def _refresh_token() -> str: function _parse_sse_response (line 69) | def _parse_sse_response(body: str) -> dict[str, Any] | None: function _parse_response (line 80) | def _parse_response(body: str) -> dict[str, Any] | None: function _send_request (line 92) | def _send_request( function _initialize_session (line 118) | def _initialize_session(token: str) -> str: function _build_payload (line 146) | def _build_payload(method: str) -> dict[str, Any]: class _StressResult (line 175) | class _StressResult: method __init__ (line 178) | def __init__(self) -> None: method record_success (line 185) | def record_success(self, latency_ms: float) -> None: method record_failure (line 190) | def record_failure(self, error: str) -> None: method total (line 196) | def total(self) -> int: method error_rate (line 200) | def error_rate(self) -> float: function _print_scenario_report (line 206) | def _print_scenario_report(name: str, result: _StressResult, duration: f... function _percentile (line 237) | def _percentile(sorted_data: list[float], pct: float) -> float: function _worker_repeated_requests (line 250) | def _worker_repeated_requests( function _worker_mixed_requests (line 270) | def _worker_mixed_requests( function _worker_session_storm (line 298) | def _worker_session_storm( function _run_scenario_concurrent (line 324) | def _run_scenario_concurrent( function _run_scenario_mixed (line 356) | def _run_scenario_mixed( function _run_scenario_session_storm (line 386) | def _run_scenario_session_storm( function main (line 414) | def main() -> int: FILE: tests/e2e_agent_skills_test.py class TestStatus (line 58) | class TestStatus(Enum): class TestResult (line 67) | class TestResult: class AgentSkillsE2ETest (line 77) | class AgentSkillsE2ETest: method __init__ (line 80) | def __init__( method _record_result (line 95) | def _record_result( method test_register_skill (line 116) | def test_register_skill(self) -> bool: method test_list_skills (line 153) | def test_list_skills(self) -> bool: method test_get_skill (line 194) | def test_get_skill(self) -> bool: method test_update_skill (line 231) | def test_update_skill(self) -> bool: method test_disable_skill (line 276) | def test_disable_skill(self) -> bool: method test_enable_skill (line 321) | def test_enable_skill(self) -> bool: method test_health_check (line 366) | def test_health_check(self) -> bool: method test_get_content (line 412) | def test_get_content(self) -> bool: method test_rate_skill (line 458) | def test_rate_skill(self) -> bool: method test_get_rating (line 495) | def test_get_rating(self) -> bool: method test_search_skills (line 531) | def test_search_skills(self) -> bool: method test_delete_skill (line 567) | def test_delete_skill(self) -> bool: method run_all_tests (line 603) | def run_all_tests(self) -> bool: method _print_report (line 627) | def _print_report(self) -> bool: function _load_token (line 678) | def _load_token( function main (line 725) | def main() -> int: FILE: tests/fixtures/factories.py class RepositoryFactory (line 49) | class RepositoryFactory(factory.Factory): class Meta (line 52) | class Meta: class StdioTransportFactory (line 61) | class StdioTransportFactory(factory.Factory): class Meta (line 64) | class Meta: class StreamableHttpTransportFactory (line 73) | class StreamableHttpTransportFactory(factory.Factory): class Meta (line 76) | class Meta: class PackageFactory (line 84) | class PackageFactory(factory.Factory): class Meta (line 87) | class Meta: class ServerDetailFactory (line 98) | class ServerDetailFactory(factory.Factory): class Meta (line 101) | class Meta: class SecuritySchemeFactory (line 114) | class SecuritySchemeFactory(factory.Factory): class Meta (line 117) | class Meta: class AgentProviderFactory (line 129) | class AgentProviderFactory(factory.Factory): class Meta (line 132) | class Meta: class SkillFactory (line 139) | class SkillFactory(factory.Factory): class Meta (line 142) | class Meta: class AgentCardFactory (line 155) | class AgentCardFactory(factory.Factory): class Meta (line 158) | class Meta: class AgentInfoFactory (line 206) | class AgentInfoFactory(factory.Factory): class Meta (line 209) | class Meta: function create_server_with_tools (line 228) | def create_server_with_tools( function create_agent_with_skills (line 260) | def create_agent_with_skills( function create_multiple_servers (line 282) | def create_multiple_servers(count: int = 5, **kwargs: Any) -> list[Serve... function create_multiple_agents (line 296) | def create_multiple_agents(count: int = 5, **kwargs: Any) -> list[AgentC... function create_server_dict (line 310) | def create_server_dict(name: str | None = None, **kwargs: Any) -> dict[s... function create_agent_dict (line 327) | def create_agent_dict(name: str | None = None, **kwargs: Any) -> dict[st... FILE: tests/fixtures/helpers.py function create_temp_directory (line 15) | def create_temp_directory() -> Path: function write_json_file (line 26) | def write_json_file(file_path: Path, data: dict[str, Any]) -> None: function read_json_file (line 38) | def read_json_file(file_path: Path) -> dict[str, Any]: function create_test_server_file (line 52) | def create_test_server_file( function create_test_agent_file (line 72) | def create_test_agent_file(agents_dir: Path, agent_name: str, agent_data... function assert_server_equals (line 90) | def assert_server_equals( function assert_agent_equals (line 110) | def assert_agent_equals( function create_mock_jwt_payload (line 132) | def create_mock_jwt_payload( function create_test_state_file (line 171) | def create_test_state_file( function create_test_agent_state_file (line 187) | def create_test_agent_state_file( function normalize_text_for_comparison (line 203) | def normalize_text_for_comparison(text: str) -> str: function extract_error_message (line 218) | def extract_error_message(response_data: dict[str, Any]) -> str: function create_minimal_server_dict (line 233) | def create_minimal_server_dict( function create_minimal_agent_dict (line 250) | def create_minimal_agent_dict( FILE: tests/fixtures/mocks/mock_auth.py class MockJWTValidator (line 16) | class MockJWTValidator: method __init__ (line 24) | def __init__(self, secret_key: str = "test-secret-key", algorithm: str... method create_token (line 35) | def create_token( method validate_token (line 80) | def validate_token(self, token: str) -> dict[str, Any]: class MockSessionValidator (line 98) | class MockSessionValidator: method __init__ (line 103) | def __init__(self, secret_key: str = "test-secret-key"): method create_session (line 112) | def create_session( method validate_session (line 137) | def validate_session(self, session_value: str, max_age: int = 28800) -... function create_mock_auth_headers (line 160) | def create_mock_auth_headers( function create_mock_cognito_user_attributes (line 187) | def create_mock_cognito_user_attributes( FILE: tests/fixtures/mocks/mock_embeddings.py class MockEmbeddingsClient (line 17) | class MockEmbeddingsClient: method __init__ (line 25) | def __init__(self, model_name: str = "all-MiniLM-L6-v2", dimension: in... method encode (line 37) | def encode( method _generate_embedding (line 79) | def _generate_embedding(self, text: str) -> np.ndarray: class MockSentenceTransformer (line 105) | class MockSentenceTransformer: method __init__ (line 112) | def __init__(self, model_name_or_path: str, **kwargs: Any): method encode (line 125) | def encode(self, sentences: str | list[str], **kwargs: Any) -> np.ndar... method get_sentence_embedding_dimension (line 138) | def get_sentence_embedding_dimension(self) -> int: function create_mock_st_module (line 143) | def create_mock_st_module() -> Any: function create_mock_litellm_module (line 159) | def create_mock_litellm_module() -> Any: FILE: tests/fixtures/mocks/mock_faiss.py class MockFaissIndex (line 16) | class MockFaissIndex: method __init__ (line 24) | def __init__(self, dimension: int = 384): method d (line 37) | def d(self) -> int: method ntotal (line 42) | def ntotal(self) -> int: method add_with_ids (line 46) | def add_with_ids(self, vectors: np.ndarray, ids: np.ndarray) -> None: method add (line 64) | def add(self, vectors: np.ndarray) -> None: method search (line 81) | def search(self, query_vectors: np.ndarray, k: int) -> tuple[np.ndarra... method remove_ids (line 137) | def remove_ids(self, ids: np.ndarray) -> int: method reset (line 156) | def reset(self) -> None: class MockIndexIDMap (line 163) | class MockIndexIDMap: method __init__ (line 170) | def __init__(self, index: MockFaissIndex): method d (line 181) | def d(self) -> int: method ntotal (line 186) | def ntotal(self) -> int: method add_with_ids (line 190) | def add_with_ids(self, vectors: np.ndarray, ids: np.ndarray) -> None: method search (line 194) | def search(self, query_vectors: np.ndarray, k: int) -> tuple[np.ndarra... method remove_ids (line 198) | def remove_ids(self, ids: np.ndarray) -> int: method reset (line 202) | def reset(self) -> None: function create_mock_faiss_module (line 207) | def create_mock_faiss_module() -> Any: FILE: tests/fixtures/mocks/mock_http.py class MockResponse (line 14) | class MockResponse: method __init__ (line 21) | def __init__( method json (line 43) | def json(self) -> dict[str, Any]: method raise_for_status (line 47) | def raise_for_status(self) -> None: method __repr__ (line 52) | def __repr__(self) -> str: class MockAsyncClient (line 56) | class MockAsyncClient: method __init__ (line 63) | def __init__(self, responses: dict[str, MockResponse] | None = None): method get (line 73) | async def get(self, url: str, **kwargs: Any) -> MockResponse: method post (line 91) | async def post(self, url: str, **kwargs: Any) -> MockResponse: method __aenter__ (line 109) | async def __aenter__(self): method __aexit__ (line 113) | async def __aexit__(self, exc_type, exc_val, exc_tb): function create_mock_httpx_client (line 118) | def create_mock_httpx_client(responses: dict[str, MockResponse] | None =... function create_mock_mcp_server_response (line 131) | def create_mock_mcp_server_response( function create_mock_tool_definition (line 154) | def create_mock_tool_definition( FILE: tests/integration/conftest.py function reset_mongodb_client (line 19) | def reset_mongodb_client(): function mock_security_scanner (line 33) | def mock_security_scanner(): function test_client (line 66) | def test_client(mock_settings) -> Generator[TestClient, None, None]: function async_test_client (line 84) | async def async_test_client(mock_settings): FILE: tests/integration/test_agentcore_sync_integration.py function _mock_sts (line 85) | def _mock_sts(): function _mock_agentcore_client (line 92) | def _mock_agentcore_client(gateways=None, runtimes=None): function _build_orchestrator (line 136) | def _build_orchestrator( class TestEndToEndFlow (line 191) | class TestEndToEndFlow: method test_gateway_discovery_registration_manifest (line 194) | def test_gateway_discovery_registration_manifest(self): method test_mcp_runtime_registered_as_server (line 214) | def test_mcp_runtime_registered_as_server(self): method test_http_runtime_registered_as_agent (line 227) | def test_http_runtime_registered_as_agent(self): method test_full_sync_gateways_and_runtimes (line 239) | def test_full_sync_gateways_and_runtimes(self): class TestDryRunMode (line 263) | class TestDryRunMode: method test_dry_run_skips_registry_calls (line 266) | def test_dry_run_skips_registry_calls(self): method test_dry_run_collects_manifest_entries (line 284) | def test_dry_run_collects_manifest_entries(self): method test_dry_run_does_not_write_manifest (line 296) | def test_dry_run_does_not_write_manifest(self, tmp_path): class TestMixedDeployment (line 316) | class TestMixedDeployment: method test_mixed_gateways_all_registered (line 319) | def test_mixed_gateways_all_registered(self): method test_only_custom_jwt_collects_manifest (line 332) | def test_only_custom_jwt_collects_manifest(self): method test_mixed_with_runtimes (line 343) | def test_mixed_with_runtimes(self): method test_iam_gateway_auth_scheme_is_bearer (line 362) | def test_iam_gateway_auth_scheme_is_bearer(self): method test_none_gateway_auth_scheme_is_none (line 374) | def test_none_gateway_auth_scheme_is_none(self): class TestManifestWriting (line 390) | class TestManifestWriting: method test_manifest_written_with_correct_structure (line 393) | def test_manifest_written_with_correct_structure(self, tmp_path): method test_no_manifest_for_non_jwt_gateways (line 413) | def test_no_manifest_for_non_jwt_gateways(self, tmp_path): method test_runtimes_produce_no_manifest_entries (line 427) | def test_runtimes_produce_no_manifest_entries(self, tmp_path): FILE: tests/integration/test_deployment_mode_integration.py function mock_peer_federation (line 16) | def mock_peer_federation(): function mock_auth_admin (line 40) | def mock_auth_admin(): function integration_client (line 60) | def integration_client(mock_settings, mock_peer_federation): class TestDeploymentModeIntegration (line 71) | class TestDeploymentModeIntegration: method test_config_endpoint_returns_mode (line 74) | def test_config_endpoint_returns_mode(self, integration_client): method test_health_includes_deployment_mode (line 89) | def test_health_includes_deployment_mode(self, integration_client): method test_server_registration_works_in_registry_only (line 98) | def test_server_registration_works_in_registry_only(self, integration_... method test_server_toggle_works_in_registry_only (line 111) | def test_server_toggle_works_in_registry_only(self, integration_client... FILE: tests/integration/test_mongodb_connectivity.py class TestMongoDBConnectivity (line 14) | class TestMongoDBConnectivity: method test_mongodb_connection (line 18) | async def test_mongodb_connection(self): method test_mongodb_create_and_read_document (line 36) | async def test_mongodb_create_and_read_document(self): method test_mongodb_update_and_delete_document (line 69) | async def test_mongodb_update_and_delete_document(self): FILE: tests/integration/test_peer_federation_e2e.py function _mongodb_available (line 24) | def _mongodb_available() -> bool: function _documentdb_available (line 41) | def _documentdb_available() -> bool: function peer_config (line 53) | def peer_config(): function peer_config_whitelist (line 66) | def peer_config_whitelist(): function peer_config_tag_filter (line 80) | def peer_config_tag_filter(): function mock_servers (line 93) | def mock_servers(): function mock_agents (line 118) | def mock_agents(): class TestPeerFederationRepositoryIntegration (line 176) | class TestPeerFederationRepositoryIntegration: method test_documentdb_repository_crud (line 179) | async def test_documentdb_repository_crud(self, peer_config): method test_documentdb_repository_duplicate_peer_id_rejected (line 234) | async def test_documentdb_repository_duplicate_peer_id_rejected(self, ... method test_documentdb_repository_delete_cascade (line 265) | async def test_documentdb_repository_delete_cascade(self, peer_config): class TestPeerFederationServiceIntegration (line 311) | class TestPeerFederationServiceIntegration: method test_service_sync_with_mock_peer (line 314) | async def test_service_sync_with_mock_peer( method test_service_filter_by_whitelist (line 390) | async def test_service_filter_by_whitelist( method test_service_filter_by_tags (line 419) | async def test_service_filter_by_tags( class TestOrphanDetection (line 458) | class TestOrphanDetection: method test_detect_orphaned_servers (line 461) | async def test_detect_orphaned_servers(self, peer_config): method test_local_override_preserved (line 509) | async def test_local_override_preserved(self, peer_config): class TestFilePeerFederationRepository (line 554) | class TestFilePeerFederationRepository: method test_file_repository_crud (line 557) | async def test_file_repository_crud(self, peer_config, tmp_path): FILE: tests/integration/test_search_integration.py function mock_auth_dependencies (line 36) | def mock_auth_dependencies(): function mock_nginx_service (line 80) | def mock_nginx_service(): function mock_health_service (line 90) | def mock_health_service(): function setup_search_environment (line 100) | def setup_search_environment( function mock_embeddings_client (line 132) | def mock_embeddings_client(): function search_test_servers (line 138) | def search_test_servers() -> list[dict[str, Any]]: function search_test_agents (line 289) | def search_test_agents() -> list[dict[str, Any]]: function mock_faiss_search_results (line 385) | def mock_faiss_search_results(): function setup_search_data (line 495) | async def setup_search_data( class TestSemanticSearchIntegration (line 557) | class TestSemanticSearchIntegration: method test_search_servers_basic (line 560) | def test_search_servers_basic(self, test_client, mock_faiss_search_res... method test_search_agents_basic (line 587) | def test_search_agents_basic(self, test_client, mock_faiss_search_resu... method test_search_mixed_results (line 609) | def test_search_mixed_results(self, test_client, mock_faiss_search_res... method test_search_with_tools (line 629) | def test_search_with_tools(self, test_client, mock_faiss_search_results): class TestSearchFilters (line 661) | class TestSearchFilters: method test_search_filter_mcp_server_only (line 664) | def test_search_filter_mcp_server_only(self, test_client, mock_faiss_s... method test_search_filter_agent_only (line 690) | def test_search_filter_agent_only(self, test_client, mock_faiss_search... method test_search_filter_tool_only (line 717) | def test_search_filter_tool_only(self, test_client, mock_faiss_search_... method test_search_max_results_limit (line 744) | def test_search_max_results_limit(self, test_client, mock_faiss_search... class TestSearchVisibilityFiltering (line 775) | class TestSearchVisibilityFiltering: method test_search_public_agents_admin (line 778) | def test_search_public_agents_admin(self, test_client, mock_faiss_sear... method test_search_returns_agents_with_visibility_info (line 811) | def test_search_returns_agents_with_visibility_info( method test_search_group_restricted_agents (line 846) | def test_search_group_restricted_agents(self, test_client, mock_faiss_... method test_search_admin_sees_all_agents (line 879) | def test_search_admin_sees_all_agents(self, test_client, mock_faiss_se... class TestSearchErrorHandling (line 929) | class TestSearchErrorHandling: method test_search_empty_query_validation (line 932) | def test_search_empty_query_validation(self, test_client): method test_search_missing_query (line 940) | def test_search_missing_query(self, test_client): method test_search_service_unavailable (line 948) | def test_search_service_unavailable(self, test_client): method test_search_invalid_entity_type (line 967) | def test_search_invalid_entity_type(self, test_client): method test_search_empty_results (line 990) | def test_search_empty_results(self, test_client, mock_faiss_search_res... class TestSearchRanking (line 1021) | class TestSearchRanking: method test_search_results_sorted_by_relevance (line 1024) | def test_search_results_sorted_by_relevance(self, test_client): method test_search_relevance_scores_range (line 1092) | def test_search_relevance_scores_range(self, test_client, mock_faiss_s... FILE: tests/integration/test_server_lifecycle.py function mock_nginx_service (line 39) | def mock_nginx_service(): function mock_faiss_service (line 54) | def mock_faiss_service(): function mock_health_service (line 71) | def mock_health_service(): function mock_agent_service (line 90) | def mock_agent_service(): function mock_auth_dependencies (line 105) | def mock_auth_dependencies(): function test_server_data (line 177) | def test_server_data() -> dict[str, Any]: function test_server_data_2 (line 196) | def test_server_data_2() -> dict[str, Any]: function setup_test_environment (line 215) | def setup_test_environment( class TestServerRegistration (line 247) | class TestServerRegistration: method test_register_server_success (line 250) | def test_register_server_success( method test_register_server_duplicate_path (line 267) | def test_register_server_duplicate_path( method test_register_server_overwrite_existing (line 285) | def test_register_server_overwrite_existing( method test_register_server_without_leading_slash (line 304) | def test_register_server_without_leading_slash( method test_register_server_minimal_data (line 319) | def test_register_server_minimal_data(self, test_client: TestClient): method test_register_server_with_tool_list (line 335) | def test_register_server_with_tool_list( class TestServerListing (line 359) | class TestServerListing: method test_list_servers_empty (line 362) | def test_list_servers_empty(self, test_client: TestClient): method test_list_servers_with_single_server (line 373) | def test_list_servers_with_single_server( method test_list_servers_with_multiple_servers (line 393) | def test_list_servers_with_multiple_servers( method test_list_servers_with_query_filter (line 419) | def test_list_servers_with_query_filter( method test_list_servers_includes_metadata (line 439) | def test_list_servers_includes_metadata( class TestServerRetrieval (line 472) | class TestServerRetrieval: method test_get_server_by_path_success (line 475) | def test_get_server_by_path_success( method test_get_server_nonexistent_path (line 493) | def test_get_server_nonexistent_path(self, test_client: TestClient): class TestServerUpdate (line 508) | class TestServerUpdate: method test_update_server_via_overwrite (line 516) | def test_update_server_via_overwrite( method test_update_server_reject_without_overwrite (line 545) | def test_update_server_reject_without_overwrite( class TestServerDeletion (line 569) | class TestServerDeletion: method test_delete_server_success (line 572) | def test_delete_server_success(self, test_client: TestClient, test_ser... method test_delete_server_nonexistent (line 591) | def test_delete_server_nonexistent(self, test_client: TestClient): method test_delete_server_without_leading_slash (line 602) | def test_delete_server_without_leading_slash( class TestServerToggle (line 623) | class TestServerToggle: method test_toggle_server_enable (line 626) | def test_toggle_server_enable(self, test_client: TestClient, test_serv... method test_toggle_server_disable (line 641) | def test_toggle_server_disable(self, test_client: TestClient, test_ser... method test_toggle_server_nonexistent (line 659) | def test_toggle_server_nonexistent(self, test_client: TestClient): class TestServerFullLifecycle (line 676) | class TestServerFullLifecycle: method test_full_crud_lifecycle (line 679) | def test_full_crud_lifecycle(self, test_client: TestClient, test_serve... method test_lifecycle_with_toggle_operations (line 725) | def test_lifecycle_with_toggle_operations( method test_multiple_servers_lifecycle (line 756) | def test_multiple_servers_lifecycle( class TestServerErrorHandling (line 811) | class TestServerErrorHandling: method test_register_with_missing_required_fields (line 814) | def test_register_with_missing_required_fields(self, test_client: Test... method test_update_preserves_path (line 824) | def test_update_preserves_path(self, test_client: TestClient, test_ser... method test_operations_on_same_server_sequential (line 845) | def test_operations_on_same_server_sequential( FILE: tests/integration/test_skill_api.py function skill_data (line 18) | def skill_data(): function mock_url_validation (line 24) | def mock_url_validation(): function mock_auth_admin (line 39) | def mock_auth_admin(): function mock_auth_user (line 56) | def mock_auth_user(): function mock_skill_repository (line 73) | def mock_skill_repository(): function mock_search_repository (line 89) | def mock_search_repository(): class TestSkillModels (line 97) | class TestSkillModels: method test_skill_card_creation (line 100) | def test_skill_card_creation(self): method test_skill_registration_request_validation (line 115) | def test_skill_registration_request_validation(self, skill_data): method test_skill_info_from_card (line 123) | def test_skill_info_from_card(self): class TestSkillService (line 152) | class TestSkillService: method test_register_skill (line 156) | async def test_register_skill( method test_get_skill (line 189) | async def test_get_skill(self, mock_skill_repository, mock_search_repo... method test_list_skills (line 211) | async def test_list_skills(self, mock_skill_repository, mock_search_re... method test_toggle_skill (line 240) | async def test_toggle_skill(self, mock_skill_repository, mock_search_r... method test_delete_skill (line 264) | async def test_delete_skill(self, mock_skill_repository, mock_search_r... class TestSkillVisibility (line 279) | class TestSkillVisibility: method test_public_skill_visible_to_anonymous (line 283) | async def test_public_skill_visible_to_anonymous( method test_private_skill_hidden_from_others (line 310) | async def test_private_skill_hidden_from_others( method test_admin_sees_all_skills (line 339) | async def test_admin_sees_all_skills( class TestToolValidation (line 376) | class TestToolValidation: method test_validate_tools_all_available (line 380) | async def test_validate_tools_all_available(self): method test_validate_tools_some_missing (line 418) | async def test_validate_tools_some_missing(self): method test_validate_no_tools_required (line 455) | async def test_validate_no_tools_required(self): class TestPathUtils (line 476) | class TestPathUtils: method test_normalize_skill_path_basic (line 479) | def test_normalize_skill_path_basic(self): method test_normalize_skill_path_duplicate_slashes (line 487) | def test_normalize_skill_path_duplicate_slashes(self): method test_extract_skill_name (line 494) | def test_extract_skill_name(self): method test_validate_skill_name (line 501) | def test_validate_skill_name(self): FILE: tests/integration/test_skill_scanner_repository.py function _scan_result_dict_strategy (line 23) | def _scan_result_dict_strategy(): class TestRepositoryCreateRetrieveRoundTrip (line 50) | class TestRepositoryCreateRetrieveRoundTrip: method test_create_then_retrieve_preserves_fields (line 55) | def test_create_then_retrieve_preserves_fields(self, scan_result): FILE: tests/integration/test_telemetry_e2e.py function _mock_settings (line 32) | def _mock_settings( function _mock_repo_factory (line 61) | def _mock_repo_factory(): class TestOptOut (line 74) | class TestOptOut: method test_startup_ping_not_sent_when_disabled (line 77) | async def test_startup_ping_not_sent_when_disabled(self, monkeypatch): method test_heartbeat_not_started_when_disabled (line 91) | async def test_heartbeat_not_started_when_disabled(self, monkeypatch): method test_disabled_via_env_var_true_string (line 104) | async def test_disabled_via_env_var_true_string(self, monkeypatch): method test_disabled_via_env_var_yes_string (line 111) | async def test_disabled_via_env_var_yes_string(self, monkeypatch): method test_enabled_by_default_no_env_var (line 118) | async def test_enabled_by_default_no_env_var(self, monkeypatch): class TestDefaultState (line 132) | class TestDefaultState: method test_startup_ping_sent_by_default (line 135) | async def test_startup_ping_sent_by_default(self, monkeypatch): method test_heartbeat_enabled_by_default (line 164) | async def test_heartbeat_enabled_by_default(self, monkeypatch): method test_heartbeat_disabled_via_opt_out (line 176) | async def test_heartbeat_disabled_via_opt_out(self, monkeypatch): method test_startup_payload_fields (line 191) | async def test_startup_payload_fields(self, monkeypatch): class TestHeartbeat (line 231) | class TestHeartbeat: method test_heartbeat_enabled_when_not_opted_out (line 234) | async def test_heartbeat_enabled_when_not_opted_out(self, monkeypatch): method test_heartbeat_disabled_when_opted_out (line 247) | async def test_heartbeat_disabled_when_opted_out(self, monkeypatch): method test_heartbeat_payload_fields (line 260) | async def test_heartbeat_payload_fields(self, monkeypatch): method test_heartbeat_payload_search_backend_file (line 309) | async def test_heartbeat_payload_search_backend_file(self, monkeypatch): method test_heartbeat_payload_search_backend_documentdb (line 335) | async def test_heartbeat_payload_search_backend_documentdb(self, monke... method test_both_startup_and_heartbeat_sent_by_default (line 364) | async def test_both_startup_and_heartbeat_sent_by_default(self, monkey... method test_heartbeat_not_sent_twice_within_lock_window (line 431) | async def test_heartbeat_not_sent_twice_within_lock_window(self, monke... class TestDebugMode (line 486) | class TestDebugMode: method test_debug_mode_logs_not_sends (line 489) | async def test_debug_mode_logs_not_sends(self, monkeypatch, caplog): method test_debug_mode_shows_full_payload (line 511) | async def test_debug_mode_shows_full_payload(self, monkeypatch, caplog): class TestLiveCollector (line 540) | class TestLiveCollector: FILE: tests/integration/test_virtual_server_api.py function client (line 49) | def client(): function mock_auth_admin (line 55) | def mock_auth_admin(client): function mock_auth_user (line 63) | def mock_auth_user(client): function mock_vs_service (line 71) | def mock_vs_service(): function mock_catalog_service (line 98) | def mock_catalog_service(): class TestListVirtualServers (line 105) | class TestListVirtualServers: method test_list_empty (line 108) | def test_list_empty(self, client, mock_auth_admin, mock_vs_service): method test_list_with_user_auth (line 121) | def test_list_with_user_auth(self, client, mock_auth_user, mock_vs_ser... class TestCreateVirtualServer (line 132) | class TestCreateVirtualServer: method test_create_success (line 135) | def test_create_success(self, client, mock_auth_admin, mock_vs_service): method test_create_requires_admin (line 158) | def test_create_requires_admin(self, client, mock_auth_user, mock_vs_s... method test_create_validation_error (line 171) | def test_create_validation_error(self, client, mock_auth_admin, mock_v... method test_create_duplicate_path_returns_409 (line 191) | def test_create_duplicate_path_returns_409(self, client, mock_auth_adm... class TestGetVirtualServer (line 211) | class TestGetVirtualServer: method test_get_existing (line 214) | def test_get_existing(self, client, mock_auth_admin, mock_vs_service): method test_get_not_found (line 231) | def test_get_not_found(self, client, mock_auth_admin, mock_vs_service): class TestUpdateVirtualServer (line 244) | class TestUpdateVirtualServer: method test_update_success (line 247) | def test_update_success(self, client, mock_auth_admin, mock_vs_service): method test_update_requires_admin (line 267) | def test_update_requires_admin(self, client, mock_auth_user, mock_vs_s... class TestDeleteVirtualServer (line 281) | class TestDeleteVirtualServer: method test_delete_success (line 284) | def test_delete_success(self, client, mock_auth_admin, mock_vs_service): method test_delete_requires_admin (line 298) | def test_delete_requires_admin(self, client, mock_auth_user, mock_vs_s... method test_delete_not_found (line 310) | def test_delete_not_found(self, client, mock_auth_admin, mock_vs_servi... class TestToggleVirtualServer (line 329) | class TestToggleVirtualServer: method test_toggle_enable (line 332) | def test_toggle_enable(self, client, mock_auth_admin, mock_vs_service): method test_toggle_requires_admin (line 349) | def test_toggle_requires_admin(self, client, mock_auth_user, mock_vs_s... method test_toggle_not_found (line 362) | def test_toggle_not_found(self, client, mock_auth_admin, mock_vs_servi... method test_toggle_validation_error (line 381) | def test_toggle_validation_error(self, client, mock_auth_admin, mock_v... class TestVirtualServerTools (line 402) | class TestVirtualServerTools: method test_get_tools (line 405) | def test_get_tools(self, client, mock_auth_admin, mock_vs_service): method test_get_tools_not_found (line 432) | def test_get_tools_not_found(self, client, mock_auth_admin, mock_vs_se... class TestUpdateVirtualServerErrors (line 451) | class TestUpdateVirtualServerErrors: method client (line 455) | def client(self): method mock_auth_admin (line 460) | def mock_auth_admin(self, client): method mock_vs_service (line 467) | def mock_vs_service(self): method test_update_not_found (line 471) | def test_update_not_found(self, client, mock_auth_admin, mock_vs_servi... method test_update_validation_error (line 490) | def test_update_validation_error(self, client, mock_auth_admin, mock_v... class TestToolCatalog (line 510) | class TestToolCatalog: method test_get_catalog_empty (line 513) | def test_get_catalog_empty(self, client, mock_auth_admin, mock_catalog... method test_get_catalog_with_filter (line 526) | def test_get_catalog_with_filter(self, client, mock_auth_admin, mock_c... class TestNormalizeVirtualPath (line 551) | class TestNormalizeVirtualPath: method test_path_already_normalized (line 554) | def test_path_already_normalized(self): method test_path_without_leading_slash (line 558) | def test_path_without_leading_slash(self): method test_bare_slug (line 562) | def test_bare_slug(self): method test_empty_path (line 566) | def test_empty_path(self): method test_path_with_double_dots (line 572) | def test_path_with_double_dots(self): method test_path_with_special_characters (line 579) | def test_path_with_special_characters(self): method test_path_that_is_just_virtual (line 585) | def test_path_that_is_just_virtual(self): method test_path_with_encoded_characters (line 590) | def test_path_with_encoded_characters(self): method test_path_with_trailing_slash (line 596) | def test_path_with_trailing_slash(self): method test_path_with_nested_virtual (line 602) | def test_path_with_nested_virtual(self): class TestRateVirtualServer (line 609) | class TestRateVirtualServer: method test_rate_success (line 612) | def test_rate_success(self, client, mock_auth_user, mock_vs_service): method test_rate_not_found (line 629) | def test_rate_not_found(self, client, mock_auth_user, mock_vs_service): method test_rate_invalid_rating (line 648) | def test_rate_invalid_rating(self, client, mock_auth_user, mock_vs_ser... method test_rate_update_existing (line 666) | def test_rate_update_existing(self, client, mock_auth_user, mock_vs_se... class TestGetVirtualServerRating (line 688) | class TestGetVirtualServerRating: method test_get_rating_success (line 691) | def test_get_rating_success(self, client, mock_auth_user, mock_vs_serv... method test_get_rating_not_found (line 707) | def test_get_rating_not_found(self, client, mock_auth_user, mock_vs_se... method test_get_rating_empty (line 725) | def test_get_rating_empty(self, client, mock_auth_user, mock_vs_service): FILE: tests/security/test_container_security.py function repo_root (line 34) | def repo_root() -> Path: function test_dockerfile_has_user_directive (line 40) | def test_dockerfile_has_user_directive(repo_root: Path, dockerfile_path:... function test_dockerfile_user_not_root (line 53) | def test_dockerfile_user_not_root(repo_root: Path, dockerfile_path: str): function test_dockerfile_no_sudo (line 70) | def test_dockerfile_no_sudo(repo_root: Path, dockerfile_path: str): function test_dockerfile_has_healthcheck (line 89) | def test_dockerfile_has_healthcheck(repo_root: Path, dockerfile_path: str): function test_python_dockerfile_has_pip_no_cache (line 115) | def test_python_dockerfile_has_pip_no_cache(repo_root: Path, dockerfile_... function test_docker_compose_has_security_options (line 130) | def test_docker_compose_has_security_options(repo_root: Path): function test_docker_compose_mongodb_cap_add (line 146) | def test_docker_compose_mongodb_cap_add(repo_root: Path): function test_docker_compose_registry_port_mapping (line 177) | def test_docker_compose_registry_port_mapping(repo_root: Path): FILE: tests/test_infrastructure.py class TestInfrastructure (line 19) | class TestInfrastructure: method test_constants_imported (line 22) | def test_constants_imported(self): method test_mock_faiss_index (line 27) | def test_mock_faiss_index(self): method test_mock_embeddings_client (line 48) | def test_mock_embeddings_client(self): method test_mock_jwt_validator (line 58) | def test_mock_jwt_validator(self): method test_mock_http_response (line 74) | def test_mock_http_response(self): method test_server_factory (line 81) | def test_server_factory(self): method test_agent_factory (line 89) | def test_agent_factory(self): method test_helpers_minimal_server (line 97) | def test_helpers_minimal_server(self): method test_helpers_minimal_agent (line 105) | def test_helpers_minimal_agent(self): method test_settings_fixture (line 113) | def test_settings_fixture(self, test_settings): method test_sample_fixtures (line 117) | def test_sample_fixtures(self, sample_server_info, sample_agent_card): FILE: tests/unit/api/test_agent_routes.py function test_app (line 47) | def test_app(mock_user_context): function mock_user_context (line 69) | def mock_user_context() -> dict[str, Any]: function mock_admin_context (line 91) | def mock_admin_context() -> dict[str, Any]: function mock_limited_user_context (line 113) | def mock_limited_user_context() -> dict[str, Any]: function test_app_admin (line 131) | def test_app_admin(mock_admin_context): function test_app_limited (line 150) | def test_app_limited(mock_limited_user_context): function sample_agent_card (line 169) | def sample_agent_card() -> AgentCard: function sample_internal_agent_card (line 198) | def sample_internal_agent_card() -> AgentCard: function sample_group_restricted_agent_card (line 211) | def sample_group_restricted_agent_card() -> AgentCard: class TestNormalizePath (line 232) | class TestNormalizePath: method test_normalize_path_with_leading_slash (line 235) | def test_normalize_path_with_leading_slash(self): method test_normalize_path_without_leading_slash (line 246) | def test_normalize_path_without_leading_slash(self): method test_normalize_path_removes_trailing_slash (line 257) | def test_normalize_path_removes_trailing_slash(self): method test_normalize_path_auto_generate_from_agent_name (line 268) | def test_normalize_path_auto_generate_from_agent_name(self): method test_normalize_path_none_without_agent_name_raises_error (line 280) | def test_normalize_path_none_without_agent_name_raises_error(self): method test_normalize_path_preserves_root_path (line 290) | def test_normalize_path_preserves_root_path(self): class TestCheckAgentPermission (line 305) | class TestCheckAgentPermission: method test_check_agent_permission_granted (line 308) | def test_check_agent_permission_granted(self, mock_user_context): method test_check_agent_permission_denied (line 325) | def test_check_agent_permission_denied(self, mock_user_context): class TestFilterAgentsByAccess (line 345) | class TestFilterAgentsByAccess: method test_filter_agents_admin_sees_all (line 348) | def test_filter_agents_admin_sees_all( method test_filter_agents_public_visible_to_all (line 365) | def test_filter_agents_public_visible_to_all(self, mock_user_context, ... method test_filter_agents_internal_only_visible_to_owner (line 377) | def test_filter_agents_internal_only_visible_to_owner( method test_filter_agents_internal_not_visible_to_others (line 390) | def test_filter_agents_internal_not_visible_to_others(self, mock_limit... method test_filter_agents_group_restricted_visible_to_group_members (line 406) | def test_filter_agents_group_restricted_visible_to_group_members( method test_filter_agents_group_restricted_not_visible_to_non_members (line 420) | def test_filter_agents_group_restricted_not_visible_to_non_members( method test_filter_agents_respects_accessible_agents_list (line 434) | def test_filter_agents_respects_accessible_agents_list( class TestRegisterAgent (line 464) | class TestRegisterAgent: method test_register_agent_success (line 468) | async def test_register_agent_success(self, test_app, mock_user_context): method test_register_agent_path_conflict (line 507) | async def test_register_agent_path_conflict( method test_register_agent_validation_failure (line 532) | async def test_register_agent_validation_failure(self, test_app, mock_... method test_register_agent_no_permission (line 564) | async def test_register_agent_no_permission(self, test_app_limited): class TestListAgents (line 587) | class TestListAgents: method test_list_agents_success (line 591) | async def test_list_agents_success(self, test_app_admin, mock_admin_co... method test_list_agents_enabled_only_filter (line 616) | async def test_list_agents_enabled_only_filter(self, test_app, mock_us... method test_list_agents_visibility_filter (line 641) | async def test_list_agents_visibility_filter(self, test_app, mock_admi... method test_list_agents_query_search (line 666) | async def test_list_agents_query_search(self, test_app, mock_user_cont... method test_list_agents_query_matches_metadata_value (line 701) | async def test_list_agents_query_matches_metadata_value(self, test_app... method test_list_agents_query_matches_metadata_key (line 732) | async def test_list_agents_query_matches_metadata_key(self, test_app, ... method test_list_agents_query_matches_metadata_list_item (line 753) | async def test_list_agents_query_matches_metadata_list_item(self, test... method test_list_agents_query_no_match_in_metadata (line 774) | async def test_list_agents_query_no_match_in_metadata(self, test_app, ... method test_list_agents_empty_metadata_no_error (line 795) | async def test_list_agents_empty_metadata_no_error(self, test_app, moc... method test_list_agents_limit_exceeds_max_rejected (line 818) | async def test_list_agents_limit_exceeds_max_rejected(self, test_app, ... method test_list_agents_limit_zero_rejected (line 824) | async def test_list_agents_limit_zero_rejected(self, test_app, mock_us... method test_list_agents_negative_offset_rejected (line 830) | async def test_list_agents_negative_offset_rejected(self, test_app, mo... method test_list_agents_fast_path_with_limit_offset (line 838) | async def test_list_agents_fast_path_with_limit_offset(self, test_app_... method test_list_agents_fast_path_has_next_false (line 857) | async def test_list_agents_fast_path_has_next_false(self, test_app_adm... method test_list_agents_fast_path_offset_beyond_total (line 873) | async def test_list_agents_fast_path_offset_beyond_total(self, test_ap... method test_list_agents_fallback_with_query_filter (line 891) | async def test_list_agents_fallback_with_query_filter(self, test_app, ... method test_list_agents_restricted_user_pagination (line 928) | async def test_list_agents_restricted_user_pagination(self, test_app_l... method test_list_agents_restricted_user_offset_slicing (line 952) | async def test_list_agents_restricted_user_offset_slicing(self, test_a... class TestCheckAgentHealth (line 977) | class TestCheckAgentHealth: method test_check_agent_health_healthy (line 981) | async def test_check_agent_health_healthy(self, test_app, mock_user_co... method test_check_agent_health_unhealthy (line 1010) | async def test_check_agent_health_unhealthy( method test_check_agent_health_not_found (line 1044) | async def test_check_agent_health_not_found(self, test_app, mock_user_... method test_check_agent_health_disabled_agent (line 1057) | async def test_check_agent_health_disabled_agent( class TestRateAgent (line 1077) | class TestRateAgent: method test_rate_agent_success (line 1081) | async def test_rate_agent_success(self, test_app, mock_user_context, s... method test_rate_agent_invalid_rating (line 1100) | async def test_rate_agent_invalid_rating(self, test_app, mock_user_con... method test_rate_agent_not_found (line 1118) | async def test_rate_agent_not_found(self, test_app, mock_user_context): method test_rate_agent_no_access (line 1133) | async def test_rate_agent_no_access( class TestGetAgentRating (line 1155) | class TestGetAgentRating: method test_get_agent_rating_success (line 1159) | async def test_get_agent_rating_success(self, test_app, mock_user_cont... method test_get_agent_rating_not_found (line 1176) | async def test_get_agent_rating_not_found(self, test_app, mock_user_co... class TestToggleAgent (line 1192) | class TestToggleAgent: method test_toggle_agent_enable_success (line 1196) | async def test_toggle_agent_enable_success( method test_toggle_agent_no_permission (line 1222) | async def test_toggle_agent_no_permission( method test_toggle_agent_not_found (line 1242) | async def test_toggle_agent_not_found(self, test_app, mock_user_context): class TestGetAgent (line 1258) | class TestGetAgent: method test_get_agent_success (line 1262) | async def test_get_agent_success(self, test_app, mock_user_context, sa... method test_get_agent_not_found (line 1278) | async def test_get_agent_not_found(self, test_app, mock_user_context): method test_get_agent_no_access (line 1291) | async def test_get_agent_no_access( class TestUpdateAgent (line 1311) | class TestUpdateAgent: method test_update_agent_success (line 1315) | async def test_update_agent_success(self, test_app, mock_user_context,... method test_update_agent_not_owner (line 1351) | async def test_update_agent_not_owner(self, test_app, mock_user_context): method test_update_agent_validation_failure (line 1382) | async def test_update_agent_validation_failure( class TestDeleteAgent (line 1418) | class TestDeleteAgent: method test_delete_agent_success (line 1422) | async def test_delete_agent_success(self, test_app, mock_user_context,... method test_delete_agent_not_owner (line 1440) | async def test_delete_agent_not_owner(self, test_app, mock_user_context): method test_delete_agent_not_found (line 1460) | async def test_delete_agent_not_found(self, test_app, mock_user_context): class TestDiscoverAgentsBySkills (line 1476) | class TestDiscoverAgentsBySkills: method test_discover_agents_by_skills_success (line 1485) | async def test_discover_agents_by_skills_success(self, test_app, mock_... method test_discover_agents_by_skills_no_skills_provided (line 1517) | async def test_discover_agents_by_skills_no_skills_provided(self, test... method test_discover_agents_by_skills_with_tag_filtering (line 1539) | async def test_discover_agents_by_skills_with_tag_filtering(self, test... class TestDiscoverAgentsSemantic (line 1584) | class TestDiscoverAgentsSemantic: method test_discover_agents_semantic_success (line 1588) | async def test_discover_agents_semantic_success(self, test_app, mock_u... method test_discover_agents_semantic_empty_query (line 1631) | async def test_discover_agents_semantic_empty_query(self, test_app, mo... class TestRatingRequestModel (line 1658) | class TestRatingRequestModel: method test_rating_request_valid (line 1661) | def test_rating_request_valid(self): method test_rating_request_invalid_type (line 1669) | def test_rating_request_invalid_type(self): FILE: tests/unit/api/test_config_export.py class TestConfigExport (line 16) | class TestConfigExport: method test_export_env_masks_sensitive (line 19) | def test_export_env_masks_sensitive(self): method test_export_env_includes_sensitive_when_requested (line 26) | def test_export_env_includes_sensitive_when_requested(self): method test_export_json_valid_json (line 31) | def test_export_json_valid_json(self): method test_export_tfvars_valid_syntax (line 41) | def test_export_tfvars_valid_syntax(self): FILE: tests/unit/api/test_federation_export_routes.py function mock_federation_auth (line 27) | def mock_federation_auth(): function mock_federation_auth_no_groups (line 49) | def mock_federation_auth_no_groups(): function mock_federation_auth_missing_scope (line 71) | def mock_federation_auth_missing_scope(): function sample_server_public (line 93) | def sample_server_public() -> dict[str, Any]: function sample_server_group_restricted (line 109) | def sample_server_group_restricted() -> dict[str, Any]: function sample_server_internal (line 125) | def sample_server_internal() -> dict[str, Any]: function sample_agent_public (line 141) | def sample_agent_public() -> dict[str, Any]: function sample_agent_group_restricted (line 157) | def sample_agent_group_restricted() -> dict[str, Any]: class TestFederationHealth (line 173) | class TestFederationHealth: method test_health_returns_200 (line 176) | def test_health_returns_200(self) -> None: method test_health_no_auth_required (line 188) | def test_health_no_auth_required(self) -> None: class TestFederationAuthRequirements (line 198) | class TestFederationAuthRequirements: method test_export_servers_requires_auth (line 201) | def test_export_servers_requires_auth(self) -> None: method test_export_agents_requires_auth (line 228) | def test_export_agents_requires_auth(self) -> None: method test_missing_federation_scope_returns_403 (line 255) | def test_missing_federation_scope_returns_403( class TestVisibilityFiltering (line 274) | class TestVisibilityFiltering: method test_public_items_returned_to_all_peers (line 277) | def test_public_items_returned_to_all_peers( method test_group_restricted_returned_if_peer_in_group (line 313) | def test_group_restricted_returned_if_peer_in_group( method test_group_restricted_not_returned_if_peer_not_in_group (line 351) | def test_group_restricted_not_returned_if_peer_not_in_group( method test_internal_items_never_returned (line 388) | def test_internal_items_never_returned( method test_mixed_visibility_filtering (line 423) | def test_mixed_visibility_filtering( class TestIncrementalSync (line 472) | class TestIncrementalSync: method test_since_generation_filters_items (line 475) | def test_since_generation_filters_items( method test_since_generation_zero_returns_all (line 522) | def test_since_generation_zero_returns_all( method test_response_includes_sync_generation (line 557) | def test_response_includes_sync_generation( class TestPagination (line 595) | class TestPagination: method test_pagination_limit_offset (line 598) | def test_pagination_limit_offset( method test_limit_exceeds_max (line 654) | def test_limit_exceeds_max( method test_pagination_metadata (line 676) | def test_pagination_metadata( class TestEmptyRegistry (line 716) | class TestEmptyRegistry: method test_empty_registry_returns_empty_list (line 719) | def test_empty_registry_returns_empty_list( method test_empty_agents_returns_empty_list (line 745) | def test_empty_agents_returns_empty_list( class TestAgentsEndpoint (line 773) | class TestAgentsEndpoint: method test_export_agents_success (line 776) | def test_export_agents_success( method test_export_agents_visibility_filtering (line 818) | def test_export_agents_visibility_filtering( class TestHelperFunctions (line 876) | class TestHelperFunctions: method test_get_item_attr_dict (line 879) | def test_get_item_attr_dict(self) -> None: method test_get_item_attr_object (line 887) | def test_get_item_attr_object(self) -> None: method test_filter_by_visibility_public_only (line 897) | def test_filter_by_visibility_public_only(self) -> None: method test_filter_by_visibility_group_match (line 914) | def test_filter_by_visibility_group_match(self) -> None: method test_filter_by_visibility_multiple_groups (line 934) | def test_filter_by_visibility_multiple_groups(self) -> None: method test_filter_by_visibility_empty_allowed_groups (line 954) | def test_filter_by_visibility_empty_allowed_groups(self) -> None: method test_filter_by_visibility_no_visibility_field (line 965) | def test_filter_by_visibility_no_visibility_field(self) -> None: method test_filter_by_generation_filters_correctly (line 977) | def test_filter_by_generation_filters_correctly(self) -> None: method test_filter_by_generation_none_returns_all (line 991) | def test_filter_by_generation_none_returns_all(self) -> None: method test_filter_by_generation_missing_metadata (line 1002) | def test_filter_by_generation_missing_metadata(self) -> None: method test_item_to_dict_dict (line 1022) | def test_item_to_dict_dict(self) -> None: method test_item_to_dict_pydantic (line 1030) | def test_item_to_dict_pydantic(self) -> None: method test_paginate_first_page (line 1040) | def test_paginate_first_page(self) -> None: method test_paginate_middle_page (line 1050) | def test_paginate_middle_page(self) -> None: method test_paginate_last_page (line 1060) | def test_paginate_last_page(self) -> None: method test_check_federation_scope_valid (line 1070) | def test_check_federation_scope_valid(self) -> None: method test_check_federation_scope_invalid (line 1080) | def test_check_federation_scope_invalid(self) -> None: class TestDisabledItemsFiltering (line 1097) | class TestDisabledItemsFiltering: method test_disabled_servers_not_exported (line 1100) | def test_disabled_servers_not_exported( method test_disabled_agents_not_exported (line 1135) | def test_disabled_agents_not_exported( class TestChainPrevention (line 1175) | class TestChainPrevention: method test_is_federated_item_with_dict (line 1183) | def test_is_federated_item_with_dict(self) -> None: method test_is_federated_item_with_object (line 1196) | def test_is_federated_item_with_object(self) -> None: method test_is_federated_item_local_item (line 1204) | def test_is_federated_item_local_item(self) -> None: method test_is_federated_item_local_with_sync_metadata (line 1213) | def test_is_federated_item_local_with_sync_metadata(self) -> None: method test_is_federated_item_no_is_federated_field (line 1226) | def test_is_federated_item_no_is_federated_field(self) -> None: method test_filter_by_visibility_excludes_federated_items (line 1237) | def test_filter_by_visibility_excludes_federated_items(self) -> None: method test_filter_by_visibility_mixed_local_and_federated (line 1268) | def test_filter_by_visibility_mixed_local_and_federated(self) -> None: method test_export_servers_excludes_federated (line 1309) | def test_export_servers_excludes_federated( method test_export_agents_excludes_federated (line 1359) | def test_export_agents_excludes_federated( FILE: tests/unit/api/test_log_routes.py function _clear_rate_limit_cache (line 19) | def _clear_rate_limit_cache(): function mock_admin_context (line 30) | def mock_admin_context() -> dict[str, Any]: function mock_non_admin_context (line 45) | def mock_non_admin_context() -> dict[str, Any]: function mock_app_log_repo (line 60) | def mock_app_log_repo(): function sample_log_entries (line 69) | def sample_log_entries() -> list[dict[str, Any]]: function admin_client (line 99) | def admin_client(mock_admin_context, mock_app_log_repo): function non_admin_client (line 118) | def non_admin_client(mock_non_admin_context, mock_app_log_repo): function no_mongo_client (line 137) | def no_mongo_client(mock_admin_context): class TestLogRoutesAccessControl (line 161) | class TestLogRoutesAccessControl: method test_query_logs_requires_admin (line 164) | def test_query_logs_requires_admin(self, non_admin_client): method test_export_logs_requires_admin (line 169) | def test_export_logs_requires_admin(self, non_admin_client): method test_metadata_requires_admin (line 173) | def test_metadata_requires_admin(self, non_admin_client): method test_admin_can_query_logs (line 177) | def test_admin_can_query_logs(self, admin_client): method test_admin_can_get_metadata (line 181) | def test_admin_can_get_metadata(self, admin_client): class TestQueryLogs (line 191) | class TestQueryLogs: method test_empty_response (line 194) | def test_empty_response(self, admin_client): method test_with_entries (line 203) | def test_with_entries(self, admin_client, mock_app_log_repo, sample_lo... method test_filter_by_service (line 213) | def test_filter_by_service(self, admin_client, mock_app_log_repo): method test_filter_by_level (line 222) | def test_filter_by_level(self, admin_client, mock_app_log_repo): method test_filter_by_hostname (line 230) | def test_filter_by_hostname(self, admin_client, mock_app_log_repo): method test_filter_by_time_range (line 238) | def test_filter_by_time_range(self, admin_client, mock_app_log_repo): method test_search_in_message (line 249) | def test_search_in_message(self, admin_client, mock_app_log_repo): method test_pagination_params (line 257) | def test_pagination_params(self, admin_client, mock_app_log_repo): method test_has_next_true (line 266) | def test_has_next_true(self, admin_client, mock_app_log_repo, sample_l... method test_has_next_false_at_end (line 274) | def test_has_next_false_at_end(self, admin_client, mock_app_log_repo, ... method test_limit_validation_too_low (line 281) | def test_limit_validation_too_low(self, admin_client): method test_limit_validation_too_high (line 285) | def test_limit_validation_too_high(self, admin_client): method test_offset_validation_negative (line 289) | def test_offset_validation_negative(self, admin_client): class TestExportLogs (line 299) | class TestExportLogs: method test_export_empty (line 302) | def test_export_empty(self, admin_client, mock_app_log_repo): method test_export_with_entries (line 310) | def test_export_with_entries(self, admin_client, mock_app_log_repo, sa... method test_export_content_disposition (line 318) | def test_export_content_disposition(self, admin_client, mock_app_log_r... method test_export_with_filters (line 326) | def test_export_with_filters(self, admin_client, mock_app_log_repo): method test_export_limit_validation (line 335) | def test_export_limit_validation(self, admin_client): class TestLogMetadata (line 345) | class TestLogMetadata: method test_metadata_returns_services_and_hostnames (line 348) | def test_metadata_returns_services_and_hostnames(self, admin_client, m... class TestNoMongoDBBackend (line 364) | class TestNoMongoDBBackend: method test_query_returns_503 (line 367) | def test_query_returns_503(self, no_mongo_client): method test_export_returns_503 (line 372) | def test_export_returns_503(self, no_mongo_client): method test_metadata_returns_503 (line 376) | def test_metadata_returns_503(self, no_mongo_client): class TestRateLimiting (line 386) | class TestRateLimiting: method test_rate_limit_exceeded (line 389) | def test_rate_limit_exceeded(self, admin_client, mock_app_log_repo): method test_rate_limit_applies_to_export (line 400) | def test_rate_limit_applies_to_export(self, admin_client, mock_app_log... class TestSearchSanitization (line 415) | class TestSearchSanitization: method test_regex_metacharacters_escaped (line 418) | def test_regex_metacharacters_escaped(self, admin_client, mock_app_log... method test_search_truncated_at_max_length (line 426) | def test_search_truncated_at_max_length(self, admin_client, mock_app_l... method test_empty_search_returns_none (line 435) | def test_empty_search_returns_none(self, admin_client, mock_app_log_re... method test_level_no_mapping (line 443) | def test_level_no_mapping(self, admin_client, mock_app_log_repo): FILE: tests/unit/api/test_m2m_management_routes.py function admin_user_context (line 30) | def admin_user_context() -> dict[str, Any]: function regular_user_context (line 45) | def regular_user_context() -> dict[str, Any]: function sample_client (line 60) | def sample_client() -> IdPM2MClient: function _override_auth (line 76) | def _override_auth(user_context: dict | None) -> None: function mock_service (line 88) | def mock_service() -> MagicMock: function client_admin (line 99) | def client_admin(mock_settings, admin_user_context, mock_service): function client_regular (line 113) | def client_regular(mock_settings, regular_user_context, mock_service): function client_anon (line 127) | def client_anon(mock_settings, mock_service): class TestCreateM2MClient (line 142) | class TestCreateM2MClient: method test_unauthenticated_returns_401 (line 145) | def test_unauthenticated_returns_401(self, client_anon): method test_non_admin_returns_403 (line 155) | def test_non_admin_returns_403(self, client_regular): method test_happy_path_returns_201 (line 165) | def test_happy_path_returns_201( method test_conflict_returns_409 (line 191) | def test_conflict_returns_409(self, client_admin): method test_invalid_client_id_returns_422 (line 202) | def test_invalid_client_id_returns_422(self, client_admin): class TestListM2MClients (line 215) | class TestListM2MClients: method test_unauthenticated_returns_401 (line 218) | def test_unauthenticated_returns_401(self, client_anon): method test_returns_paginated_envelope (line 225) | def test_returns_paginated_envelope( method test_passes_provider_filter (line 243) | def test_passes_provider_filter(self, client_admin): method test_enforces_limit_cap (line 252) | def test_enforces_limit_cap(self, client_admin): method test_passes_skip_and_limit (line 260) | def test_passes_skip_and_limit(self, client_admin): class TestGetM2MClient (line 273) | class TestGetM2MClient: method test_unauthenticated_returns_401 (line 276) | def test_unauthenticated_returns_401(self, client_anon): method test_returns_200_on_found (line 283) | def test_returns_200_on_found( method test_returns_404_on_missing (line 296) | def test_returns_404_on_missing(self, client_admin): class TestPatchM2MClient (line 307) | class TestPatchM2MClient: method test_non_admin_returns_403 (line 310) | def test_non_admin_returns_403(self, client_regular): method test_happy_path_returns_200 (line 320) | def test_happy_path_returns_200( method test_not_found_returns_404 (line 335) | def test_not_found_returns_404(self, client_admin): method test_immutable_returns_403 (line 346) | def test_immutable_returns_403(self, client_admin): class TestDeleteM2MClient (line 360) | class TestDeleteM2MClient: method test_non_admin_returns_403 (line 363) | def test_non_admin_returns_403(self, client_regular): method test_happy_path_returns_204 (line 370) | def test_happy_path_returns_204(self, client_admin): method test_not_found_returns_404 (line 378) | def test_not_found_returns_404(self, client_admin): method test_immutable_returns_403 (line 386) | def test_immutable_returns_403(self, client_admin): FILE: tests/unit/api/test_management_routes.py function admin_user_context (line 27) | def admin_user_context() -> dict[str, Any]: function regular_user_context (line 50) | def regular_user_context() -> dict[str, Any]: function mock_auth_admin (line 69) | def mock_auth_admin(admin_user_context, mock_settings): function mock_auth_regular (line 89) | def mock_auth_regular(regular_user_context, mock_settings): function mock_iam_manager (line 114) | def mock_iam_manager(): function test_client_admin (line 156) | def test_client_admin(mock_settings, mock_auth_admin, mock_iam_manager): function test_client_regular (line 169) | def test_client_regular(mock_settings, mock_auth_regular, mock_iam_manag... class TestManagementListUsers (line 188) | class TestManagementListUsers: method test_list_users_success (line 191) | def test_list_users_success(self, test_client_admin): method test_list_users_with_search (line 230) | def test_list_users_with_search(self, test_client_admin): method test_list_users_requires_admin (line 255) | def test_list_users_requires_admin(self, test_client_regular): method test_list_users_iam_error (line 267) | def test_list_users_iam_error(self, test_client_admin): class TestManagementListGroups (line 288) | class TestManagementListGroups: method test_list_groups_success (line 291) | def test_list_groups_success(self, test_client_admin): method test_list_groups_returns_group_summary (line 324) | def test_list_groups_returns_group_summary(self, test_client_admin): method test_list_groups_requires_admin (line 352) | def test_list_groups_requires_admin(self, test_client_regular): method test_list_groups_iam_error (line 364) | def test_list_groups_iam_error(self, test_client_admin): class TestManagementCreateGroup (line 385) | class TestManagementCreateGroup: method test_create_group_success_keycloak (line 388) | def test_create_group_success_keycloak(self, test_client_admin): method test_create_group_success_entra (line 437) | def test_create_group_success_entra(self, test_client_admin): method test_create_group_requires_admin (line 487) | def test_create_group_requires_admin(self, test_client_regular): method test_create_group_already_exists (line 502) | def test_create_group_already_exists(self, test_client_admin): method test_create_group_iam_error (line 521) | def test_create_group_iam_error(self, test_client_admin): method test_create_group_scope_import_failure_logs_warning (line 540) | def test_create_group_scope_import_failure_logs_warning(self, test_cli... method test_create_group_without_description (line 573) | def test_create_group_without_description(self, test_client_admin): class TestManagementCreateGroupCreateInIdp (line 623) | class TestManagementCreateGroupCreateInIdp: method test_create_group_with_create_in_idp_false (line 626) | def test_create_group_with_create_in_idp_false(self, test_client_admin): method test_create_group_with_create_in_idp_true (line 667) | def test_create_group_with_create_in_idp_true(self, test_client_admin): method test_create_group_default_does_not_create_in_idp (line 718) | def test_create_group_default_does_not_create_in_idp(self, test_client... class TestManagementDeleteGroupLocalOnly (line 763) | class TestManagementDeleteGroupLocalOnly: method test_delete_local_only_group_succeeds (line 766) | def test_delete_local_only_group_succeeds(self, test_client_admin): class TestManagementDeleteGroup (line 798) | class TestManagementDeleteGroup: method test_delete_group_success (line 801) | def test_delete_group_success(self, test_client_admin): method test_delete_group_requires_admin (line 826) | def test_delete_group_requires_admin(self, test_client_regular): method test_delete_group_not_found_in_idp_still_deletes_from_mongodb (line 838) | def test_delete_group_not_found_in_idp_still_deletes_from_mongodb(self... method test_delete_group_iam_error (line 862) | def test_delete_group_iam_error(self, test_client_admin): method test_delete_group_scope_deletion_failure_logs_warning (line 875) | def test_delete_group_scope_deletion_failure_logs_warning(self, test_c... class TestManagementHelpers (line 903) | class TestManagementHelpers: method test_translate_iam_error_already_exists (line 906) | def test_translate_iam_error_already_exists(self): method test_translate_iam_error_not_found (line 914) | def test_translate_iam_error_not_found(self): method test_translate_iam_error_generic (line 922) | def test_translate_iam_error_generic(self): method test_require_admin_passes_for_admin (line 930) | def test_require_admin_passes_for_admin(self, admin_user_context): method test_require_admin_raises_for_non_admin (line 937) | def test_require_admin_raises_for_non_admin(self, regular_user_context): FILE: tests/unit/api/test_peer_management_routes.py function admin_user_context (line 27) | def admin_user_context() -> dict[str, Any]: function non_admin_user_context (line 50) | def non_admin_user_context() -> dict[str, Any]: function mock_auth_admin (line 66) | def mock_auth_admin(admin_user_context): function mock_auth_regular (line 82) | def mock_auth_regular(non_admin_user_context): function mock_peer_federation_service (line 103) | def mock_peer_federation_service(): function sample_peer_config (line 112) | def sample_peer_config(): class TestUpdatePeerToken (line 131) | class TestUpdatePeerToken: method test_update_peer_token_success (line 135) | async def test_update_peer_token_success( method test_update_peer_token_not_found (line 176) | async def test_update_peer_token_not_found( method test_update_peer_token_requires_admin (line 207) | async def test_update_peer_token_requires_admin( method test_update_peer_token_missing_token_field (line 235) | async def test_update_peer_token_missing_token_field( method test_update_peer_token_empty_token_value (line 263) | async def test_update_peer_token_empty_token_value( method test_update_peer_token_internal_error (line 301) | async def test_update_peer_token_internal_error( FILE: tests/unit/api/test_search_routes.py function mock_http_request (line 41) | def mock_http_request(): function mock_search_repo (line 49) | def mock_search_repo(): function mock_server_service (line 56) | def mock_server_service(): function mock_agent_service (line 63) | def mock_agent_service(): function mock_server_and_agent_service_db_calls (line 70) | def mock_server_and_agent_service_db_calls(): function admin_user_context (line 134) | def admin_user_context() -> dict[str, Any]: function regular_user_context (line 147) | def regular_user_context() -> dict[str, Any]: function restricted_user_context (line 160) | def restricted_user_context() -> dict[str, Any]: function user_with_all_servers_context (line 173) | def user_with_all_servers_context() -> dict[str, Any]: function sample_faiss_search_results (line 186) | def sample_faiss_search_results() -> dict[str, list[dict[str, Any]]]: class TestPydanticModels (line 277) | class TestPydanticModels: method test_matching_tool_result_valid (line 280) | def test_matching_tool_result_valid(self): method test_matching_tool_result_defaults (line 296) | def test_matching_tool_result_defaults(self): method test_matching_tool_result_score_validation (line 307) | def test_matching_tool_result_score_validation(self): method test_server_search_result_valid (line 319) | def test_server_search_result_valid(self): method test_server_search_result_defaults (line 340) | def test_server_search_result_defaults(self): method test_tool_search_result_valid (line 355) | def test_tool_search_result_valid(self): method test_agent_search_result_valid (line 372) | def test_agent_search_result_valid(self): method test_agent_search_result_defaults (line 395) | def test_agent_search_result_defaults(self): method test_semantic_search_request_valid (line 414) | def test_semantic_search_request_valid(self): method test_semantic_search_request_defaults (line 428) | def test_semantic_search_request_defaults(self): method test_semantic_search_request_query_length_validation (line 438) | def test_semantic_search_request_query_length_validation(self): method test_semantic_search_request_max_results_validation (line 450) | def test_semantic_search_request_max_results_validation(self): method test_semantic_search_request_entity_types_validation (line 462) | def test_semantic_search_request_entity_types_validation(self): method test_semantic_search_response_valid (line 469) | def test_semantic_search_response_valid(self): method test_semantic_search_response_defaults (line 493) | def test_semantic_search_response_defaults(self): class TestUserCanAccessServer (line 515) | class TestUserCanAccessServer: method test_admin_user_can_access_any_server (line 519) | async def test_admin_user_can_access_any_server(self): method test_user_with_all_accessible_servers (line 531) | async def test_user_with_all_accessible_servers(self): method test_user_with_no_accessible_servers (line 546) | async def test_user_with_no_accessible_servers(self): method test_user_with_none_accessible_servers (line 561) | async def test_user_with_none_accessible_servers(self): method test_user_can_access_via_server_service (line 576) | async def test_user_can_access_via_server_service(self, mock_server_se... method test_user_can_access_via_technical_name (line 595) | async def test_user_can_access_via_technical_name(self, mock_server_se... method test_user_can_access_via_server_name (line 613) | async def test_user_can_access_via_server_name(self): method test_user_cannot_access_unlisted_server (line 628) | async def test_user_cannot_access_unlisted_server(self): method test_server_service_exception_fallback_to_name_check (line 643) | async def test_server_service_exception_fallback_to_name_check(self, m... class TestUserCanAccessAgent (line 669) | class TestUserCanAccessAgent: method test_admin_user_can_access_any_agent (line 673) | async def test_admin_user_can_access_any_agent(self, mock_agent_service): method test_user_without_agent_in_accessible_list (line 687) | async def test_user_without_agent_in_accessible_list(self, mock_agent_... method test_user_with_all_can_access_public_agent (line 702) | async def test_user_with_all_can_access_public_agent(self, mock_agent_... method test_agent_not_found_returns_false (line 719) | async def test_agent_not_found_returns_false(self, mock_agent_service): method test_public_agent_accessible_to_authorized_user (line 735) | async def test_public_agent_accessible_to_authorized_user(self, mock_a... method test_internal_agent_accessible_to_owner (line 752) | async def test_internal_agent_accessible_to_owner(self, mock_agent_ser... method test_internal_agent_not_accessible_to_others (line 770) | async def test_internal_agent_not_accessible_to_others(self, mock_agen... method test_group_restricted_agent_accessible_to_group_member (line 788) | async def test_group_restricted_agent_accessible_to_group_member(self,... method test_group_restricted_agent_not_accessible_to_non_member (line 809) | async def test_group_restricted_agent_not_accessible_to_non_member(sel... method test_unknown_visibility_returns_false (line 830) | async def test_unknown_visibility_returns_false(self, mock_agent_servi... class TestSemanticSearchSuccess (line 857) | class TestSemanticSearchSuccess: method test_semantic_search_admin_sees_all_results (line 861) | async def test_semantic_search_admin_sees_all_results( method test_semantic_search_filters_by_server_access (line 905) | async def test_semantic_search_filters_by_server_access( method test_semantic_search_filters_by_agent_access (line 937) | async def test_semantic_search_filters_by_agent_access( method test_semantic_search_restricted_user_sees_nothing (line 979) | async def test_semantic_search_restricted_user_sees_nothing( method test_semantic_search_empty_results (line 1006) | async def test_semantic_search_empty_results( method test_semantic_search_with_entity_type_filter (line 1027) | async def test_semantic_search_with_entity_type_filter( method test_semantic_search_with_custom_max_results (line 1054) | async def test_semantic_search_with_custom_max_results( method test_semantic_search_strips_query (line 1081) | async def test_semantic_search_strips_query( method test_semantic_search_server_with_matching_tools (line 1099) | async def test_semantic_search_server_with_matching_tools( class TestSemanticSearchErrorHandling (line 1131) | class TestSemanticSearchErrorHandling: method test_semantic_search_value_error_returns_400 (line 1135) | async def test_semantic_search_value_error_returns_400( method test_semantic_search_runtime_error_returns_503 (line 1152) | async def test_semantic_search_runtime_error_returns_503( method test_semantic_search_handles_missing_agent_gracefully (line 1169) | async def test_semantic_search_handles_missing_agent_gracefully( method test_semantic_search_handles_agent_without_path (line 1209) | async def test_semantic_search_handles_agent_without_path( class TestSemanticSearchAgentFieldExtraction (line 1250) | class TestSemanticSearchAgentFieldExtraction: method test_semantic_search_extracts_agent_fields_from_card (line 1254) | async def test_semantic_search_extracts_agent_fields_from_card( method test_semantic_search_handles_skills_as_strings (line 1310) | async def test_semantic_search_handles_skills_as_strings( method test_semantic_search_fallback_to_faiss_agent_data (line 1356) | async def test_semantic_search_fallback_to_faiss_agent_data( method test_semantic_search_preserves_skills_structure (line 1401) | async def test_semantic_search_preserves_skills_structure( class TestSemanticSearchIntegration (line 1460) | class TestSemanticSearchIntegration: method test_semantic_search_full_workflow (line 1464) | async def test_semantic_search_full_workflow( FILE: tests/unit/api/test_server_get_endpoint.py function admin_user_context (line 34) | def admin_user_context() -> dict[str, Any]: function regular_user_context (line 57) | def regular_user_context() -> dict[str, Any]: function sample_server_info (line 76) | def sample_server_info() -> dict[str, Any]: function mock_server_service (line 110) | def mock_server_service(): function _mock_auth_admin (line 133) | def _mock_auth_admin(admin_user_context, mock_settings): function _mock_auth_regular (line 156) | def _mock_auth_regular(regular_user_context, mock_settings): function _create_test_client (line 178) | def _create_test_client( function test_client_admin (line 216) | def test_client_admin( function test_client_regular (line 227) | def test_client_regular( class TestGetServer (line 242) | class TestGetServer: method test_get_server_success_admin (line 245) | def test_get_server_success_admin( method test_get_server_success_regular_user (line 265) | def test_get_server_success_regular_user( method test_get_server_not_found (line 281) | def test_get_server_not_found( method test_get_server_forbidden (line 294) | def test_get_server_forbidden( method test_get_server_admin_bypasses_access_check (line 309) | def test_get_server_admin_bypasses_access_check( method test_get_server_path_normalization_no_slash (line 324) | def test_get_server_path_normalization_no_slash( method test_get_server_credentials_stripped (line 339) | def test_get_server_credentials_stripped( method test_get_server_includes_tools (line 360) | def test_get_server_includes_tools( method test_get_server_includes_versions (line 377) | def test_get_server_includes_versions( method test_get_server_proxy_pass_url_stripped_for_non_admin_with_gateway (line 394) | def test_get_server_proxy_pass_url_stripped_for_non_admin_with_gateway( method test_get_server_proxy_pass_url_kept_for_non_admin_registry_only (line 415) | def test_get_server_proxy_pass_url_kept_for_non_admin_registry_only( method test_get_server_proxy_pass_url_kept_for_admin (line 440) | def test_get_server_proxy_pass_url_kept_for_admin( method test_get_server_audit_logged (line 456) | def test_get_server_audit_logged( FILE: tests/unit/api/test_server_routes.py function admin_user_context (line 32) | def admin_user_context() -> dict[str, Any]: function regular_user_context (line 55) | def regular_user_context() -> dict[str, Any]: function mock_auth_admin (line 71) | def mock_auth_admin(admin_user_context, mock_settings): function mock_auth_regular (line 97) | def mock_auth_regular(regular_user_context, mock_settings): function mock_server_service (line 127) | def mock_server_service(): function mock_faiss_service (line 151) | def mock_faiss_service(): function mock_health_service (line 160) | def mock_health_service(): function mock_security_scanner_service (line 172) | def mock_security_scanner_service(): function mock_nginx_service (line 204) | def mock_nginx_service(): function mock_templates (line 212) | def mock_templates(): function sample_server_info (line 220) | def sample_server_info() -> dict[str, Any]: function test_client_admin (line 237) | def test_client_admin( function test_client_regular (line 279) | def test_client_regular( function test_client_no_auth (line 319) | def test_client_no_auth( class TestRootDashboard (line 353) | class TestRootDashboard: method test_no_session_cookie_redirects_to_login (line 356) | def test_no_session_cookie_redirects_to_login(self, test_client_no_auth): method test_admin_sees_all_servers (line 369) | def test_admin_sees_all_servers(self, test_client_admin, mock_server_s... method test_non_admin_sees_filtered_servers (line 377) | def test_non_admin_sees_filtered_servers( method test_search_query_filters_services (line 387) | def test_search_query_filters_services(self, test_client_admin, mock_s... class TestGetServersJSON (line 400) | class TestGetServersJSON: method test_admin_gets_all_servers (line 403) | def test_admin_gets_all_servers(self, test_client_admin, mock_server_s... method test_non_admin_gets_filtered_servers (line 436) | def test_non_admin_gets_filtered_servers( method test_search_query_filters_results (line 462) | def test_search_query_filters_results(self, test_client_admin, mock_se... method test_returns_health_status (line 494) | def test_returns_health_status( class TestToggleService (line 537) | class TestToggleService: method test_toggle_service_on_success (line 540) | def test_toggle_service_on_success( method test_toggle_service_off_success (line 570) | def test_toggle_service_off_success( method test_toggle_service_not_found (line 597) | def test_toggle_service_not_found(self, test_client_admin, mock_server... method test_toggle_service_no_permission (line 612) | def test_toggle_service_no_permission( method test_toggle_service_no_server_access (line 632) | def test_toggle_service_no_server_access( method test_toggle_service_performs_health_check_when_enabling (line 650) | def test_toggle_service_performs_health_check_when_enabling( class TestRegisterService (line 681) | class TestRegisterService: method test_register_service_success (line 684) | def test_register_service_success( method test_register_service_no_permission (line 726) | def test_register_service_no_permission(self, test_client_regular, moc... method test_register_service_path_already_exists (line 745) | def test_register_service_path_already_exists(self, test_client_admin,... method test_register_service_normalizes_path (line 772) | def test_register_service_normalizes_path(self, test_client_admin, moc... class TestInternalRegister (line 810) | class TestInternalRegister: method test_internal_register_success (line 813) | def test_internal_register_success( method test_internal_register_missing_auth_header (line 855) | def test_internal_register_missing_auth_header(self, test_client_no_au... method test_internal_register_invalid_token (line 872) | def test_internal_register_invalid_token(self, test_client_no_auth, mo... method test_internal_register_secret_key_not_set (line 895) | def test_internal_register_secret_key_not_set(self, test_client_no_auth): method test_internal_register_overwrite_existing_service (line 919) | def test_internal_register_overwrite_existing_service( method test_internal_register_no_overwrite_existing_service (line 949) | def test_internal_register_no_overwrite_existing_service( method test_internal_register_auto_enables_service (line 975) | def test_internal_register_auto_enables_service( class TestInternalRemove (line 1018) | class TestInternalRemove: method test_internal_remove_success (line 1021) | def test_internal_remove_success( method test_internal_remove_service_not_found (line 1042) | def test_internal_remove_service_not_found(self, test_client_no_auth, ... method test_internal_remove_missing_auth (line 1060) | def test_internal_remove_missing_auth(self, test_client_no_auth): method test_internal_remove_normalizes_path (line 1069) | def test_internal_remove_normalizes_path( class TestHelperFunctions (line 1099) | class TestHelperFunctions: method test_path_normalization_in_toggle (line 1102) | def test_path_normalization_in_toggle( method test_tags_parsing_in_register (line 1124) | def test_tags_parsing_in_register(self, test_client_admin, mock_server... FILE: tests/unit/api/test_skill_inline_content.py function _make_mock_skill (line 41) | def _make_mock_skill( function _make_admin_user_context (line 85) | def _make_admin_user_context() -> dict[str, Any]: function _create_test_client_with_mocks (line 103) | def _create_test_client_with_mocks( function admin_user_context (line 142) | def admin_user_context() -> dict[str, Any]: function mock_skill_service (line 148) | def mock_skill_service() -> MagicMock: function test_client (line 161) | def test_client( class TestSkillInlineContent (line 176) | class TestSkillInlineContent: method test_inline_content_returned_when_skill_md_content_set (line 179) | def test_inline_content_returned_when_skill_md_content_set( method test_inline_content_response_has_no_url_field (line 199) | def test_inline_content_response_has_no_url_field( method test_falls_through_to_url_fetch_when_skill_md_content_is_none (line 217) | def test_falls_through_to_url_fetch_when_skill_md_content_is_none( method test_falls_through_to_url_fetch_when_skill_md_content_is_empty_string (line 252) | def test_falls_through_to_url_fetch_when_skill_md_content_is_empty_str... method test_inline_content_returns_404_when_skill_not_found (line 286) | def test_inline_content_returns_404_when_skill_not_found( FILE: tests/unit/api/test_wellknown_routes.py function mock_server_service (line 26) | def mock_server_service(): function mock_health_service (line 35) | def mock_health_service(): function sample_server_info (line 43) | def sample_server_info() -> dict[str, Any]: class TestGetNormalizedHealthStatus (line 66) | class TestGetNormalizedHealthStatus: method test_healthy_status_normalized (line 69) | def test_healthy_status_normalized(self, mock_health_service, mock_set... method test_healthy_auth_expired_normalized_to_healthy (line 79) | def test_healthy_auth_expired_normalized_to_healthy(self, mock_health_... method test_unhealthy_timeout_normalized (line 89) | def test_unhealthy_timeout_normalized(self, mock_health_service, mock_... method test_unhealthy_connection_error_normalized (line 99) | def test_unhealthy_connection_error_normalized(self, mock_health_servi... method test_error_status_normalized_to_unhealthy (line 109) | def test_error_status_normalized_to_unhealthy(self, mock_health_servic... method test_disabled_status_normalized (line 119) | def test_disabled_status_normalized(self, mock_health_service, mock_se... method test_checking_status_normalized_to_unknown (line 129) | def test_checking_status_normalized_to_unknown(self, mock_health_servi... method test_unknown_server_returns_unknown (line 139) | def test_unknown_server_returns_unknown(self, mock_health_service, moc... class TestFormatServerDiscovery (line 155) | class TestFormatServerDiscovery: method test_format_includes_health_status (line 158) | def test_format_includes_health_status( method test_format_uses_unhealthy_status_from_health_service (line 178) | def test_format_uses_unhealthy_status_from_health_service( method test_format_unknown_server_has_unknown_status (line 196) | def test_format_unknown_server_has_unknown_status(self, mock_health_se... class TestWellKnownMcpServersEndpoint (line 223) | class TestWellKnownMcpServersEndpoint: method test_endpoint_returns_actual_health_status (line 226) | def test_endpoint_returns_actual_health_status( method test_endpoint_returns_healthy_status (line 266) | def test_endpoint_returns_healthy_status( method test_endpoint_returns_unknown_for_unchecked_servers (line 302) | def test_endpoint_returns_unknown_for_unchecked_servers( method test_multiple_servers_with_different_health_statuses (line 339) | def test_multiple_servers_with_different_health_statuses( FILE: tests/unit/audit/test_audit_composite_key.py function _make_registry_record (line 32) | def _make_registry_record( function _make_mcp_record (line 56) | def _make_mcp_record( class TestCompositeKeyInsert (line 84) | class TestCompositeKeyInsert: method test_both_record_types_insert_with_same_request_id (line 87) | async def test_both_record_types_insert_with_same_request_id(self): method test_true_duplicate_returns_true (line 111) | async def test_true_duplicate_returns_true(self): method test_record_log_type_defaults_are_distinct (line 128) | async def test_record_log_type_defaults_are_distinct(self): class TestDetailEndpointMultipleEvents (line 138) | class TestDetailEndpointMultipleEvents: method test_returns_multiple_events (line 141) | async def test_returns_multiple_events(self): method test_filters_by_log_type (line 167) | async def test_filters_by_log_type(self): method test_returns_404_when_not_found (line 196) | async def test_returns_404_when_not_found(self): method test_without_log_type_queries_all (line 213) | async def test_without_log_type_queries_all(self): FILE: tests/unit/audit/test_audit_repository.py function make_test_record (line 16) | def make_test_record(request_id: str = "test-123") -> RegistryApiAccessR... class TestFind (line 29) | class TestFind: method test_returns_list_of_events (line 32) | async def test_returns_list_of_events(self): method test_applies_pagination (line 61) | async def test_applies_pagination(self): class TestInsert (line 90) | class TestInsert: method test_writes_record (line 93) | async def test_writes_record(self): method test_returns_false_on_error (line 109) | async def test_returns_false_on_error(self): method test_returns_true_on_duplicate_key (line 124) | async def test_returns_true_on_duplicate_key(self): FILE: tests/unit/audit/test_filter_statistics.py class TestDistinct (line 19) | class TestDistinct: method test_returns_sorted_distinct_values (line 22) | async def test_returns_sorted_distinct_values(self): method test_filters_out_none_and_empty (line 40) | async def test_filters_out_none_and_empty(self): method test_passes_query_filter (line 57) | async def test_passes_query_filter(self): method test_returns_empty_on_error (line 76) | async def test_returns_empty_on_error(self): class TestAggregate (line 99) | class TestAggregate: method test_returns_aggregation_results (line 102) | async def test_returns_aggregation_results(self): method test_returns_empty_list_on_no_results (line 135) | async def test_returns_empty_list_on_no_results(self): method test_returns_empty_on_error (line 157) | async def test_returns_empty_on_error(self): class TestFilterOptionsEndpoint (line 180) | class TestFilterOptionsEndpoint: method test_returns_usernames_for_registry_stream (line 183) | async def test_returns_usernames_for_registry_stream(self): method test_returns_usernames_and_servers_for_mcp_stream (line 202) | async def test_returns_usernames_and_servers_for_mcp_stream(self): class TestStatisticsEndpoint (line 235) | class TestStatisticsEndpoint: method test_returns_statistics_for_registry_stream (line 238) | async def test_returns_statistics_for_registry_stream(self): method test_returns_statistics_for_mcp_stream (line 314) | async def test_returns_statistics_for_mcp_stream(self): method test_handles_empty_results (line 367) | async def test_handles_empty_results(self): FILE: tests/unit/audit/test_mcp_logger.py class TestJSONRPCParsing (line 18) | class TestJSONRPCParsing: method test_tools_call_extracts_tool_name (line 26) | def test_tools_call_extracts_tool_name(self, tool_name: str, jsonrpc_id): method test_resources_read_extracts_uri (line 44) | def test_resources_read_extracts_uri(self, resource_uri: str): method test_invalid_json_returns_unknown (line 58) | def test_invalid_json_returns_unknown(self): method test_empty_body_returns_unknown (line 64) | def test_empty_body_returns_unknown(self): class TestLogMCPAccess (line 70) | class TestLogMCPAccess: method test_creates_audit_record (line 74) | async def test_creates_audit_record(self): FILE: tests/unit/audit/test_middleware.py class MockRequest (line 15) | class MockRequest: method __init__ (line 18) | def __init__( method headers (line 34) | def headers(self): method cookies (line 38) | def cookies(self): class TestShouldLog (line 42) | class TestShouldLog: method setup_method (line 45) | def setup_method(self): method test_logs_regular_api_paths (line 50) | def test_logs_regular_api_paths(self): method test_excludes_health_checks_by_default (line 55) | def test_excludes_health_checks_by_default(self): method test_logs_health_checks_when_enabled (line 61) | def test_logs_health_checks_when_enabled(self): method test_excludes_static_assets_by_default (line 66) | def test_excludes_static_assets_by_default(self): class TestCredentialDetection (line 73) | class TestCredentialDetection: method setup_method (line 76) | def setup_method(self): method test_detects_session_cookie (line 81) | def test_detects_session_cookie(self): method test_detects_bearer_token (line 87) | def test_detects_bearer_token(self): method test_detects_no_credential (line 92) | def test_detects_no_credential(self): class TestDispatch (line 98) | class TestDispatch: method setup_method (line 101) | def setup_method(self): method test_captures_request_response (line 107) | async def test_captures_request_response(self): method test_skips_excluded_paths (line 131) | async def test_skips_excluded_paths(self): method _async_return (line 147) | async def _async_return(self, value): FILE: tests/unit/audit/test_models_properties.py class TestCredentialMasking (line 23) | class TestCredentialMasking: method test_short_credentials_masked_completely (line 28) | def test_short_credentials_masked_completely(self, credential: str): method test_long_credentials_show_last_six (line 34) | def test_long_credentials_show_last_six(self, credential: str): class TestSensitiveQueryParamMasking (line 41) | class TestSensitiveQueryParamMasking: method test_sensitive_params_are_masked (line 53) | def test_sensitive_params_are_masked(self, sensitive_params: dict): class TestJSONLFormatValidity (line 65) | class TestJSONLFormatValidity: method test_audit_record_round_trip (line 93) | def test_audit_record_round_trip(self, record: RegistryApiAccessRecord): FILE: tests/unit/audit/test_routes.py class TestAdminOnlyAccess (line 22) | class TestAdminOnlyAccess: method test_rejects_non_admin_users (line 34) | def test_rejects_non_admin_users(self, user_context: dict): method test_allows_admin_users (line 40) | def test_allows_admin_users(self): class TestBuildQuery (line 52) | class TestBuildQuery: method test_stream_only (line 55) | def test_stream_only(self): method test_with_filters (line 71) | def test_with_filters(self): class TestExportFormats (line 99) | class TestExportFormats: method test_generate_jsonl (line 102) | def test_generate_jsonl(self): method test_generate_csv (line 109) | def test_generate_csv(self): class TestAuditEventsEndpoint (line 132) | class TestAuditEventsEndpoint: method test_returns_paginated_results (line 135) | async def test_returns_paginated_results(self): class TestAuditEventDetailEndpoint (line 165) | class TestAuditEventDetailEndpoint: method test_returns_404_when_not_found (line 168) | async def test_returns_404_when_not_found(self): FILE: tests/unit/audit/test_service.py function make_test_record (line 19) | def make_test_record(request_id: str = "test-123") -> RegistryApiAccessR... class TestAuditLoggerInit (line 41) | class TestAuditLoggerInit: method test_init_with_mongodb_enabled (line 44) | def test_init_with_mongodb_enabled(self): method test_init_with_mongodb_disabled (line 56) | def test_init_with_mongodb_disabled(self): method test_deprecated_params_accepted (line 65) | def test_deprecated_params_accepted(self): class TestLogEvent (line 78) | class TestLogEvent: method test_log_event_writes_to_mongodb (line 81) | async def test_log_event_writes_to_mongodb(self): method test_log_event_skipped_when_disabled (line 95) | async def test_log_event_skipped_when_disabled(self): method test_log_event_handles_mongodb_error (line 108) | async def test_log_event_handles_mongodb_error(self): method test_multiple_events_logged (line 121) | async def test_multiple_events_logged(self): class TestClose (line 136) | class TestClose: method test_close_is_safe (line 139) | async def test_close_is_safe(self): class TestProperties (line 150) | class TestProperties: method test_current_file_path_returns_none (line 153) | def test_current_file_path_returns_none(self): method test_is_open_with_mongodb (line 158) | def test_is_open_with_mongodb(self): method test_is_open_without_mongodb (line 167) | def test_is_open_without_mongodb(self): method test_is_open_without_repo (line 175) | def test_is_open_without_repo(self): FILE: tests/unit/auth/test_csrf.py function _make_request (line 14) | def _make_request( class TestVerifyCsrfTokenFlexibleBypass (line 31) | class TestVerifyCsrfTokenFlexibleBypass: method test_skip_csrf_when_no_session_cookie (line 35) | async def test_skip_csrf_when_no_session_cookie(self): method test_skip_csrf_for_bearer_token_client (line 41) | async def test_skip_csrf_for_bearer_token_client(self): class TestVerifyCsrfTokenFlexibleEnforcement (line 50) | class TestVerifyCsrfTokenFlexibleEnforcement: method test_reject_when_session_cookie_but_no_csrf_token (line 54) | async def test_reject_when_session_cookie_but_no_csrf_token(self): method test_reject_when_session_cookie_and_invalid_csrf_token (line 68) | async def test_reject_when_session_cookie_and_invalid_csrf_token(self): method test_pass_when_session_cookie_and_valid_csrf_header (line 82) | async def test_pass_when_session_cookie_and_valid_csrf_header(self): method test_pass_when_session_cookie_and_valid_csrf_form (line 95) | async def test_pass_when_session_cookie_and_valid_csrf_form(self): method test_header_token_takes_precedence_over_form (line 109) | async def test_header_token_takes_precedence_over_form(self): FILE: tests/unit/auth/test_dependencies.py function test_secret_key (line 54) | def test_secret_key() -> str: function mock_signer (line 60) | def mock_signer(test_secret_key: str, monkeypatch): function sample_scopes_config (line 69) | def sample_scopes_config() -> dict[str, Any]: function mock_scopes_config (line 152) | def mock_scopes_config(sample_scopes_config: dict[str, Any], monkeypatch): function mock_session_validator (line 191) | def mock_session_validator(test_secret_key: str): class TestGetCurrentUser (line 203) | class TestGetCurrentUser: method test_get_current_user_with_valid_session (line 206) | def test_get_current_user_with_valid_session(self, mock_signer: URLSaf... method test_get_current_user_no_session_cookie (line 218) | def test_get_current_user_no_session_cookie(self): method test_get_current_user_expired_session (line 227) | def test_get_current_user_expired_session(self, mock_signer: URLSafeTi... method test_get_current_user_invalid_signature (line 242) | def test_get_current_user_invalid_signature(self, mock_signer: URLSafe... method test_get_current_user_no_username_in_session (line 254) | def test_get_current_user_no_username_in_session(self, mock_signer: UR... class TestGetUserSessionData (line 280) | class TestGetUserSessionData: method test_get_session_data_traditional_user_rejected (line 283) | def test_get_session_data_traditional_user_rejected(self, mock_signer:... method test_get_session_data_oauth2_user (line 297) | def test_get_session_data_oauth2_user(self, mock_signer: URLSafeTimedS... method test_get_session_data_no_session (line 318) | def test_get_session_data_no_session(self): method test_get_session_data_expired (line 327) | def test_get_session_data_expired(self, mock_signer: URLSafeTimedSeria... class TestLoadScopesConfig (line 349) | class TestLoadScopesConfig: method test_load_scopes_config_from_default_path (line 352) | def test_load_scopes_config_from_default_path(self, tmp_path: Path, mo... method test_load_scopes_config_from_env_var (line 377) | def test_load_scopes_config_from_env_var(self, tmp_path: Path, monkeyp... method test_load_scopes_config_file_not_found (line 399) | def test_load_scopes_config_file_not_found(self, monkeypatch): method test_load_scopes_config_yaml_error (line 416) | def test_load_scopes_config_yaml_error(self, tmp_path: Path, monkeypat... class TestMapCognitoGroupsToScopes (line 438) | class TestMapCognitoGroupsToScopes: method test_map_admin_group (line 442) | async def test_map_admin_group(self, mock_scopes_config: dict[str, Any]): method test_map_lob1_group (line 456) | async def test_map_lob1_group(self, mock_scopes_config: dict[str, Any]): method test_map_multiple_groups (line 469) | async def test_map_multiple_groups(self, mock_scopes_config: dict[str,... method test_map_unknown_group (line 484) | async def test_map_unknown_group(self, mock_scopes_config: dict[str, A... method test_map_empty_groups (line 496) | async def test_map_empty_groups(self, mock_scopes_config: dict[str, An... class TestGetUIPermissionsForUser (line 515) | class TestGetUIPermissionsForUser: method test_admin_ui_permissions (line 519) | async def test_admin_ui_permissions(self, mock_scopes_config: dict[str... method test_lob1_ui_permissions (line 534) | async def test_lob1_ui_permissions(self, mock_scopes_config: dict[str,... method test_no_scopes_no_permissions (line 549) | async def test_no_scopes_no_permissions(self, mock_scopes_config: dict... method test_unknown_scope_no_permissions (line 561) | async def test_unknown_scope_no_permissions(self, mock_scopes_config: ... class TestUserHasUIPermissionForService (line 580) | class TestUserHasUIPermissionForService: method test_has_permission_for_all_services (line 583) | def test_has_permission_for_all_services(self): method test_has_permission_for_specific_service (line 591) | def test_has_permission_for_specific_service(self): method test_no_permission_for_service (line 600) | def test_no_permission_for_service(self): method test_permission_not_in_user_permissions (line 608) | def test_permission_not_in_user_permissions(self): class TestGetAccessibleServicesForUser (line 626) | class TestGetAccessibleServicesForUser: method test_all_services_accessible (line 629) | def test_all_services_accessible(self): method test_specific_services_accessible (line 640) | def test_specific_services_accessible(self): method test_no_list_permission (line 652) | def test_no_list_permission(self): class TestGetAccessibleAgentsForUser (line 671) | class TestGetAccessibleAgentsForUser: method test_all_agents_accessible (line 674) | def test_all_agents_accessible(self): method test_specific_agents_accessible (line 685) | def test_specific_agents_accessible(self): method test_no_list_agents_permission (line 697) | def test_no_list_agents_permission(self): class TestGetServersForScope (line 716) | class TestGetServersForScope: method test_wildcard_scope_returns_wildcard (line 720) | async def test_wildcard_scope_returns_wildcard(self, mock_scopes_confi... method test_specific_scope_returns_servers (line 729) | async def test_specific_scope_returns_servers(self, mock_scopes_config... method test_unknown_scope_returns_empty (line 738) | async def test_unknown_scope_returns_empty(self, mock_scopes_config: d... class TestUserHasWildcardAccess (line 754) | class TestUserHasWildcardAccess: method test_admin_has_wildcard_access (line 758) | async def test_admin_has_wildcard_access(self, mock_scopes_config: dic... method test_restricted_user_no_wildcard_access (line 770) | async def test_restricted_user_no_wildcard_access(self, mock_scopes_co... method test_no_scopes_no_wildcard_access (line 782) | async def test_no_scopes_no_wildcard_access(self, mock_scopes_config: ... class TestGetUserAccessibleServers (line 801) | class TestGetUserAccessibleServers: method test_admin_access_all_servers (line 805) | async def test_admin_access_all_servers(self, mock_scopes_config: dict... method test_lob1_access_specific_servers (line 817) | async def test_lob1_access_specific_servers(self, mock_scopes_config: ... method test_multiple_scopes_combine_servers (line 830) | async def test_multiple_scopes_combine_servers(self, mock_scopes_confi... class TestUserCanModifyServers (line 853) | class TestUserCanModifyServers: method test_admin_can_modify (line 856) | def test_admin_can_modify(self): method test_execute_scope_can_modify (line 868) | def test_execute_scope_can_modify(self): method test_read_only_cannot_modify (line 880) | def test_read_only_cannot_modify(self): method test_any_execute_scope_can_modify (line 892) | def test_any_execute_scope_can_modify(self): class TestUserCanAccessServer (line 912) | class TestUserCanAccessServer: method test_admin_can_access_any_server (line 916) | async def test_admin_can_access_any_server(self, mock_scopes_config: d... method test_user_can_access_allowed_server (line 935) | async def test_user_can_access_allowed_server(self, mock_scopes_config... method test_user_cannot_access_disallowed_server (line 944) | async def test_user_cannot_access_disallowed_server(self, mock_scopes_... class TestCreateSessionCookie (line 960) | class TestCreateSessionCookie: method test_create_default_session (line 963) | def test_create_default_session(self, mock_signer: URLSafeTimedSeriali... method test_create_oauth2_session (line 978) | def test_create_oauth2_session(self, mock_signer: URLSafeTimedSerializ... class TestAuthWrappers (line 1000) | class TestAuthWrappers: method test_api_auth_calls_get_current_user (line 1003) | def test_api_auth_calls_get_current_user(self, mock_signer: URLSafeTim... method test_web_auth_calls_get_current_user (line 1015) | def test_web_auth_calls_get_current_user(self, mock_signer: URLSafeTim... class TestEnhancedAuth (line 1035) | class TestEnhancedAuth: method test_enhanced_auth_traditional_user_rejected (line 1039) | async def test_enhanced_auth_traditional_user_rejected( method test_enhanced_auth_oauth2_user (line 1061) | async def test_enhanced_auth_oauth2_user( method test_enhanced_auth_no_session (line 1089) | async def test_enhanced_auth_no_session(self): class TestNginxProxiedAuth (line 1109) | class TestNginxProxiedAuth: method test_nginx_auth_with_headers (line 1113) | async def test_nginx_auth_with_headers(self, mock_scopes_config: dict[... method test_nginx_auth_fallback_to_session_oauth2 (line 1144) | async def test_nginx_auth_fallback_to_session_oauth2( method test_nginx_auth_fallback_rejects_traditional_session (line 1181) | async def test_nginx_auth_fallback_rejects_traditional_session( method test_nginx_auth_oauth2_user_without_admin_scopes (line 1214) | async def test_nginx_auth_oauth2_user_without_admin_scopes( class TestEdgeCases (line 1248) | class TestEdgeCases: method test_session_with_empty_username (line 1251) | def test_session_with_empty_username(self, mock_signer: URLSafeTimedSe... method test_scopes_deduplication (line 1264) | async def test_scopes_deduplication(self, mock_scopes_config: dict[str... method test_enhanced_auth_oauth2_no_groups (line 1285) | async def test_enhanced_auth_oauth2_no_groups( method test_ui_permissions_with_all_and_specific (line 1310) | def test_ui_permissions_with_all_and_specific(self, mock_scopes_config... class TestNetworkTrustedAuthMethod (line 1324) | class TestNetworkTrustedAuthMethod: method test_network_trusted_with_admin_scopes_gets_admin (line 1328) | async def test_network_trusted_with_admin_scopes_gets_admin( method test_network_trusted_readonly_scopes_not_admin (line 1363) | async def test_network_trusted_readonly_scopes_not_admin( class TestUserIsAdmin (line 1395) | class TestUserIsAdmin: method test_admin_with_mutating_action_all (line 1420) | def test_admin_with_mutating_action_all(self, action: str): method test_not_admin_with_only_read_actions (line 1431) | def test_not_admin_with_only_read_actions(self): method test_not_admin_with_specific_server_modify (line 1448) | def test_not_admin_with_specific_server_modify(self): method test_not_admin_empty_permissions (line 1459) | def test_not_admin_empty_permissions(self): method test_full_admin_permissions_match_registry_admins_json (line 1467) | def test_full_admin_permissions_match_registry_admins_json(self): method test_consumer_with_wildcard_server_not_admin (line 1494) | def test_consumer_with_wildcard_server_not_admin(self): method test_read_only_actions_never_grant_admin (line 1525) | def test_read_only_actions_never_grant_admin(self, action: str): FILE: tests/unit/cli/test_agentcore_cross_account.py class TestParseAccountIds (line 18) | class TestParseAccountIds: method test_empty_string_returns_empty_list (line 21) | def test_empty_string_returns_empty_list(self): method test_whitespace_only_returns_empty_list (line 26) | def test_whitespace_only_returns_empty_list(self): method test_single_account (line 31) | def test_single_account(self): method test_multiple_accounts (line 36) | def test_multiple_accounts(self): method test_strips_whitespace (line 42) | def test_strips_whitespace(self): method test_ignores_empty_entries (line 48) | def test_ignores_empty_entries(self): class TestAssumeRoleSession (line 60) | class TestAssumeRoleSession: method test_assume_role_creates_session (line 65) | def test_assume_role_creates_session(self, mock_session_cls, mock_clie... method test_assume_role_propagates_error (line 96) | def test_assume_role_propagates_error(self, mock_client_fn): class TestScannerCrossAccount (line 117) | class TestScannerCrossAccount: method test_scanner_uses_session_client (line 121) | def test_scanner_uses_session_client(self, mock_boto3): method test_scanner_without_session_uses_default (line 136) | def test_scanner_without_session_uses_default(self, mock_boto3): class TestRegistrationBuilderCrossAccount (line 153) | class TestRegistrationBuilderCrossAccount: method test_builder_uses_session_for_account_id (line 157) | def test_builder_uses_session_for_account_id(self, mock_boto3): method test_builder_without_session_uses_default (line 172) | def test_builder_without_session_uses_default(self, mock_boto3): class TestCLIAccountArgs (line 190) | class TestCLIAccountArgs: method test_accounts_flag_parsed (line 193) | def test_accounts_flag_parsed(self): method test_accounts_defaults_to_empty (line 209) | def test_accounts_defaults_to_empty(self): method test_list_subcommand_has_accounts_flag (line 217) | def test_list_subcommand_has_accounts_flag(self): method test_default_role_name (line 230) | def test_default_role_name(self): FILE: tests/unit/cli/test_agentcore_discovery.py function _make_scanner (line 19) | def _make_scanner(region: str = "us-east-1", timeout: int = 5): class TestGatewayPagination (line 36) | class TestGatewayPagination: method test_single_page_no_next_token (line 39) | def test_single_page_no_next_token(self): method test_multi_page_pagination (line 58) | def test_multi_page_pagination(self): method test_empty_response (line 89) | def test_empty_response(self): class TestGatewayReadyFiltering (line 102) | class TestGatewayReadyFiltering: method test_only_ready_gateways_returned (line 105) | def test_only_ready_gateways_returned(self): method test_no_ready_gateways (line 127) | def test_no_ready_gateways(self): class TestRuntimePagination (line 146) | class TestRuntimePagination: method test_single_page (line 149) | def test_single_page(self): method test_multi_page_pagination (line 169) | def test_multi_page_pagination(self): class TestRuntimeReadyFiltering (line 198) | class TestRuntimeReadyFiltering: method test_only_ready_runtimes_returned (line 201) | def test_only_ready_runtimes_returned(self): class TestGatewayTargetPagination (line 229) | class TestGatewayTargetPagination: method test_target_pagination (line 232) | def test_target_pagination(self): method test_target_ready_filtering (line 252) | def test_target_ready_filtering(self): class TestDiscoveryErrorHandling (line 275) | class TestDiscoveryErrorHandling: method test_access_denied_exception_propagates (line 278) | def test_access_denied_exception_propagates(self): method test_throttling_exception_propagates (line 289) | def test_throttling_exception_propagates(self): FILE: tests/unit/cli/test_agentcore_registration.py function _make_builder (line 82) | def _make_builder(region: str = "us-east-1"): class TestGatewayRegistration (line 98) | class TestGatewayRegistration: method test_gateway_produces_mcp_server_registration (line 101) | def test_gateway_produces_mcp_server_registration(self): method test_gateway_iam_auth_scheme (line 119) | def test_gateway_iam_auth_scheme(self): method test_gateway_none_auth_scheme (line 125) | def test_gateway_none_auth_scheme(self): class TestRuntimeMCPRegistration (line 132) | class TestRuntimeMCPRegistration: method test_mcp_runtime_produces_mcp_server_registration (line 135) | def test_mcp_runtime_produces_mcp_server_registration(self): class TestRuntimeAgentRegistration (line 151) | class TestRuntimeAgentRegistration: method test_http_runtime_produces_agent_registration (line 154) | def test_http_runtime_produces_agent_registration(self): method test_a2a_runtime_produces_agent_registration (line 167) | def test_a2a_runtime_produces_agent_registration(self): class TestTargetRegistration (line 177) | class TestTargetRegistration: method test_mcp_target_produces_registration (line 180) | def test_mcp_target_produces_registration(self): method test_lambda_target_returns_none (line 190) | def test_lambda_target_returns_none(self): method test_target_no_endpoint_returns_none (line 195) | def test_target_no_endpoint_returns_none(self): function _make_orchestrator (line 211) | def _make_orchestrator(dry_run=False, overwrite=False, include_mcp_targe... class TestIdempotency (line 239) | class TestIdempotency: method test_already_exists_without_overwrite_skips (line 242) | def test_already_exists_without_overwrite_skips(self): method test_overwrite_sets_flag_on_registration (line 253) | def test_overwrite_sets_flag_on_registration(self): method test_dry_run_does_not_call_registry (line 264) | def test_dry_run_does_not_call_registry(self): method test_agent_conflict_without_overwrite_skips (line 274) | def test_agent_conflict_without_overwrite_skips(self): method test_agent_conflict_with_overwrite_calls_update (line 287) | def test_agent_conflict_with_overwrite_calls_update(self): method test_agent_overwrite_update_failure_records_failed (line 301) | def test_agent_overwrite_update_failure_records_failed(self): class TestRegistrationErrorHandling (line 320) | class TestRegistrationErrorHandling: method test_registry_error_records_failed_and_continues (line 323) | def test_registry_error_records_failed_and_continues(self): method test_invalid_url_skips_registration (line 352) | def test_invalid_url_skips_registration(self): method test_empty_url_skips_registration (line 364) | def test_empty_url_skips_registration(self): method test_runtime_mcp_registration_error_records_failed (line 374) | def test_runtime_mcp_registration_error_records_failed(self): method test_runtime_agent_registration_error_records_failed (line 384) | def test_runtime_agent_registration_error_records_failed(self): method test_include_mcp_targets_registers_targets (line 394) | def test_include_mcp_targets_registers_targets(self): class TestOIDCMetadata (line 411) | class TestOIDCMetadata: method test_custom_jwt_gateway_has_oidc_metadata (line 414) | def test_custom_jwt_gateway_has_oidc_metadata(self): method test_none_auth_gateway_has_no_oidc_metadata (line 425) | def test_none_auth_gateway_has_no_oidc_metadata(self): method test_iam_auth_gateway_has_no_oidc_metadata (line 434) | def test_iam_auth_gateway_has_no_oidc_metadata(self): class TestDetectIdpVendor (line 447) | class TestDetectIdpVendor: method test_cognito_detection (line 450) | def test_cognito_detection(self): method test_auth0_detection (line 460) | def test_auth0_detection(self): method test_okta_detection (line 468) | def test_okta_detection(self): method test_entra_detection (line 475) | def test_entra_detection(self): method test_keycloak_detection (line 485) | def test_keycloak_detection(self): method test_unknown_detection (line 495) | def test_unknown_detection(self): class TestManifest (line 509) | class TestManifest: method test_custom_jwt_gateway_collects_manifest_entry (line 512) | def test_custom_jwt_gateway_collects_manifest_entry(self): method test_iam_gateway_no_manifest_entry (line 525) | def test_iam_gateway_no_manifest_entry(self): method test_none_gateway_no_manifest_entry (line 534) | def test_none_gateway_no_manifest_entry(self): method test_dry_run_collects_manifest_entries (line 543) | def test_dry_run_collects_manifest_entries(self): method test_write_manifest_creates_file (line 551) | def test_write_manifest_creates_file(self, tmp_path): method test_write_manifest_dry_run_skips (line 566) | def test_write_manifest_dry_run_skips(self, tmp_path): method test_runtime_no_manifest_entry (line 577) | def test_runtime_no_manifest_entry(self): FILE: tests/unit/cli/test_agentcore_token_refresher.py class TestDetectIdpVendor (line 34) | class TestDetectIdpVendor: method test_cognito (line 37) | def test_cognito(self): method test_auth0 (line 41) | def test_auth0(self): method test_okta (line 45) | def test_okta(self): method test_entra (line 49) | def test_entra(self): method test_keycloak (line 53) | def test_keycloak(self): method test_unknown (line 57) | def test_unknown(self): class TestReadManifest (line 67) | class TestReadManifest: method test_reads_valid_manifest (line 70) | def test_reads_valid_manifest(self, tmp_path): method test_raises_on_missing_file (line 79) | def test_raises_on_missing_file(self, tmp_path): method test_raises_on_invalid_json (line 83) | def test_raises_on_invalid_json(self, tmp_path): method test_raises_on_non_array (line 90) | def test_raises_on_non_array(self, tmp_path): class TestGetCognitoClientSecret (line 103) | class TestGetCognitoClientSecret: method test_retrieves_secret (line 107) | def test_retrieves_secret(self, mock_boto3): method test_returns_none_on_error (line 128) | def test_returns_none_on_error(self, mock_boto3): class TestGetClientSecret (line 143) | class TestGetClientSecret: method test_per_client_env_var_takes_priority (line 146) | def test_per_client_env_var_takes_priority(self): method test_cognito_delegates_to_auto_retrieval (line 155) | def test_cognito_delegates_to_auto_retrieval(self, mock_cognito): method test_auth0_reads_from_env (line 163) | def test_auth0_reads_from_env(self): method test_okta_reads_from_env (line 168) | def test_okta_reads_from_env(self): method test_entra_reads_from_env (line 173) | def test_entra_reads_from_env(self): method test_missing_env_returns_none (line 178) | def test_missing_env_returns_none(self): method test_unknown_vendor_returns_none (line 183) | def test_unknown_vendor_returns_none(self): class TestGetTokenEndpoint (line 193) | class TestGetTokenEndpoint: method test_extracts_token_endpoint (line 197) | def test_extracts_token_endpoint(self, mock_get): method test_returns_none_on_error (line 209) | def test_returns_none_on_error(self, mock_get): class TestRequestToken (line 221) | class TestRequestToken: method test_successful_token_request (line 225) | def test_successful_token_request(self, mock_post): method test_returns_none_on_error (line 244) | def test_returns_none_on_error(self, mock_post): class TestUpdateRegistryCredential (line 256) | class TestUpdateRegistryCredential: method test_successful_update (line 260) | def test_successful_update(self, mock_patch): method test_returns_false_on_error (line 278) | def test_returns_false_on_error(self, mock_patch): class TestLoadRegistryToken (line 296) | class TestLoadRegistryToken: method test_loads_access_token (line 299) | def test_loads_access_token(self, tmp_path): method test_loads_token_field (line 306) | def test_loads_token_field(self, tmp_path): method test_raises_on_missing_file (line 313) | def test_raises_on_missing_file(self, tmp_path): method test_raises_on_missing_token_field (line 317) | def test_raises_on_missing_token_field(self, tmp_path): class TestTriggerSecurityScan (line 330) | class TestTriggerSecurityScan: method test_successful_scan (line 334) | def test_successful_scan(self, mock_post): method test_scan_with_findings (line 355) | def test_scan_with_findings(self, mock_post): method test_scan_forbidden_returns_false (line 373) | def test_scan_forbidden_returns_false(self, mock_post): method test_scan_error_returns_false (line 389) | def test_scan_error_returns_false(self, mock_post): class TestRefreshAll (line 406) | class TestRefreshAll: method _write_manifest (line 409) | def _write_manifest(self, tmp_path, entries): method test_refresh_cognito_success (line 418) | def test_refresh_cognito_success( method test_refresh_mixed_idps (line 457) | def test_refresh_mixed_idps( method test_refresh_skips_no_allowed_clients (line 502) | def test_refresh_skips_no_allowed_clients(self, mock_secret, tmp_path): method test_refresh_writes_timestamps (line 530) | def test_refresh_writes_timestamps( method test_refresh_triggers_scan_after_update (line 566) | def test_refresh_triggers_scan_after_update( method test_refresh_no_scan_when_disabled (line 605) | def test_refresh_no_scan_when_disabled( method test_refresh_scan_failure_tracked (line 642) | def test_refresh_scan_failure_tracked( method test_refresh_no_scan_on_failed_update (line 680) | def test_refresh_no_scan_on_failed_update( FILE: tests/unit/conftest.py function mock_faiss_service (line 16) | def mock_faiss_service(): function mock_embeddings_client (line 32) | def mock_embeddings_client(): function mock_http_client (line 45) | def mock_http_client(): function mock_mcp_client (line 58) | def mock_mcp_client(): FILE: tests/unit/core/test_config.py class TestSettingsInstantiation (line 23) | class TestSettingsInstantiation: method test_settings_default_values (line 26) | def test_settings_default_values(self, monkeypatch, tmp_path) -> None: method test_settings_embeddings_default_values (line 46) | def test_settings_embeddings_default_values(self) -> None: method test_settings_health_check_defaults (line 60) | def test_settings_health_check_defaults(self) -> None: method test_settings_websocket_defaults (line 69) | def test_settings_websocket_defaults(self) -> None: method test_settings_wellknown_defaults (line 81) | def test_settings_wellknown_defaults(self) -> None: method test_settings_container_paths_defaults (line 90) | def test_settings_container_paths_defaults(self) -> None: method test_settings_secret_key_auto_generation (line 100) | def test_settings_secret_key_auto_generation(self, monkeypatch, tmp_pa... method test_settings_secret_key_not_overridden (line 114) | def test_settings_secret_key_not_overridden(self) -> None: method test_settings_with_custom_values (line 125) | def test_settings_with_custom_values(self) -> None: class TestSettingsEnvironmentVariables (line 160) | class TestSettingsEnvironmentVariables: method test_settings_load_from_env_auth (line 163) | def test_settings_load_from_env_auth(self, monkeypatch) -> None: method test_settings_load_from_env_embeddings (line 176) | def test_settings_load_from_env_embeddings(self, monkeypatch) -> None: method test_settings_load_from_env_health_check (line 195) | def test_settings_load_from_env_health_check(self, monkeypatch) -> None: method test_settings_load_from_env_websocket (line 208) | def test_settings_load_from_env_websocket(self, monkeypatch) -> None: method test_settings_env_case_insensitive (line 223) | def test_settings_env_case_insensitive(self, monkeypatch) -> None: method test_settings_extra_env_ignored (line 236) | def test_settings_extra_env_ignored(self, monkeypatch) -> None: method test_settings_optional_fields_none (line 249) | def test_settings_optional_fields_none(self) -> None: class TestSettingsPathsLocalDev (line 268) | class TestSettingsPathsLocalDev: method test_is_local_dev_true (line 272) | def test_is_local_dev_true(self, mock_path_class) -> None: method test_is_local_dev_false (line 286) | def test_is_local_dev_false(self, mock_path_class) -> None: method test_servers_dir_local_dev (line 300) | def test_servers_dir_local_dev(self, mock_is_local_dev) -> None: method test_static_dir_local_dev (line 313) | def test_static_dir_local_dev(self, mock_is_local_dev) -> None: method test_templates_dir_local_dev (line 326) | def test_templates_dir_local_dev(self, mock_is_local_dev) -> None: method test_log_dir_local_dev (line 339) | def test_log_dir_local_dev(self, mock_is_local_dev) -> None: method test_log_file_path_local_dev (line 352) | def test_log_file_path_local_dev(self, mock_is_local_dev) -> None: method test_dotenv_path_local_dev (line 365) | def test_dotenv_path_local_dev(self, mock_is_local_dev) -> None: method test_agents_dir_local_dev (line 378) | def test_agents_dir_local_dev(self, mock_is_local_dev) -> None: method test_embeddings_model_dir_local_dev (line 391) | def test_embeddings_model_dir_local_dev(self, mock_is_local_dev) -> None: class TestSettingsPathsContainer (line 411) | class TestSettingsPathsContainer: method test_servers_dir_container (line 415) | def test_servers_dir_container(self, mock_is_local_dev) -> None: method test_static_dir_container (line 428) | def test_static_dir_container(self, mock_is_local_dev) -> None: method test_templates_dir_container (line 441) | def test_templates_dir_container(self, mock_is_local_dev) -> None: method test_log_dir_container (line 454) | def test_log_dir_container(self, mock_is_local_dev) -> None: method test_log_file_path_container (line 467) | def test_log_file_path_container(self, mock_is_local_dev) -> None: method test_dotenv_path_container (line 480) | def test_dotenv_path_container(self, mock_is_local_dev) -> None: method test_agents_dir_container (line 493) | def test_agents_dir_container(self, mock_is_local_dev) -> None: method test_embeddings_model_dir_container (line 506) | def test_embeddings_model_dir_container(self, mock_is_local_dev) -> None: class TestSettingsFixedPaths (line 526) | class TestSettingsFixedPaths: method test_nginx_config_path (line 529) | def test_nginx_config_path(self) -> None: method test_state_file_path (line 543) | def test_state_file_path(self, mock_servers_dir) -> None: method test_faiss_index_path (line 558) | def test_faiss_index_path(self, mock_servers_dir) -> None: method test_faiss_metadata_path (line 573) | def test_faiss_metadata_path(self, mock_servers_dir) -> None: method test_agent_state_file_path (line 588) | def test_agent_state_file_path(self, mock_agents_dir) -> None: class TestSettingsEmbeddingsProviders (line 608) | class TestSettingsEmbeddingsProviders: method test_sentence_transformers_provider (line 611) | def test_sentence_transformers_provider(self) -> None: method test_litellm_provider_with_api_key (line 628) | def test_litellm_provider_with_api_key(self) -> None: method test_litellm_provider_bedrock (line 646) | def test_litellm_provider_bedrock(self) -> None: class TestSettingsModelConfig (line 672) | class TestSettingsModelConfig: method test_settings_extra_fields_ignored (line 675) | def test_settings_extra_fields_ignored(self) -> None: method test_settings_preserves_field_names (line 687) | def test_settings_preserves_field_names(self) -> None: class TestSettingsWithFixtures (line 707) | class TestSettingsWithFixtures: method test_test_settings_fixture (line 710) | def test_test_settings_fixture(self, test_settings: Settings) -> None: method test_test_settings_paths_are_temp (line 716) | def test_test_settings_paths_are_temp(self, test_settings: Settings, t... class TestSettingsSecretKeyGeneration (line 732) | class TestSettingsSecretKeyGeneration: method test_secret_key_generated_when_empty_string (line 735) | def test_secret_key_generated_when_empty_string(self) -> None: method test_secret_key_different_on_each_instantiation (line 744) | def test_secret_key_different_on_each_instantiation(self) -> None: method test_secret_key_is_hex_string (line 753) | def test_secret_key_is_hex_string(self) -> None: class TestSettingsSessionCookie (line 776) | class TestSettingsSessionCookie: method test_session_cookie_secure_false_by_default (line 779) | def test_session_cookie_secure_false_by_default(self) -> None: method test_session_cookie_secure_can_be_enabled (line 787) | def test_session_cookie_secure_can_be_enabled(self, monkeypatch) -> None: method test_session_cookie_domain_none_by_default (line 798) | def test_session_cookie_domain_none_by_default(self) -> None: method test_session_cookie_domain_can_be_set (line 806) | def test_session_cookie_domain_can_be_set(self, monkeypatch) -> None: method test_session_max_age_default (line 817) | def test_session_max_age_default(self) -> None: class TestSettingsAuthServerUrls (line 833) | class TestSettingsAuthServerUrls: method test_auth_server_urls_default_to_localhost (line 836) | def test_auth_server_urls_default_to_localhost(self, monkeypatch, tmp_... method test_auth_server_urls_can_differ (line 850) | def test_auth_server_urls_can_differ(self, monkeypatch) -> None: class TestSettingsTabVisibilityFeatureFlags (line 871) | class TestSettingsTabVisibilityFeatureFlags: method test_settings_tab_defaults_match_current_behavior (line 875) | async def test_settings_tab_defaults_match_current_behavior(self): method test_settings_tab_show_false_hides_feature (line 888) | async def test_settings_tab_show_false_hides_feature(self, monkeypatch... method test_settings_tab_mode_disables_feature_regardless (line 902) | async def test_settings_tab_mode_disables_feature_regardless(self, mon... method test_settings_tab_virtual_servers_key_present (line 917) | async def test_settings_tab_virtual_servers_key_present(self): method test_settings_tab_virtual_servers_false (line 926) | async def test_settings_tab_virtual_servers_false(self, monkeypatch, t... method test_settings_tab_virtual_servers_hidden_by_mode (line 939) | async def test_settings_tab_virtual_servers_hidden_by_mode(self, monke... class TestSettingsTabVisibilityStartupWarnings (line 961) | class TestSettingsTabVisibilityStartupWarnings: method test_settings_tab_warning_for_ineffective_override (line 964) | def test_settings_tab_warning_for_ineffective_override(self, monkeypat... method test_settings_tab_no_warning_when_consistent (line 982) | def test_settings_tab_no_warning_when_consistent(self, monkeypatch, tm... FILE: tests/unit/core/test_endpoint_utils.py class TestUrlContainsTransportPath (line 23) | class TestUrlContainsTransportPath: method test_url_ending_with_mcp (line 26) | def test_url_ending_with_mcp(self) -> None: method test_url_ending_with_sse (line 30) | def test_url_ending_with_sse(self) -> None: method test_url_with_mcp_in_path (line 34) | def test_url_with_mcp_in_path(self) -> None: method test_url_with_sse_in_path (line 38) | def test_url_with_sse_in_path(self) -> None: method test_url_without_transport_path (line 42) | def test_url_without_transport_path(self) -> None: method test_url_with_custom_path (line 46) | def test_url_with_custom_path(self) -> None: class TestGetEndpointUrlStreamableHttp (line 58) | class TestGetEndpointUrlStreamableHttp: method test_explicit_mcp_endpoint_takes_priority (line 61) | def test_explicit_mcp_endpoint_takes_priority(self) -> None: method test_explicit_mcp_endpoint_preserves_trailing_slash (line 70) | def test_explicit_mcp_endpoint_preserves_trailing_slash(self) -> None: method test_url_with_mcp_used_as_is (line 80) | def test_url_with_mcp_used_as_is(self) -> None: method test_url_with_mcp_in_path_used_as_is (line 88) | def test_url_with_mcp_in_path_used_as_is(self) -> None: method test_plain_url_gets_mcp_appended (line 96) | def test_plain_url_gets_mcp_appended(self) -> None: method test_url_with_trailing_slash_handled (line 104) | def test_url_with_trailing_slash_handled(self) -> None: method test_default_transport_is_streamable_http (line 112) | def test_default_transport_is_streamable_http(self) -> None: class TestGetEndpointUrlSse (line 127) | class TestGetEndpointUrlSse: method test_explicit_sse_endpoint_takes_priority (line 130) | def test_explicit_sse_endpoint_takes_priority(self) -> None: method test_explicit_sse_endpoint_preserves_trailing_slash (line 139) | def test_explicit_sse_endpoint_preserves_trailing_slash(self) -> None: method test_url_with_sse_used_as_is (line 149) | def test_url_with_sse_used_as_is(self) -> None: method test_url_with_sse_in_path_used_as_is (line 157) | def test_url_with_sse_in_path_used_as_is(self) -> None: method test_plain_url_gets_sse_appended (line 165) | def test_plain_url_gets_sse_appended(self) -> None: method test_url_with_trailing_slash_handled (line 173) | def test_url_with_trailing_slash_handled(self) -> None: class TestGetEndpointUrlFromServerInfo (line 189) | class TestGetEndpointUrlFromServerInfo: method test_extracts_proxy_pass_url (line 192) | def test_extracts_proxy_pass_url(self) -> None: method test_uses_mcp_endpoint_from_server_info (line 198) | def test_uses_mcp_endpoint_from_server_info(self) -> None: method test_uses_sse_endpoint_from_server_info (line 207) | def test_uses_sse_endpoint_from_server_info(self) -> None: method test_raises_on_missing_proxy_pass_url (line 216) | def test_raises_on_missing_proxy_pass_url(self) -> None: method test_handles_none_endpoint_fields (line 222) | def test_handles_none_endpoint_fields(self) -> None: class TestRealWorldScenarios (line 240) | class TestRealWorldScenarios: method test_custom_use_case_endpoint (line 243) | def test_custom_use_case_endpoint(self) -> None: method test_multiple_servers_same_host (line 252) | def test_multiple_servers_same_host(self) -> None: method test_backward_compatibility_no_explicit_endpoint (line 267) | def test_backward_compatibility_no_explicit_endpoint(self) -> None: method test_backward_compatibility_url_already_has_mcp (line 275) | def test_backward_compatibility_url_already_has_mcp(self) -> None: class TestTrailingSlashPreservation (line 291) | class TestTrailingSlashPreservation: method test_hydrata_url_with_trailing_slash (line 294) | def test_hydrata_url_with_trailing_slash(self) -> None: method test_url_with_mcp_and_trailing_slash (line 303) | def test_url_with_mcp_and_trailing_slash(self) -> None: method test_url_with_sse_and_trailing_slash (line 311) | def test_url_with_sse_and_trailing_slash(self) -> None: method test_url_with_mcp_in_middle_and_trailing_slash (line 319) | def test_url_with_mcp_in_middle_and_trailing_slash(self) -> None: method test_url_without_transport_still_strips_slash (line 327) | def test_url_without_transport_still_strips_slash(self) -> None: class TestProductionUrlPatterns (line 343) | class TestProductionUrlPatterns: method test_pattern1_no_transport_no_slash (line 346) | def test_pattern1_no_transport_no_slash(self) -> None: method test_pattern2_no_transport_with_slash (line 352) | def test_pattern2_no_transport_with_slash(self) -> None: method test_pattern3_has_transport_no_slash (line 360) | def test_pattern3_has_transport_no_slash(self) -> None: method test_pattern4_has_transport_with_slash (line 370) | def test_pattern4_has_transport_with_slash(self) -> None: method test_all_patterns_except_pattern4_unchanged (line 377) | def test_all_patterns_except_pattern4_unchanged(self) -> None: class TestRegressionPrevention (line 402) | class TestRegressionPrevention: method test_prevents_301_redirect_issue (line 405) | def test_prevents_301_redirect_issue(self) -> None: method test_explicit_endpoint_with_slash_preserved (line 421) | def test_explicit_endpoint_with_slash_preserved(self) -> None: method test_cloudflare_docs_url_unchanged (line 429) | def test_cloudflare_docs_url_unchanged(self) -> None: method test_context7_url_unchanged (line 434) | def test_context7_url_unchanged(self) -> None: FILE: tests/unit/core/test_mcp_client.py function mock_server_info (line 33) | def mock_server_info(): function mock_tools_response (line 44) | def mock_tools_response(): function mock_client_session (line 74) | def mock_client_session(): function test_normalize_sse_endpoint_url_with_mount_path (line 88) | def test_normalize_sse_endpoint_url_with_mount_path(): function test_normalize_sse_endpoint_url_without_mount_path (line 97) | def test_normalize_sse_endpoint_url_without_mount_path(): function test_normalize_sse_endpoint_url_empty (line 106) | def test_normalize_sse_endpoint_url_empty(): function test_normalize_sse_endpoint_url_complex_path (line 114) | def test_normalize_sse_endpoint_url_complex_path(): function test_normalize_sse_endpoint_url_for_request_with_mount (line 128) | def test_normalize_sse_endpoint_url_for_request_with_mount(): function test_normalize_sse_endpoint_url_for_request_without_mount (line 137) | def test_normalize_sse_endpoint_url_for_request_without_mount(): function test_normalize_sse_endpoint_url_for_request_api_path (line 146) | def test_normalize_sse_endpoint_url_for_request_api_path(): function test_normalize_sse_endpoint_url_for_request_no_messages (line 156) | def test_normalize_sse_endpoint_url_for_request_no_messages(): function test_build_headers_for_server_with_custom_headers (line 170) | def test_build_headers_for_server_with_custom_headers(): function test_build_headers_for_server_no_custom_headers (line 188) | def test_build_headers_for_server_no_custom_headers(): function test_build_headers_for_server_empty_headers (line 198) | def test_build_headers_for_server_empty_headers(): function test_detect_server_transport_explicit_sse (line 215) | async def test_detect_server_transport_explicit_sse(): function test_detect_server_transport_explicit_mcp (line 225) | async def test_detect_server_transport_explicit_mcp(): function test_detect_server_transport_streamable_http_success (line 235) | async def test_detect_server_transport_streamable_http_success(): function test_detect_server_transport_sse_fallback (line 249) | async def test_detect_server_transport_sse_fallback(): function test_detect_server_transport_default (line 266) | async def test_detect_server_transport_default(): function test_detect_server_transport_aware_with_config (line 288) | async def test_detect_server_transport_aware_with_config(): function test_detect_server_transport_aware_prefer_streamable (line 300) | async def test_detect_server_transport_aware_prefer_streamable(): function test_detect_server_transport_aware_explicit_url (line 312) | async def test_detect_server_transport_aware_explicit_url(): function test_detect_server_transport_aware_no_config (line 325) | async def test_detect_server_transport_aware_no_config(): function test_extract_tool_details (line 341) | def test_extract_tool_details(mock_tools_response): function test_extract_tool_details_no_description (line 357) | def test_extract_tool_details_no_description(): function test_extract_tool_details_empty_response (line 376) | def test_extract_tool_details_empty_response(): function test_extract_tool_details_complex_docstring (line 387) | def test_extract_tool_details_complex_docstring(): function test_get_tools_streamable_http_success (line 428) | async def test_get_tools_streamable_http_success(mock_server_info, mock_... function test_get_tools_streamable_http_timeout (line 451) | async def test_get_tools_streamable_http_timeout(): function test_get_tools_streamable_http_anthropic_registry (line 471) | async def test_get_tools_streamable_http_anthropic_registry(): function test_get_tools_streamable_http_fallback_endpoints (line 506) | async def test_get_tools_streamable_http_fallback_endpoints(): function test_get_tools_sse_success (line 545) | async def test_get_tools_sse_success(mock_tools_response): function test_get_tools_sse_timeout (line 567) | async def test_get_tools_sse_timeout(): function test_get_tools_sse_connection_error (line 587) | async def test_get_tools_sse_connection_error(): function test_get_tools_sse_url_normalization (line 601) | async def test_get_tools_sse_url_normalization(): function test_get_tools_from_server_with_transport_auto (line 637) | async def test_get_tools_from_server_with_transport_auto(): function test_get_tools_from_server_with_transport_streamable_http (line 650) | async def test_get_tools_from_server_with_transport_streamable_http(): function test_get_tools_from_server_with_transport_sse (line 663) | async def test_get_tools_from_server_with_transport_sse(): function test_get_tools_from_server_with_transport_unsupported (line 676) | async def test_get_tools_from_server_with_transport_unsupported(): function test_get_tools_from_server_with_transport_empty_url (line 687) | async def test_get_tools_from_server_with_transport_empty_url(): function test_get_tools_from_server_with_server_info_success (line 701) | async def test_get_tools_from_server_with_server_info_success(mock_serve... function test_get_tools_from_server_with_server_info_empty_url (line 719) | async def test_get_tools_from_server_with_server_info_empty_url(): function test_get_tools_from_server_with_server_info_exception (line 728) | async def test_get_tools_from_server_with_server_info_exception(): function test_mcp_client_service_wrapper (line 757) | async def test_mcp_client_service_wrapper(mock_server_info): function test_mcp_client_service_global_instance (line 774) | def test_mcp_client_service_global_instance(): function test_full_tool_discovery_flow_streamable_http (line 787) | async def test_full_tool_discovery_flow_streamable_http(mock_server_info... function test_full_tool_discovery_flow_sse (line 816) | async def test_full_tool_discovery_flow_sse(mock_tools_response): FILE: tests/unit/core/test_nginx_service.py function nginx_service (line 23) | def nginx_service(): function sample_servers (line 50) | def sample_servers(): function mock_health_service (line 68) | def mock_health_service(): function test_nginx_service_init_http_only (line 81) | def test_nginx_service_init_http_only(): function test_nginx_service_init_http_and_https (line 117) | def test_nginx_service_init_http_and_https(): function test_get_additional_server_names_from_env (line 158) | async def test_get_additional_server_names_from_env(nginx_service): function test_get_additional_server_names_ec2_metadata (line 168) | async def test_get_additional_server_names_ec2_metadata(nginx_service): function test_get_additional_server_names_ecs_metadata (line 196) | async def test_get_additional_server_names_ecs_metadata(nginx_service): function test_get_additional_server_names_pod_ip (line 217) | async def test_get_additional_server_names_pod_ip(nginx_service): function test_get_additional_server_names_hostname_command (line 237) | async def test_get_additional_server_names_hostname_command(nginx_service): function test_get_additional_server_names_fallback_empty (line 258) | async def test_get_additional_server_names_fallback_empty(nginx_service): function test_generate_config_from_async_context (line 282) | def test_generate_config_from_async_context(nginx_service): function test_generate_config_async_success (line 294) | async def test_generate_config_async_success(nginx_service, sample_serve... function test_generate_config_async_template_not_found (line 334) | async def test_generate_config_async_template_not_found(nginx_service, s... function test_generate_config_async_unhealthy_servers (line 344) | async def test_generate_config_async_unhealthy_servers( function test_generate_config_async_exception (line 377) | async def test_generate_config_async_exception(nginx_service, sample_ser... function test_reload_nginx_success (line 392) | def test_reload_nginx_success(nginx_service): function test_reload_nginx_config_test_failure (line 410) | def test_reload_nginx_config_test_failure(nginx_service): function test_reload_nginx_reload_failure (line 423) | def test_reload_nginx_reload_failure(nginx_service): function test_reload_nginx_not_found (line 441) | def test_reload_nginx_not_found(nginx_service): function test_reload_nginx_exception (line 450) | def test_reload_nginx_exception(nginx_service): function test_generate_transport_location_blocks_streamable_http (line 464) | def test_generate_transport_location_blocks_streamable_http(nginx_service): function test_generate_transport_location_blocks_sse (line 479) | def test_generate_transport_location_blocks_sse(nginx_service): function test_generate_transport_location_blocks_both_transports (line 494) | def test_generate_transport_location_blocks_both_transports(nginx_service): function test_generate_transport_location_blocks_no_transports (line 509) | def test_generate_transport_location_blocks_no_transports(nginx_service): function test_create_location_block_streamable_http (line 529) | def test_create_location_block_streamable_http(nginx_service): function test_create_location_block_sse (line 542) | def test_create_location_block_sse(nginx_service): function test_create_location_block_external_service (line 553) | def test_create_location_block_external_service(nginx_service): function test_create_location_block_internal_service (line 566) | def test_create_location_block_internal_service(nginx_service): function test_create_location_block_direct_transport (line 579) | def test_create_location_block_direct_transport(nginx_service): function test_generate_config_async_keycloak_parsing (line 595) | async def test_generate_config_async_keycloak_parsing( function test_generate_config_async_keycloak_default_port (line 641) | async def test_generate_config_async_keycloak_default_port( function test_generate_config_async_strips_keycloak_locations_for_entra (line 680) | async def test_generate_config_async_strips_keycloak_locations_for_entra( function test_generate_config_async_keeps_keycloak_locations_for_keycloak (line 737) | async def test_generate_config_async_keeps_keycloak_locations_for_keycloak( function test_generate_config_async_strips_keycloak_locations_for_cognito (line 798) | async def test_generate_config_async_strips_keycloak_locations_for_cognito( function test_generate_config_async_keycloak_https_default_port (line 845) | async def test_generate_config_async_keycloak_https_default_port( function test_generate_config_async_keycloak_hostname_fallback (line 883) | async def test_generate_config_async_keycloak_hostname_fallback( function test_generate_config_async_keycloak_url_parse_exception (line 921) | async def test_generate_config_async_keycloak_url_parse_exception( FILE: tests/unit/core/test_schemas_protocol_trust_fields.py function _build_minimal_agent_card (line 25) | def _build_minimal_agent_card(**overrides) -> AgentCard: function _build_minimal_registration (line 39) | def _build_minimal_registration(**overrides) -> AgentRegistrationRequest: class TestAgentCardDefaults (line 56) | class TestAgentCardDefaults: method test_trust_level_defaults_to_community (line 59) | def test_trust_level_defaults_to_community(self): method test_visibility_defaults_to_public (line 64) | def test_visibility_defaults_to_public(self): method test_supported_protocol_defaults_to_none (line 69) | def test_supported_protocol_defaults_to_none(self): method test_supported_protocol_a2a (line 74) | def test_supported_protocol_a2a(self): method test_supported_protocol_other (line 79) | def test_supported_protocol_other(self): method test_supported_protocol_camel_case_alias (line 84) | def test_supported_protocol_camel_case_alias(self): method test_supported_protocol_serializes_with_alias (line 89) | def test_supported_protocol_serializes_with_alias(self): method test_trust_level_camel_case_alias (line 96) | def test_trust_level_camel_case_alias(self): method test_trust_level_all_valid_values (line 101) | def test_trust_level_all_valid_values(self): method test_trust_level_invalid_value_rejected (line 107) | def test_trust_level_invalid_value_rejected(self): class TestAgentCardBackwardCompat (line 119) | class TestAgentCardBackwardCompat: method test_old_agent_data_without_supported_protocol (line 122) | def test_old_agent_data_without_supported_protocol(self): method test_old_agent_with_unverified_trust_still_valid (line 137) | def test_old_agent_with_unverified_trust_still_valid(self): method test_old_agent_with_internal_visibility_still_valid (line 142) | def test_old_agent_with_internal_visibility_still_valid(self): class TestAgentInfoFields (line 154) | class TestAgentInfoFields: method test_trust_level_defaults_to_community (line 157) | def test_trust_level_defaults_to_community(self): method test_visibility_defaults_to_public (line 166) | def test_visibility_defaults_to_public(self): method test_supported_protocol_defaults_to_none (line 175) | def test_supported_protocol_defaults_to_none(self): method test_supported_protocol_a2a (line 184) | def test_supported_protocol_a2a(self): method test_supported_protocol_camel_case_alias (line 194) | def test_supported_protocol_camel_case_alias(self): method test_all_fields_serialized (line 204) | def test_all_fields_serialized(self): class TestAgentRegistrationRequest (line 226) | class TestAgentRegistrationRequest: method test_supported_protocol_required (line 229) | def test_supported_protocol_required(self): method test_supported_protocol_a2a (line 237) | def test_supported_protocol_a2a(self): method test_supported_protocol_other (line 242) | def test_supported_protocol_other(self): method test_supported_protocol_normalized_to_lowercase (line 247) | def test_supported_protocol_normalized_to_lowercase(self): method test_supported_protocol_invalid_rejected (line 252) | def test_supported_protocol_invalid_rejected(self): method test_supported_protocol_camel_case_alias (line 257) | def test_supported_protocol_camel_case_alias(self): method test_trust_level_defaults_to_community (line 266) | def test_trust_level_defaults_to_community(self): method test_trust_level_all_valid_values (line 271) | def test_trust_level_all_valid_values(self): method test_trust_level_invalid_rejected (line 277) | def test_trust_level_invalid_rejected(self): method test_trust_level_camel_case_alias (line 282) | def test_trust_level_camel_case_alias(self): method test_visibility_defaults_to_public (line 292) | def test_visibility_defaults_to_public(self): method test_full_registration_with_all_new_fields (line 297) | def test_full_registration_with_all_new_fields(self): FILE: tests/unit/core/test_schemas_registry_card_fields.py class TestServerInfoRegistryCardFields (line 13) | class TestServerInfoRegistryCardFields: method test_default_lifecycle_status (line 16) | def test_default_lifecycle_status(self): method test_custom_lifecycle_status (line 26) | def test_custom_lifecycle_status(self): method test_all_lifecycle_statuses (line 37) | def test_all_lifecycle_statuses(self): method test_provider_default_population (line 56) | def test_provider_default_population(self): method test_custom_provider (line 71) | def test_custom_provider(self): method test_source_timestamps_default_none (line 90) | def test_source_timestamps_default_none(self): method test_source_timestamps_with_values (line 102) | def test_source_timestamps_with_values(self): method test_external_tags_default_empty (line 119) | def test_external_tags_default_empty(self): method test_external_tags_with_values (line 130) | def test_external_tags_with_values(self): method test_all_registry_card_fields_together (line 143) | def test_all_registry_card_fields_together(self): method test_json_serialization_with_registry_card_fields (line 170) | def test_json_serialization_with_registry_card_fields(self): method test_backwards_compatibility_without_new_fields (line 206) | def test_backwards_compatibility_without_new_fields(self): class TestAgentCardRegistryCardFields (line 227) | class TestAgentCardRegistryCardFields: method test_default_lifecycle_status (line 230) | def test_default_lifecycle_status(self): method test_custom_lifecycle_status (line 242) | def test_custom_lifecycle_status(self): method test_source_timestamps_default_none (line 255) | def test_source_timestamps_default_none(self): method test_source_timestamps_with_values (line 269) | def test_source_timestamps_with_values(self): method test_external_tags_default_empty (line 288) | def test_external_tags_default_empty(self): method test_external_tags_with_values (line 301) | def test_external_tags_with_values(self): method test_all_registry_card_fields_together (line 315) | def test_all_registry_card_fields_together(self): method test_json_serialization_with_camel_case_aliases (line 338) | def test_json_serialization_with_camel_case_aliases(self): method test_backwards_compatibility_without_new_fields (line 364) | def test_backwards_compatibility_without_new_fields(self): method test_snake_case_and_camel_case_both_work (line 387) | def test_snake_case_and_camel_case_both_work(self): FILE: tests/unit/core/test_telemetry.py class TestTelemetryEnabled (line 30) | class TestTelemetryEnabled: method test_telemetry_enabled_by_default (line 33) | def test_telemetry_enabled_by_default(self, monkeypatch): method test_telemetry_disabled_via_env_var (line 40) | def test_telemetry_disabled_via_env_var(self, monkeypatch): method test_telemetry_disabled_via_env_var_true (line 45) | def test_telemetry_disabled_via_env_var_true(self, monkeypatch): method test_telemetry_disabled_via_env_var_yes (line 50) | def test_telemetry_disabled_via_env_var_yes(self, monkeypatch): method test_heartbeat_enabled_by_default (line 55) | def test_heartbeat_enabled_by_default(self, monkeypatch): method test_heartbeat_disabled_via_opt_out_env_var (line 64) | def test_heartbeat_disabled_via_opt_out_env_var(self, monkeypatch): method test_heartbeat_disabled_via_opt_out_true (line 72) | def test_heartbeat_disabled_via_opt_out_true(self, monkeypatch): method test_heartbeat_disabled_via_opt_out_yes (line 80) | def test_heartbeat_disabled_via_opt_out_yes(self, monkeypatch): method test_heartbeat_disabled_when_telemetry_disabled (line 88) | def test_heartbeat_disabled_when_telemetry_disabled(self, monkeypatch): class TestGetRegistryIdFallback (line 95) | class TestGetRegistryIdFallback: method test_returns_card_id_when_available (line 99) | async def test_returns_card_id_when_available(self): method test_falls_back_to_instance_id_when_no_card (line 115) | async def test_falls_back_to_instance_id_when_no_card(self): method test_falls_back_on_exception (line 135) | async def test_falls_back_on_exception(self): method test_never_returns_none (line 152) | async def test_never_returns_none(self): class TestPayloadBuilding (line 174) | class TestPayloadBuilding: method test_build_startup_payload_structure (line 178) | async def test_build_startup_payload_structure(self): method test_no_pii_in_startup_payload (line 213) | async def test_no_pii_in_startup_payload(self): method test_build_heartbeat_payload_structure (line 242) | async def test_build_heartbeat_payload_structure(self): method test_heartbeat_payload_search_backend_detection (line 300) | async def test_heartbeat_payload_search_backend_detection(self): class TestInstanceID (line 342) | class TestInstanceID: method test_instance_id_persistence_file_based (line 346) | async def test_instance_id_persistence_file_based(self, tmp_path, monk... method test_instance_id_file_creation (line 361) | async def test_instance_id_file_creation(self, tmp_path): class TestLockAcquisition (line 378) | class TestLockAcquisition: method test_acquire_lock_file_based_always_succeeds (line 382) | async def test_acquire_lock_file_based_always_succeeds(self): method test_acquire_lock_mongodb_success (line 391) | async def test_acquire_lock_mongodb_success(self): method test_acquire_lock_mongodb_failure (line 415) | async def test_acquire_lock_mongodb_failure(self): class TestSendTelemetry (line 437) | class TestSendTelemetry: method test_send_telemetry_success (line 441) | async def test_send_telemetry_success(self, monkeypatch): method test_send_telemetry_timeout (line 470) | async def test_send_telemetry_timeout(self, monkeypatch): method test_send_telemetry_debug_mode (line 495) | async def test_send_telemetry_debug_mode(self, monkeypatch, caplog): method test_send_telemetry_retry_logic (line 517) | async def test_send_telemetry_retry_logic(self, monkeypatch): class TestScheduler (line 558) | class TestScheduler: method test_scheduler_start_stop (line 562) | async def test_scheduler_start_stop(self): method test_scheduler_prevents_double_start (line 577) | async def test_scheduler_prevents_double_start(self): class TestInitialization (line 594) | class TestInitialization: method test_initialize_telemetry_file_based (line 598) | async def test_initialize_telemetry_file_based(self): method test_initialize_telemetry_creates_collection (line 607) | async def test_initialize_telemetry_creates_collection(self): class TestPublicAPI (line 633) | class TestPublicAPI: method test_send_startup_ping_disabled (line 637) | async def test_send_startup_ping_disabled(self, monkeypatch, caplog): method test_heartbeat_scheduler_starts_by_default (line 655) | async def test_heartbeat_scheduler_starts_by_default(self, monkeypatch): method test_heartbeat_scheduler_not_started_when_opted_out (line 678) | async def test_heartbeat_scheduler_not_started_when_opted_out(self, mo... class TestRepositoryFailures (line 693) | class TestRepositoryFailures: method test_heartbeat_repository_failure_logging (line 697) | async def test_heartbeat_repository_failure_logging(self, caplog): class TestConstants (line 741) | class TestConstants: method test_telemetry_constants (line 744) | def test_telemetry_constants(self): method test_heartbeat_interval_from_settings (line 749) | def test_heartbeat_interval_from_settings(self): method test_heartbeat_lock_interval_matches (line 755) | def test_heartbeat_lock_interval_matches(self): method test_custom_heartbeat_interval (line 761) | def test_custom_heartbeat_interval(self): FILE: tests/unit/core/test_visibility_normalization.py function _build_minimal_agent_card (line 20) | def _build_minimal_agent_card(**overrides) -> AgentCard: function _build_minimal_registration (line 34) | def _build_minimal_registration(**overrides) -> AgentRegistrationRequest: class TestAgentCardVisibilityNormalization (line 51) | class TestAgentCardVisibilityNormalization: method test_internal_normalized_to_private (line 54) | def test_internal_normalized_to_private(self): method test_private_accepted (line 59) | def test_private_accepted(self): method test_public_accepted (line 64) | def test_public_accepted(self): method test_group_normalized_to_group_restricted (line 69) | def test_group_normalized_to_group_restricted(self): method test_group_restricted_accepted (line 77) | def test_group_restricted_accepted(self): method test_case_insensitive (line 85) | def test_case_insensitive(self): method test_invalid_visibility_rejected (line 90) | def test_invalid_visibility_rejected(self): method test_backward_compat_old_data_with_internal (line 95) | def test_backward_compat_old_data_with_internal(self): class TestRegistrationVisibilityNormalization (line 117) | class TestRegistrationVisibilityNormalization: method test_internal_normalized_to_private (line 120) | def test_internal_normalized_to_private(self): method test_private_accepted (line 125) | def test_private_accepted(self): method test_group_normalized_to_group_restricted (line 130) | def test_group_normalized_to_group_restricted(self): method test_default_is_public (line 135) | def test_default_is_public(self): method test_invalid_visibility_rejected (line 140) | def test_invalid_visibility_rejected(self): FILE: tests/unit/embeddings/test_embeddings_client.py function mock_sentence_transformer (line 35) | def mock_sentence_transformer(): function mock_litellm_response (line 49) | def mock_litellm_response(): function temp_model_dir (line 65) | def temp_model_dir(tmp_path: Path) -> Path: function empty_model_dir (line 85) | def empty_model_dir(tmp_path: Path) -> Path: class TestEmbeddingsClient (line 107) | class TestEmbeddingsClient: method test_cannot_instantiate_abstract_class (line 110) | def test_cannot_instantiate_abstract_class(self): method test_abstract_encode_method (line 116) | def test_abstract_encode_method(self): method test_abstract_get_embedding_dimension_method (line 128) | def test_abstract_get_embedding_dimension_method(self): method test_concrete_implementation_works (line 140) | def test_concrete_implementation_works(self): class TestSentenceTransformersClient (line 166) | class TestSentenceTransformersClient: method test_initialization (line 169) | def test_initialization(self): method test_initialization_minimal (line 190) | def test_initialization_minimal(self): method test_load_model_from_huggingface (line 203) | def test_load_model_from_huggingface(self, mock_sentence_transformer): method test_load_model_from_local_directory (line 218) | def test_load_model_from_local_directory(self, mock_sentence_transform... method test_load_model_empty_local_directory (line 236) | def test_load_model_empty_local_directory(self, mock_sentence_transfor... method test_load_model_with_cache_dir (line 254) | def test_load_model_with_cache_dir(self, mock_sentence_transformer, tm... method test_load_model_restores_environment_variable (line 272) | def test_load_model_restores_environment_variable(self, mock_sentence_... method test_load_model_removes_environment_variable_if_not_set (line 295) | def test_load_model_removes_environment_variable_if_not_set( method test_load_model_only_once (line 317) | def test_load_model_only_once(self, mock_sentence_transformer): method test_load_model_failure (line 333) | def test_load_model_failure(self): method test_encode_single_text (line 344) | def test_encode_single_text(self, mock_sentence_transformer): method test_encode_multiple_texts (line 363) | def test_encode_multiple_texts(self, mock_sentence_transformer): method test_encode_lazy_loads_model (line 383) | def test_encode_lazy_loads_model(self, mock_sentence_transformer): method test_encode_failure (line 398) | def test_encode_failure(self, mock_sentence_transformer): method test_get_embedding_dimension (line 410) | def test_get_embedding_dimension(self, mock_sentence_transformer): method test_get_embedding_dimension_lazy_loads_model (line 424) | def test_get_embedding_dimension_lazy_loads_model(self, mock_sentence_... method test_get_embedding_dimension_cached (line 440) | def test_get_embedding_dimension_cached(self, mock_sentence_transformer): class TestLiteLLMClient (line 466) | class TestLiteLLMClient: method test_initialization_minimal (line 469) | def test_initialization_minimal(self): method test_initialization_with_all_parameters (line 482) | def test_initialization_with_all_parameters(self): method test_initialization_sets_aws_region_env_var (line 500) | def test_initialization_sets_aws_region_env_var(self): method test_set_api_key_env_openai (line 521) | def test_set_api_key_env_openai(self): method test_set_api_key_env_cohere (line 544) | def test_set_api_key_env_cohere(self): method test_set_api_key_env_azure (line 567) | def test_set_api_key_env_azure(self): method test_set_api_key_env_bedrock_skips (line 590) | def test_set_api_key_env_bedrock_skips(self): method test_encode_single_text (line 605) | def test_encode_single_text(self, mock_litellm_response): method test_encode_multiple_texts (line 624) | def test_encode_multiple_texts(self, mock_litellm_response): method test_encode_with_api_base (line 643) | def test_encode_with_api_base(self, mock_litellm_response): method test_encode_validates_dimension (line 663) | def test_encode_validates_dimension(self, mock_litellm_response): method test_encode_warns_on_dimension_mismatch (line 679) | def test_encode_warns_on_dimension_mismatch(self, mock_litellm_respons... method test_encode_caches_validated_dimension (line 696) | def test_encode_caches_validated_dimension(self, mock_litellm_response): method test_encode_handles_api_error (line 714) | def test_encode_handles_api_error(self): method test_get_embedding_dimension_from_validated (line 725) | def test_get_embedding_dimension_from_validated(self, mock_litellm_res... method test_get_embedding_dimension_from_config (line 739) | def test_get_embedding_dimension_from_config(self): method test_get_embedding_dimension_makes_test_call (line 753) | def test_get_embedding_dimension_makes_test_call(self, mock_litellm_re... method test_get_embedding_dimension_test_call_failure (line 770) | def test_get_embedding_dimension_test_call_failure(self): class TestCreateEmbeddingsClient (line 789) | class TestCreateEmbeddingsClient: method test_create_sentence_transformers_client (line 792) | def test_create_sentence_transformers_client(self, mock_sentence_trans... method test_create_sentence_transformers_client_case_insensitive (line 808) | def test_create_sentence_transformers_client_case_insensitive(self, mo... method test_create_sentence_transformers_client_with_dirs (line 823) | def test_create_sentence_transformers_client_with_dirs( method test_create_litellm_client (line 846) | def test_create_litellm_client(self): method test_create_litellm_client_case_insensitive (line 858) | def test_create_litellm_client_case_insensitive(self): method test_create_litellm_client_with_parameters (line 869) | def test_create_litellm_client_with_parameters(self): method test_create_litellm_client_requires_provider_prefix (line 889) | def test_create_litellm_client_requires_provider_prefix(self): method test_create_litellm_client_error_message_helpful (line 898) | def test_create_litellm_client_error_message_helpful(self): method test_create_unsupported_provider (line 913) | def test_create_unsupported_provider(self): method test_create_unsupported_provider_lists_supported (line 922) | def test_create_unsupported_provider_lists_supported(self): FILE: tests/unit/health/test_health_service.py function mock_websocket (line 27) | def mock_websocket(): function ws_manager (line 39) | def ws_manager(): function health_service (line 45) | def health_service(): function mock_server_info (line 52) | def mock_server_info(): function test_ws_manager_add_connection_success (line 72) | async def test_ws_manager_add_connection_success(ws_manager, mock_websoc... function test_ws_manager_add_connection_at_capacity (line 85) | async def test_ws_manager_add_connection_at_capacity(ws_manager, mock_se... function test_ws_manager_remove_connection (line 109) | async def test_ws_manager_remove_connection(ws_manager, mock_websocket): function test_ws_manager_broadcast_update_no_connections (line 122) | async def test_ws_manager_broadcast_update_no_connections(ws_manager): function test_ws_manager_broadcast_update_rate_limiting (line 130) | async def test_ws_manager_broadcast_update_rate_limiting(ws_manager, moc... function test_ws_manager_safe_send_message_success (line 149) | async def test_ws_manager_safe_send_message_success(ws_manager, mock_web... function test_ws_manager_safe_send_message_timeout (line 160) | async def test_ws_manager_safe_send_message_timeout(ws_manager, mock_web... function test_ws_manager_send_to_connections_optimized (line 171) | async def test_ws_manager_send_to_connections_optimized(ws_manager): function test_ws_manager_get_stats (line 191) | def test_ws_manager_get_stats(ws_manager): function test_health_service_initialize (line 210) | async def test_health_service_initialize(health_service): function test_health_service_shutdown (line 220) | async def test_health_service_shutdown(health_service): function test_health_service_add_websocket_connection (line 246) | async def test_health_service_add_websocket_connection(health_service, m... function test_health_service_remove_websocket_connection (line 259) | async def test_health_service_remove_websocket_connection(health_service... function test_health_service_broadcast_health_update_no_connections (line 269) | async def test_health_service_broadcast_health_update_no_connections(hea... function test_health_service_broadcast_health_update_specific_service (line 277) | async def test_health_service_broadcast_health_update_specific_service( function test_health_service_get_cached_health_data (line 301) | async def test_health_service_get_cached_health_data(health_service): function test_health_service_get_websocket_stats (line 315) | def test_health_service_get_websocket_stats(health_service): function test_health_service_check_server_endpoint_transport_aware_healthy (line 327) | async def test_health_service_check_server_endpoint_transport_aware_heal... function test_health_service_check_server_endpoint_missing_url (line 349) | async def test_health_service_check_server_endpoint_missing_url(health_s... function test_health_service_check_server_endpoint_stdio_transport (line 363) | async def test_health_service_check_server_endpoint_stdio_transport( function test_health_service_build_headers_for_server (line 379) | def test_health_service_build_headers_for_server(health_service, mock_se... function test_health_service_build_headers_with_session_id (line 389) | def test_health_service_build_headers_with_session_id(health_service, mo... function test_health_service_initialize_mcp_session_success (line 406) | async def test_health_service_initialize_mcp_session_success(health_serv... function test_health_service_initialize_mcp_session_failure (line 423) | async def test_health_service_initialize_mcp_session_failure(health_serv... function test_health_service_try_ping_without_auth_success (line 440) | async def test_health_service_try_ping_without_auth_success(health_servi... function test_health_service_try_ping_without_auth_failure (line 454) | async def test_health_service_try_ping_without_auth_failure(health_servi... function test_health_service_is_mcp_endpoint_healthy_200 (line 465) | def test_health_service_is_mcp_endpoint_healthy_200(health_service): function test_health_service_is_mcp_endpoint_healthy_400_with_session_error (line 476) | def test_health_service_is_mcp_endpoint_healthy_400_with_session_error(h... function test_health_service_is_mcp_endpoint_healthy_streamable_200 (line 492) | def test_health_service_is_mcp_endpoint_healthy_streamable_200(health_se... function test_health_service_is_mcp_endpoint_healthy_streamable_400_with_jsonrpc_error (line 503) | def test_health_service_is_mcp_endpoint_healthy_streamable_400_with_json... function test_health_service_perform_immediate_health_check (line 518) | async def test_health_service_perform_immediate_health_check(health_serv... function test_health_service_check_single_service_status_changed (line 544) | async def test_health_service_check_single_service_status_changed(health... function test_health_service_update_tools_background (line 567) | async def test_health_service_update_tools_background(health_service, mo... function test_health_service_get_all_health_status (line 601) | async def test_health_service_get_all_health_status(health_service, mock... function test_health_service_get_service_health_data_fast (line 616) | def test_health_service_get_service_health_data_fast(health_service, moc... function test_health_service_get_service_health_data_disabled (line 628) | def test_health_service_get_service_health_data_disabled(health_service,... function test_health_service_enabled_status_consistency (line 641) | def test_health_service_enabled_status_consistency(health_service): function test_ws_manager_add_connection_exception (line 686) | async def test_ws_manager_add_connection_exception(ws_manager, mock_webs... function test_ws_manager_send_initial_status_optimized_with_cached_data (line 697) | async def test_ws_manager_send_initial_status_optimized_with_cached_data( function test_ws_manager_send_initial_status_optimized_exception (line 711) | async def test_ws_manager_send_initial_status_optimized_exception(ws_man... function test_ws_manager_broadcast_update_single_service (line 725) | async def test_ws_manager_broadcast_update_single_service(ws_manager, mo... function test_ws_manager_broadcast_update_with_pending_updates (line 740) | async def test_ws_manager_broadcast_update_with_pending_updates( function test_ws_manager_broadcast_update_full_status (line 768) | async def test_ws_manager_broadcast_update_full_status(ws_manager, mock_... function test_ws_manager_send_to_connections_no_connections (line 786) | async def test_ws_manager_send_to_connections_no_connections(ws_manager): function test_ws_manager_send_to_connections_with_failures (line 796) | async def test_ws_manager_send_to_connections_with_failures(ws_manager): function test_ws_manager_cleanup_failed_connections (line 820) | async def test_ws_manager_cleanup_failed_connections(ws_manager): function test_ws_manager_cleanup_failed_connections_empty (line 834) | async def test_ws_manager_cleanup_failed_connections_empty(ws_manager): function test_ws_manager_safe_send_message_exception (line 842) | async def test_ws_manager_safe_send_message_exception(ws_manager, mock_w... function test_health_service_shutdown_no_task (line 853) | async def test_health_service_shutdown_no_task(health_service): function test_health_service_shutdown_with_connection_errors (line 863) | async def test_health_service_shutdown_with_connection_errors(health_ser... function test_health_service_add_websocket_connection_failure (line 879) | async def test_health_service_add_websocket_connection_failure(health_se... function test_health_service_broadcast_health_update_full (line 889) | async def test_health_service_broadcast_health_update_full(health_service): function test_health_service_broadcast_health_update_no_server_info (line 902) | async def test_health_service_broadcast_health_update_no_server_info(hea... function test_health_service_get_cached_health_data_with_valid_cache (line 917) | async def test_health_service_get_cached_health_data_with_valid_cache(he... function test_health_service_run_health_checks_loop (line 932) | async def test_health_service_run_health_checks_loop(health_service): function test_health_service_run_health_checks_with_exception (line 957) | async def test_health_service_run_health_checks_with_exception(health_se... function test_health_service_perform_health_checks_no_services (line 987) | async def test_health_service_perform_health_checks_no_services(health_s... function test_health_service_perform_health_checks_many_services (line 998) | async def test_health_service_perform_health_checks_many_services(health... function test_health_service_perform_health_checks_status_changed (line 1013) | async def test_health_service_perform_health_checks_status_changed( function test_health_service_perform_health_checks_nginx_error (line 1035) | async def test_health_service_perform_health_checks_nginx_error(health_s... function test_health_service_check_single_service_timeout (line 1054) | async def test_health_service_check_single_service_timeout(health_servic... function test_health_service_check_single_service_connection_error (line 1071) | async def test_health_service_check_single_service_connection_error( function test_health_service_check_single_service_generic_error (line 1093) | async def test_health_service_check_single_service_generic_error(health_... function test_health_service_check_single_service_first_time_healthy (line 1110) | async def test_health_service_check_single_service_first_time_healthy( function test_health_service_check_single_service_transition_to_healthy (line 1135) | async def test_health_service_check_single_service_transition_to_healthy( function test_health_service_check_single_service_already_healthy_no_tools (line 1159) | async def test_health_service_check_single_service_already_healthy_no_to... function test_health_service_build_headers_for_server_no_headers (line 1187) | def test_health_service_build_headers_for_server_no_headers(health_servi... function test_health_service_build_headers_for_server_invalid_headers (line 1201) | def test_health_service_build_headers_for_server_invalid_headers(health_... function test_health_service_initialize_mcp_session_no_server_session_id (line 1218) | async def test_health_service_initialize_mcp_session_no_server_session_i... function test_health_service_initialize_mcp_session_exception (line 1239) | async def test_health_service_initialize_mcp_session_exception(health_se... function test_health_service_try_ping_without_auth_auth_errors (line 1253) | async def test_health_service_try_ping_without_auth_auth_errors(health_s... function test_health_service_try_ping_without_auth_server_error (line 1267) | async def test_health_service_try_ping_without_auth_server_error(health_... function test_health_service_check_server_endpoint_sse_transport (line 1281) | async def test_health_service_check_server_endpoint_sse_transport(health... function test_health_service_check_server_endpoint_sse_timeout (line 1302) | async def test_health_service_check_server_endpoint_sse_timeout(health_s... function test_health_service_check_server_endpoint_url_with_mcp (line 1320) | async def test_health_service_check_server_endpoint_url_with_mcp(health_... function test_health_service_check_server_endpoint_auth_failure (line 1340) | async def test_health_service_check_server_endpoint_auth_failure(health_... function test_health_service_get_service_health_data_fast_transitioning_from_disabled (line 1358) | def test_health_service_get_service_health_data_fast_transitioning_from_... function test_health_service_get_service_health_data_legacy_method (line 1372) | def test_health_service_get_service_health_data_legacy_method(health_ser... FILE: tests/unit/lambda/test_collector.py function _reset_globals (line 39) | def _reset_globals(): class TestSchemas (line 49) | class TestSchemas: method test_startup_event_valid (line 52) | def test_startup_event_valid(self): method test_startup_event_invalid_event_type (line 73) | def test_startup_event_invalid_event_type(self): method test_startup_event_missing_required_field (line 92) | def test_startup_event_missing_required_field(self): method test_heartbeat_event_valid (line 110) | def test_heartbeat_event_valid(self): method test_heartbeat_event_negative_count (line 129) | def test_heartbeat_event_negative_count(self): class TestIPHashing (line 148) | class TestIPHashing: method test_hash_ip_consistent (line 151) | def test_hash_ip_consistent(self): method test_hash_ip_different_ips (line 157) | def test_hash_ip_different_ips(self): class TestRateLimiting (line 161) | class TestRateLimiting: method test_rate_limit_allows_new_entry (line 165) | def test_rate_limit_allows_new_entry(self, mock_dynamodb): method test_rate_limit_allows_within_window (line 175) | def test_rate_limit_allows_within_window(self, mock_dynamodb): method test_rate_limit_blocks_request (line 189) | def test_rate_limit_blocks_request(self, mock_dynamodb): method test_rate_limit_fails_open_on_error (line 203) | def test_rate_limit_fails_open_on_error(self, mock_dynamodb): class TestDocumentDBConnection (line 214) | class TestDocumentDBConnection: method test_get_credentials (line 219) | def test_get_credentials(self, mock_sm, _mock_init): method test_get_database (line 235) | def test_get_database(self, mock_creds, mock_client_cls): class TestEventStorage (line 251) | class TestEventStorage: method test_store_startup_event (line 255) | def test_store_startup_event(self, mock_get_db): class TestLambdaHandler (line 270) | class TestLambdaHandler: method test_valid_startup_event (line 277) | def test_valid_startup_event(self, mock_hash, mock_rate, mock_verify, ... method test_valid_heartbeat_event (line 311) | def test_valid_heartbeat_event(self, mock_hash, mock_rate, mock_verify... method test_rate_limited_returns_204 (line 342) | def test_rate_limited_returns_204(self, mock_hash, mock_rate): method test_invalid_json_returns_204 (line 354) | def test_invalid_json_returns_204(self, mock_hash): method test_unknown_event_type_returns_204 (line 366) | def test_unknown_event_type_returns_204(self, mock_hash, mock_rate): method test_storage_failure_returns_204 (line 381) | def test_storage_failure_returns_204(self, mock_hash, mock_rate, mock_... FILE: tests/unit/middleware/test_mode_filter.py class TestPathAllowed (line 23) | class TestPathAllowed: method test_health_always_allowed (line 26) | def test_health_always_allowed(self): method test_version_always_allowed (line 33) | def test_version_always_allowed(self): method test_config_always_allowed (line 39) | def test_config_always_allowed(self): method test_docs_always_allowed (line 44) | def test_docs_always_allowed(self): method test_auth_always_allowed (line 50) | def test_auth_always_allowed(self): method test_audit_always_allowed (line 56) | def test_audit_always_allowed(self): method test_management_always_allowed (line 63) | def test_management_always_allowed(self): method test_full_mode_allows_all (line 69) | def test_full_mode_allows_all(self): method test_skills_only_allows_skills (line 77) | def test_skills_only_allows_skills(self): method test_skills_only_blocks_servers (line 83) | def test_skills_only_blocks_servers(self): method test_skills_only_blocks_agents (line 88) | def test_skills_only_blocks_agents(self): method test_skills_only_blocks_federation (line 93) | def test_skills_only_blocks_federation(self): method test_skills_only_allows_wellknown (line 98) | def test_skills_only_allows_wellknown(self): method test_mcp_servers_only_allows_servers (line 102) | def test_mcp_servers_only_allows_servers(self): method test_mcp_servers_only_blocks_agents (line 108) | def test_mcp_servers_only_blocks_agents(self): method test_mcp_servers_only_blocks_skills (line 112) | def test_mcp_servers_only_blocks_skills(self): method test_agents_only_allows_agents (line 116) | def test_agents_only_allows_agents(self): method test_agents_only_blocks_servers (line 122) | def test_agents_only_blocks_servers(self): method test_agents_only_blocks_skills (line 126) | def test_agents_only_blocks_skills(self): method test_frontend_paths_allowed (line 130) | def test_frontend_paths_allowed(self): class TestPathCategory (line 143) | class TestPathCategory: method test_servers_category (line 146) | def test_servers_category(self): method test_agents_category (line 151) | def test_agents_category(self): method test_skills_category (line 156) | def test_skills_category(self): method test_federation_category (line 161) | def test_federation_category(self): method test_other_category (line 167) | def test_other_category(self): class TestMiddlewareIntegration (line 179) | class TestMiddlewareIntegration: method test_middleware_blocks_disabled_endpoint (line 185) | async def test_middleware_blocks_disabled_endpoint( method test_middleware_allows_enabled_endpoint (line 217) | async def test_middleware_allows_enabled_endpoint( FILE: tests/unit/repositories/test_app_log_repository.py function mock_collection (line 13) | def mock_collection(): function repo (line 40) | def repo(mock_collection): function sample_docs (line 48) | def sample_docs() -> list[dict[str, Any]]: class TestQuery (line 67) | class TestQuery: method test_empty_result (line 71) | async def test_empty_result(self, repo, mock_collection): method test_uses_estimated_count_when_no_filter (line 78) | async def test_uses_estimated_count_when_no_filter(self, repo, mock_co... method test_uses_count_documents_with_filter (line 85) | async def test_uses_count_documents_with_filter(self, repo, mock_colle... method test_service_filter (line 92) | async def test_service_filter(self, repo, mock_collection): method test_level_no_gte_filter (line 98) | async def test_level_no_gte_filter(self, repo, mock_collection): method test_hostname_filter (line 104) | async def test_hostname_filter(self, repo, mock_collection): method test_time_range_filter (line 110) | async def test_time_range_filter(self, repo, mock_collection): method test_search_regex_filter (line 119) | async def test_search_regex_filter(self, repo, mock_collection): method test_pagination (line 125) | async def test_pagination(self, repo, mock_collection): method test_results_strip_id (line 132) | async def test_results_strip_id(self, repo, mock_collection, sample_do... method test_sort_by_timestamp_descending (line 143) | async def test_sort_by_timestamp_descending(self, repo, mock_collection): method test_error_returns_empty (line 149) | async def test_error_returns_empty(self, repo, mock_collection): class TestGetDistinctServices (line 156) | class TestGetDistinctServices: method test_returns_services (line 160) | async def test_returns_services(self, repo, mock_collection): method test_error_returns_empty (line 167) | async def test_error_returns_empty(self, repo, mock_collection): class TestGetDistinctHostnames (line 173) | class TestGetDistinctHostnames: method test_returns_hostnames (line 177) | async def test_returns_hostnames(self, repo, mock_collection): method test_error_returns_empty (line 184) | async def test_error_returns_empty(self, repo, mock_collection): FILE: tests/unit/repositories/test_file_server_repository.py function mock_settings (line 27) | def mock_settings(): function server_repository (line 44) | def server_repository(mock_settings): function sample_server_dict (line 50) | def sample_server_dict() -> dict[str, Any]: class TestPathToFilename (line 68) | class TestPathToFilename: method test_path_to_filename_simple (line 71) | def test_path_to_filename_simple(self, server_repository): method test_path_to_filename_nested (line 79) | def test_path_to_filename_nested(self, server_repository): method test_path_to_filename_with_trailing_slash (line 87) | def test_path_to_filename_with_trailing_slash(self, server_repository): method test_path_to_filename_already_has_json (line 95) | def test_path_to_filename_already_has_json(self, server_repository): method test_path_to_filename_multiple_slashes (line 103) | def test_path_to_filename_multiple_slashes(self, server_repository): class TestSaveToFile (line 119) | class TestSaveToFile: method test_save_to_file_success (line 123) | async def test_save_to_file_success(self, server_repository, sample_se... method test_save_to_file_creates_directory (line 142) | async def test_save_to_file_creates_directory( method test_save_to_file_handles_errors (line 157) | async def test_save_to_file_handles_errors( class TestSaveState (line 177) | class TestSaveState: method test_save_state_success (line 181) | async def test_save_state_success(self, server_repository, mock_settin... method test_save_state_handles_errors (line 199) | async def test_save_state_handles_errors(self, server_repository, mock... class TestLoadState (line 219) | class TestLoadState: method test_load_state_with_existing_file (line 223) | async def test_load_state_with_existing_file(self, server_repository, ... method test_load_state_no_file (line 239) | async def test_load_state_no_file(self, server_repository, mock_settin... method test_load_state_handles_trailing_slash_normalization (line 253) | async def test_load_state_handles_trailing_slash_normalization( method test_load_state_handles_corrupt_file (line 271) | async def test_load_state_handles_corrupt_file(self, server_repository... class TestFileServerRepositoryIntegration (line 294) | class TestFileServerRepositoryIntegration: method test_create_and_get_server (line 298) | async def test_create_and_get_server( method test_update_server_saves_to_file (line 316) | async def test_update_server_saves_to_file( FILE: tests/unit/repositories/test_registry_card_repository.py function mock_collection (line 21) | def mock_collection(): function sample_registry_card (line 30) | def sample_registry_card(): class TestDocumentDBRegistryCardRepository (line 43) | class TestDocumentDBRegistryCardRepository: method test_get_when_no_card_exists (line 47) | async def test_get_when_no_card_exists(self, mock_collection): method test_get_when_card_exists (line 60) | async def test_get_when_card_exists(self, mock_collection, sample_regi... method test_save_creates_new_card (line 81) | async def test_save_creates_new_card(self, mock_collection, sample_reg... method test_save_updates_existing_card (line 108) | async def test_save_updates_existing_card(self, mock_collection, sampl... method test_save_preserves_all_fields (line 142) | async def test_save_preserves_all_fields(self, mock_collection): method test_fixed_id_always_default (line 187) | async def test_fixed_id_always_default(self, mock_collection, sample_r... method test_upsert_option_enabled (line 208) | async def test_upsert_option_enabled(self, mock_collection, sample_reg... method test_get_handles_missing_optional_fields (line 223) | async def test_get_handles_missing_optional_fields(self, mock_collecti... method test_collection_name_is_correct (line 250) | async def test_collection_name_is_correct(self): method test_lazy_initialization_of_collection (line 257) | async def test_lazy_initialization_of_collection(self): method test_save_handles_none_optional_fields (line 275) | async def test_save_handles_none_optional_fields(self, mock_collection): method test_get_returns_card_with_default_capabilities (line 299) | async def test_get_returns_card_with_default_capabilities(self, mock_c... method test_save_timestamps_are_iso_format (line 325) | async def test_save_timestamps_are_iso_format(self, mock_collection, s... FILE: tests/unit/repositories/test_search_result_distribution.py function _make_doc (line 30) | def _make_doc( function _make_servers (line 51) | def _make_servers( function _make_agents (line 72) | def _make_agents( function _make_tools (line 83) | def _make_tools( function _make_skills (line 94) | def _make_skills( function _count_types (line 105) | def _count_types( class TestDistributeResults (line 128) | class TestDistributeResults: method test_empty_results (line 131) | def test_empty_results(self): method test_zero_max_results (line 136) | def test_zero_max_results(self): method test_single_type_no_cap (line 142) | def test_single_type_no_cap(self): method test_single_type_respects_max_results (line 151) | def test_single_type_respects_max_results(self): method test_single_type_fewer_than_max (line 157) | def test_single_type_fewer_than_max(self): method test_mixed_types_global_ranking (line 166) | def test_mixed_types_global_ranking(self): method test_soft_cap_enforced (line 180) | def test_soft_cap_enforced(self): method test_soft_cap_lifted_when_no_competition (line 200) | def test_soft_cap_lifted_when_no_competition(self): method test_max_results_1 (line 220) | def test_max_results_1(self): method test_max_results_equals_total (line 230) | def test_max_results_equals_total(self): method test_backward_compatible_default (line 240) | def test_backward_compatible_default(self): method test_entity_types_filter_single (line 258) | def test_entity_types_filter_single(self): method test_results_contain_highest_scores (line 267) | def test_results_contain_highest_scores(self): method test_three_types_competing (line 278) | def test_three_types_competing(self): method test_five_types_all_present (line 298) | def test_five_types_all_present(self): method test_small_max_results_5 (line 317) | def test_small_max_results_5(self): class TestToolExtractionLimit (line 340) | class TestToolExtractionLimit: method test_default_max_results (line 343) | def test_default_max_results(self): method test_small_max_results (line 348) | def test_small_max_results(self): method test_max_results_3 (line 353) | def test_max_results_3(self): method test_large_max_results (line 358) | def test_large_max_results(self): method test_never_below_3 (line 363) | def test_never_below_3(self): method test_scales_with_max_results (line 368) | def test_scales_with_max_results(self): class TestSoftCapRatio (line 380) | class TestSoftCapRatio: method test_ratio_value (line 383) | def test_ratio_value(self): method test_ratio_produces_expected_caps (line 387) | def test_ratio_produces_expected_caps(self): FILE: tests/unit/schemas/test_agent_models.py class TestAgentRegistrationRequestAllowedGroups (line 16) | class TestAgentRegistrationRequestAllowedGroups: method test_allowed_groups_defaults_to_empty_list (line 19) | def test_allowed_groups_defaults_to_empty_list(self): method test_allowed_groups_accepted_via_camel_case_alias (line 24) | def test_allowed_groups_accepted_via_camel_case_alias(self): method test_allowed_groups_accepted_via_snake_case (line 33) | def test_allowed_groups_accepted_via_snake_case(self): method test_allowed_groups_from_comma_separated_string (line 42) | def test_allowed_groups_from_comma_separated_string(self): method test_allowed_groups_string_strips_whitespace (line 51) | def test_allowed_groups_string_strips_whitespace(self): method test_allowed_groups_list_strips_whitespace (line 60) | def test_allowed_groups_list_strips_whitespace(self): method test_allowed_groups_string_filters_empty_segments (line 69) | def test_allowed_groups_string_filters_empty_segments(self): method test_allowed_groups_none_normalizes_to_empty_list (line 78) | def test_allowed_groups_none_normalizes_to_empty_list(self): method test_group_restricted_without_groups_raises_error (line 87) | def test_group_restricted_without_groups_raises_error(self): method test_group_restricted_with_empty_string_raises_error (line 96) | def test_group_restricted_with_empty_string_raises_error(self): method test_public_visibility_with_empty_groups_is_valid (line 105) | def test_public_visibility_with_empty_groups_is_valid(self): method test_private_visibility_with_empty_groups_is_valid (line 113) | def test_private_visibility_with_empty_groups_is_valid(self): method test_invalid_group_name_format_raises_error (line 121) | def test_invalid_group_name_format_raises_error(self): method test_group_name_with_allowed_special_chars (line 130) | def test_group_name_with_allowed_special_chars(self): method test_max_items_exceeded_raises_error (line 139) | def test_max_items_exceeded_raises_error(self): method test_exactly_50_groups_is_valid (line 148) | def test_exactly_50_groups_is_valid(self): FILE: tests/unit/schemas/test_agentcore_federation_schema.py class TestAgentCoreRegistryConfig (line 34) | class TestAgentCoreRegistryConfig: method test_required_registry_id (line 37) | def test_required_registry_id(self): method test_default_descriptor_types (line 42) | def test_default_descriptor_types(self): method test_custom_descriptor_types (line 47) | def test_custom_descriptor_types(self): method test_empty_descriptor_types (line 55) | def test_empty_descriptor_types(self): method test_default_sync_status_filter (line 63) | def test_default_sync_status_filter(self): method test_custom_sync_status_filter (line 68) | def test_custom_sync_status_filter(self): method test_missing_registry_id_raises_error (line 76) | def test_missing_registry_id_raises_error(self): method test_default_aws_account_id_is_none (line 81) | def test_default_aws_account_id_is_none(self): method test_custom_aws_account_id (line 86) | def test_custom_aws_account_id(self): method test_default_registry_aws_region_is_none (line 94) | def test_default_registry_aws_region_is_none(self): method test_custom_registry_aws_region (line 99) | def test_custom_registry_aws_region(self): method test_default_assume_role_arn_is_none (line 107) | def test_default_assume_role_arn_is_none(self): method test_custom_assume_role_arn (line 112) | def test_custom_assume_role_arn(self): method test_cross_account_config_all_fields (line 121) | def test_cross_account_config_all_fields(self): class TestAgentCoreFederationConfig (line 144) | class TestAgentCoreFederationConfig: method test_default_enabled_is_false (line 147) | def test_default_enabled_is_false(self): method test_default_aws_region (line 152) | def test_default_aws_region(self): method test_custom_aws_region (line 157) | def test_custom_aws_region(self): method test_default_sync_on_startup_is_false (line 162) | def test_default_sync_on_startup_is_false(self): method test_default_sync_interval_minutes (line 167) | def test_default_sync_interval_minutes(self): method test_custom_sync_interval_minutes (line 172) | def test_custom_sync_interval_minutes(self): method test_default_sync_timeout_seconds (line 177) | def test_default_sync_timeout_seconds(self): method test_custom_sync_timeout_seconds (line 182) | def test_custom_sync_timeout_seconds(self): method test_default_max_concurrent_fetches (line 187) | def test_default_max_concurrent_fetches(self): method test_custom_max_concurrent_fetches (line 192) | def test_custom_max_concurrent_fetches(self): method test_default_registries_is_empty (line 197) | def test_default_registries_is_empty(self): method test_registries_with_entries (line 202) | def test_registries_with_entries(self): method test_multiple_registries (line 209) | def test_multiple_registries(self): method test_fully_custom_config (line 225) | def test_fully_custom_config(self): class TestFederationConfigAwsRegistry (line 253) | class TestFederationConfigAwsRegistry: method test_default_aws_registry_field_exists (line 256) | def test_default_aws_registry_field_exists(self): method test_aws_registry_custom_config (line 262) | def test_aws_registry_custom_config(self): method test_backward_compat_agentcore_key (line 276) | def test_backward_compat_agentcore_key(self): method test_is_any_federation_enabled_all_disabled (line 286) | def test_is_any_federation_enabled_all_disabled(self): method test_is_any_federation_enabled_only_aws_registry (line 291) | def test_is_any_federation_enabled_only_aws_registry(self): method test_is_any_federation_enabled_aws_registry_and_anthropic (line 298) | def test_is_any_federation_enabled_aws_registry_and_anthropic(self): method test_get_enabled_federations_none_enabled (line 306) | def test_get_enabled_federations_none_enabled(self): method test_get_enabled_federations_only_aws_registry (line 311) | def test_get_enabled_federations_only_aws_registry(self): method test_get_enabled_federations_excludes_disabled (line 320) | def test_get_enabled_federations_excludes_disabled(self): method test_get_enabled_federations_multiple_enabled (line 328) | def test_get_enabled_federations_multiple_enabled(self): FILE: tests/unit/schemas/test_peer_federation_schema.py class TestValidateEndpointUrl (line 51) | class TestValidateEndpointUrl: method test_valid_http_url (line 54) | def test_valid_http_url(self): method test_valid_https_url (line 60) | def test_valid_https_url(self): method test_trailing_slash_removed (line 66) | def test_trailing_slash_removed(self): method test_multiple_trailing_slashes_removed (line 72) | def test_multiple_trailing_slashes_removed(self): method test_url_with_port (line 78) | def test_url_with_port(self): method test_url_with_path (line 84) | def test_url_with_path(self): method test_empty_url_rejected (line 90) | def test_empty_url_rejected(self): method test_missing_protocol_rejected (line 95) | def test_missing_protocol_rejected(self): method test_invalid_protocol_rejected (line 100) | def test_invalid_protocol_rejected(self): method test_missing_hostname_rejected (line 105) | def test_missing_hostname_rejected(self): method test_very_long_url (line 110) | def test_very_long_url(self): class TestValidatePeerId (line 119) | class TestValidatePeerId: method test_valid_simple_peer_id (line 122) | def test_valid_simple_peer_id(self): method test_valid_peer_id_with_underscores (line 128) | def test_valid_peer_id_with_underscores(self): method test_valid_peer_id_with_dots (line 134) | def test_valid_peer_id_with_dots(self): method test_unicode_peer_id (line 140) | def test_unicode_peer_id(self): method test_whitespace_trimmed (line 146) | def test_whitespace_trimmed(self): method test_empty_string_rejected (line 152) | def test_empty_string_rejected(self): method test_whitespace_only_rejected (line 157) | def test_whitespace_only_rejected(self): method test_forward_slash_rejected (line 162) | def test_forward_slash_rejected(self): method test_backslash_rejected (line 167) | def test_backslash_rejected(self): method test_colon_rejected (line 172) | def test_colon_rejected(self): method test_asterisk_rejected (line 177) | def test_asterisk_rejected(self): method test_question_mark_rejected (line 182) | def test_question_mark_rejected(self): method test_quote_rejected (line 187) | def test_quote_rejected(self): method test_less_than_rejected (line 192) | def test_less_than_rejected(self): method test_greater_than_rejected (line 197) | def test_greater_than_rejected(self): method test_pipe_rejected (line 202) | def test_pipe_rejected(self): method test_max_length_accepted (line 207) | def test_max_length_accepted(self): method test_exceeds_max_length_rejected (line 213) | def test_exceeds_max_length_rejected(self): class TestPeerRegistryConfig (line 226) | class TestPeerRegistryConfig: method test_valid_minimal_config (line 229) | def test_valid_minimal_config(self): method test_valid_full_config (line 246) | def test_valid_full_config(self): method test_required_field_peer_id_missing (line 272) | def test_required_field_peer_id_missing(self): method test_required_field_name_missing (line 281) | def test_required_field_name_missing(self): method test_required_field_endpoint_missing (line 290) | def test_required_field_endpoint_missing(self): method test_invalid_endpoint_url (line 299) | def test_invalid_endpoint_url(self): method test_endpoint_trailing_slash_removed (line 309) | def test_endpoint_trailing_slash_removed(self): method test_sync_interval_minimum_enforced (line 318) | def test_sync_interval_minimum_enforced(self): method test_sync_interval_maximum_enforced (line 329) | def test_sync_interval_maximum_enforced(self): method test_sync_interval_at_minimum (line 340) | def test_sync_interval_at_minimum(self): method test_sync_interval_at_maximum (line 350) | def test_sync_interval_at_maximum(self): method test_invalid_sync_mode (line 360) | def test_invalid_sync_mode(self): method test_sync_mode_all (line 371) | def test_sync_mode_all(self): method test_sync_mode_whitelist (line 381) | def test_sync_mode_whitelist(self): method test_sync_mode_tag_filter (line 392) | def test_sync_mode_tag_filter(self): method test_whitelist_empty_list_accepted (line 403) | def test_whitelist_empty_list_accepted(self): method test_tag_filters_empty_list_accepted (line 416) | def test_tag_filters_empty_list_accepted(self): method test_peer_id_with_invalid_characters_rejected (line 427) | def test_peer_id_with_invalid_characters_rejected(self): method test_peer_id_unicode_accepted (line 436) | def test_peer_id_unicode_accepted(self): method test_name_unicode_accepted (line 445) | def test_name_unicode_accepted(self): method test_json_serialization (line 454) | def test_json_serialization(self): method test_json_deserialization (line 467) | def test_json_deserialization(self): method test_model_has_json_schema (line 478) | def test_model_has_json_schema(self): class TestSyncMetadata (line 494) | class TestSyncMetadata: method test_valid_minimal_metadata (line 497) | def test_valid_minimal_metadata(self): method test_valid_full_metadata (line 511) | def test_valid_full_metadata(self): method test_sync_generation_minimum_enforced (line 531) | def test_sync_generation_minimum_enforced(self): method test_orphaned_at_auto_set (line 542) | def test_orphaned_at_auto_set(self): method test_datetime_serialization (line 554) | def test_datetime_serialization(self): method test_datetime_deserialization (line 567) | def test_datetime_deserialization(self): method test_local_overrides_dict (line 578) | def test_local_overrides_dict(self): method test_model_has_json_schema (line 590) | def test_model_has_json_schema(self): class TestSyncHistoryEntry (line 605) | class TestSyncHistoryEntry: method test_valid_minimal_entry (line 608) | def test_valid_minimal_entry(self): method test_valid_successful_entry (line 620) | def test_valid_successful_entry(self): method test_valid_failed_entry (line 642) | def test_valid_failed_entry(self): method test_negative_counts_rejected (line 655) | def test_negative_counts_rejected(self): method test_model_has_json_schema (line 665) | def test_model_has_json_schema(self): class TestPeerSyncStatus (line 678) | class TestPeerSyncStatus: method test_valid_minimal_status (line 681) | def test_valid_minimal_status(self): method test_valid_full_status (line 692) | def test_valid_full_status(self): method test_add_history_entry (line 711) | def test_add_history_entry(self): method test_add_history_entry_maintains_max_limit (line 723) | def test_add_history_entry_maintains_max_limit(self): method test_add_history_entry_newest_first (line 738) | def test_add_history_entry_newest_first(self): method test_model_has_json_schema (line 752) | def test_model_has_json_schema(self): class TestSyncResult (line 765) | class TestSyncResult: method test_valid_successful_result (line 768) | def test_valid_successful_result(self): method test_valid_failed_result (line 782) | def test_valid_failed_result(self): method test_negative_duration_rejected (line 793) | def test_negative_duration_rejected(self): method test_model_has_json_schema (line 802) | def test_model_has_json_schema(self): class TestFederationExportResponse (line 815) | class TestFederationExportResponse: method test_valid_minimal_response (line 818) | def test_valid_minimal_response(self): method test_valid_full_response (line 830) | def test_valid_full_response(self): method test_empty_items_list (line 847) | def test_empty_items_list(self): method test_negative_total_count_rejected (line 857) | def test_negative_total_count_rejected(self): method test_model_has_json_schema (line 866) | def test_model_has_json_schema(self): class TestBackwardCompatibility (line 880) | class TestBackwardCompatibility: method test_server_detail_still_works (line 883) | def test_server_detail_still_works(self): method test_agent_card_still_works (line 904) | def test_agent_card_still_works(self): class TestEdgeCases (line 943) | class TestEdgeCases: method test_peer_config_with_all_sync_modes (line 946) | def test_peer_config_with_all_sync_modes(self): method test_unicode_in_all_string_fields (line 958) | def test_unicode_in_all_string_fields(self): method test_very_long_field_values (line 968) | def test_very_long_field_values(self): method test_special_characters_in_allowed_fields (line 987) | def test_special_characters_in_allowed_fields(self): method test_datetime_with_timezone (line 998) | def test_datetime_with_timezone(self): method test_empty_local_overrides (line 1008) | def test_empty_local_overrides(self): method test_zero_values_in_numeric_fields (line 1019) | def test_zero_values_in_numeric_fields(self): method test_model_round_trip_serialization (line 1034) | def test_model_round_trip_serialization(self): FILE: tests/unit/schemas/test_registry_card.py class TestLifecycleStatus (line 19) | class TestLifecycleStatus: method test_all_values_defined (line 22) | def test_all_values_defined(self): method test_enum_values_are_strings (line 29) | def test_enum_values_are_strings(self): class TestRegistryCapabilities (line 36) | class TestRegistryCapabilities: method test_default_values (line 39) | def test_default_values(self): method test_custom_values (line 50) | def test_custom_values(self): method test_json_serialization (line 63) | def test_json_serialization(self): class TestRegistryAuthConfig (line 77) | class TestRegistryAuthConfig: method test_default_values (line 80) | def test_default_values(self): method test_custom_values (line 88) | def test_custom_values(self): method test_json_serialization (line 101) | def test_json_serialization(self): class TestRegistryContact (line 115) | class TestRegistryContact: method test_default_values (line 118) | def test_default_values(self): method test_with_email_and_url (line 124) | def test_with_email_and_url(self): method test_json_serialization (line 133) | def test_json_serialization(self): class TestRegistryCard (line 147) | class TestRegistryCard: method test_minimal_valid_card (line 150) | def test_minimal_valid_card(self): method test_full_card_with_all_fields (line 166) | def test_full_card_with_all_fields(self): method test_missing_required_fields (line 198) | def test_missing_required_fields(self): method test_description_max_length_validation (line 209) | def test_description_max_length_validation(self): method test_description_within_length_limit (line 223) | def test_description_within_length_limit(self): method test_https_endpoint_validation (line 234) | def test_https_endpoint_validation(self): method test_valid_https_endpoint (line 248) | def test_valid_https_endpoint(self): method test_visibility_policy_validation (line 260) | def test_visibility_policy_validation(self): method test_metadata_size_limit_validation (line 284) | def test_metadata_size_limit_validation(self): method test_metadata_within_size_limit (line 300) | def test_metadata_within_size_limit(self): method test_json_serialization_round_trip (line 312) | def test_json_serialization_round_trip(self): method test_unicode_in_text_fields (line 338) | def test_unicode_in_text_fields(self): method test_default_capabilities_and_authentication (line 349) | def test_default_capabilities_and_authentication(self): method test_invalid_url_format (line 367) | def test_invalid_url_format(self): method test_timestamps_are_optional (line 376) | def test_timestamps_are_optional(self): method test_timestamps_with_values (line 386) | def test_timestamps_with_values(self): FILE: tests/unit/schemas/test_skill_models_registry_card_fields.py class TestSkillCardRegistryCardFields (line 19) | class TestSkillCardRegistryCardFields: method test_default_lifecycle_status (line 22) | def test_default_lifecycle_status(self): method test_custom_lifecycle_status (line 32) | def test_custom_lifecycle_status(self): method test_all_lifecycle_statuses (line 43) | def test_all_lifecycle_statuses(self): method test_source_timestamps_default_none (line 62) | def test_source_timestamps_default_none(self): method test_source_timestamps_with_values (line 74) | def test_source_timestamps_with_values(self): method test_external_tags_default_empty (line 91) | def test_external_tags_default_empty(self): method test_external_tags_with_values (line 102) | def test_external_tags_with_values(self): method test_all_registry_card_fields_together (line 115) | def test_all_registry_card_fields_together(self): method test_json_serialization_with_registry_card_fields (line 136) | def test_json_serialization_with_registry_card_fields(self): method test_backwards_compatibility_without_new_fields (line 164) | def test_backwards_compatibility_without_new_fields(self): class TestSkillInfoRegistryCardFields (line 184) | class TestSkillInfoRegistryCardFields: method test_default_lifecycle_status (line 187) | def test_default_lifecycle_status(self): method test_custom_lifecycle_status (line 198) | def test_custom_lifecycle_status(self): method test_source_timestamps_default_none (line 210) | def test_source_timestamps_default_none(self): method test_source_timestamps_with_values (line 223) | def test_source_timestamps_with_values(self): method test_external_tags_default_empty (line 241) | def test_external_tags_default_empty(self): method test_external_tags_with_values (line 253) | def test_external_tags_with_values(self): method test_all_registry_card_fields_together (line 266) | def test_all_registry_card_fields_together(self): method test_backwards_compatibility_without_new_fields (line 288) | def test_backwards_compatibility_without_new_fields(self): class TestSkillRegistrationRequestStatus (line 309) | class TestSkillRegistrationRequestStatus: method test_default_status (line 312) | def test_default_status(self): method test_custom_status (line 321) | def test_custom_status(self): method test_all_statuses_allowed (line 331) | def test_all_statuses_allowed(self): class TestSkillTier1MetadataStatus (line 351) | class TestSkillTier1MetadataStatus: method test_default_status (line 354) | def test_default_status(self): method test_custom_status (line 364) | def test_custom_status(self): FILE: tests/unit/schemas/test_uuid_federation.py class TestFederatedUUIDPreservation (line 13) | class TestFederatedUUIDPreservation: method test_serverinfo_preserves_federated_uuid (line 16) | def test_serverinfo_preserves_federated_uuid(self): method test_serverinfo_generates_uuid_when_missing (line 36) | def test_serverinfo_generates_uuid_when_missing(self): method test_agentcard_preserves_federated_uuid (line 52) | def test_agentcard_preserves_federated_uuid(self): method test_agentcard_generates_uuid_when_missing (line 73) | def test_agentcard_generates_uuid_when_missing(self): method test_skillcard_preserves_federated_uuid (line 91) | def test_skillcard_preserves_federated_uuid(self): method test_skillcard_generates_uuid_when_missing (line 110) | def test_skillcard_generates_uuid_when_missing(self): method test_multiple_servers_same_data_different_uuids (line 126) | def test_multiple_servers_same_data_different_uuids(self): method test_uuid_in_json_roundtrip (line 145) | def test_uuid_in_json_roundtrip(self): FILE: tests/unit/schemas/test_uuid_fields.py class TestRegistryCardUUID (line 15) | class TestRegistryCardUUID: method test_uuid_auto_generated (line 18) | def test_uuid_auto_generated(self): method test_uuid_unique_per_instance (line 29) | def test_uuid_unique_per_instance(self): method test_uuid_serialization (line 45) | def test_uuid_serialization(self): method test_uuid_deserialization (line 60) | def test_uuid_deserialization(self): class TestServerInfoUUID (line 76) | class TestServerInfoUUID: method test_uuid_auto_generated (line 79) | def test_uuid_auto_generated(self): method test_uuid_unique_per_instance (line 89) | def test_uuid_unique_per_instance(self): method test_uuid_serialization (line 103) | def test_uuid_serialization(self): class TestAgentCardUUID (line 118) | class TestAgentCardUUID: method test_uuid_auto_generated (line 121) | def test_uuid_auto_generated(self): method test_uuid_unique_per_instance (line 135) | def test_uuid_unique_per_instance(self): method test_uuid_serialization (line 157) | def test_uuid_serialization(self): class TestSkillCardUUID (line 176) | class TestSkillCardUUID: method test_uuid_auto_generated (line 179) | def test_uuid_auto_generated(self): method test_uuid_unique_per_instance (line 191) | def test_uuid_unique_per_instance(self): method test_uuid_serialization (line 209) | def test_uuid_serialization(self): class TestUUIDBackwardsCompatibility (line 226) | class TestUUIDBackwardsCompatibility: method test_serverinfo_without_uuid (line 229) | def test_serverinfo_without_uuid(self): method test_agentcard_without_uuid (line 243) | def test_agentcard_without_uuid(self): method test_skillcard_without_uuid (line 260) | def test_skillcard_without_uuid(self): FILE: tests/unit/search/test_faiss_service.py function mock_embeddings_client (line 33) | def mock_embeddings_client(): function faiss_service (line 39) | def faiss_service(mock_settings, mock_embeddings_client): function sample_server_info (line 55) | def sample_server_info() -> dict[str, Any]: function sample_agent_card (line 87) | def sample_agent_card() -> AgentCard: class TestFaissServiceInitialization (line 103) | class TestFaissServiceInitialization: method test_init_creates_empty_service (line 106) | def test_init_creates_empty_service(self): method test_initialize_new_index_creates_index (line 115) | def test_initialize_new_index_creates_index(self, mock_settings): method test_initialize_loads_model_and_index (line 127) | async def test_initialize_loads_model_and_index(self, mock_settings, m... method test_load_faiss_data_creates_new_when_missing (line 156) | async def test_load_faiss_data_creates_new_when_missing(self, mock_set... method test_load_faiss_data_loads_existing (line 172) | async def test_load_faiss_data_loads_existing(self, mock_settings, tmp... class TestTextPreparation (line 209) | class TestTextPreparation: method test_get_text_for_embedding_server (line 212) | def test_get_text_for_embedding_server(self, faiss_service, sample_ser... method test_get_text_for_embedding_handles_missing_fields (line 223) | def test_get_text_for_embedding_handles_missing_fields(self, faiss_ser... method test_get_text_for_agent (line 232) | def test_get_text_for_agent(self, faiss_service, sample_agent_card): method test_get_text_for_agent_with_skills (line 240) | def test_get_text_for_agent_with_skills(self, faiss_service): method test_get_text_for_embedding_includes_metadata (line 252) | def test_get_text_for_embedding_includes_metadata(self, faiss_service): method test_get_text_for_embedding_without_metadata (line 274) | def test_get_text_for_embedding_without_metadata(self, faiss_service): method test_get_text_for_embedding_with_nested_metadata (line 288) | def test_get_text_for_embedding_with_nested_metadata(self, faiss_servi... method test_get_text_for_agent_includes_metadata (line 307) | def test_get_text_for_agent_includes_metadata(self, faiss_service): method test_get_text_for_agent_without_metadata (line 323) | def test_get_text_for_agent_without_metadata(self, faiss_service): class TestEmbeddingOperations (line 340) | class TestEmbeddingOperations: method test_normalize_embedding (line 343) | def test_normalize_embedding(self, faiss_service): method test_normalize_embedding_zero_vector (line 359) | def test_normalize_embedding_zero_vector(self, faiss_service): method test_normalize_embedding_already_normalized (line 368) | def test_normalize_embedding_already_normalized(self, faiss_service): class TestAddUpdateService (line 386) | class TestAddUpdateService: method test_add_new_service (line 390) | async def test_add_new_service(self, faiss_service, sample_server_info... method test_update_existing_service_same_text (line 408) | async def test_update_existing_service_same_text(self, faiss_service, ... method test_update_existing_service_different_text (line 433) | async def test_update_existing_service_different_text(self, faiss_serv... method test_add_service_without_model (line 456) | async def test_add_service_without_model(self, mock_settings): class TestAddUpdateAgent (line 473) | class TestAddUpdateAgent: method test_add_new_agent (line 477) | async def test_add_new_agent(self, faiss_service, sample_agent_card): method test_update_existing_agent_same_text (line 495) | async def test_update_existing_agent_same_text(self, faiss_service, sa... method test_update_existing_agent_different_text (line 513) | async def test_update_existing_agent_different_text(self, faiss_service): method test_add_agent_without_model (line 535) | async def test_add_agent_without_model(self, mock_settings): class TestRemoveEntities (line 557) | class TestRemoveEntities: method test_remove_service (line 561) | async def test_remove_service(self, faiss_service, sample_server_info): method test_remove_nonexistent_service (line 577) | async def test_remove_nonexistent_service(self, faiss_service): method test_remove_agent (line 583) | async def test_remove_agent(self, faiss_service, sample_agent_card): method test_remove_nonexistent_agent (line 599) | async def test_remove_nonexistent_agent(self, faiss_service): method test_remove_entity_wrapper (line 605) | async def test_remove_entity_wrapper(self, faiss_service, sample_agent... class TestSearch (line 626) | class TestSearch: method test_search_mixed_empty_query (line 630) | async def test_search_mixed_empty_query(self, faiss_service): method test_search_mixed_no_model (line 636) | async def test_search_mixed_no_model(self): method test_search_mixed_empty_index (line 645) | async def test_search_mixed_empty_index(self, faiss_service): method test_search_mixed_finds_servers (line 652) | async def test_search_mixed_finds_servers(self, faiss_service, sample_... method test_search_mixed_finds_agents (line 671) | async def test_search_mixed_finds_agents(self, faiss_service, sample_a... method test_search_mixed_with_entity_type_filter (line 690) | async def test_search_mixed_with_entity_type_filter( method test_search_mixed_extracts_tools (line 709) | async def test_search_mixed_extracts_tools(self, faiss_service, sample... method test_search_mixed_respects_max_results (line 723) | async def test_search_mixed_respects_max_results(self, faiss_service): method test_search_entities_wrapper (line 743) | async def test_search_entities_wrapper(self, faiss_service, sample_ser... method test_search_agents_wrapper (line 756) | async def test_search_agents_wrapper(self, faiss_service, sample_agent... class TestKeywordBoost (line 776) | class TestKeywordBoost: method test_calculate_keyword_boost_no_match (line 779) | def test_calculate_keyword_boost_no_match(self, faiss_service, sample_... method test_calculate_keyword_boost_name_match (line 785) | def test_calculate_keyword_boost_name_match(self, faiss_service, sampl... method test_calculate_keyword_boost_tool_match (line 792) | def test_calculate_keyword_boost_tool_match(self, faiss_service, sampl... method test_calculate_keyword_boost_tag_match (line 799) | def test_calculate_keyword_boost_tag_match(self, faiss_service, sample... method test_calculate_keyword_boost_filters_stopwords (line 806) | def test_calculate_keyword_boost_filters_stopwords(self, faiss_service... method test_calculate_keyword_boost_capped_at_max (line 813) | def test_calculate_keyword_boost_capped_at_max(self, faiss_service): class TestToolExtraction (line 836) | class TestToolExtraction: method test_extract_matching_tools_no_tools (line 839) | def test_extract_matching_tools_no_tools(self, faiss_service): method test_extract_matching_tools_name_match (line 847) | def test_extract_matching_tools_name_match(self, faiss_service, sample... method test_extract_matching_tools_description_match (line 855) | def test_extract_matching_tools_description_match(self, faiss_service,... method test_extract_matching_tools_filters_stopwords (line 862) | def test_extract_matching_tools_filters_stopwords(self, faiss_service,... method test_extract_matching_tools_scores_name_higher (line 869) | def test_extract_matching_tools_scores_name_higher(self, faiss_service): method test_extract_matching_tools_server_name_match (line 892) | def test_extract_matching_tools_server_name_match(self, faiss_service): class TestDistanceConversion (line 934) | class TestDistanceConversion: method test_distance_to_relevance_positive_distance (line 937) | def test_distance_to_relevance_positive_distance(self, faiss_service): method test_distance_to_relevance_negative_distance (line 945) | def test_distance_to_relevance_negative_distance(self, faiss_service): method test_distance_to_relevance_zero (line 953) | def test_distance_to_relevance_zero(self, faiss_service): method test_distance_to_relevance_clamped (line 959) | def test_distance_to_relevance_clamped(self, faiss_service): class TestPersistence (line 977) | class TestPersistence: method test_save_data_creates_files (line 981) | async def test_save_data_creates_files(self, faiss_service, sample_ser... method test_save_data_without_index (line 1003) | async def test_save_data_without_index(self, mock_settings): method test_get_indexed_count (line 1013) | def test_get_indexed_count(self, faiss_service): class TestPydanticJSONEncoder (line 1030) | class TestPydanticJSONEncoder: method test_encoder_handles_httpurl (line 1033) | def test_encoder_handles_httpurl(self): method test_encoder_handles_datetime (line 1044) | def test_encoder_handles_datetime(self): class TestFaissServiceIntegration (line 1064) | class TestFaissServiceIntegration: method test_full_server_workflow (line 1068) | async def test_full_server_workflow(self, faiss_service, sample_server... method test_full_agent_workflow (line 1092) | async def test_full_agent_workflow(self, faiss_service, sample_agent_c... method test_mixed_entities_workflow (line 1111) | async def test_mixed_entities_workflow( FILE: tests/unit/servers/mcpgw/test_intelligent_tool_finder.py function _make_mock_response (line 37) | def _make_mock_response(servers=None, status_code=200): function _make_server_with_tools (line 46) | def _make_server_with_tools(n_tools, server_name="test-server", path="/t... function _call_finder (line 62) | async def _call_finder(mock_response, query="test", top_n=None, capture=... function test_request_payload_uses_correct_field_names (line 106) | async def test_request_payload_uses_correct_field_names(): function test_top_n_limits_results (line 128) | async def test_top_n_limits_results(): function test_top_n_default_value (line 145) | async def test_top_n_default_value(): function test_top_n_equals_result_count (line 161) | async def test_top_n_equals_result_count(): function test_top_n_greater_than_results (line 178) | async def test_top_n_greater_than_results(): function test_top_n_validation_rejects_out_of_bounds (line 193) | def test_top_n_validation_rejects_out_of_bounds(): function test_total_results_matches_truncated_list (line 214) | async def test_total_results_matches_truncated_list(): FILE: tests/unit/services/federation/test_agentcore_client.py function mock_boto3 (line 28) | def mock_boto3(): function client (line 37) | def client(mock_boto3): function _mcp_record (line 47) | def _mcp_record( function _a2a_record (line 80) | def _a2a_record( function _custom_record (line 110) | def _custom_record( function _skills_record (line 136) | def _skills_record( class TestSafeParseJson (line 169) | class TestSafeParseJson: method test_valid_json (line 172) | def test_valid_json(self): method test_invalid_json_returns_empty_dict (line 176) | def test_invalid_json_returns_empty_dict(self): method test_none_input_returns_empty_dict (line 180) | def test_none_input_returns_empty_dict(self): method test_empty_string_returns_empty_dict (line 184) | def test_empty_string_returns_empty_dict(self): class TestSanitizePathSegment (line 189) | class TestSanitizePathSegment: method test_simple_name (line 192) | def test_simple_name(self): method test_slashes_replaced (line 195) | def test_slashes_replaced(self): method test_spaces_replaced (line 198) | def test_spaces_replaced(self): method test_uppercase_lowered (line 201) | def test_uppercase_lowered(self): method test_leading_trailing_hyphens_stripped (line 204) | def test_leading_trailing_hyphens_stripped(self): class TestListRegistries (line 213) | class TestListRegistries: method test_success (line 216) | def test_success(self, client, mock_boto3): method test_pagination (line 225) | def test_pagination(self, client, mock_boto3): method test_error_returns_empty (line 239) | def test_error_returns_empty(self, client, mock_boto3): class TestListRegistryRecords (line 249) | class TestListRegistryRecords: method test_success_with_filters (line 252) | def test_success_with_filters(self, client, mock_boto3): method test_pagination (line 271) | def test_pagination(self, client, mock_boto3): method test_client_error_returns_empty (line 280) | def test_client_error_returns_empty(self, client, mock_boto3): class TestGetRegistryRecord (line 290) | class TestGetRegistryRecord: method test_success (line 293) | def test_success(self, client, mock_boto3): method test_not_found_returns_none (line 305) | def test_not_found_returns_none(self, client, mock_boto3): method test_other_error_returns_none (line 314) | def test_other_error_returns_none(self, client, mock_boto3): class TestTransformMcpRecord (line 329) | class TestTransformMcpRecord: method test_basic_transform (line 332) | def test_basic_transform(self, client): method test_fallback_to_sync_url (line 349) | def test_fallback_to_sync_url(self, client): class TestTransformA2aRecord (line 361) | class TestTransformA2aRecord: method test_basic_transform (line 364) | def test_basic_transform(self, client): method test_capabilities_preserved (line 378) | def test_capabilities_preserved(self, client): class TestTransformCustomRecord (line 384) | class TestTransformCustomRecord: method test_basic_transform (line 388) | def test_basic_transform(self, mock_settings, client): method test_no_original_url (line 406) | def test_no_original_url(self, mock_settings, client): class TestTransformSkillsRecord (line 414) | class TestTransformSkillsRecord: method test_basic_transform (line 418) | def test_basic_transform(self, mock_settings, client): method test_empty_skill_md_content (line 437) | def test_empty_skill_md_content(self, mock_settings, client): class TestTransformUnknownDescriptor (line 445) | class TestTransformUnknownDescriptor: method test_unknown_returns_none (line 448) | def test_unknown_returns_none(self, client): class TestFetchAllRecords (line 459) | class TestFetchAllRecords: method test_grouped_by_type (line 462) | def test_grouped_by_type(self, client, mock_boto3): method test_health_updated_after_sync (line 491) | def test_health_updated_after_sync(self, client, mock_boto3): method test_descriptor_type_filter (line 506) | def test_descriptor_type_filter(self, client, mock_boto3): method test_empty_registries (line 534) | def test_empty_registries(self, client, mock_boto3): class TestHealthStatus (line 546) | class TestHealthStatus: method test_initial_state (line 549) | def test_initial_state(self, client): method test_after_sync (line 556) | def test_after_sync(self, client, mock_boto3): class TestGetClientForRegistry (line 573) | class TestGetClientForRegistry: method test_same_account_same_region_returns_default (line 576) | def test_same_account_same_region_returns_default(self, client): method test_same_region_explicit_returns_default (line 584) | def test_same_region_explicit_returns_default(self, client): method test_different_region_creates_new_client (line 595) | def test_different_region_creates_new_client(self, client): method test_cross_account_calls_sts_assume_role (line 611) | def test_cross_account_calls_sts_assume_role(self, client): method test_cross_account_with_custom_region (line 643) | def test_cross_account_with_custom_region(self, client): method test_client_is_cached_by_region_and_role (line 676) | def test_client_is_cached_by_region_and_role(self, client): class TestFetchServerInterface (line 698) | class TestFetchServerInterface: method test_fetch_server_no_registry_id (line 701) | def test_fetch_server_no_registry_id(self, client): method test_fetch_all_servers_no_registry_id (line 705) | def test_fetch_all_servers_no_registry_id(self, client): FILE: tests/unit/services/federation/test_federation_auth.py function auth_env_vars (line 20) | def auth_env_vars( function missing_env_vars (line 30) | def missing_env_vars( function mock_http_client (line 40) | def mock_http_client(): function clear_singleton (line 49) | def clear_singleton(): class TestFederationAuthManagerSingleton (line 58) | class TestFederationAuthManagerSingleton: method test_singleton_same_instance (line 61) | def test_singleton_same_instance( method test_singleton_initialization_once (line 75) | def test_singleton_initialization_once( class TestFederationAuthManagerConfiguration (line 93) | class TestFederationAuthManagerConfiguration: method test_is_configured_with_all_env_vars (line 96) | def test_is_configured_with_all_env_vars( method test_is_configured_missing_token_endpoint (line 112) | def test_is_configured_missing_token_endpoint( method test_is_configured_missing_client_id (line 130) | def test_is_configured_missing_client_id( method test_is_configured_missing_client_secret (line 148) | def test_is_configured_missing_client_secret( method test_missing_env_vars_logged_at_startup (line 166) | def test_missing_env_vars_logged_at_startup( method test_configured_env_vars_logged_at_startup (line 183) | def test_configured_env_vars_logged_at_startup( class TestFederationAuthManagerTokenRequest (line 202) | class TestFederationAuthManagerTokenRequest: method test_get_token_obtains_jwt_using_credentials (line 205) | def test_get_token_obtains_jwt_using_credentials( method test_get_token_raises_when_not_configured (line 238) | def test_get_token_raises_when_not_configured( method test_token_is_cached_and_reused (line 252) | def test_token_is_cached_and_reused( method test_expired_token_triggers_automatic_refresh (line 280) | def test_expired_token_triggers_automatic_refresh( method test_token_refresh_with_60s_buffer (line 315) | def test_token_refresh_with_60s_buffer( method test_token_not_refreshed_outside_buffer (line 350) | def test_token_not_refreshed_outside_buffer( class TestFederationAuthManagerErrorHandling (line 382) | class TestFederationAuthManagerErrorHandling: method test_http_401_error_handled_gracefully (line 385) | def test_http_401_error_handled_gracefully( method test_http_403_error_handled_gracefully (line 412) | def test_http_403_error_handled_gracefully( method test_http_500_error_handled_gracefully (line 438) | def test_http_500_error_handled_gracefully( method test_network_timeout_handled_gracefully (line 463) | def test_network_timeout_handled_gracefully( method test_network_connection_error_handled_gracefully (line 482) | def test_network_connection_error_handled_gracefully( method test_missing_access_token_in_response (line 502) | def test_missing_access_token_in_response( method test_unexpected_error_handled_gracefully (line 526) | def test_unexpected_error_handled_gracefully( class TestFederationAuthManagerClearToken (line 546) | class TestFederationAuthManagerClearToken: method test_clear_token_removes_cached_token (line 549) | def test_clear_token_removes_cached_token( method test_clear_token_forces_refresh_on_next_get (line 576) | def test_clear_token_forces_refresh_on_next_get( FILE: tests/unit/services/federation/test_peer_registry_client.py function peer_config (line 18) | def peer_config(): function mock_auth_manager (line 31) | def mock_auth_manager(): function mock_http_client (line 42) | def mock_http_client(): class TestPeerRegistryClientInitialization (line 50) | class TestPeerRegistryClientInitialization: method test_client_initialization (line 53) | def test_client_initialization( method test_client_initialization_with_custom_params (line 69) | def test_client_initialization_with_custom_params( method test_client_warns_when_auth_not_configured (line 87) | def test_client_warns_when_auth_not_configured( class TestPeerRegistryClientFetchServers (line 109) | class TestPeerRegistryClientFetchServers: method test_fetch_servers_returns_parsed_list (line 112) | def test_fetch_servers_returns_parsed_list( method test_fetch_servers_passes_bearer_token_in_header (line 141) | def test_fetch_servers_passes_bearer_token_in_header( method test_fetch_servers_without_since_generation (line 164) | def test_fetch_servers_without_since_generation( method test_fetch_servers_with_since_generation (line 186) | def test_fetch_servers_with_since_generation( method test_fetch_servers_with_dict_response (line 208) | def test_fetch_servers_with_dict_response( method test_fetch_servers_with_direct_list_response (line 233) | def test_fetch_servers_with_direct_list_response( method test_fetch_servers_handles_auth_failure (line 256) | def test_fetch_servers_handles_auth_failure( method test_fetch_servers_handles_auth_not_configured (line 281) | def test_fetch_servers_handles_auth_not_configured( method test_fetch_servers_handles_request_failure (line 306) | def test_fetch_servers_handles_request_failure( method test_fetch_servers_handles_unexpected_response_format (line 326) | def test_fetch_servers_handles_unexpected_response_format( class TestPeerRegistryClientFetchAgents (line 347) | class TestPeerRegistryClientFetchAgents: method test_fetch_agents_returns_parsed_list (line 350) | def test_fetch_agents_returns_parsed_list( method test_fetch_agents_passes_bearer_token_in_header (line 379) | def test_fetch_agents_passes_bearer_token_in_header( method test_fetch_agents_with_since_generation (line 402) | def test_fetch_agents_with_since_generation( method test_fetch_agents_handles_auth_failure (line 424) | def test_fetch_agents_handles_auth_failure( class TestPeerRegistryClientCheckHealth (line 450) | class TestPeerRegistryClientCheckHealth: method test_check_peer_health_returns_true_for_healthy_peer (line 453) | def test_check_peer_health_returns_true_for_healthy_peer( method test_check_peer_health_returns_false_for_unhealthy_peer (line 473) | def test_check_peer_health_returns_false_for_unhealthy_peer( method test_check_peer_health_accepts_2xx_status_codes (line 492) | def test_check_peer_health_accepts_2xx_status_codes( method test_check_peer_health_handles_network_errors (line 514) | def test_check_peer_health_handles_network_errors( method test_check_peer_health_handles_timeout_errors (line 533) | def test_check_peer_health_handles_timeout_errors( class TestPeerRegistryClientRetryLogic (line 551) | class TestPeerRegistryClientRetryLogic: method test_client_follows_base_federation_client_retry_logic (line 554) | def test_client_follows_base_federation_client_retry_logic( method test_http_4xx_errors_not_retried (line 586) | def test_http_4xx_errors_not_retried( method test_http_5xx_errors_retried (line 614) | def test_http_5xx_errors_retried( class TestPeerRegistryClientFetchSingleServer (line 642) | class TestPeerRegistryClientFetchSingleServer: method test_fetch_server_by_path (line 645) | def test_fetch_server_by_path( method test_fetch_server_not_found (line 673) | def test_fetch_server_not_found( method test_fetch_server_handles_fetch_failure (line 700) | def test_fetch_server_handles_fetch_failure( class TestPeerRegistryClientFetchAllServers (line 719) | class TestPeerRegistryClientFetchAllServers: method test_fetch_all_servers_with_no_filter (line 722) | def test_fetch_all_servers_with_no_filter( method test_fetch_all_servers_with_filter (line 749) | def test_fetch_all_servers_with_filter( method test_fetch_all_servers_handles_fetch_failure (line 779) | def test_fetch_all_servers_handles_fetch_failure( FILE: tests/unit/services/test_agent_service.py class InMemoryAgentRepository (line 39) | class InMemoryAgentRepository(AgentRepositoryBase): method __init__ (line 47) | def __init__(self) -> None: method get (line 51) | async def get(self, path: str) -> AgentCard | None: method list_all (line 54) | async def list_all(self) -> list[AgentCard]: method list_paginated (line 57) | async def list_paginated( method create (line 64) | async def create(self, agent: AgentCard) -> AgentCard: method update (line 75) | async def update(self, path: str, updates: dict[str, Any]) -> AgentCard: method delete (line 88) | async def delete(self, path: str) -> bool: method get_state (line 95) | async def get_state(self, path: str) -> bool: method get_all_states (line 98) | async def get_all_states(self) -> dict[str, bool]: method set_state (line 101) | async def set_state(self, path: str, enabled: bool) -> bool: method load_all (line 111) | async def load_all(self) -> None: method count (line 114) | async def count(self) -> int: method update_field (line 117) | async def update_field(self, path: str, field: str, value: Any) -> bool: method find_with_filter (line 126) | async def find_with_filter( function fake_repo (line 143) | def fake_repo() -> InMemoryAgentRepository: function fake_search_repo (line 148) | def fake_search_repo() -> AsyncMock: function agent_service (line 158) | def agent_service( function sample_agent_dict (line 171) | def sample_agent_dict() -> dict[str, Any]: function sample_agent_dict_2 (line 201) | def sample_agent_dict_2() -> dict[str, Any]: class TestRegisterAgent (line 230) | class TestRegisterAgent: method test_register_new_agent_successfully (line 232) | async def test_register_new_agent_successfully( method test_register_agent_fails_for_duplicate_path (line 247) | async def test_register_agent_fails_for_duplicate_path( method test_register_agent_defaults_to_disabled (line 258) | async def test_register_agent_defaults_to_disabled( class TestGetAgent (line 277) | class TestGetAgent: method test_get_existing_agent (line 279) | async def test_get_existing_agent( method test_get_agent_not_found (line 293) | async def test_get_agent_not_found( method test_get_agent_handles_trailing_slash (line 301) | async def test_get_agent_handles_trailing_slash( method test_get_agent_falls_back_when_query_has_extra_slash (line 313) | async def test_get_agent_falls_back_when_query_has_extra_slash( class TestListAgents (line 334) | class TestListAgents: method test_list_agents_empty (line 336) | async def test_list_agents_empty(self, agent_service: AgentService): method test_list_agents_returns_all (line 341) | async def test_list_agents_returns_all( method test_get_all_agents_alias (line 355) | async def test_get_all_agents_alias( class TestUpdateAgent (line 376) | class TestUpdateAgent: method test_update_agent_successfully (line 378) | async def test_update_agent_successfully( method test_update_agent_updates_timestamp (line 397) | async def test_update_agent_updates_timestamp( method test_update_agent_not_found (line 412) | async def test_update_agent_not_found(self, agent_service: AgentService): method test_update_agent_preserves_path (line 417) | async def test_update_agent_preserves_path( method test_update_agent_with_invalid_data (line 433) | async def test_update_agent_with_invalid_data( class TestDeleteAgent (line 451) | class TestDeleteAgent: method test_delete_agent_successfully (line 453) | async def test_delete_agent_successfully( method test_delete_agent_not_found (line 466) | async def test_delete_agent_not_found(self, agent_service: AgentService): method test_remove_agent_alias (line 471) | async def test_remove_agent_alias( method test_remove_agent_returns_false_for_not_found (line 484) | async def test_remove_agent_returns_false_for_not_found( class TestEnableDisableAgent (line 499) | class TestEnableDisableAgent: method test_enable_agent (line 501) | async def test_enable_agent( method test_enable_already_enabled_agent (line 513) | async def test_enable_already_enabled_agent( method test_enable_agent_not_found (line 526) | async def test_enable_agent_not_found(self, agent_service: AgentService): method test_disable_agent (line 531) | async def test_disable_agent( method test_disable_already_disabled_agent (line 544) | async def test_disable_already_disabled_agent( method test_disable_agent_not_found (line 556) | async def test_disable_agent_not_found(self, agent_service: AgentServi... method test_toggle_agent_enable (line 561) | async def test_toggle_agent_enable( method test_toggle_agent_disable (line 574) | async def test_toggle_agent_disable( method test_toggle_agent_not_found (line 588) | async def test_toggle_agent_not_found(self, agent_service: AgentService): class TestAgentStateQueries (line 600) | class TestAgentStateQueries: method test_is_agent_enabled_true (line 602) | async def test_is_agent_enabled_true( method test_is_agent_enabled_false (line 613) | async def test_is_agent_enabled_false( method test_is_agent_enabled_handles_trailing_slash (line 623) | async def test_is_agent_enabled_handles_trailing_slash( method test_get_enabled_agents (line 634) | async def test_get_enabled_agents( method test_get_disabled_agents (line 648) | async def test_get_disabled_agents( FILE: tests/unit/services/test_agentcore_reconciliation.py function _make_agent (line 37) | def _make_agent( function _make_skill (line 46) | def _make_skill( class TestBuildExpectedAgentcorePaths (line 61) | class TestBuildExpectedAgentcorePaths: method test_disabled_config_returns_empty_sets (line 64) | def test_disabled_config_returns_empty_sets(self): method test_enabled_config_passes_through_synced_paths (line 79) | def test_enabled_config_passes_through_synced_paths(self): method test_enabled_config_missing_keys_default_to_empty (line 94) | def test_enabled_config_missing_keys_default_to_empty(self): class TestReconcileAgentcoreServers (line 112) | class TestReconcileAgentcoreServers: method test_no_stale_servers (line 116) | async def test_no_stale_servers(self): method test_stale_servers_removed (line 134) | async def test_stale_servers_removed(self): method test_removal_failure_records_error (line 154) | async def test_removal_failure_records_error(self): method test_removal_exception_records_error (line 172) | async def test_removal_exception_records_error(self): method test_no_agentcore_servers_in_db (line 191) | async def test_no_agentcore_servers_in_db(self): class TestReconcileAgentcoreAgents (line 212) | class TestReconcileAgentcoreAgents: method test_no_stale_agents (line 216) | async def test_no_stale_agents(self): method test_stale_agents_removed (line 232) | async def test_stale_agents_removed(self): method test_non_agentcore_agents_ignored (line 250) | async def test_non_agentcore_agents_ignored(self): method test_delete_failure_records_error (line 267) | async def test_delete_failure_records_error(self): class TestReconcileAgentcoreSkills (line 289) | class TestReconcileAgentcoreSkills: method test_no_stale_skills (line 293) | async def test_no_stale_skills(self): method test_stale_skills_removed (line 309) | async def test_stale_skills_removed(self): method test_non_agentcore_skills_ignored (line 326) | async def test_non_agentcore_skills_ignored(self): class TestReconcileAgentcoreRecords (line 349) | class TestReconcileAgentcoreRecords: method test_dry_run_skips_removal (line 353) | async def test_dry_run_skips_removal(self): method test_none_synced_paths_defaults_to_empty (line 370) | async def test_none_synced_paths_defaults_to_empty(self): method test_full_run_removes_stale_records (line 396) | async def test_full_run_removes_stale_records(self): method test_disabled_agentcore_removes_all (line 448) | async def test_disabled_agentcore_removes_all(self): FILE: tests/unit/services/test_m2m_management_service.py function _make_collection_mock (line 30) | def _make_collection_mock() -> MagicMock: function mock_collection (line 51) | def mock_collection() -> MagicMock: function mock_db (line 56) | def mock_db(mock_collection: MagicMock) -> MagicMock: function service (line 63) | def service(mock_db: MagicMock) -> M2MManagementService: function sample_manual_doc (line 68) | def sample_manual_doc() -> dict: function sample_synced_doc (line 86) | def sample_synced_doc() -> dict: class TestEnsureIndexes (line 102) | class TestEnsureIndexes: method test_creates_unique_index_on_client_id (line 106) | async def test_creates_unique_index_on_client_id( class TestCreate (line 116) | class TestCreate: method test_inserts_document_with_manual_provider (line 120) | async def test_inserts_document_with_manual_provider( method test_raises_conflict_on_duplicate_key (line 151) | async def test_raises_conflict_on_duplicate_key( class TestListPaged (line 166) | class TestListPaged: method test_returns_items_and_total (line 170) | async def test_returns_items_and_total( method test_filters_by_provider (line 187) | async def test_filters_by_provider( method test_applies_skip_and_limit (line 203) | async def test_applies_skip_and_limit( class TestGet (line 217) | class TestGet: method test_returns_client_when_found (line 221) | async def test_returns_client_when_found( method test_raises_not_found_when_missing (line 235) | async def test_raises_not_found_when_missing( class TestPatch (line 246) | class TestPatch: method test_raises_not_found_when_missing (line 250) | async def test_raises_not_found_when_missing( method test_raises_immutable_for_non_manual (line 261) | async def test_raises_immutable_for_non_manual( method test_updates_only_provided_fields (line 273) | async def test_updates_only_provided_fields( method test_allows_clearing_groups_with_empty_list (line 296) | async def test_allows_clearing_groups_with_empty_list( method test_no_op_patch_skips_update_call (line 313) | async def test_no_op_patch_skips_update_call( class TestDelete (line 327) | class TestDelete: method test_deletes_manual_record (line 331) | async def test_deletes_manual_record( method test_raises_not_found_when_missing (line 344) | async def test_raises_not_found_when_missing( method test_raises_immutable_for_non_manual (line 355) | async def test_raises_immutable_for_non_manual( class TestClientIdValidation (line 369) | class TestClientIdValidation: method test_accepts_alphanumerics (line 372) | def test_accepts_alphanumerics(self) -> None: method test_accepts_dash_underscore_dot_colon (line 375) | def test_accepts_dash_underscore_dot_colon(self) -> None: method test_rejects_whitespace (line 378) | def test_rejects_whitespace(self) -> None: method test_rejects_special_chars (line 382) | def test_rejects_special_chars(self) -> None: method test_rejects_control_chars (line 386) | def test_rejects_control_chars(self) -> None: class TestCollectionName (line 391) | class TestCollectionName: method test_collection_name_is_idp_m2m_clients (line 394) | def test_collection_name_is_idp_m2m_clients(self) -> None: FILE: tests/unit/services/test_peer_federation_service.py function reset_singleton (line 32) | def reset_singleton(): function temp_peers_dir (line 40) | def temp_peers_dir(tmp_path): function mock_repository (line 48) | def mock_repository(): function sample_peer_config (line 64) | def sample_peer_config(): function sample_peer_config_2 (line 77) | def sample_peer_config_2(): class TestValidatePeerId (line 91) | class TestValidatePeerId: method test_valid_peer_id (line 94) | def test_valid_peer_id(self): method test_empty_peer_id_rejected (line 101) | def test_empty_peer_id_rejected(self): method test_path_traversal_dotdot_rejected (line 106) | def test_path_traversal_dotdot_rejected(self): method test_path_traversal_forward_slash_rejected (line 111) | def test_path_traversal_forward_slash_rejected(self): method test_path_traversal_backslash_rejected (line 116) | def test_path_traversal_backslash_rejected(self): method test_invalid_character_less_than_rejected (line 121) | def test_invalid_character_less_than_rejected(self): method test_reserved_name_con_rejected (line 126) | def test_reserved_name_con_rejected(self): class TestGetSafeFilePath (line 135) | class TestGetSafeFilePath: method test_normal_path_returns_valid (line 138) | def test_normal_path_returns_valid(self, temp_peers_dir): method test_path_traversal_rejected (line 143) | def test_path_traversal_rejected(self, temp_peers_dir): method test_invalid_chars_rejected (line 148) | def test_invalid_chars_rejected(self, temp_peers_dir): method test_resolved_path_within_peers_dir (line 153) | def test_resolved_path_within_peers_dir(self, temp_peers_dir): class TestPeerFederationServiceSingleton (line 161) | class TestPeerFederationServiceSingleton: method test_singleton_returns_same_instance (line 164) | def test_singleton_returns_same_instance(self, mock_repository): method test_get_peer_federation_service_returns_singleton (line 174) | def test_get_peer_federation_service_returns_singleton(self, mock_repo... method test_singleton_thread_safe (line 184) | def test_singleton_thread_safe(self, mock_repository): class TestPeerFederationServiceCRUD (line 207) | class TestPeerFederationServiceCRUD: method test_add_peer_success (line 211) | async def test_add_peer_success(self, mock_repository, sample_peer_con... method test_add_peer_duplicate_peer_id_fails (line 229) | async def test_add_peer_duplicate_peer_id_fails(self, mock_repository,... method test_get_peer_existing (line 246) | async def test_get_peer_existing(self, mock_repository, sample_peer_co... method test_get_peer_nonexistent_raises_error (line 261) | async def test_get_peer_nonexistent_raises_error(self, mock_repository): method test_update_peer_success (line 275) | async def test_update_peer_success(self, mock_repository, sample_peer_... method test_update_peer_nonexistent_raises_error (line 300) | async def test_update_peer_nonexistent_raises_error(self, mock_reposit... method test_update_peer_preserves_federation_token (line 315) | async def test_update_peer_preserves_federation_token(self, mock_repos... method test_update_peer_token_itself (line 364) | async def test_update_peer_token_itself(self, mock_repository): method test_remove_peer_success (line 401) | async def test_remove_peer_success(self, mock_repository, sample_peer_... method test_remove_peer_nonexistent_raises_error (line 417) | async def test_remove_peer_nonexistent_raises_error(self, mock_reposit... method test_list_peers_from_cache (line 432) | async def test_list_peers_from_cache( method test_list_peers_enabled_only (line 453) | async def test_list_peers_enabled_only( method test_list_peers_disabled_only (line 472) | async def test_list_peers_disabled_only( class TestPeerFederationServiceSyncStatus (line 492) | class TestPeerFederationServiceSyncStatus: method test_get_sync_status_from_cache (line 496) | async def test_get_sync_status_from_cache(self, mock_repository, sampl... method test_get_sync_status_nonexistent (line 518) | async def test_get_sync_status_nonexistent(self, mock_repository): method test_all_sync_statuses_in_cache (line 530) | async def test_all_sync_statuses_in_cache(self, mock_repository, sampl... class TestPeerFederationServiceHelpers (line 552) | class TestPeerFederationServiceHelpers: method test_is_locally_overridden_true (line 555) | def test_is_locally_overridden_true(self, mock_repository): method test_is_locally_overridden_false (line 571) | def test_is_locally_overridden_false(self, mock_repository): method test_is_locally_overridden_missing_metadata (line 587) | def test_is_locally_overridden_missing_metadata(self, mock_repository): method test_matches_tag_filter_with_match (line 599) | def test_matches_tag_filter_with_match(self, mock_repository): method test_matches_tag_filter_no_match (line 611) | def test_matches_tag_filter_no_match(self, mock_repository): method test_matches_tag_filter_checks_categories (line 623) | def test_matches_tag_filter_checks_categories(self, mock_repository): method test_matches_tag_filter_empty_tags (line 635) | def test_matches_tag_filter_empty_tags(self, mock_repository): FILE: tests/unit/services/test_peer_federation_sync.py function reset_singleton (line 25) | def reset_singleton(): function mock_repository (line 33) | def mock_repository(): function mock_server_service (line 49) | def mock_server_service(): function mock_agent_service (line 61) | def mock_agent_service(): function sample_peer_config (line 73) | def sample_peer_config(): function sample_peer_config_disabled (line 85) | def sample_peer_config_disabled(): function sample_peer_config_whitelist (line 96) | def sample_peer_config_whitelist(): function sample_peer_config_tag_filter (line 110) | def sample_peer_config_tag_filter(): function sample_server_data (line 123) | def sample_server_data(): function sample_agent_data (line 134) | def sample_agent_data(): function create_service_with_mocks (line 145) | def create_service_with_mocks(mock_repository, mock_server_service, mock... class TestSyncPeer (line 164) | class TestSyncPeer: method test_sync_peer_successful_with_servers_and_agents (line 168) | async def test_sync_peer_successful_with_servers_and_agents( method test_sync_peer_disabled_peer_raises_error (line 227) | async def test_sync_peer_disabled_peer_raises_error( method test_sync_peer_nonexistent_peer_raises_error (line 261) | async def test_sync_peer_nonexistent_peer_raises_error( method test_sync_peer_network_error_handling (line 283) | async def test_sync_peer_network_error_handling( method test_sync_peer_handles_none_responses_from_client (line 329) | async def test_sync_peer_handles_none_responses_from_client( method test_sync_peer_succeeds_with_empty_list_responses (line 387) | async def test_sync_peer_succeeds_with_empty_list_responses( method test_sync_peer_fails_with_partial_none_responses (line 440) | async def test_sync_peer_fails_with_partial_none_responses( class TestSyncAllPeers (line 495) | class TestSyncAllPeers: method test_sync_all_enabled_peers (line 499) | async def test_sync_all_enabled_peers( method test_sync_all_peers_continue_on_individual_failure (line 551) | async def test_sync_all_peers_continue_on_individual_failure( class TestFilterServersByConfig (line 622) | class TestFilterServersByConfig: method test_sync_mode_all_returns_all_servers (line 625) | def test_sync_mode_all_returns_all_servers(self, mock_repository, samp... method test_sync_mode_whitelist_filters_by_whitelist_servers (line 644) | def test_sync_mode_whitelist_filters_by_whitelist_servers( method test_sync_mode_whitelist_with_empty_whitelist_returns_empty (line 668) | def test_sync_mode_whitelist_with_empty_whitelist_returns_empty(self, ... method test_sync_mode_tag_filter_filters_by_tags (line 693) | def test_sync_mode_tag_filter_filters_by_tags( method test_sync_mode_tag_filter_matches_categories (line 718) | def test_sync_mode_tag_filter_matches_categories(self, mock_repository): class TestFilterAgentsByConfig (line 746) | class TestFilterAgentsByConfig: method test_sync_mode_all_returns_all_agents (line 749) | def test_sync_mode_all_returns_all_agents(self, mock_repository, sampl... method test_sync_mode_whitelist_filters_by_whitelist_agents (line 767) | def test_sync_mode_whitelist_filters_by_whitelist_agents( class TestMatchesTagFilter (line 789) | class TestMatchesTagFilter: method test_matches_when_tag_in_tags_field (line 792) | def test_matches_when_tag_in_tags_field(self, mock_repository): method test_matches_when_tag_in_categories_field (line 806) | def test_matches_when_tag_in_categories_field(self, mock_repository): method test_matches_with_multiple_filters (line 820) | def test_matches_with_multiple_filters(self, mock_repository): method test_returns_false_when_no_match (line 834) | def test_returns_false_when_no_match(self, mock_repository): method test_returns_false_for_empty_tag_filters (line 848) | def test_returns_false_for_empty_tag_filters(self, mock_repository): method test_handles_missing_tags_field (line 862) | def test_handles_missing_tags_field(self, mock_repository): class TestStoreSyncedServers (line 878) | class TestStoreSyncedServers: method test_store_new_server_with_sync_metadata (line 882) | async def test_store_new_server_with_sync_metadata( method test_store_update_existing_server (line 919) | async def test_store_update_existing_server( method test_store_path_prefixing_with_peer_id (line 956) | async def test_store_path_prefixing_with_peer_id( method test_store_skip_servers_missing_path_field (line 988) | async def test_store_skip_servers_missing_path_field( class TestStoreSyncedAgents (line 1021) | class TestStoreSyncedAgents: method test_store_new_agent_with_sync_metadata (line 1025) | async def test_store_new_agent_with_sync_metadata( method test_store_skip_agents_missing_path_field (line 1063) | async def test_store_skip_agents_missing_path_field( class TestDetectOrphanedItems (line 1102) | class TestDetectOrphanedItems: method test_detects_servers_missing_from_peer (line 1106) | async def test_detects_servers_missing_from_peer( method test_returns_empty_lists_when_no_orphans (line 1161) | async def test_returns_empty_lists_when_no_orphans( class TestSetLocalOverride (line 1195) | class TestSetLocalOverride: method test_sets_override_to_true_for_server (line 1199) | async def test_sets_override_to_true_for_server( method test_handles_non_existent_server (line 1232) | async def test_handles_non_existent_server( class TestIsLocallyOverridden (line 1262) | class TestIsLocallyOverridden: method test_returns_true_when_override_is_set (line 1265) | def test_returns_true_when_override_is_set(self, mock_repository): method test_returns_false_when_override_not_set (line 1279) | def test_returns_false_when_override_not_set(self, mock_repository): method test_handles_missing_sync_metadata (line 1293) | def test_handles_missing_sync_metadata(self, mock_repository): class TestLocalOverrideIntegration (line 1309) | class TestLocalOverrideIntegration: method test_local_override_prevents_server_sync_update (line 1313) | async def test_local_override_prevents_server_sync_update( FILE: tests/unit/services/test_registration_gate_service.py function _make_raw_headers (line 48) | def _make_raw_headers( function _make_mock_settings (line 65) | def _make_mock_settings( function _make_mock_http_client (line 99) | def _make_mock_http_client( function _make_mock_response (line 122) | def _make_mock_response( class TestRegistrationGateRequest (line 152) | class TestRegistrationGateRequest: method test_valid_construction (line 155) | def test_valid_construction(self): method test_default_request_headers (line 171) | def test_default_request_headers(self): method test_serialization_round_trip (line 182) | def test_serialization_round_trip(self): class TestRegistrationGateResponse (line 199) | class TestRegistrationGateResponse: method test_allowed_response (line 202) | def test_allowed_response(self): method test_denied_response_with_error (line 209) | def test_denied_response_with_error(self): class TestRegistrationGateResult (line 220) | class TestRegistrationGateResult: method test_allowed_result (line 223) | def test_allowed_result(self): method test_denied_result (line 237) | def test_denied_result(self): method test_defaults (line 250) | def test_defaults(self): class TestRegistrationGateAuthType (line 259) | class TestRegistrationGateAuthType: method test_enum_values (line 262) | def test_enum_values(self): class TestSanitizePayload (line 274) | class TestSanitizePayload: method test_removes_exact_sensitive_field_names (line 277) | def test_removes_exact_sensitive_field_names(self): method test_removes_fields_matching_sensitive_substrings (line 295) | def test_removes_fields_matching_sensitive_substrings(self): method test_substring_matching_is_case_insensitive (line 317) | def test_substring_matching_is_case_insensitive(self): method test_preserves_all_non_sensitive_fields (line 334) | def test_preserves_all_non_sensitive_fields(self): method test_empty_payload (line 348) | def test_empty_payload(self): method test_all_sensitive_payload (line 354) | def test_all_sensitive_payload(self): class TestBuildAuthHeaders (line 372) | class TestBuildAuthHeaders: method test_returns_empty_when_auth_type_none (line 375) | def test_returns_empty_when_auth_type_none(self): method test_returns_bearer_header (line 385) | def test_returns_bearer_header(self): method test_returns_api_key_header (line 395) | def test_returns_api_key_header(self): method test_api_key_with_custom_header_name (line 406) | def test_api_key_with_custom_header_name(self): method test_bearer_with_empty_credential_returns_empty (line 417) | def test_bearer_with_empty_credential_returns_empty(self): method test_api_key_with_empty_credential_returns_empty (line 427) | def test_api_key_with_empty_credential_returns_empty(self): class TestExtractRequestHeaders (line 444) | class TestExtractRequestHeaders: method test_converts_raw_asgi_headers (line 447) | def test_converts_raw_asgi_headers(self): method test_filters_authorization_header (line 459) | def test_filters_authorization_header(self): method test_filters_cookie_header (line 471) | def test_filters_cookie_header(self): method test_filters_csrf_token_header (line 483) | def test_filters_csrf_token_header(self): method test_filters_multiple_sensitive_headers (line 495) | def test_filters_multiple_sensitive_headers(self): method test_empty_headers (line 511) | def test_empty_headers(self): method test_header_names_are_lowercased (line 517) | def test_header_names_are_lowercased(self): class TestIsGateConfigured (line 535) | class TestIsGateConfigured: method test_returns_false_when_disabled (line 538) | def test_returns_false_when_disabled(self): method test_returns_false_when_enabled_but_url_empty (line 545) | def test_returns_false_when_enabled_but_url_empty(self, caplog): method test_returns_true_when_enabled_and_url_set (line 563) | def test_returns_true_when_enabled_and_url_set(self): class TestTruncateError (line 577) | class TestTruncateError: method test_short_message_unchanged (line 580) | def test_short_message_unchanged(self): method test_exact_limit_unchanged (line 586) | def test_exact_limit_unchanged(self): method test_over_limit_is_truncated (line 593) | def test_over_limit_is_truncated(self): method test_empty_message (line 603) | def test_empty_message(self): class TestCheckRegistrationGate (line 613) | class TestCheckRegistrationGate: method test_returns_allowed_when_gate_not_configured (line 616) | async def test_returns_allowed_when_gate_not_configured(self): method test_calls_gate_when_configured_and_returns_allowed (line 634) | async def test_calls_gate_when_configured_and_returns_allowed(self): method test_returns_denied_on_403_with_json_error (line 661) | async def test_returns_denied_on_403_with_json_error(self): method test_returns_denied_on_403_with_raw_text (line 688) | async def test_returns_denied_on_403_with_raw_text(self): method test_returns_denied_on_403_default_message_when_no_body (line 714) | async def test_returns_denied_on_403_default_message_when_no_body(self): method test_sanitizes_payload_before_sending (line 739) | async def test_sanitizes_payload_before_sending(self): method test_filters_sensitive_headers_before_sending (line 767) | async def test_filters_sensitive_headers_before_sending(self): class TestCallGateEndpoint (line 801) | class TestCallGateEndpoint: method test_timeout_exhausts_retries_and_returns_denied (line 804) | async def test_timeout_exhausts_retries_and_returns_denied(self): method test_connection_error_exhausts_retries_and_returns_denied (line 830) | async def test_connection_error_exhausts_retries_and_returns_denied(se... method test_unexpected_status_code_triggers_retry (line 854) | async def test_unexpected_status_code_triggers_retry(self): method test_retry_succeeds_on_second_attempt (line 877) | async def test_retry_succeeds_on_second_attempt(self): method test_no_retries_when_max_retries_is_zero (line 908) | async def test_no_retries_when_max_retries_is_zero(self): method test_backoff_sleep_called_between_retries (line 932) | async def test_backoff_sleep_called_between_retries(self): method test_includes_bearer_auth_in_gate_request (line 960) | async def test_includes_bearer_auth_in_gate_request(self): method test_403_with_long_error_is_truncated (line 986) | async def test_403_with_long_error_is_truncated(self): method test_403_json_without_error_field_uses_default (line 1013) | async def test_403_json_without_error_field_uses_default(self): FILE: tests/unit/services/test_server_service.py function server_service (line 27) | def server_service( function sample_server_dict (line 62) | def sample_server_dict() -> dict[str, Any]: function sample_server_dict_2 (line 82) | def sample_server_dict_2() -> dict[str, Any]: function server_json_files (line 102) | def server_json_files( class TestServerServiceInstantiation (line 154) | class TestServerServiceInstantiation: method test_init_creates_service_with_repositories (line 157) | def test_init_creates_service_with_repositories( class TestLoadServersAndState (line 176) | class TestLoadServersAndState: method test_load_servers_and_state_calls_repository (line 180) | async def test_load_servers_and_state_calls_repository( class TestRegisterServer (line 220) | class TestRegisterServer: method test_register_new_server_success (line 224) | async def test_register_new_server_success( method test_register_server_calls_repository_create (line 247) | async def test_register_server_calls_repository_create( method test_register_server_duplicate_path_same_version_fails (line 267) | async def test_register_server_duplicate_path_same_version_fails( method test_register_server_indexes_in_search (line 289) | async def test_register_server_indexes_in_search( method test_register_server_with_repository_failure (line 310) | async def test_register_server_with_repository_failure( class TestUpdateServer (line 338) | class TestUpdateServer: method test_update_existing_server_success (line 342) | async def test_update_existing_server_success( method test_update_nonexistent_server_fails (line 369) | async def test_update_nonexistent_server_fails( method test_update_server_calls_repository (line 388) | async def test_update_server_calls_repository( method test_update_server_indexes_in_search (line 412) | async def test_update_server_indexes_in_search( class TestGetServerInfo (line 448) | class TestGetServerInfo: method test_get_server_info_delegates_to_repository (line 452) | async def test_get_server_info_delegates_to_repository( method test_get_server_info_returns_none_when_not_found (line 470) | async def test_get_server_info_returns_none_when_not_found( method test_get_server_info_returns_server_data (line 487) | async def test_get_server_info_returns_server_data( class TestGetAllServers (line 513) | class TestGetAllServers: method test_get_all_servers_delegates_to_repository (line 517) | async def test_get_all_servers_delegates_to_repository( method test_get_all_servers_returns_repository_data (line 534) | async def test_get_all_servers_returns_repository_data( class TestGetFilteredServers (line 565) | class TestGetFilteredServers: method test_get_filtered_servers_empty_access_list (line 569) | async def test_get_filtered_servers_empty_access_list( method test_get_filtered_servers_delegates_to_repository (line 588) | async def test_get_filtered_servers_delegates_to_repository( method test_get_filtered_servers_matches_technical_name (line 607) | async def test_get_filtered_servers_matches_technical_name( method test_get_filtered_servers_multiple_servers (line 629) | async def test_get_filtered_servers_multiple_servers( method test_get_filtered_servers_with_trailing_slash_in_path (line 653) | async def test_get_filtered_servers_with_trailing_slash_in_path( method test_get_filtered_servers_filters_correctly (line 675) | async def test_get_filtered_servers_filters_correctly( method test_user_can_access_server_path_success (line 699) | async def test_user_can_access_server_path_success( method test_user_can_access_server_path_denied (line 719) | async def test_user_can_access_server_path_denied( method test_user_can_access_server_path_nonexistent (line 738) | async def test_user_can_access_server_path_nonexistent( class TestGetAllServersWithPermissions (line 762) | class TestGetAllServersWithPermissions: method test_get_all_servers_with_permissions_admin_access (line 766) | async def test_get_all_servers_with_permissions_admin_access( method test_get_all_servers_with_permissions_filtered_access (line 791) | async def test_get_all_servers_with_permissions_filtered_access( class TestWildcardServerAccess (line 822) | class TestWildcardServerAccess: method test_get_filtered_servers_wildcard_returns_all (line 826) | async def test_get_filtered_servers_wildcard_returns_all( method test_get_filtered_servers_wildcard_respects_include_inactive (line 846) | async def test_get_filtered_servers_wildcard_respects_include_inactive( method test_get_all_servers_with_permissions_wildcard_returns_all (line 869) | async def test_get_all_servers_with_permissions_wildcard_returns_all( method test_user_can_access_server_path_wildcard_existing (line 891) | async def test_user_can_access_server_path_wildcard_existing( method test_user_can_access_server_path_wildcard_nonexistent (line 905) | async def test_user_can_access_server_path_wildcard_nonexistent( class TestServiceStateManagement (line 925) | class TestServiceStateManagement: method test_is_service_enabled_default_false (line 929) | async def test_is_service_enabled_default_false( method test_is_service_enabled_returns_true_when_enabled (line 947) | async def test_is_service_enabled_returns_true_when_enabled( method test_is_service_enabled_nonexistent_returns_false (line 964) | async def test_is_service_enabled_nonexistent_returns_false( method test_get_enabled_services_empty (line 981) | async def test_get_enabled_services_empty( method test_get_enabled_services_returns_enabled_paths (line 997) | async def test_get_enabled_services_returns_enabled_paths( class TestToggleService (line 1032) | class TestToggleService: method test_toggle_service_enable_calls_repository (line 1036) | async def test_toggle_service_enable_calls_repository( method test_toggle_service_disable_calls_repository (line 1063) | async def test_toggle_service_disable_calls_repository( method test_toggle_service_nonexistent_server_fails (line 1089) | async def test_toggle_service_nonexistent_server_fails( method test_toggle_service_repository_failure (line 1105) | async def test_toggle_service_repository_failure( class TestReloadStateFromDisk (line 1137) | class TestReloadStateFromDisk: method test_reload_state_from_disk_calls_repository (line 1141) | async def test_reload_state_from_disk_calls_repository( method test_reload_state_detects_changes (line 1158) | async def test_reload_state_detects_changes( method test_reload_state_skips_nginx_when_no_changes (line 1190) | async def test_reload_state_skips_nginx_when_no_changes( class TestRemoveServer (line 1227) | class TestRemoveServer: method test_remove_server_success (line 1231) | async def test_remove_server_success( method test_remove_server_deletes_all_versions (line 1253) | async def test_remove_server_deletes_all_versions( method test_remove_server_removes_from_search (line 1274) | async def test_remove_server_removes_from_search( method test_remove_server_nonexistent_fails (line 1292) | async def test_remove_server_nonexistent_fails( method test_remove_server_with_repository_failure (line 1310) | async def test_remove_server_with_repository_failure( class TestEdgeCasesAndErrorHandling (line 1352) | class TestEdgeCasesAndErrorHandling: method test_concurrent_state_modifications (line 1356) | async def test_concurrent_state_modifications( method test_handle_unicode_in_server_data (line 1388) | async def test_handle_unicode_in_server_data( method test_empty_path_handling (line 1418) | async def test_empty_path_handling( method test_long_path_handling (line 1443) | async def test_long_path_handling( class TestServerVersionManagement (line 1484) | class TestServerVersionManagement: method sample_server_with_versions (line 1488) | def sample_server_with_versions(self) -> dict[str, Any]: method test_get_all_servers_filters_inactive_by_default (line 1502) | async def test_get_all_servers_filters_inactive_by_default( method test_get_all_servers_includes_inactive_when_requested (line 1534) | async def test_get_all_servers_includes_inactive_when_requested( method test_get_all_servers_treats_missing_is_active_as_true (line 1566) | async def test_get_all_servers_treats_missing_is_active_as_true( method test_get_filtered_servers_filters_inactive_by_default (line 1589) | async def test_get_filtered_servers_filters_inactive_by_default( method test_add_server_version_creates_separate_document (line 1621) | async def test_add_server_version_creates_separate_document( method test_add_server_version_nonexistent_server (line 1666) | async def test_add_server_version_nonexistent_server( method test_set_default_version_success (line 1684) | async def test_set_default_version_success( method test_set_default_version_nonexistent_version (line 1749) | async def test_set_default_version_nonexistent_version( method test_remove_server_version_success (line 1784) | async def test_remove_server_version_success( method test_remove_server_version_cannot_remove_active (line 1840) | async def test_remove_server_version_cannot_remove_active( method test_get_server_versions_returns_versions (line 1868) | async def test_get_server_versions_returns_versions( method test_get_server_versions_returns_single_version_for_legacy_server (line 1924) | async def test_get_server_versions_returns_single_version_for_legacy_s... method test_get_server_versions_nonexistent_server (line 1945) | async def test_get_server_versions_nonexistent_server( FILE: tests/unit/services/test_webhook_service.py class TestBuildAuthHeaders (line 24) | class TestBuildAuthHeaders: method test_authorization_header_prepends_bearer (line 27) | def test_authorization_header_prepends_bearer(self): method test_custom_header_sends_token_as_is (line 37) | def test_custom_header_sends_token_as_is(self): method test_no_token_returns_empty_dict (line 47) | def test_no_token_returns_empty_dict(self): method test_authorization_header_case_insensitive (line 57) | def test_authorization_header_case_insensitive(self): class TestSendRegistrationWebhook (line 68) | class TestSendRegistrationWebhook: method test_registration_event_payload (line 72) | async def test_registration_event_payload(self): method test_deletion_event_payload (line 109) | async def test_deletion_event_payload(self): method test_failure_does_not_propagate (line 143) | async def test_failure_does_not_propagate(self): method test_timeout_does_not_propagate (line 166) | async def test_timeout_does_not_propagate(self): method test_no_url_configured_skips_webhook (line 189) | async def test_no_url_configured_skips_webhook(self): method test_empty_url_skips_webhook (line 204) | async def test_empty_url_skips_webhook(self): method test_http_url_logs_warning (line 219) | async def test_http_url_logs_warning(self, caplog): method test_invalid_url_scheme_rejected (line 248) | async def test_invalid_url_scheme_rejected(self, caplog): FILE: tests/unit/test_backend_session_repository.py class TestBackendSessionDocument (line 19) | class TestBackendSessionDocument: method test_valid_document (line 22) | def test_valid_document(self): method test_default_timestamps (line 39) | def test_default_timestamps(self): method test_custom_timestamps (line 52) | def test_custom_timestamps(self): method test_requires_client_session_id (line 67) | def test_requires_client_session_id(self): method test_requires_backend_session_id (line 77) | def test_requires_backend_session_id(self): method test_serialization_roundtrip (line 87) | def test_serialization_roundtrip(self): class TestClientSessionDocument (line 102) | class TestClientSessionDocument: method test_valid_document (line 105) | def test_valid_document(self): method test_requires_client_session_id (line 118) | def test_requires_client_session_id(self): method test_serialization_roundtrip (line 126) | def test_serialization_roundtrip(self): class TestStoreSessionRequest (line 139) | class TestStoreSessionRequest: method test_valid_request (line 142) | def test_valid_request(self): method test_default_user_id (line 153) | def test_default_user_id(self): method test_default_virtual_server_path (line 161) | def test_default_virtual_server_path(self): method test_requires_backend_session_id (line 169) | def test_requires_backend_session_id(self): method test_requires_client_session_id (line 176) | def test_requires_client_session_id(self): class TestCreateClientSessionRequest (line 184) | class TestCreateClientSessionRequest: method test_valid_request (line 187) | def test_valid_request(self): method test_defaults (line 196) | def test_defaults(self): class TestCreateClientSessionResponse (line 203) | class TestCreateClientSessionResponse: method test_valid_response (line 206) | def test_valid_response(self): method test_requires_client_session_id (line 213) | def test_requires_client_session_id(self): class TestGetBackendSessionResponse (line 219) | class TestGetBackendSessionResponse: method test_valid_response (line 222) | def test_valid_response(self): method test_requires_backend_session_id (line 229) | def test_requires_backend_session_id(self): class TestBackendSessionInternalAPI (line 235) | class TestBackendSessionInternalAPI: method mock_repo (line 239) | def mock_repo(self): method test_create_client_session_generates_vs_id (line 250) | async def test_create_client_session_generates_vs_id(self, mock_repo): method test_validate_client_session_found (line 269) | async def test_validate_client_session_found(self, mock_repo): method test_validate_client_session_not_found (line 283) | async def test_validate_client_session_not_found(self, mock_repo): method test_get_backend_session_found (line 300) | async def test_get_backend_session_found(self, mock_repo): method test_get_backend_session_not_found (line 314) | async def test_get_backend_session_not_found(self, mock_repo): method test_get_backend_session_invalid_key (line 331) | async def test_get_backend_session_invalid_key(self, mock_repo): method test_store_backend_session (line 346) | async def test_store_backend_session(self, mock_repo): method test_delete_backend_session (line 374) | async def test_delete_backend_session(self, mock_repo): method test_repo_unavailable_returns_503 (line 390) | async def test_repo_unavailable_returns_503(self): FILE: tests/unit/test_deployment_mode.py class TestDeploymentModeValidation (line 23) | class TestDeploymentModeValidation: method test_default_mode_valid (line 26) | def test_default_mode_valid(self): method test_gateway_skills_only_invalid (line 35) | def test_gateway_skills_only_invalid(self): method test_registry_only_full_valid (line 44) | def test_registry_only_full_valid(self): method test_registry_only_skills_valid (line 53) | def test_registry_only_skills_valid(self): method test_gateway_mcp_servers_only_valid (line 62) | def test_gateway_mcp_servers_only_valid(self): class TestNginxUpdatesEnabled (line 78) | class TestNginxUpdatesEnabled: method test_enabled_with_gateway (line 81) | def test_enabled_with_gateway(self): method test_disabled_registry_only (line 86) | def test_disabled_registry_only(self): class TestNginxServiceDeploymentMode (line 100) | class TestNginxServiceDeploymentMode: method test_generate_config_skipped_in_registry_only (line 106) | def test_generate_config_skipped_in_registry_only( method test_reload_nginx_skipped_in_registry_only (line 135) | def test_reload_nginx_skipped_in_registry_only( FILE: tests/unit/test_entra_manager.py function mock_admin_token (line 41) | def mock_admin_token() -> str: function mock_token_response (line 47) | def mock_token_response(mock_admin_token: str) -> dict[str, Any]: function mock_users_response (line 57) | def mock_users_response() -> dict[str, Any]: function mock_groups_response (line 84) | def mock_groups_response() -> dict[str, Any]: function mock_create_group_response (line 105) | def mock_create_group_response() -> dict[str, Any]: function entra_env_vars (line 116) | def entra_env_vars(monkeypatch): class TestIsGuid (line 134) | class TestIsGuid: method test_valid_guid_lowercase (line 137) | def test_valid_guid_lowercase(self): method test_valid_guid_uppercase (line 148) | def test_valid_guid_uppercase(self): method test_valid_guid_mixed_case (line 159) | def test_valid_guid_mixed_case(self): method test_invalid_guid_wrong_format (line 170) | def test_invalid_guid_wrong_format(self): method test_invalid_guid_short_string (line 181) | def test_invalid_guid_short_string(self): method test_invalid_guid_display_name (line 192) | def test_invalid_guid_display_name(self): method test_invalid_guid_empty_string (line 203) | def test_invalid_guid_empty_string(self): method test_invalid_guid_contains_invalid_chars (line 214) | def test_invalid_guid_contains_invalid_chars(self): method test_invalid_guid_wrong_segment_lengths (line 225) | def test_invalid_guid_wrong_segment_lengths(self): class TestGenerateTempPassword (line 243) | class TestGenerateTempPassword: method test_password_length (line 246) | def test_password_length(self): method test_password_contains_allowed_characters (line 254) | def test_password_contains_allowed_characters(self): method test_password_randomness (line 266) | def test_password_randomness(self): method test_password_contains_letters (line 274) | def test_password_contains_letters(self): method test_password_is_string (line 287) | def test_password_is_string(self): class TestGetEntraAdminToken (line 302) | class TestGetEntraAdminToken: method test_raises_error_when_client_secret_missing (line 306) | async def test_raises_error_when_client_secret_missing(self, monkeypat... method test_raises_error_when_tenant_id_missing (line 323) | async def test_raises_error_when_tenant_id_missing(self, monkeypatch): method test_raises_error_when_client_id_missing (line 340) | async def test_raises_error_when_client_id_missing(self, monkeypatch): method test_raises_error_on_http_error (line 357) | async def test_raises_error_on_http_error(self, entra_env_vars): method test_raises_error_when_no_access_token_in_response (line 382) | async def test_raises_error_when_no_access_token_in_response(self, ent... class TestListEntraUsers (line 412) | class TestListEntraUsers: method test_list_users_success (line 416) | async def test_list_users_success( method test_list_users_without_groups (line 463) | async def test_list_users_without_groups( method test_list_users_transforms_data_correctly (line 498) | async def test_list_users_transforms_data_correctly( class TestCreateEntraGroup (line 557) | class TestCreateEntraGroup: method test_create_group_success (line 561) | async def test_create_group_success( method test_create_group_returns_correct_document (line 596) | async def test_create_group_returns_correct_document( method test_create_group_already_exists_raises_error (line 636) | async def test_create_group_already_exists_raises_error( class TestDeleteEntraGroup (line 673) | class TestDeleteEntraGroup: method test_delete_group_by_id_success (line 677) | async def test_delete_group_by_id_success( method test_delete_group_by_name_success (line 708) | async def test_delete_group_by_name_success( method test_delete_group_not_found_by_name_raises_error (line 747) | async def test_delete_group_not_found_by_name_raises_error( method test_delete_group_404_raises_error (line 781) | async def test_delete_group_404_raises_error( class TestListEntraGroups (line 818) | class TestListEntraGroups: method test_list_groups_success (line 822) | async def test_list_groups_success( method test_list_groups_transforms_correctly (line 861) | async def test_list_groups_transforms_correctly( method test_list_groups_empty_response (line 910) | async def test_list_groups_empty_response( method test_list_groups_with_single_prefix (line 941) | async def test_list_groups_with_single_prefix( method test_list_groups_with_multiple_prefixes (line 981) | async def test_list_groups_with_multiple_prefixes( method test_list_groups_without_prefix_no_filter (line 1026) | async def test_list_groups_without_prefix_no_filter( class TestBuildPrefixOdataFilter (line 1071) | class TestBuildPrefixOdataFilter: method test_single_prefix (line 1074) | def test_single_prefix(self): method test_multiple_prefixes (line 1082) | def test_multiple_prefixes(self): method test_two_prefixes (line 1095) | def test_two_prefixes(self): class TestPrefixValidation (line 1111) | class TestPrefixValidation: method test_valid_single_prefix_parsing (line 1114) | def test_valid_single_prefix_parsing(self): method test_valid_multiple_prefixes_parsing (line 1123) | def test_valid_multiple_prefixes_parsing(self): method test_whitespace_trimming (line 1132) | def test_whitespace_trimming(self): method test_empty_entries_skipped (line 1141) | def test_empty_entries_skipped(self): method test_empty_string_gives_empty_list (line 1150) | def test_empty_string_gives_empty_list(self): method test_valid_prefix_characters (line 1159) | def test_valid_prefix_characters(self): method test_invalid_prefix_with_single_quote (line 1167) | def test_invalid_prefix_with_single_quote(self): FILE: tests/unit/test_github_auth.py function rsa_private_key_pem (line 13) | def rsa_private_key_pem() -> str: function _mock_app_settings (line 23) | def _mock_app_settings(mock_settings, pem: str, pat: str = "") -> None: class TestDomainMatching (line 33) | class TestDomainMatching: method test_github_com_is_allowed (line 36) | def test_github_com_is_allowed(self): method test_raw_githubusercontent_is_allowed (line 43) | def test_raw_githubusercontent_is_allowed(self): method test_non_github_host_is_not_allowed (line 53) | def test_non_github_host_is_not_allowed(self): method test_case_insensitive_matching (line 60) | def test_case_insensitive_matching(self): method test_extra_hosts_from_config (line 68) | def test_extra_hosts_from_config(self, mock_settings): method test_empty_extra_hosts (line 83) | def test_empty_extra_hosts(self, mock_settings): class TestPATAuth (line 98) | class TestPATAuth: method test_pat_returns_bearer_header (line 102) | async def test_pat_returns_bearer_header(self, mock_settings): method test_no_credentials_returns_empty (line 117) | async def test_no_credentials_returns_empty(self, mock_settings): method test_non_github_host_returns_empty_even_with_pat (line 132) | async def test_non_github_host_returns_empty_even_with_pat(self, mock_... method test_pat_works_with_raw_githubusercontent (line 147) | async def test_pat_works_with_raw_githubusercontent(self, mock_settings): class TestJWTCreation (line 164) | class TestJWTCreation: method test_jwt_has_correct_claims (line 168) | def test_jwt_has_correct_claims(self, mock_settings, rsa_private_key_p... method test_jwt_uses_rs256 (line 184) | def test_jwt_uses_rs256(self, mock_settings, rsa_private_key_pem): class TestTokenExchange (line 197) | class TestTokenExchange: method test_successful_token_exchange (line 201) | async def test_successful_token_exchange(self, mock_settings, rsa_priv... method test_cached_token_reused (line 224) | async def test_cached_token_reused(self, mock_settings, rsa_private_ke... method test_exchange_failure_falls_back_to_pat (line 251) | async def test_exchange_failure_falls_back_to_pat(self, mock_settings,... method test_exchange_failure_no_pat_returns_empty (line 274) | async def test_exchange_failure_no_pat_returns_empty(self, mock_settin... method test_custom_api_base_url_used_in_exchange (line 293) | async def test_custom_api_base_url_used_in_exchange(self, mock_setting... FILE: tests/unit/test_iam_manager.py function sample_user_list (line 23) | def sample_user_list() -> list[dict[str, Any]]: function sample_group_list (line 51) | def sample_group_list() -> list[dict[str, Any]]: function sample_created_group (line 73) | def sample_created_group() -> dict[str, Any]: function sample_created_user (line 88) | def sample_created_user() -> dict[str, Any]: function sample_service_account (line 106) | def sample_service_account() -> dict[str, Any]: class TestGetIAMManagerFactory (line 126) | class TestGetIAMManagerFactory: method test_returns_keycloak_manager_when_auth_provider_is_keycloak (line 129) | def test_returns_keycloak_manager_when_auth_provider_is_keycloak( method test_returns_entra_manager_when_auth_provider_is_entra (line 150) | def test_returns_entra_manager_when_auth_provider_is_entra( method test_returns_okta_manager_when_auth_provider_is_okta (line 171) | def test_returns_okta_manager_when_auth_provider_is_okta( method test_defaults_to_keycloak_when_auth_provider_not_set (line 192) | def test_defaults_to_keycloak_when_auth_provider_not_set( method test_defaults_to_keycloak_for_unknown_provider (line 213) | def test_defaults_to_keycloak_for_unknown_provider( method test_auth_provider_case_insensitive (line 234) | def test_auth_provider_case_insensitive( method test_entra_auth_provider_case_insensitive (line 255) | def test_entra_auth_provider_case_insensitive( class TestKeycloakIAMManager (line 283) | class TestKeycloakIAMManager: method test_list_users_delegates_to_keycloak_manager (line 287) | async def test_list_users_delegates_to_keycloak_manager( method test_create_group_delegates_to_keycloak_manager (line 318) | async def test_create_group_delegates_to_keycloak_manager( method test_delete_group_delegates_to_keycloak_manager (line 347) | async def test_delete_group_delegates_to_keycloak_manager(self): method test_list_groups_delegates_to_keycloak_manager (line 367) | async def test_list_groups_delegates_to_keycloak_manager( method test_create_human_user_delegates_to_keycloak_manager (line 390) | async def test_create_human_user_delegates_to_keycloak_manager( method test_delete_user_delegates_to_keycloak_manager (line 427) | async def test_delete_user_delegates_to_keycloak_manager(self): method test_create_service_account_delegates_to_keycloak_manager (line 447) | async def test_create_service_account_delegates_to_keycloak_manager( class TestEntraIAMManager (line 484) | class TestEntraIAMManager: method test_list_users_delegates_to_entra_manager (line 488) | async def test_list_users_delegates_to_entra_manager( method test_create_group_delegates_to_entra_manager (line 519) | async def test_create_group_delegates_to_entra_manager( method test_delete_group_delegates_to_entra_manager (line 548) | async def test_delete_group_delegates_to_entra_manager(self): method test_list_groups_delegates_to_entra_manager (line 568) | async def test_list_groups_delegates_to_entra_manager( method test_create_human_user_delegates_to_entra_manager (line 591) | async def test_create_human_user_delegates_to_entra_manager( method test_delete_user_delegates_to_entra_manager (line 628) | async def test_delete_user_delegates_to_entra_manager(self): method test_create_service_account_delegates_to_entra_manager (line 648) | async def test_create_service_account_delegates_to_entra_manager( class TestIAMManagerProtocol (line 685) | class TestIAMManagerProtocol: method test_keycloak_manager_is_runtime_checkable (line 688) | def test_keycloak_manager_is_runtime_checkable(self): method test_entra_manager_is_runtime_checkable (line 700) | def test_entra_manager_is_runtime_checkable(self): method test_keycloak_manager_has_all_protocol_methods (line 712) | def test_keycloak_manager_has_all_protocol_methods(self): method test_entra_manager_has_all_protocol_methods (line 736) | def test_entra_manager_has_all_protocol_methods(self): FILE: tests/unit/test_lifecycle_status.py class TestBuildStatusFilter (line 9) | class TestBuildStatusFilter: method test_default_excludes_draft_and_deprecated_and_disabled (line 12) | def test_default_excludes_draft_and_deprecated_and_disabled(self): method test_include_all_returns_empty_dict (line 30) | def test_include_all_returns_empty_dict(self): method test_include_draft_only_excludes_deprecated (line 39) | def test_include_draft_only_excludes_deprecated(self): method test_include_deprecated_only_excludes_draft (line 49) | def test_include_deprecated_only_excludes_draft(self): method test_include_disabled_still_filters_status (line 58) | def test_include_disabled_still_filters_status(self): method test_documents_without_status_field_pass_through (line 67) | def test_documents_without_status_field_pass_through(self): method test_documents_without_is_enabled_field_pass_through (line 75) | def test_documents_without_is_enabled_field_pass_through(self): method test_include_draft_and_deprecated_only_filters_disabled (line 82) | def test_include_draft_and_deprecated_only_filters_disabled(self): class TestValidateLifecycleStatus (line 93) | class TestValidateLifecycleStatus: method test_valid_status_accepted (line 96) | def test_valid_status_accepted(self): method test_status_normalized_to_lowercase (line 101) | def test_status_normalized_to_lowercase(self): method test_invalid_status_rejected (line 106) | def test_invalid_status_rejected(self): method test_all_enum_values_accepted (line 111) | def test_all_enum_values_accepted(self): class TestModelDefaults (line 118) | class TestModelDefaults: method test_agent_registration_defaults_to_draft (line 121) | def test_agent_registration_defaults_to_draft(self): method test_agent_card_defaults_to_active (line 132) | def test_agent_card_defaults_to_active(self): method test_skill_registration_defaults_to_draft (line 144) | def test_skill_registration_defaults_to_draft(self): method test_skill_card_defaults_to_active (line 155) | def test_skill_card_defaults_to_active(self): FILE: tests/unit/test_safe_eval_arithmetic.py class TestSafeEvalArithmetic (line 44) | class TestSafeEvalArithmetic: method test_basic_addition (line 47) | def test_basic_addition(self): method test_basic_subtraction (line 52) | def test_basic_subtraction(self): method test_basic_multiplication (line 57) | def test_basic_multiplication(self): method test_basic_division (line 62) | def test_basic_division(self): method test_exponentiation (line 67) | def test_exponentiation(self): method test_floor_division (line 72) | def test_floor_division(self): method test_modulo (line 77) | def test_modulo(self): method test_complex_expression (line 82) | def test_complex_expression(self): method test_negative_numbers (line 87) | def test_negative_numbers(self): method test_float_operations (line 92) | def test_float_operations(self): method test_division_by_zero (line 97) | def test_division_by_zero(self): method test_blocks_import (line 102) | def test_blocks_import(self): method test_blocks_eval (line 107) | def test_blocks_eval(self): method test_blocks_function_calls (line 112) | def test_blocks_function_calls(self): method test_blocks_attribute_access (line 117) | def test_blocks_attribute_access(self): method test_blocks_names (line 122) | def test_blocks_names(self): method test_length_limit_protection (line 127) | def test_length_limit_protection(self): method test_blocks_large_exponents (line 133) | def test_blocks_large_exponents(self): FILE: tests/unit/test_skill_models.py class TestSkillCard (line 17) | class TestSkillCard: method test_valid_skill_name (line 20) | def test_valid_skill_name(self): method test_invalid_skill_name_uppercase (line 33) | def test_invalid_skill_name_uppercase(self): method test_invalid_skill_name_consecutive_hyphens (line 43) | def test_invalid_skill_name_consecutive_hyphens(self): method test_invalid_skill_name_leading_hyphen (line 53) | def test_invalid_skill_name_leading_hyphen(self): method test_invalid_skill_name_trailing_hyphen (line 63) | def test_invalid_skill_name_trailing_hyphen(self): method test_invalid_path_format (line 73) | def test_invalid_path_format(self): method test_visibility_enum_default (line 83) | def test_visibility_enum_default(self): method test_visibility_enum_private (line 93) | def test_visibility_enum_private(self): method test_visibility_enum_group (line 104) | def test_visibility_enum_group(self): method test_default_values (line 117) | def test_default_values(self): class TestToolReference (line 133) | class TestToolReference: method test_tool_reference_minimal (line 136) | def test_tool_reference_minimal(self): method test_tool_reference_with_capabilities (line 143) | def test_tool_reference_with_capabilities(self): method test_tool_reference_with_server_path (line 150) | def test_tool_reference_with_server_path(self): class TestCompatibilityRequirement (line 156) | class TestCompatibilityRequirement: method test_compatibility_requirement_product (line 159) | def test_compatibility_requirement_product(self): method test_compatibility_requirement_tool (line 166) | def test_compatibility_requirement_tool(self): method test_compatibility_requirement_optional (line 172) | def test_compatibility_requirement_optional(self): class TestSkillRegistrationRequest (line 178) | class TestSkillRegistrationRequest: method test_valid_request (line 181) | def test_valid_request(self): method test_request_with_tools (line 193) | def test_request_with_tools(self): method test_url_validation_valid (line 206) | def test_url_validation_valid(self): method test_url_validation_invalid (line 215) | def test_url_validation_invalid(self): method test_name_validation (line 220) | def test_name_validation(self): class TestSkillInfo (line 228) | class TestSkillInfo: method test_skill_info_minimal (line 231) | def test_skill_info_minimal(self): method test_skill_info_with_author (line 244) | def test_skill_info_with_author(self): class TestVisibilityEnum (line 259) | class TestVisibilityEnum: method test_enum_values (line 262) | def test_enum_values(self): method test_enum_string_comparison (line 268) | def test_enum_string_comparison(self): FILE: tests/unit/test_skill_routes_github_auth.py function _make_mock_skill (line 6) | def _make_mock_skill( class TestGetSkillContentAuth (line 23) | class TestGetSkillContentAuth: method test_global_credentials_sends_github_headers (line 30) | async def test_global_credentials_sends_github_headers( method test_none_scheme_sends_no_auth_headers (line 71) | async def test_none_scheme_sends_no_auth_headers( FILE: tests/unit/test_skill_routes_security.py function _make_mock_skill (line 26) | def _make_mock_skill(path="/test-skill", tags=None, skill_md_url="https:... function _make_unsafe_scan_result (line 40) | def _make_unsafe_scan_result(skill_path, critical=1, high=1): function _make_safe_scan_result (line 54) | def _make_safe_scan_result(skill_path): function _unsafe_result_strategy (line 73) | def _unsafe_result_strategy(): class TestUnsafeSkillDisablingAndTagging (line 88) | class TestUnsafeSkillDisablingAndTagging: method test_unsafe_skill_disabled_and_tagged (line 94) | async def test_unsafe_skill_disabled_and_tagged(self, scan_result): class TestGetSkillSecurityScan (line 130) | class TestGetSkillSecurityScan: method test_returns_scan_result_when_exists (line 134) | async def test_returns_scan_result_when_exists(self): method test_returns_no_results_message_when_none (line 161) | async def test_returns_no_results_message_when_none(self): method test_returns_404_for_nonexistent_skill (line 186) | async def test_returns_404_for_nonexistent_skill(self): class TestRescanSkill (line 207) | class TestRescanSkill: method test_non_admin_returns_403 (line 211) | async def test_non_admin_returns_403(self): method test_returns_404_for_nonexistent_skill (line 230) | async def test_returns_404_for_nonexistent_skill(self): class TestRegistrationWithScanning (line 253) | class TestRegistrationWithScanning: method test_scanning_skipped_when_disabled (line 257) | async def test_scanning_skipped_when_disabled(self): method test_safe_skill_not_disabled (line 281) | async def test_safe_skill_not_disabled(self): FILE: tests/unit/test_skill_scanner_service.py function _build_scanner_json_output (line 33) | def _build_scanner_json_output(findings: list) -> str: function _make_finding (line 38) | def _make_finding(severity: str, analyzer: str) -> dict: function _create_service (line 49) | def _create_service() -> SkillScannerService: function _finding_strategy (line 69) | def _finding_strategy(): function _ansi_prefix_strategy (line 82) | def _ansi_prefix_strategy(): class TestParseOutputPreservesFindings (line 92) | class TestParseOutputPreservesFindings: method test_all_findings_preserved_by_analyzer (line 100) | def test_all_findings_preserved_by_analyzer(self, findings, ansi_prefix): function _severity_list_strategy (line 127) | def _severity_list_strategy(): class TestSafetyDeterminationInvariant (line 132) | class TestSafetyDeterminationInvariant: method test_safety_matches_severity_counts (line 137) | def test_safety_matches_severity_counts(self, severities): class TestSkillScannerServiceUnit (line 165) | class TestSkillScannerServiceUnit: method test_parse_safe_fixture (line 168) | def test_parse_safe_fixture(self): method test_parse_unsafe_fixture (line 183) | def test_parse_unsafe_fixture(self): method test_parse_medium_fixture (line 196) | def test_parse_medium_fixture(self): method test_run_skill_scanner_timeout (line 211) | def test_run_skill_scanner_timeout(self): method test_run_skill_scanner_nonzero_exit (line 226) | def test_run_skill_scanner_nonzero_exit(self): method test_run_skill_scanner_no_target_raises (line 243) | def test_run_skill_scanner_no_target_raises(self): method test_analyze_empty_results (line 254) | def test_analyze_empty_results(self): method test_parse_strips_ansi_codes (line 267) | def test_parse_strips_ansi_codes(self): FILE: tests/unit/test_skill_security_schemas.py function _finding_strategy (line 24) | def _finding_strategy(): function _scan_result_strategy (line 38) | def _scan_result_strategy(): function _scan_config_strategy (line 58) | def _scan_config_strategy(): function _security_status_strategy (line 74) | def _security_status_strategy(): class TestSkillSecuritySchemaRoundTrip (line 89) | class TestSkillSecuritySchemaRoundTrip: method test_finding_round_trip (line 94) | def test_finding_round_trip(self, finding: SkillSecurityScanFinding): method test_scan_result_round_trip (line 102) | def test_scan_result_round_trip(self, result: SkillSecurityScanResult): method test_scan_config_round_trip (line 110) | def test_scan_config_round_trip(self, config: SkillSecurityScanConfig): method test_security_status_round_trip (line 118) | def test_security_status_round_trip(self, status: SkillSecurityStatus): FILE: tests/unit/test_skill_service_github_auth.py class TestValidateSkillMdUrlAuth (line 6) | class TestValidateSkillMdUrlAuth: method test_auth_headers_passed_to_get (line 11) | async def test_auth_headers_passed_to_get(self, mock_safe_url, mock_au... method test_empty_headers_when_no_credentials (line 39) | async def test_empty_headers_when_no_credentials(self, mock_safe_url, ... class TestParseSkillMdContentAuth (line 63) | class TestParseSkillMdContentAuth: method test_auth_headers_passed_to_get (line 69) | async def test_auth_headers_passed_to_get(self, mock_translate, mock_s... method test_none_scheme_sends_no_headers (line 104) | async def test_none_scheme_sends_no_headers(self, mock_translate, mock... class TestCheckSkillHealthAuth (line 137) | class TestCheckSkillHealthAuth: method test_auth_headers_passed_to_head (line 142) | async def test_auth_headers_passed_to_head(self, mock_safe_url, mock_a... FILE: tests/unit/test_skill_service_parsing.py function _parse_frontmatter (line 7) | def _parse_frontmatter( class TestFrontmatterParsing (line 82) | class TestFrontmatterParsing: method test_standard_frontmatter_at_start (line 85) | def test_standard_frontmatter_at_start(self): method test_yaml_codeblock_with_markers (line 104) | def test_yaml_codeblock_with_markers(self): method test_yaml_codeblock_without_markers (line 125) | def test_yaml_codeblock_without_markers(self): method test_yml_extension_codeblock (line 144) | def test_yml_extension_codeblock(self): method test_tags_as_yaml_list (line 159) | def test_tags_as_yaml_list(self): method test_tags_with_quotes (line 170) | def test_tags_with_quotes(self): method test_quoted_values (line 181) | def test_quoted_values(self): method test_no_frontmatter (line 194) | def test_no_frontmatter(self): method test_standard_frontmatter_priority (line 206) | def test_standard_frontmatter_priority(self): method test_multiline_description_in_codeblock (line 224) | def test_multiline_description_in_codeblock(self): method test_facebook_react_flags_skill_format (line 235) | def test_facebook_react_flags_skill_format(self): method test_case_insensitive_yaml_tag (line 255) | def test_case_insensitive_yaml_tag(self): method test_empty_content (line 267) | def test_empty_content(self): method test_whitespace_handling (line 273) | def test_whitespace_handling(self): FILE: tests/unit/test_stats_endpoint.py function mock_repositories (line 23) | def mock_repositories(): function mock_documentdb_client (line 42) | def mock_documentdb_client(): class TestRepositoryCountMethods (line 56) | class TestRepositoryCountMethods: method test_file_server_repository_count (line 60) | async def test_file_server_repository_count(self): method test_file_agent_repository_count (line 91) | async def test_file_agent_repository_count(self): class TestDetectDeploymentType (line 130) | class TestDetectDeploymentType: method test_detect_kubernetes (line 133) | def test_detect_kubernetes(self): method test_detect_ecs (line 141) | def test_detect_ecs(self): method test_detect_ecs_v4 (line 153) | def test_detect_ecs_v4(self): method test_detect_ec2 (line 165) | def test_detect_ec2(self): method test_detect_local (line 173) | def test_detect_local(self): class TestGetRegistryStats (line 183) | class TestGetRegistryStats: method test_get_registry_stats_success (line 187) | async def test_get_registry_stats_success(self, mock_repositories): method test_get_registry_stats_error_handling (line 212) | async def test_get_registry_stats_error_handling(self): class TestGetDatabaseStatus (line 229) | class TestGetDatabaseStatus: method test_database_status_file_backend (line 233) | async def test_database_status_file_backend(self): method test_database_status_documentdb_healthy (line 249) | async def test_database_status_documentdb_healthy(self, mock_documentd... method test_database_status_documentdb_unhealthy (line 272) | async def test_database_status_documentdb_unhealthy(self): class TestGetCachedStats (line 296) | class TestGetCachedStats: method test_cached_stats_cache_miss (line 300) | async def test_cached_stats_cache_miss(self, mock_repositories): class TestStatsEndpoint (line 346) | class TestStatsEndpoint: method test_stats_endpoint_success (line 350) | async def test_stats_endpoint_success(self, mock_repositories): FILE: tests/unit/test_url_validation.py class TestUrlValidation (line 8) | class TestUrlValidation: method test_allows_http (line 11) | def test_allows_http(self): method test_allows_https (line 18) | def test_allows_https(self): method test_blocks_file_scheme (line 25) | def test_blocks_file_scheme(self): method test_blocks_ftp_scheme (line 30) | def test_blocks_ftp_scheme(self): method test_blocks_gopher_scheme (line 35) | def test_blocks_gopher_scheme(self): method test_blocks_javascript_scheme (line 40) | def test_blocks_javascript_scheme(self): method test_blocks_data_scheme (line 45) | def test_blocks_data_scheme(self): method test_error_message_format (line 50) | def test_error_message_format(self): FILE: tests/unit/test_virtual_server_models.py class TestToolMapping (line 19) | class TestToolMapping: method test_valid_tool_mapping (line 22) | def test_valid_tool_mapping(self): method test_tool_mapping_with_alias (line 34) | def test_tool_mapping_with_alias(self): method test_tool_mapping_requires_tool_name (line 47) | def test_tool_mapping_requires_tool_name(self): method test_tool_mapping_requires_backend_path (line 54) | def test_tool_mapping_requires_backend_path(self): method test_backend_path_must_start_with_slash (line 61) | def test_backend_path_must_start_with_slash(self): method test_backend_path_empty_string_rejected (line 69) | def test_backend_path_empty_string_rejected(self): method test_tool_name_empty_string_rejected (line 77) | def test_tool_name_empty_string_rejected(self): class TestToolScopeOverride (line 86) | class TestToolScopeOverride: method test_valid_scope_override (line 89) | def test_valid_scope_override(self): method test_multiple_scopes (line 98) | def test_multiple_scopes(self): method test_scope_override_requires_scopes (line 106) | def test_scope_override_requires_scopes(self): method test_empty_tool_alias_rejected (line 114) | def test_empty_tool_alias_rejected(self): class TestVirtualServerConfig (line 123) | class TestVirtualServerConfig: method test_valid_config (line 126) | def test_valid_config(self): method test_full_config (line 142) | def test_full_config(self): method test_path_must_start_with_virtual (line 175) | def test_path_must_start_with_virtual(self): method test_path_requires_name_after_virtual (line 183) | def test_path_requires_name_after_virtual(self): method test_path_name_must_be_lowercase_alphanumeric (line 191) | def test_path_name_must_be_lowercase_alphanumeric(self): method test_path_uppercase_rejected (line 199) | def test_path_uppercase_rejected(self): method test_path_special_chars_rejected (line 207) | def test_path_special_chars_rejected(self): method test_path_name_allows_hyphens (line 215) | def test_path_name_allows_hyphens(self): method test_path_name_allows_multi_segment_hyphens (line 223) | def test_path_name_allows_multi_segment_hyphens(self): method test_path_name_disallows_consecutive_hyphens (line 231) | def test_path_name_disallows_consecutive_hyphens(self): method test_path_leading_hyphen_rejected (line 239) | def test_path_leading_hyphen_rejected(self): method test_path_trailing_hyphen_rejected (line 247) | def test_path_trailing_hyphen_rejected(self): method test_server_name_cannot_be_empty (line 255) | def test_server_name_cannot_be_empty(self): method test_server_name_strips_whitespace (line 263) | def test_server_name_strips_whitespace(self): method test_server_name_whitespace_only_rejected (line 271) | def test_server_name_whitespace_only_rejected(self): method test_default_is_enabled_false (line 279) | def test_default_is_enabled_false(self): method test_default_tags_empty (line 287) | def test_default_tags_empty(self): method test_default_supported_transports (line 295) | def test_default_supported_transports(self): method test_default_timestamps_set (line 303) | def test_default_timestamps_set(self): method test_serialization_roundtrip (line 312) | def test_serialization_roundtrip(self): class TestVirtualServerInfo (line 342) | class TestVirtualServerInfo: method test_valid_info (line 345) | def test_valid_info(self): method test_info_defaults (line 359) | def test_info_defaults(self): class TestCreateVirtualServerRequest (line 374) | class TestCreateVirtualServerRequest: method test_minimal_request (line 377) | def test_minimal_request(self): method test_full_request (line 389) | def test_full_request(self): method test_default_supported_transports (line 407) | def test_default_supported_transports(self): class TestUpdateVirtualServerRequest (line 415) | class TestUpdateVirtualServerRequest: method test_partial_update (line 418) | def test_partial_update(self): method test_update_all_none (line 427) | def test_update_all_none(self): method test_update_exclude_unset (line 433) | def test_update_exclude_unset(self): method test_update_with_tool_mappings (line 445) | def test_update_with_tool_mappings(self): class TestToggleVirtualServerRequest (line 460) | class TestToggleVirtualServerRequest: method test_toggle_enabled (line 463) | def test_toggle_enabled(self): method test_toggle_disabled (line 468) | def test_toggle_disabled(self): method test_toggle_requires_enabled (line 473) | def test_toggle_requires_enabled(self): class TestToolCatalogEntry (line 479) | class TestToolCatalogEntry: method test_valid_entry (line 482) | def test_valid_entry(self): method test_entry_defaults (line 498) | def test_entry_defaults(self): class TestResolvedTool (line 510) | class TestResolvedTool: method test_valid_resolved_tool (line 513) | def test_valid_resolved_tool(self): method test_resolved_tool_defaults (line 529) | def test_resolved_tool_defaults(self): method test_resolved_tool_with_alias (line 541) | def test_resolved_tool_with_alias(self): FILE: tests/unit/test_virtual_server_nginx.py function _make_vs_config (line 14) | def _make_vs_config( class TestGenerateVirtualServerBlocks (line 40) | class TestGenerateVirtualServerBlocks: method test_no_enabled_virtual_servers (line 47) | async def test_no_enabled_virtual_servers(self, mock_virtual_server_re... method test_generates_location_block (line 59) | async def test_generates_location_block(self, mock_virtual_server_repo... method test_block_includes_set_virtual_server_id (line 72) | async def test_block_includes_set_virtual_server_id(self, mock_virtual... method test_block_includes_auth_request (line 85) | async def test_block_includes_auth_request(self, mock_virtual_server_r... method test_block_includes_lua_directives (line 98) | async def test_block_includes_lua_directives(self, mock_virtual_server... method test_multiple_virtual_servers (line 113) | async def test_multiple_virtual_servers(self, mock_virtual_server_repo... class TestGenerateVirtualBackendLocations (line 128) | class TestGenerateVirtualBackendLocations: method test_no_backends (line 135) | async def test_no_backends(self, mock_server_repository): method test_generates_internal_locations (line 147) | async def test_generates_internal_locations(self, mock_server_reposito... method test_deduplicates_backends (line 164) | async def test_deduplicates_backends(self, mock_server_repository): method test_skips_missing_backends (line 184) | async def test_skips_missing_backends(self, mock_server_repository): method test_skips_backends_without_proxy_url (line 197) | async def test_skips_backends_without_proxy_url(self, mock_server_repo... class TestWriteVirtualServerMappings (line 212) | class TestWriteVirtualServerMappings: method test_writes_mapping_file (line 219) | async def test_writes_mapping_file(self, mock_server_repository): method test_mapping_contains_tools (line 249) | async def test_mapping_contains_tools(self, mock_server_repository): method test_mapping_includes_scope_overrides (line 298) | async def test_mapping_includes_scope_overrides(self, mock_server_repo... method test_mapping_includes_backend_map (line 342) | async def test_mapping_includes_backend_map(self, mock_server_reposito... class TestSanitizePathForLocation (line 382) | class TestSanitizePathForLocation: method test_sanitize_simple_path (line 385) | def test_sanitize_simple_path(self): method test_sanitize_path_with_hyphens (line 392) | def test_sanitize_path_with_hyphens(self): method test_sanitize_path_with_dots (line 399) | def test_sanitize_path_with_dots(self): FILE: tests/unit/test_virtual_server_service.py class TestHelperFunctions (line 29) | class TestHelperFunctions: method test_generate_path_from_name (line 32) | def test_generate_path_from_name(self): method test_generate_path_special_chars (line 36) | def test_generate_path_special_chars(self): method test_generate_path_multiple_spaces (line 40) | def test_generate_path_multiple_spaces(self): method test_generate_path_empty_fallback (line 44) | def test_generate_path_empty_fallback(self): method test_get_effective_tool_name_with_alias (line 48) | def test_get_effective_tool_name_with_alias(self): method test_get_effective_tool_name_without_alias (line 57) | def test_get_effective_tool_name_without_alias(self): method test_get_unique_backends (line 65) | def test_get_unique_backends(self): class TestVirtualServerServiceValidation (line 79) | class TestVirtualServerServiceValidation: method mock_vs_repo (line 83) | def mock_vs_repo(self): method mock_server_repo (line 88) | def mock_server_repo(self): method service (line 93) | def service(self, mock_vs_repo, mock_server_repo): method test_validate_unique_tool_names_no_duplicates (line 109) | async def test_validate_unique_tool_names_no_duplicates(self, service): method test_validate_unique_tool_names_duplicate_detected (line 119) | async def test_validate_unique_tool_names_duplicate_detected(self, ser... method test_validate_unique_tool_names_alias_resolves_conflict (line 129) | async def test_validate_unique_tool_names_alias_resolves_conflict(self... method test_validate_tool_mappings_missing_backend (line 143) | async def test_validate_tool_mappings_missing_backend(self, service, m... method test_validate_tool_mappings_missing_tool (line 154) | async def test_validate_tool_mappings_missing_tool(self, service, mock... method test_validate_tool_mappings_valid (line 170) | async def test_validate_tool_mappings_valid(self, service, mock_server... method test_validate_tool_mappings_version_not_found (line 186) | async def test_validate_tool_mappings_version_not_found(self, service,... class TestVirtualServerServiceCRUD (line 214) | class TestVirtualServerServiceCRUD: method mock_vs_repo (line 218) | def mock_vs_repo(self): method mock_server_repo (line 223) | def mock_server_repo(self): method service (line 228) | def service(self, mock_vs_repo, mock_server_repo): method test_create_virtual_server (line 244) | async def test_create_virtual_server(self, service, mock_vs_repo): method test_create_virtual_server_auto_generates_path (line 266) | async def test_create_virtual_server_auto_generates_path(self, service... method test_list_virtual_servers (line 282) | async def test_list_virtual_servers(self, service, mock_vs_repo): method test_get_virtual_server (line 302) | async def test_get_virtual_server(self, service, mock_vs_repo): method test_get_virtual_server_not_found (line 314) | async def test_get_virtual_server_not_found(self, service, mock_vs_repo): method test_delete_virtual_server (line 321) | async def test_delete_virtual_server(self, service, mock_vs_repo): method test_delete_virtual_server_not_found (line 337) | async def test_delete_virtual_server_not_found(self, service, mock_vs_... method test_toggle_virtual_server_enable (line 345) | async def test_toggle_virtual_server_enable(self, service, mock_vs_repo): method test_toggle_enable_with_no_tools_fails (line 366) | async def test_toggle_enable_with_no_tools_fails(self, service, mock_v... method test_toggle_virtual_server_disable (line 378) | async def test_toggle_virtual_server_disable(self, service, mock_vs_re... method test_toggle_virtual_server_not_found (line 397) | async def test_toggle_virtual_server_not_found(self, service, mock_vs_... method test_update_virtual_server_happy_path (line 405) | async def test_update_virtual_server_happy_path(self, service, mock_vs... method test_update_virtual_server_not_found (line 434) | async def test_update_virtual_server_not_found(self, service, mock_vs_... method test_update_virtual_server_with_new_tool_mappings (line 444) | async def test_update_virtual_server_with_new_tool_mappings( method test_create_virtual_server_duplicate_path (line 483) | async def test_create_virtual_server_duplicate_path(self, service, moc... method test_create_virtual_server_invalid_backend (line 496) | async def test_create_virtual_server_invalid_backend(self, service, mo... class TestToolResolution (line 515) | class TestToolResolution: method mock_vs_repo (line 519) | def mock_vs_repo(self): method mock_server_repo (line 524) | def mock_server_repo(self): method service (line 529) | def service(self, mock_vs_repo, mock_server_repo): method test_resolve_tools (line 545) | async def test_resolve_tools(self, service, mock_vs_repo, mock_server_... method test_resolve_tools_with_description_override (line 578) | async def test_resolve_tools_with_description_override( method test_resolve_tools_not_found (line 611) | async def test_resolve_tools_not_found(self, service, mock_vs_repo): method test_resolve_tools_with_scope_overrides (line 619) | async def test_resolve_tools_with_scope_overrides( class TestNginxTrigger (line 660) | class TestNginxTrigger: method mock_vs_repo (line 664) | def mock_vs_repo(self): method mock_server_repo (line 669) | def mock_server_repo(self): method service (line 674) | def service(self, mock_vs_repo, mock_server_repo): method test_create_triggers_nginx_reload (line 690) | async def test_create_triggers_nginx_reload(self, service, mock_vs_repo): method test_delete_triggers_nginx_reload (line 706) | async def test_delete_triggers_nginx_reload(self, service, mock_vs_repo): method test_toggle_triggers_nginx_reload (line 719) | async def test_toggle_triggers_nginx_reload(self, service, mock_vs_repo): method test_update_triggers_nginx_reload (line 738) | async def test_update_triggers_nginx_reload(self, service, mock_vs_repo): class TestToolCatalogService (line 759) | class TestToolCatalogService: method mock_server_repo (line 763) | def mock_server_repo(self): method catalog_service (line 768) | def catalog_service(self, mock_server_repo): method test_catalog_aggregates_from_multiple_servers (line 780) | async def test_catalog_aggregates_from_multiple_servers( method test_catalog_filters_disabled_servers (line 810) | async def test_catalog_filters_disabled_servers(self, catalog_service,... method test_catalog_filters_by_server_path (line 836) | async def test_catalog_filters_by_server_path(self, catalog_service, m... method test_catalog_skips_version_documents (line 860) | async def test_catalog_skips_version_documents(self, catalog_service, ... method test_catalog_empty_when_no_servers (line 884) | async def test_catalog_empty_when_no_servers(self, catalog_service, mo... method test_catalog_includes_available_versions (line 893) | async def test_catalog_includes_available_versions(self, catalog_servi... method test_catalog_skips_tools_without_name (line 914) | async def test_catalog_skips_tools_without_name(self, catalog_service,... method test_catalog_filters_by_user_scopes (line 934) | async def test_catalog_filters_by_user_scopes(self, catalog_service, m... method test_catalog_no_filtering_when_scopes_none (line 970) | async def test_catalog_no_filtering_when_scopes_none(self, catalog_ser... method test_catalog_empty_scopes_filters_restricted_servers (line 989) | async def test_catalog_empty_scopes_filters_restricted_servers( method test_catalog_user_with_all_scopes_sees_all (line 1016) | async def test_catalog_user_with_all_scopes_sees_all(self, catalog_ser... class TestNginxReloadFailureHandling (line 1046) | class TestNginxReloadFailureHandling: method mock_vs_repo (line 1050) | def mock_vs_repo(self): method mock_server_repo (line 1055) | def mock_server_repo(self): method service (line 1060) | def service(self, mock_vs_repo, mock_server_repo): method test_create_succeeds_when_nginx_reload_fails (line 1076) | async def test_create_succeeds_when_nginx_reload_fails( method test_trigger_nginx_reload_returns_false_on_exception (line 1105) | async def test_trigger_nginx_reload_returns_false_on_exception(self, s... method test_trigger_nginx_reload_logs_error_on_failure (line 1128) | async def test_trigger_nginx_reload_logs_error_on_failure(self, servic... method test_trigger_nginx_reload_returns_true_on_success (line 1155) | async def test_trigger_nginx_reload_returns_true_on_success(self, serv... method test_delete_succeeds_when_nginx_reload_fails (line 1177) | async def test_delete_succeeds_when_nginx_reload_fails( method test_update_succeeds_when_nginx_reload_fails (line 1201) | async def test_update_succeeds_when_nginx_reload_fails( class TestPathAutoGenerationCollision (line 1234) | class TestPathAutoGenerationCollision: method mock_vs_repo (line 1238) | def mock_vs_repo(self): method mock_server_repo (line 1243) | def mock_server_repo(self): method service (line 1248) | def service(self, mock_vs_repo, mock_server_repo): method test_auto_generated_path_collision_raises_error (line 1264) | async def test_auto_generated_path_collision_raises_error( method test_explicit_path_collision_raises_error (line 1283) | async def test_explicit_path_collision_raises_error( method test_auto_generate_path_produces_valid_slug (line 1300) | async def test_auto_generate_path_produces_valid_slug(self): class TestNginxReloadLock (line 1318) | class TestNginxReloadLock: method mock_vs_repo (line 1322) | def mock_vs_repo(self): method mock_server_repo (line 1327) | def mock_server_repo(self): method service (line 1332) | def service(self, mock_vs_repo, mock_server_repo): method test_reload_lock_exists (line 1348) | async def test_reload_lock_exists(self): method test_concurrent_reloads_are_serialized (line 1357) | async def test_concurrent_reloads_are_serialized(self, service): class TestVirtualServerRating (line 1399) | class TestVirtualServerRating: method mock_vs_repo (line 1403) | def mock_vs_repo(self): method mock_server_repo (line 1408) | def mock_server_repo(self): method service (line 1413) | def service(self, mock_vs_repo, mock_server_repo): method test_rate_virtual_server_new_rating (line 1429) | async def test_rate_virtual_server_new_rating(self, service, mock_vs_r... method test_rate_virtual_server_update_existing (line 1451) | async def test_rate_virtual_server_update_existing(self, service, mock... method test_rate_virtual_server_multiple_users (line 1472) | async def test_rate_virtual_server_multiple_users(self, service, mock_... method test_rate_virtual_server_not_found (line 1493) | async def test_rate_virtual_server_not_found(self, service, mock_vs_re... method test_rate_virtual_server_invalid_rating_low (line 1505) | async def test_rate_virtual_server_invalid_rating_low(self, service): method test_rate_virtual_server_invalid_rating_high (line 1515) | async def test_rate_virtual_server_invalid_rating_high(self, service): method test_get_virtual_server_rating (line 1525) | async def test_get_virtual_server_rating(self, service, mock_vs_repo): method test_get_virtual_server_rating_not_found (line 1542) | async def test_get_virtual_server_rating_not_found(self, service, mock... method test_get_virtual_server_rating_no_ratings (line 1550) | async def test_get_virtual_server_rating_no_ratings(self, service, moc... method test_list_virtual_servers_includes_rating (line 1563) | async def test_list_virtual_servers_includes_rating(self, service, moc... FILE: tests/unit/utils/test_credential_encryption.py class TestDeriveFernetKey (line 26) | class TestDeriveFernetKey: method test_derive_fernet_key_produces_valid_key (line 29) | def test_derive_fernet_key_produces_valid_key(self): method test_derive_fernet_key_deterministic (line 44) | def test_derive_fernet_key_deterministic(self): method test_derive_fernet_key_different_secrets_produce_different_keys (line 56) | def test_derive_fernet_key_different_secrets_produce_different_keys(se... class TestEncryptDecryptRoundtrip (line 66) | class TestEncryptDecryptRoundtrip: method test_encrypt_decrypt_roundtrip (line 70) | def test_encrypt_decrypt_roundtrip(self, mock_get_fernet): method test_encrypt_produces_different_ciphertext_each_time (line 86) | def test_encrypt_produces_different_ciphertext_each_time(self, mock_ge... class TestEncryptCredentialErrors (line 101) | class TestEncryptCredentialErrors: method test_encrypt_credential_raises_without_secret_key (line 105) | def test_encrypt_credential_raises_without_secret_key(self, mock_get_f... class TestDecryptCredentialErrors (line 115) | class TestDecryptCredentialErrors: method test_decrypt_credential_returns_none_without_secret_key (line 119) | def test_decrypt_credential_returns_none_without_secret_key(self, mock... method test_decrypt_credential_returns_none_for_invalid_token (line 131) | def test_decrypt_credential_returns_none_for_invalid_token(self, mock_... method test_decrypt_credential_returns_none_for_wrong_key (line 144) | def test_decrypt_credential_returns_none_for_wrong_key(self, mock_get_... class TestEncryptCredentialInServerDict (line 162) | class TestEncryptCredentialInServerDict: method test_encrypt_credential_in_server_dict (line 166) | def test_encrypt_credential_in_server_dict(self, mock_get_fernet): method test_encrypt_credential_in_server_dict_no_credential (line 189) | def test_encrypt_credential_in_server_dict_no_credential(self): method test_encrypt_credential_in_server_dict_empty_credential (line 206) | def test_encrypt_credential_in_server_dict_empty_credential(self): class TestStripCredentialsFromDict (line 222) | class TestStripCredentialsFromDict: method test_strip_credentials_from_dict (line 225) | def test_strip_credentials_from_dict(self): method test_strip_credentials_from_dict_no_credential_fields (line 244) | def test_strip_credentials_from_dict_no_credential_fields(self): class TestMigrateAuthTypeToAuthScheme (line 259) | class TestMigrateAuthTypeToAuthScheme: method test_migrate_auth_type_oauth (line 262) | def test_migrate_auth_type_oauth(self): method test_migrate_auth_type_api_key (line 273) | def test_migrate_auth_type_api_key(self): method test_migrate_auth_type_api_key_underscore (line 284) | def test_migrate_auth_type_api_key_underscore(self): method test_migrate_auth_type_none (line 295) | def test_migrate_auth_type_none(self): method test_migrate_auth_type_custom (line 306) | def test_migrate_auth_type_custom(self): method test_migrate_auth_type_unknown_defaults_to_none (line 317) | def test_migrate_auth_type_unknown_defaults_to_none(self): method test_migrate_no_overwrite (line 328) | def test_migrate_no_overwrite(self): method test_migrate_no_auth_type (line 342) | def test_migrate_no_auth_type(self): FILE: tests/unit/utils/test_logging_setup.py class TestSetupLogging (line 12) | class TestSetupLogging: method test_creates_console_handler (line 15) | def test_creates_console_handler(self, tmp_path): method test_creates_rotating_file_handler (line 31) | def test_creates_rotating_file_handler(self, tmp_path): method test_rotating_handler_uses_settings (line 52) | def test_rotating_handler_uses_settings(self, tmp_path): method test_default_log_file_path (line 70) | def test_default_log_file_path(self, tmp_path): method test_mongodb_handler_not_added_when_disabled (line 84) | def test_mongodb_handler_not_added_when_disabled(self, tmp_path): method test_mongodb_handler_skipped_for_file_backend (line 102) | def test_mongodb_handler_skipped_for_file_backend(self, tmp_path): method test_clears_existing_handlers (line 121) | def test_clears_existing_handlers(self, tmp_path): class TestMongoDBLogHandler (line 147) | class TestMongoDBLogHandler: method test_emit_buffers_record (line 150) | def test_emit_buffers_record(self): method test_emit_ignored_when_closed (line 192) | def test_emit_ignored_when_closed(self): method test_flush_triggers_at_buffer_size (line 229) | def test_flush_triggers_at_buffer_size(self): FILE: tests/unit/utils/test_metadata.py class TestFlattenMetadataToText (line 8) | class TestFlattenMetadataToText: method test_simple_string_values (line 11) | def test_simple_string_values(self): method test_list_values_flattened (line 20) | def test_list_values_flattened(self): method test_nested_dict_values_flattened (line 29) | def test_nested_dict_values_flattened(self): method test_empty_dict_returns_empty_string (line 37) | def test_empty_dict_returns_empty_string(self): method test_none_returns_empty_string (line 41) | def test_none_returns_empty_string(self): method test_non_dict_returns_empty_string (line 45) | def test_non_dict_returns_empty_string(self): method test_numeric_values_converted_to_string (line 49) | def test_numeric_values_converted_to_string(self): method test_boolean_values_converted_to_string (line 58) | def test_boolean_values_converted_to_string(self): method test_mixed_value_types (line 65) | def test_mixed_value_types(self): FILE: tests/unit/utils/test_mongodb_log_handler.py function mock_settings (line 14) | def mock_settings(): function handler (line 22) | def handler(mock_settings): class TestExcludedLoggers (line 50) | class TestExcludedLoggers: method test_exact_match (line 53) | def test_exact_match(self, handler): method test_child_logger_excluded (line 56) | def test_child_logger_excluded(self, handler): method test_unrelated_logger_allowed (line 59) | def test_unrelated_logger_allowed(self, handler): method test_partial_name_not_excluded (line 62) | def test_partial_name_not_excluded(self, handler): method test_default_exclusions_present (line 65) | def test_default_exclusions_present(self): method test_custom_exclusions (line 72) | def test_custom_exclusions(self, handler): class TestEmit (line 79) | class TestEmit: method test_record_buffered (line 82) | def test_record_buffered(self, handler): method test_excluded_logger_not_buffered (line 105) | def test_excluded_logger_not_buffered(self, handler): method test_closed_handler_no_buffer (line 119) | def test_closed_handler_no_buffer(self, handler): method test_buffer_flush_on_size (line 134) | def test_buffer_flush_on_size(self, handler): class TestFlush (line 155) | class TestFlush: method test_flush_empty_buffer_noop (line 158) | def test_flush_empty_buffer_noop(self, handler): method test_flush_failure_increments_counter (line 162) | def test_flush_failure_increments_counter(self, handler): class TestFlushFailureCount (line 177) | class TestFlushFailureCount: method test_initial_count_zero (line 180) | def test_initial_count_zero(self, handler): method test_count_reflects_failures (line 183) | def test_count_reflects_failures(self, handler): class TestDocumentSchema (line 188) | class TestDocumentSchema: method test_document_has_all_fields (line 191) | def test_document_has_all_fields(self, handler): method test_level_no_matches_record (line 220) | def test_level_no_matches_record(self, handler): class TestClose (line 242) | class TestClose: method test_close_flushes_remaining (line 245) | def test_close_flushes_remaining(self, handler): method test_double_close_safe (line 257) | def test_double_close_safe(self, handler): FILE: tests/unit/utils/test_okta_manager.py function _make_response (line 9) | def _make_response(json_data, status_code=200, links=None, headers=None): function _make_async_client (line 20) | def _make_async_client(**overrides): class TestOktaUserManagement (line 35) | class TestOktaUserManagement: method test_list_users_ssws_auth (line 41) | async def test_list_users_ssws_auth(self): method test_list_users_pagination (line 59) | async def test_list_users_pagination(self): method test_create_human_user_with_group_assignment (line 109) | async def test_create_human_user_with_group_assignment(self): method test_delete_user_deactivates_then_deletes (line 132) | async def test_delete_user_deactivates_then_deletes(self): method test_rate_limit_429_raises_with_retry_after (line 148) | async def test_rate_limit_429_raises_with_retry_after(self): class TestOktaGroupManagement (line 165) | class TestOktaGroupManagement: method test_list_groups_returns_all_fields (line 171) | async def test_list_groups_returns_all_fields(self): method test_create_group (line 203) | async def test_create_group(self): method test_delete_group_resolves_name_to_id (line 220) | async def test_delete_group_resolves_name_to_id(self): method test_delete_group_not_found_raises (line 239) | async def test_delete_group_not_found_raises(self): class TestOktaServiceAccount (line 256) | class TestOktaServiceAccount: method test_create_service_account (line 262) | async def test_create_service_account(self): class TestOktaUpdateOperations (line 294) | class TestOktaUpdateOperations: method test_update_user_groups (line 300) | async def test_update_user_groups(self): method test_update_group (line 332) | async def test_update_group(self): method test_update_group_not_found_raises (line 354) | async def test_update_group_not_found_raises(self): FILE: tests/unit/utils/test_request_utils.py function _make_request (line 12) | def _make_request(headers=None, client_host="127.0.0.1", client=None): class TestGetClientIp (line 24) | class TestGetClientIp: method test_returns_first_ip_from_forwarded_for (line 27) | def test_returns_first_ip_from_forwarded_for(self): method test_returns_single_forwarded_for_ip (line 34) | def test_returns_single_forwarded_for_ip(self): method test_falls_back_to_client_host_when_no_header (line 41) | def test_falls_back_to_client_host_when_no_header(self): method test_returns_unknown_when_no_client (line 46) | def test_returns_unknown_when_no_client(self): method test_rejects_malformed_forwarded_for (line 51) | def test_rejects_malformed_forwarded_for(self): method test_rejects_arbitrary_string_in_header (line 59) | def test_rejects_arbitrary_string_in_header(self): method test_handles_ipv6_address (line 67) | def test_handles_ipv6_address(self): method test_handles_whitespace_around_ip (line 74) | def test_handles_whitespace_around_ip(self): method test_empty_forwarded_for_falls_back (line 81) | def test_empty_forwarded_for_falls_back(self): FILE: tests/unit/utils/test_url_utils.py class TestExtractRepositoryUrl (line 11) | class TestExtractRepositoryUrl: method test_github_blob_url (line 14) | def test_github_blob_url(self): method test_raw_githubusercontent_url (line 25) | def test_raw_githubusercontent_url(self): method test_enterprise_github_blob_url (line 39) | def test_enterprise_github_blob_url(self): method test_enterprise_raw_url (line 50) | def test_enterprise_raw_url(self): method test_non_github_url_returns_none (line 61) | def test_non_github_url_returns_none(self): method test_empty_string_returns_none (line 72) | def test_empty_string_returns_none(self): method test_url_with_no_path_returns_none (line 83) | def test_url_with_no_path_returns_none(self): method test_url_with_only_owner_returns_none (line 94) | def test_url_with_only_owner_returns_none(self): FILE: tests/unit/utils/test_visibility.py class TestNormalizeVisibility (line 17) | class TestNormalizeVisibility: method test_internal_normalized_to_private (line 20) | def test_internal_normalized_to_private(self): method test_group_normalized_to_group_restricted (line 24) | def test_group_normalized_to_group_restricted(self): method test_public_unchanged (line 28) | def test_public_unchanged(self): method test_private_unchanged (line 32) | def test_private_unchanged(self): method test_group_restricted_unchanged (line 36) | def test_group_restricted_unchanged(self): method test_case_insensitive_internal (line 40) | def test_case_insensitive_internal(self): method test_case_insensitive_public (line 44) | def test_case_insensitive_public(self): method test_unknown_value_passed_through_lowered (line 48) | def test_unknown_value_passed_through_lowered(self): class TestValidateVisibility (line 59) | class TestValidateVisibility: method test_all_canonical_values_accepted (line 62) | def test_all_canonical_values_accepted(self): method test_internal_alias_accepted (line 67) | def test_internal_alias_accepted(self): method test_group_alias_accepted (line 71) | def test_group_alias_accepted(self): method test_case_insensitive (line 75) | def test_case_insensitive(self): method test_invalid_value_rejected (line 81) | def test_invalid_value_rejected(self): method test_empty_string_rejected (line 86) | def test_empty_string_rejected(self): method test_unknown_value_rejected (line 91) | def test_unknown_value_rejected(self): class TestValidVisibilityValues (line 103) | class TestValidVisibilityValues: method test_contains_three_values (line 106) | def test_contains_three_values(self): method test_contains_expected_values (line 110) | def test_contains_expected_values(self): method test_does_not_contain_internal (line 116) | def test_does_not_contain_internal(self):