Coverage report: 76%

Files Functions Classes

coverage.py v7.12.0, created at 2025-12-03 00:43 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
src / mcp_server_langgraph / __init__.py __getattr__   48% 116 60 0   54% 76 15   51%
src / mcp_server_langgraph / __init__.py (no function)   86% 14 2 3   100% 0 0   86%
src / mcp_server_langgraph / api / __init__.py (no function)   100% 6 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / api_keys.py create_api_key   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / api_keys.py list_api_keys   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / api_keys.py rotate_api_key   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / api_keys.py revoke_api_key   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / api_keys.py validate_api_key   100% 11 0 0   100% 4 0   100%
src / mcp_server_langgraph / api / api_keys.py (no function)   100% 42 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / auth_request_middleware.py AuthRequestMiddleware.__init__   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / auth_request_middleware.py AuthRequestMiddleware.dispatch   88% 16 2 0   100% 6 0   91%
src / mcp_server_langgraph / api / auth_request_middleware.py AuthRequestMiddleware._extract_user_from_payload   50% 14 7 0   50% 6 1   50%
src / mcp_server_langgraph / api / auth_request_middleware.py (no function)   100% 9 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / error_handlers.py register_exception_handlers   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / error_handlers.py register_exception_handlers.mcp_exception_handler   77% 13 3 0   75% 4 1   76%
src / mcp_server_langgraph / api / error_handlers.py register_exception_handlers.generic_exception_handler   0% 4 4 0   100% 0 0   0%
src / mcp_server_langgraph / api / error_handlers.py create_error_response   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / error_handlers.py (no function)   100% 8 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / gdpr.py get_user_data   92% 13 1 0   75% 4 1   88%
src / mcp_server_langgraph / api / gdpr.py export_user_data   93% 14 1 0   50% 2 1   88%
src / mcp_server_langgraph / api / gdpr.py update_user_profile   92% 13 1 0   75% 4 1   88%
src / mcp_server_langgraph / api / gdpr.py delete_user_account   81% 16 3 0   67% 6 2   77%
src / mcp_server_langgraph / api / gdpr.py update_consent   90% 21 2 0   62% 8 3   83%
src / mcp_server_langgraph / api / gdpr.py get_consent_status   61% 18 7 0   30% 10 3   50%
src / mcp_server_langgraph / api / gdpr.py (no function)   100% 46 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / health.py validate_observability_initialized   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / health.py validate_session_store_registered   82% 11 2 0   100% 4 0   87%
src / mcp_server_langgraph / api / health.py validate_api_key_cache_configured   100% 10 0 0   100% 8 0   100%
src / mcp_server_langgraph / api / health.py validate_docker_sandbox_security   67% 6 2 0   50% 4 2   60%
src / mcp_server_langgraph / api / health.py validate_database_connectivity   60% 10 4 0   0% 2 0   50%
src / mcp_server_langgraph / api / health.py validate_database_connectivity_async   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / health.py run_startup_validation   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / health.py run_startup_validation_async   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / api / health.py _process_validation_results   100% 16 0 0   100% 10 0   100%
src / mcp_server_langgraph / api / health.py health_check   100% 14 0 0   100% 8 0   100%
src / mcp_server_langgraph / api / health.py (no function)   100% 22 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / pagination.py PaginationParams.limit_page_size   0% 3 3 0   0% 2 0   0%
src / mcp_server_langgraph / api / pagination.py PaginationParams.offset   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / pagination.py PaginationParams.limit   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / pagination.py PaginationMetadata.has_next   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / api / pagination.py PaginationMetadata.has_prev   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / api / pagination.py PaginationMetadata.next_page   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / api / pagination.py PaginationMetadata.prev_page   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / api / pagination.py create_paginated_response   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / api / pagination.py (no function)   100% 40 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / scim.py scim_error   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / api / scim.py _require_admin_or_scim_role   73% 15 4 0   67% 6 2   71%
src / mcp_server_langgraph / api / scim.py create_user   0% 16 16 0   0% 4 0   0%
src / mcp_server_langgraph / api / scim.py get_user   0% 10 10 0   0% 2 0   0%
src / mcp_server_langgraph / api / scim.py replace_user   0% 14 14 0   0% 2 0   0%
src / mcp_server_langgraph / api / scim.py update_user   0% 18 18 0   0% 10 0   0%
src / mcp_server_langgraph / api / scim.py delete_user   0% 6 6 0   100% 0 0   0%
src / mcp_server_langgraph / api / scim.py list_users   88% 33 4 0   78% 18 4   84%
src / mcp_server_langgraph / api / scim.py create_group   0% 15 15 0   0% 4 0   0%
src / mcp_server_langgraph / api / scim.py get_group   0% 9 9 0   0% 2 0   0%
src / mcp_server_langgraph / api / scim.py (no function)   100% 27 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / service_principals.py _validate_user_association_permission   65% 17 6 0   88% 8 1   72%
src / mcp_server_langgraph / api / service_principals.py create_service_principal   100% 12 0 0   100% 8 0   100%
src / mcp_server_langgraph / api / service_principals.py list_service_principals   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / service_principals.py get_service_principal   100% 6 0 0   100% 4 0   100%
src / mcp_server_langgraph / api / service_principals.py rotate_service_principal_secret   100% 7 0 0   100% 4 0   100%
src / mcp_server_langgraph / api / service_principals.py delete_service_principal   100% 7 0 0   100% 4 0   100%
src / mcp_server_langgraph / api / service_principals.py associate_service_principal_with_user   100% 12 0 0   88% 8 1   95%
src / mcp_server_langgraph / api / service_principals.py (no function)   100% 44 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / version.py get_version   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / api / version.py (no function)   100% 14 0 0   100% 0 0   100%
src / mcp_server_langgraph / app.py create_app   88% 41 5 0   100% 2 0   88%
src / mcp_server_langgraph / app.py create_app.lifespan   0% 14 14 0   0% 2 0   0%
src / mcp_server_langgraph / app.py health_check   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / app.py root   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / app.py (no function)   100% 21 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / api_keys.py APIKeyManager.__init__   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / api_keys.py APIKeyManager.generate_api_key   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / api_keys.py APIKeyManager.hash_api_key   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / api_keys.py APIKeyManager.verify_api_key_hash   50% 4 2 0   100% 0 0   50%
src / mcp_server_langgraph / auth / api_keys.py APIKeyManager.create_api_key   100% 19 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / api_keys.py APIKeyManager._get_from_cache   83% 12 2 0   100% 4 0   88%
src / mcp_server_langgraph / auth / api_keys.py APIKeyManager._set_in_cache   78% 9 2 0   100% 2 0   82%
src / mcp_server_langgraph / auth / api_keys.py APIKeyManager._invalidate_cache   62% 8 3 0   50% 2 1   60%
src / mcp_server_langgraph / auth / api_keys.py APIKeyManager._hash_api_key_for_cache   100% 5 0 0   50% 2 1   86%
src / mcp_server_langgraph / auth / api_keys.py APIKeyManager.validate_and_get_user   93% 45 3 0   75% 24 6   87%
src / mcp_server_langgraph / auth / api_keys.py APIKeyManager.revoke_api_key   100% 12 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / api_keys.py APIKeyManager.list_api_keys   93% 14 1 0   83% 6 1   90%
src / mcp_server_langgraph / auth / api_keys.py APIKeyManager.rotate_api_key   89% 19 2 0   75% 8 2   85%
src / mcp_server_langgraph / auth / api_keys.py (no function)   100% 35 0 2   100% 0 0   100%
src / mcp_server_langgraph / auth / factory.py create_user_provider   100% 24 0 0   100% 12 0   100%
src / mcp_server_langgraph / auth / factory.py create_session_store   100% 16 0 0   100% 8 0   100%
src / mcp_server_langgraph / auth / factory.py create_auth_middleware   83% 12 2 0   75% 4 1   81%
src / mcp_server_langgraph / auth / factory.py (no function)   100% 10 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / hipaa.py HIPAAControls.__init__   82% 11 2 0   75% 4 1   80%
src / mcp_server_langgraph / auth / hipaa.py HIPAAControls.grant_emergency_access   90% 21 2 0   100% 0 0   90%
src / mcp_server_langgraph / auth / hipaa.py HIPAAControls.revoke_emergency_access   100% 9 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / hipaa.py HIPAAControls.check_emergency_access   100% 7 0 0   83% 6 1   92%
src / mcp_server_langgraph / auth / hipaa.py HIPAAControls.log_phi_access   100% 18 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / hipaa.py HIPAAControls.generate_checksum   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / hipaa.py HIPAAControls.verify_checksum   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / hipaa.py get_hipaa_controls   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / hipaa.py set_hipaa_controls   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / hipaa.py (no function)   100% 50 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / keycloak.py KeycloakUser.user_id   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / keycloak.py KeycloakUser.full_name   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / keycloak.py KeycloakConfig.validate_server_url   56% 9 4 0   50% 4 2   54%
src / mcp_server_langgraph / auth / keycloak.py KeycloakConfig.realm_url   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / keycloak.py KeycloakConfig.admin_url   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / keycloak.py KeycloakConfig.token_endpoint   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / keycloak.py KeycloakConfig.userinfo_endpoint   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / keycloak.py KeycloakConfig.jwks_uri   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / keycloak.py KeycloakConfig.well_known_url   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / keycloak.py TokenValidator.__init__   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / keycloak.py TokenValidator.get_jwks   100% 18 0 0   75% 4 1   95%
src / mcp_server_langgraph / auth / keycloak.py TokenValidator.verify_token   93% 42 3 0   71% 14 2   88%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.__init__   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.authenticate_user   81% 21 4 0   50% 2 1   78%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.verify_token   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.refresh_token   60% 20 8 0   50% 2 1   59%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.get_userinfo   71% 14 4 0   100% 0 0   71%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.get_admin_token   86% 21 3 0   75% 4 1   84%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.get_user_by_username   88% 25 3 0   100% 2 0   89%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient._get_user_realm_roles   100% 11 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient._get_user_client_roles   100% 20 0 0   83% 6 1   96%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient._get_user_groups   100% 11 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.create_client   82% 22 4 0   100% 0 0   82%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.create_user   64% 22 8 0   100% 0 0   64%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.update_user   79% 19 4 0   100% 0 0   79%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.set_user_password   62% 21 8 0   100% 0 0   62%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.get_user   71% 24 7 0   50% 2 1   69%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.get_user_attributes   64% 22 8 0   100% 0 0   64%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.update_user_attributes   68% 25 8 0   100% 0 0   68%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.update_client_attributes   67% 24 8 0   100% 0 0   67%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.update_client_secret   60% 20 8 0   100% 0 0   60%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.get_clients   62% 21 8 0   100% 0 0   62%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.get_client   71% 24 7 0   50% 2 1   69%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.delete_client   79% 19 4 0   100% 0 0   79%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.delete_user   58% 19 8 0   100% 0 0   58%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.search_users   68% 25 8 0   50% 2 1   67%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.get_users   62% 21 8 0   100% 0 0   62%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.create_group   81% 21 4 0   100% 0 0   81%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.get_group   71% 24 7 0   50% 2 1   69%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.get_group_members   62% 21 8 0   100% 0 0   62%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.add_user_to_group   80% 20 4 0   100% 0 0   80%
src / mcp_server_langgraph / auth / keycloak.py KeycloakClient.issue_token_for_user   81% 26 5 0   50% 4 2   77%
src / mcp_server_langgraph / auth / keycloak.py sync_user_to_openfga   60% 30 12 0   25% 16 2   48%
src / mcp_server_langgraph / auth / keycloak.py (no function)   100% 83 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / metrics.py record_login_attempt   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / metrics.py record_token_verification   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / metrics.py record_session_operation   100% 13 0 0   83% 12 2   92%
src / mcp_server_langgraph / auth / metrics.py record_jwks_operation   100% 6 0 0   83% 6 1   92%
src / mcp_server_langgraph / auth / metrics.py record_openfga_sync   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / metrics.py record_role_mapping   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / metrics.py (no function)   100% 42 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / middleware.py normalize_user_id   100% 5 0 0   100% 4 0   100%
src / mcp_server_langgraph / auth / middleware.py AuthorizationResult.to_dict   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / middleware.py AuthorizationResult.from_dict   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / auth / middleware.py AuthMiddleware.__init__   100% 12 0 0   100% 4 0   100%
src / mcp_server_langgraph / auth / middleware.py AuthMiddleware.authenticate   100% 10 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / middleware.py AuthMiddleware.authorize   93% 70 5 0   89% 28 3   92%
src / mcp_server_langgraph / auth / middleware.py AuthMiddleware._get_mock_resources   0% 3 3 0   100% 0 0   0%
src / mcp_server_langgraph / auth / middleware.py AuthMiddleware.list_accessible_resources   76% 17 4 0   75% 4 1   76%
src / mcp_server_langgraph / auth / middleware.py AuthMiddleware.create_token   50% 4 2 0   50% 2 1   50%
src / mcp_server_langgraph / auth / middleware.py AuthMiddleware.verify_token   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / middleware.py AuthMiddleware.create_session   0% 8 8 0   0% 2 0   0%
src / mcp_server_langgraph / auth / middleware.py AuthMiddleware.get_session   0% 9 9 0   0% 4 0   0%
src / mcp_server_langgraph / auth / middleware.py AuthMiddleware.refresh_session   0% 9 9 0   0% 4 0   0%
src / mcp_server_langgraph / auth / middleware.py AuthMiddleware.revoke_session   0% 9 9 0   0% 4 0   0%
src / mcp_server_langgraph / auth / middleware.py AuthMiddleware.list_user_sessions   0% 7 7 0   0% 2 0   0%
src / mcp_server_langgraph / auth / middleware.py AuthMiddleware.revoke_user_sessions   0% 7 7 0   0% 2 0   0%
src / mcp_server_langgraph / auth / middleware.py require_auth   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / middleware.py require_auth.decorator   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / middleware.py require_auth.decorator.wrapper   100% 19 0 0   90% 10 1   97%
src / mcp_server_langgraph / auth / middleware.py verify_token   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / middleware.py set_global_auth_middleware   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / middleware.py get_auth_middleware   50% 4 2 0   50% 2 1   50%
src / mcp_server_langgraph / auth / middleware.py get_current_user   96% 28 1 0   93% 14 1   95%
src / mcp_server_langgraph / auth / middleware.py get_current_user_with_auth   0% 7 7 0   0% 4 0   0%
src / mcp_server_langgraph / auth / middleware.py require_auth_dependency   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / auth / middleware.py require_auth_dependency.dependency   0% 7 7 0   0% 4 0   0%
src / mcp_server_langgraph / auth / middleware.py (no function)   96% 49 2 0   50% 2 1   94%
src / mcp_server_langgraph / auth / openfga.py OpenFGAConfig.to_dict   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / auth / openfga.py OpenFGAConfig.from_dict   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / auth / openfga.py OpenFGAClient.__init__   100% 9 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / openfga.py OpenFGAClient._ensure_initialized   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / openfga.py OpenFGAClient.client   50% 4 2 0   50% 2 1   50%
src / mcp_server_langgraph / auth / openfga.py OpenFGAClient._circuit_breaker_fallback   0% 5 5 0   0% 2 0   0%
src / mcp_server_langgraph / auth / openfga.py OpenFGAClient.check_permission   80% 25 5 0   67% 6 2   77%
src / mcp_server_langgraph / auth / openfga.py OpenFGAClient.write_tuples   100% 12 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / openfga.py OpenFGAClient.delete_tuples   100% 10 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / openfga.py OpenFGAClient.delete_tuples_for_object   0% 37 37 0   0% 12 0   0%
src / mcp_server_langgraph / auth / openfga.py OpenFGAClient.list_objects   100% 10 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / openfga.py OpenFGAClient.expand_relation   100% 8 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / openfga.py _extract_users_from_expansion   68% 31 10 0   47% 32 7   57%
src / mcp_server_langgraph / auth / openfga.py OpenFGAAuthorizationModel.get_model_definition   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / openfga.py initialize_openfga_store   100% 18 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / openfga.py seed_sample_data   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / openfga.py check_permission   86% 14 2 0   100% 8 0   91%
src / mcp_server_langgraph / auth / openfga.py (no function)   100% 41 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / role_mapper.py OpenFGATuple.to_dict   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / role_mapper.py OpenFGATuple.from_dict   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / auth / role_mapper.py ConditionConfig.validate_operator   60% 5 2 0   50% 2 1   57%
src / mcp_server_langgraph / auth / role_mapper.py MappingRule.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / role_mapper.py MappingRule.applies_to   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / auth / role_mapper.py MappingRule.generate_tuples   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / auth / role_mapper.py SimpleRoleMapping.__init__   100% 6 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / role_mapper.py SimpleRoleMapping.applies_to   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / role_mapper.py SimpleRoleMapping.generate_tuples   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / role_mapper.py GroupMapping.__init__   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / role_mapper.py GroupMapping.applies_to   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / role_mapper.py GroupMapping.generate_tuples   100% 9 0 0   100% 4 0   100%
src / mcp_server_langgraph / auth / role_mapper.py ConditionalMapping.__init__   100% 7 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / role_mapper.py ConditionalMapping.applies_to   74% 19 5 0   69% 16 3   71%
src / mcp_server_langgraph / auth / role_mapper.py ConditionalMapping.generate_tuples   100% 7 0 0   100% 4 0   100%
src / mcp_server_langgraph / auth / role_mapper.py RoleMapper.__init__   100% 8 0 0   100% 4 0   100%
src / mcp_server_langgraph / auth / role_mapper.py RoleMapper.load_from_file   54% 13 6 0   50% 2 1   53%
src / mcp_server_langgraph / auth / role_mapper.py RoleMapper.load_from_dict   100% 9 0 0   100% 6 0   100%
src / mcp_server_langgraph / auth / role_mapper.py RoleMapper._load_default_config   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / role_mapper.py RoleMapper.map_user_to_tuples   87% 15 2 0   100% 6 0   90%
src / mcp_server_langgraph / auth / role_mapper.py RoleMapper._apply_hierarchies   100% 20 0 0   88% 16 2   94%
src / mcp_server_langgraph / auth / role_mapper.py RoleMapper.add_rule   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / role_mapper.py RoleMapper.validate_config   59% 22 9 0   64% 14 1   61%
src / mcp_server_langgraph / auth / role_mapper.py (no function)   100% 63 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / service_principal.py ServicePrincipalManager.__init__   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / service_principal.py ServicePrincipalManager.create_service_principal   100% 9 0 0   100% 4 0   100%
src / mcp_server_langgraph / auth / service_principal.py ServicePrincipalManager._create_client_credentials_service   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / service_principal.py ServicePrincipalManager._create_service_account_user   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / service_principal.py ServicePrincipalManager._sync_to_openfga   100% 9 0 0   100% 8 0   100%
src / mcp_server_langgraph / auth / service_principal.py ServicePrincipalManager.associate_with_user   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / service_principal.py ServicePrincipalManager.rotate_secret   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / service_principal.py ServicePrincipalManager.list_service_principals   62% 16 6 0   62% 8 1   62%
src / mcp_server_langgraph / auth / service_principal.py ServicePrincipalManager.get_service_principal   56% 16 7 0   50% 6 3   55%
src / mcp_server_langgraph / auth / service_principal.py ServicePrincipalManager.delete_service_principal   44% 9 5 0   100% 2 0   55%
src / mcp_server_langgraph / auth / service_principal.py (no function)   100% 28 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / session.py SessionData.validate_session_id   50% 4 2 0   50% 2 1   50%
src / mcp_server_langgraph / auth / session.py SessionData.validate_user_id   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / session.py SessionData.validate_timestamp   100% 7 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / session.py SessionData.to_dict   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / session.py SessionData.from_dict   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / session.py SessionStore.create   100% 0 0 13   100% 0 0   100%
src / mcp_server_langgraph / auth / session.py SessionStore.get   100% 0 0 9   100% 0 0   100%
src / mcp_server_langgraph / auth / session.py SessionStore.update   100% 0 0 10   100% 0 0   100%
src / mcp_server_langgraph / auth / session.py SessionStore.refresh   100% 0 0 10   100% 0 0   100%
src / mcp_server_langgraph / auth / session.py SessionStore.delete   100% 0 0 9   100% 0 0   100%
src / mcp_server_langgraph / auth / session.py SessionStore.list_user_sessions   100% 0 0 9   100% 0 0   100%
src / mcp_server_langgraph / auth / session.py SessionStore.delete_user_sessions   100% 0 0 9   100% 0 0   100%
src / mcp_server_langgraph / auth / session.py SessionStore.get_inactive_sessions   100% 0 0 9   100% 0 0   100%
src / mcp_server_langgraph / auth / session.py SessionStore.delete_inactive_sessions   100% 0 0 9   100% 0 0   100%
src / mcp_server_langgraph / auth / session.py SessionStore._generate_session_id   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / session.py InMemorySessionStore.__init__   100% 6 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / session.py InMemorySessionStore.create   100% 17 0 0   100% 4 0   100%
src / mcp_server_langgraph / auth / session.py InMemorySessionStore.get   100% 12 0 0   100% 6 0   100%
src / mcp_server_langgraph / auth / session.py InMemorySessionStore.update   100% 7 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / session.py InMemorySessionStore.refresh   100% 9 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / session.py InMemorySessionStore.delete   85% 13 2 0   83% 6 1   84%
src / mcp_server_langgraph / auth / session.py InMemorySessionStore.list_user_sessions   100% 8 0 0   83% 6 1   93%
src / mcp_server_langgraph / auth / session.py InMemorySessionStore.delete_user_sessions   100% 9 0 0   83% 6 1   93%
src / mcp_server_langgraph / auth / session.py InMemorySessionStore.get_inactive_sessions   69% 13 4 0   83% 6 1   74%
src / mcp_server_langgraph / auth / session.py InMemorySessionStore.delete_inactive_sessions   100% 7 0 0   75% 4 1   91%
src / mcp_server_langgraph / auth / session.py RedisSessionStore.__init__   83% 12 2 0   75% 4 1   81%
src / mcp_server_langgraph / auth / session.py RedisSessionStore.create   95% 22 1 0   75% 4 1   92%
src / mcp_server_langgraph / auth / session.py RedisSessionStore.get   100% 15 0 0   75% 4 1   95%
src / mcp_server_langgraph / auth / session.py RedisSessionStore.update   83% 12 2 0   50% 4 2   75%
src / mcp_server_langgraph / auth / session.py RedisSessionStore.refresh   91% 11 1 0   50% 2 1   85%
src / mcp_server_langgraph / auth / session.py RedisSessionStore.delete   100% 8 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / session.py RedisSessionStore.list_user_sessions   90% 10 1 0   67% 6 2   81%
src / mcp_server_langgraph / auth / session.py RedisSessionStore.delete_user_sessions   91% 11 1 0   67% 6 2   82%
src / mcp_server_langgraph / auth / session.py RedisSessionStore.get_inactive_sessions   0% 21 21 0   0% 10 0   0%
src / mcp_server_langgraph / auth / session.py RedisSessionStore.delete_inactive_sessions   0% 7 7 0   0% 4 0   0%
src / mcp_server_langgraph / auth / session.py create_session_store   73% 15 4 0   75% 8 2   74%
src / mcp_server_langgraph / auth / session.py get_session_store   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / session.py set_session_store   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / session.py (no function)   95% 64 3 25   100% 0 0   95%
src / mcp_server_langgraph / auth / user_provider.py UserData.to_dict   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / auth / user_provider.py UserData.from_dict   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / auth / user_provider.py AuthResponse.to_dict   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / auth / user_provider.py AuthResponse.from_dict   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / auth / user_provider.py TokenVerification.to_dict   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / auth / user_provider.py TokenVerification.from_dict   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / auth / user_provider.py PasswordVerification.to_dict   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / auth / user_provider.py PasswordVerification.from_dict   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / auth / user_provider.py UserProvider.authenticate   100% 0 0 10   100% 0 0   100%
src / mcp_server_langgraph / auth / user_provider.py UserProvider.get_user_by_id   100% 0 0 9   100% 0 0   100%
src / mcp_server_langgraph / auth / user_provider.py UserProvider.get_user_by_username   100% 0 0 9   100% 0 0   100%
src / mcp_server_langgraph / auth / user_provider.py UserProvider.verify_token   100% 0 0 9   100% 0 0   100%
src / mcp_server_langgraph / auth / user_provider.py UserProvider.verify_password   100% 0 0 13   100% 0 0   100%
src / mcp_server_langgraph / auth / user_provider.py UserProvider.list_users   100% 0 0 6   100% 0 0   100%
src / mcp_server_langgraph / auth / user_provider.py InMemoryUserProvider.__init__   85% 13 2 0   83% 6 1   84%
src / mcp_server_langgraph / auth / user_provider.py InMemoryUserProvider._hash_password   67% 9 3 0   50% 4 2   62%
src / mcp_server_langgraph / auth / user_provider.py InMemoryUserProvider._verify_password   86% 7 1 0   75% 4 1   82%
src / mcp_server_langgraph / auth / user_provider.py InMemoryUserProvider.verify_password   100% 14 0 0   100% 6 0   100%
src / mcp_server_langgraph / auth / user_provider.py InMemoryUserProvider.add_user   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / user_provider.py InMemoryUserProvider.authenticate   100% 17 0 0   100% 8 0   100%
src / mcp_server_langgraph / auth / user_provider.py InMemoryUserProvider.get_user_by_id   86% 7 1 0   50% 2 1   78%
src / mcp_server_langgraph / auth / user_provider.py InMemoryUserProvider.get_user_by_username   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / user_provider.py InMemoryUserProvider.verify_token   100% 10 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / user_provider.py InMemoryUserProvider.list_users   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / user_provider.py InMemoryUserProvider.create_token   100% 10 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / user_provider.py KeycloakUserProvider.__init__   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / user_provider.py KeycloakUserProvider.authenticate   90% 21 2 0   83% 6 1   89%
src / mcp_server_langgraph / auth / user_provider.py KeycloakUserProvider.get_user_by_id   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / user_provider.py KeycloakUserProvider.get_user_by_username   100% 8 0 0   100% 2 0   100%
src / mcp_server_langgraph / auth / user_provider.py KeycloakUserProvider.verify_token   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / user_provider.py KeycloakUserProvider.verify_password   0% 16 16 0   0% 4 0   0%
src / mcp_server_langgraph / auth / user_provider.py KeycloakUserProvider.list_users   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / user_provider.py KeycloakUserProvider.refresh_token   100% 6 0 0   100% 0 0   100%
src / mcp_server_langgraph / auth / user_provider.py create_user_provider   100% 12 0 0   100% 6 0   100%
src / mcp_server_langgraph / auth / user_provider.py (no function)   98% 82 2 12   100% 0 0   98%
src / mcp_server_langgraph / builder / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / api / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / api / server.py SaveWorkflowRequest.validate_output_path   78% 18 4 0   50% 4 2   73%
src / mcp_server_langgraph / builder / api / server.py verify_builder_auth   33% 12 8 0   25% 8 2   30%
src / mcp_server_langgraph / builder / api / server.py root   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / api / server.py generate_code   100% 12 0 0   100% 4 0   100%
src / mcp_server_langgraph / builder / api / server.py validate_workflow   100% 32 0 0   100% 20 0   100%
src / mcp_server_langgraph / builder / api / server.py save_workflow   91% 11 1 0   100% 0 0   91%
src / mcp_server_langgraph / builder / api / server.py list_templates   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / api / server.py get_template   100% 12 0 0   100% 2 0   100%
src / mcp_server_langgraph / builder / api / server.py import_workflow   100% 9 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / api / server.py list_node_types   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / api / server.py (no function)   100% 49 0 16   100% 0 0   100%
src / mcp_server_langgraph / builder / codegen / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / codegen / generator.py _validate_output_path   77% 30 7 0   67% 12 4   74%
src / mcp_server_langgraph / builder / codegen / generator.py _format_with_ruff   64% 11 4 0   50% 4 2   60%
src / mcp_server_langgraph / builder / codegen / generator.py CodeGenerator.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / codegen / generator.py CodeGenerator._generate_state_fields   100% 6 0 0   100% 4 0   100%
src / mcp_server_langgraph / builder / codegen / generator.py CodeGenerator._generate_node_function   100% 12 0 0   100% 8 0   100%
src / mcp_server_langgraph / builder / codegen / generator.py CodeGenerator._generate_routing_function   100% 14 0 0   100% 6 0   100%
src / mcp_server_langgraph / builder / codegen / generator.py CodeGenerator._generate_graph_construction   100% 27 0 0   100% 14 0   100%
src / mcp_server_langgraph / builder / codegen / generator.py CodeGenerator._sanitize_workflow_name   71% 7 2 0   50% 4 2   64%
src / mcp_server_langgraph / builder / codegen / generator.py CodeGenerator.generate   100% 17 0 0   100% 6 0   100%
src / mcp_server_langgraph / builder / codegen / generator.py CodeGenerator.generate_to_file   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / codegen / generator.py (no function)   100% 36 0 10   100% 0 0   100%
src / mcp_server_langgraph / builder / importer / __init__.py (no function)   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / importer / ast_parser.py PythonCodeParser.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / importer / ast_parser.py PythonCodeParser.parse_code   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / importer / ast_parser.py PythonCodeParser.parse_file   0% 3 3 0   100% 0 0   0%
src / mcp_server_langgraph / builder / importer / ast_parser.py PythonCodeParser.find_function_calls   82% 22 4 0   72% 18 3   78%
src / mcp_server_langgraph / builder / importer / ast_parser.py PythonCodeParser.find_class_definitions   92% 13 1 0   80% 10 2   87%
src / mcp_server_langgraph / builder / importer / ast_parser.py PythonCodeParser.find_variable_assignments   86% 14 2 0   75% 12 3   81%
src / mcp_server_langgraph / builder / importer / ast_parser.py PythonCodeParser._extract_value   67% 15 5 0   64% 14 3   66%
src / mcp_server_langgraph / builder / importer / ast_parser.py PythonCodeParser.get_imports   0% 11 11 0   0% 10 0   0%
src / mcp_server_langgraph / builder / importer / ast_parser.py (no function)   100% 11 0 22   100% 0 0   100%
src / mcp_server_langgraph / builder / importer / graph_extractor.py GraphExtractor.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / importer / graph_extractor.py GraphExtractor.extract_from_code   100% 7 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / importer / graph_extractor.py GraphExtractor.extract_from_file   0% 3 3 0   100% 0 0   0%
src / mcp_server_langgraph / builder / importer / graph_extractor.py GraphExtractor._extract_workflow_name   87% 15 2 0   92% 12 1   89%
src / mcp_server_langgraph / builder / importer / graph_extractor.py GraphExtractor._extract_description   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / importer / graph_extractor.py GraphExtractor._extract_state_schema   100% 5 0 0   75% 4 1   89%
src / mcp_server_langgraph / builder / importer / graph_extractor.py GraphExtractor._extract_class_fields   100% 9 0 0   100% 8 0   100%
src / mcp_server_langgraph / builder / importer / graph_extractor.py GraphExtractor._extract_nodes   100% 9 0 0   75% 4 1   92%
src / mcp_server_langgraph / builder / importer / graph_extractor.py GraphExtractor._infer_node_type   60% 10 4 0   50% 8 4   56%
src / mcp_server_langgraph / builder / importer / graph_extractor.py GraphExtractor._extract_edges   100% 12 0 0   75% 8 2   90%
src / mcp_server_langgraph / builder / importer / graph_extractor.py GraphExtractor._extract_entry_point   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / builder / importer / graph_extractor.py (no function)   100% 15 0 20   100% 0 0   100%
src / mcp_server_langgraph / builder / importer / importer.py import_from_code   100% 6 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / importer / importer.py import_from_file   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / importer / importer.py validate_import   100% 16 0 0   100% 14 0   100%
src / mcp_server_langgraph / builder / importer / importer.py (no function)   100% 6 0 27   100% 0 0   100%
src / mcp_server_langgraph / builder / importer / layout_engine.py LayoutEngine.__init__   100% 6 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / importer / layout_engine.py LayoutEngine.layout   86% 7 1 0   83% 6 1   85%
src / mcp_server_langgraph / builder / importer / layout_engine.py LayoutEngine._hierarchical_layout   97% 37 1 0   83% 24 4   92%
src / mcp_server_langgraph / builder / importer / layout_engine.py LayoutEngine._center_nodes_in_layer   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / importer / layout_engine.py LayoutEngine._force_directed_layout   98% 46 1 0   93% 14 1   97%
src / mcp_server_langgraph / builder / importer / layout_engine.py LayoutEngine._grid_layout   100% 7 0 0   100% 2 0   100%
src / mcp_server_langgraph / builder / importer / layout_engine.py (no function)   100% 9 0 13   100% 0 0   100%
src / mcp_server_langgraph / builder / workflow.py WorkflowBuilder.__init__   100% 6 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / workflow.py WorkflowBuilder.add_node   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / builder / workflow.py WorkflowBuilder.add_edge   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / workflow.py WorkflowBuilder.set_entry_point   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / workflow.py WorkflowBuilder.add_state_field   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / workflow.py WorkflowBuilder.build   89% 18 2 0   92% 12 1   90%
src / mcp_server_langgraph / builder / workflow.py WorkflowBuilder.export_code   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / workflow.py WorkflowBuilder.save_code   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / workflow.py WorkflowBuilder.to_json   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / workflow.py WorkflowBuilder.from_json   100% 7 0 0   100% 0 0   100%
src / mcp_server_langgraph / builder / workflow.py (no function)   100% 14 0 20   100% 0 0   100%
src / mcp_server_langgraph / cli / __init__.py cli   100% 0 0 0   100% 0 0   100%
src / mcp_server_langgraph / cli / __init__.py init   0% 24 24 0   0% 6 0   0%
src / mcp_server_langgraph / cli / __init__.py create_agent   0% 16 16 0   0% 2 0   0%
src / mcp_server_langgraph / cli / __init__.py add_tool   0% 14 14 0   100% 0 0   0%
src / mcp_server_langgraph / cli / __init__.py migrate   0% 6 6 0   100% 0 0   0%
src / mcp_server_langgraph / cli / __init__.py main   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / cli / __init__.py (no function)   100% 25 0 2   100% 0 0   100%
src / mcp_server_langgraph / cli / add_tool.py generate_tool   100% 15 0 0   100% 2 0   100%
src / mcp_server_langgraph / cli / add_tool.py (no function)   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / cli / create_agent.py generate_agent   100% 18 0 0   100% 4 0   100%
src / mcp_server_langgraph / cli / create_agent.py (no function)   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / cli / init.py init_project   100% 13 0 0   100% 8 0   100%
src / mcp_server_langgraph / cli / init.py _create_quickstart_project   100% 9 0 1   100% 0 0   100%
src / mcp_server_langgraph / cli / init.py _create_production_project   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / cli / init.py _create_enterprise_project   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / cli / init.py (no function)   100% 7 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / __init__.py (no function)   100% 6 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / data_deletion.py DataDeletionService.__init__   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / data_deletion.py DataDeletionService._safe_delete   100% 8 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / data_deletion.py DataDeletionService._safe_anonymize   50% 8 4 0   100% 0 0   50%
src / mcp_server_langgraph / compliance / gdpr / data_deletion.py DataDeletionService.delete_user_account   84% 31 5 0   83% 6 1   84%
src / mcp_server_langgraph / compliance / gdpr / data_deletion.py DataDeletionService._delete_user_sessions   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / compliance / gdpr / data_deletion.py DataDeletionService._delete_user_conversations   62% 8 3 0   100% 2 0   70%
src / mcp_server_langgraph / compliance / gdpr / data_deletion.py DataDeletionService._delete_user_preferences   62% 8 3 0   100% 2 0   70%
src / mcp_server_langgraph / compliance / gdpr / data_deletion.py DataDeletionService._delete_user_authorization_tuples   0% 7 7 0   0% 2 0   0%
src / mcp_server_langgraph / compliance / gdpr / data_deletion.py DataDeletionService._anonymize_user_audit_logs   62% 8 3 0   100% 2 0   70%
src / mcp_server_langgraph / compliance / gdpr / data_deletion.py DataDeletionService._delete_user_consents   50% 8 4 0   50% 2 1   50%
src / mcp_server_langgraph / compliance / gdpr / data_deletion.py DataDeletionService._delete_user_profile   62% 8 3 0   100% 2 0   70%
src / mcp_server_langgraph / compliance / gdpr / data_deletion.py DataDeletionService._create_deletion_audit_record   85% 13 2 0   100% 2 0   87%
src / mcp_server_langgraph / compliance / gdpr / data_deletion.py (no function)   100% 28 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / data_export.py DataExportService.__init__   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / data_export.py DataExportService.export_user_data   100% 13 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / data_export.py DataExportService.export_user_data_portable   100% 14 0 0   100% 4 0   100%
src / mcp_server_langgraph / compliance / gdpr / data_export.py DataExportService._convert_to_csv   61% 49 19 0   27% 22 4   51%
src / mcp_server_langgraph / compliance / gdpr / data_export.py DataExportService._get_user_profile   60% 10 4 0   75% 4 1   64%
src / mcp_server_langgraph / compliance / gdpr / data_export.py DataExportService._get_user_sessions   88% 8 1 0   50% 2 1   80%
src / mcp_server_langgraph / compliance / gdpr / data_export.py DataExportService._get_user_conversations   62% 8 3 0   100% 2 0   70%
src / mcp_server_langgraph / compliance / gdpr / data_export.py DataExportService._get_user_preferences   60% 10 4 0   75% 4 1   64%
src / mcp_server_langgraph / compliance / gdpr / data_export.py DataExportService._get_user_audit_log   62% 8 3 0   100% 2 0   70%
src / mcp_server_langgraph / compliance / gdpr / data_export.py DataExportService._get_user_consents   62% 8 3 0   100% 2 0   70%
src / mcp_server_langgraph / compliance / gdpr / data_export.py (no function)   100% 33 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / factory.py GDPRStorage.__init__   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / factory.py create_postgres_storage   0% 3 3 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / factory.py create_memory_storage   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / factory.py create_gdpr_storage   60% 5 2 0   50% 4 2   56%
src / mcp_server_langgraph / compliance / gdpr / factory.py initialize_gdpr_storage   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / factory.py get_gdpr_storage   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / compliance / gdpr / factory.py reset_gdpr_storage   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / factory.py configure_gdpr_storage   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / factory.py get_gdpr_storage_dependency   43% 7 4 0   50% 4 2   45%
src / mcp_server_langgraph / compliance / gdpr / factory.py (no function)   100% 15 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresUserProfileStore.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresUserProfileStore.create   0% 6 6 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresUserProfileStore.get   0% 5 5 0   0% 2 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresUserProfileStore.update   85% 20 3 0   88% 8 1   86%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresUserProfileStore.delete   0% 4 4 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresPreferencesStore.__init__   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresPreferencesStore.get   0% 5 5 0   0% 2 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresPreferencesStore.set   0% 4 4 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresPreferencesStore.update   0% 5 5 0   0% 2 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresPreferencesStore.delete   0% 4 4 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresConsentStore.__init__   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresConsentStore.create   0% 3 3 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresConsentStore.get_user_consents   0% 3 3 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresConsentStore.get_latest_consent   0% 5 5 0   0% 2 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresConsentStore.delete_user_consents   0% 3 3 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresConversationStore.__init__   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresConversationStore.create   0% 3 3 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresConversationStore.get   0% 5 5 0   0% 2 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresConversationStore.list_user_conversations   0% 8 8 0   0% 2 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresConversationStore.update   0% 24 24 0   0% 10 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresConversationStore.delete   0% 4 4 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresConversationStore.delete_user_conversations   0% 3 3 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresAuditLogStore.__init__   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresAuditLogStore.log   0% 4 4 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresAuditLogStore.get   0% 5 5 0   0% 2 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresAuditLogStore.list_user_logs   0% 16 16 0   0% 4 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py PostgresAuditLogStore.anonymize_user_logs   0% 3 3 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / gdpr / postgres_storage.py (no function)   100% 37 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py UserProfileStore.create   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py UserProfileStore.get   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py UserProfileStore.update   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py UserProfileStore.delete   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py ConversationStore.create   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py ConversationStore.get   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py ConversationStore.list_user_conversations   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py ConversationStore.update   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py ConversationStore.delete   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py ConversationStore.delete_user_conversations   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py PreferencesStore.get   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py PreferencesStore.set   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py PreferencesStore.update   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py PreferencesStore.delete   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py AuditLogStore.log   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py AuditLogStore.get   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py AuditLogStore.list_user_logs   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py AuditLogStore.anonymize_user_logs   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py ConsentStore.create   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py ConsentStore.get_user_consents   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py ConsentStore.get_latest_consent   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py ConsentStore.delete_user_consents   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryUserProfileStore.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryUserProfileStore.create   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryUserProfileStore.get   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryUserProfileStore.update   88% 8 1 0   67% 6 2   79%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryUserProfileStore.delete   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryConversationStore.__init__   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryConversationStore.create   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryConversationStore.get   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryConversationStore.list_user_conversations   100% 8 0 0   100% 6 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryConversationStore.update   0% 7 7 0   0% 6 0   0%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryConversationStore.delete   86% 7 1 0   50% 4 2   73%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryConversationStore.delete_user_conversations   100% 8 0 0   83% 6 1   93%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryPreferencesStore.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryPreferencesStore.get   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryPreferencesStore.set   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryPreferencesStore.update   100% 6 0 0   100% 2 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryPreferencesStore.delete   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryAuditLogStore.__init__   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryAuditLogStore.log   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryAuditLogStore.get   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryAuditLogStore.list_user_logs   87% 15 2 0   75% 12 3   81%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryAuditLogStore.anonymize_user_logs   100% 10 0 0   83% 6 1   94%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryConsentStore.__init__   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryConsentStore.create   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryConsentStore.get_user_consents   100% 8 0 0   83% 6 1   93%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryConsentStore.get_latest_consent   83% 6 1 0   50% 2 1   75%
src / mcp_server_langgraph / compliance / gdpr / storage.py InMemoryConsentStore.delete_user_consents   100% 10 0 0   83% 6 1   94%
src / mcp_server_langgraph / compliance / gdpr / storage.py (no function)   100% 87 0 46   100% 0 0   100%
src / mcp_server_langgraph / compliance / retention.py DataRetentionService.__init__   100% 6 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / retention.py DataRetentionService._load_config   100% 11 0 0   100% 2 0   100%
src / mcp_server_langgraph / compliance / retention.py DataRetentionService._default_config   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / retention.py DataRetentionService.cleanup_sessions   100% 23 0 0   100% 4 0   100%
src / mcp_server_langgraph / compliance / retention.py DataRetentionService.cleanup_conversations   100% 15 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / retention.py DataRetentionService.cleanup_audit_logs   73% 15 4 0   100% 0 0   73%
src / mcp_server_langgraph / compliance / retention.py DataRetentionService.run_all_cleanups   91% 23 2 0   50% 8 4   81%
src / mcp_server_langgraph / compliance / retention.py DataRetentionService._cleanup_inactive_sessions   0% 6 6 0   0% 4 0   0%
src / mcp_server_langgraph / compliance / retention.py DataRetentionService._cleanup_old_conversations   0% 13 13 0   0% 4 0   0%
src / mcp_server_langgraph / compliance / retention.py DataRetentionService._cleanup_old_audit_logs   17% 18 15 0   17% 6 1   17%
src / mcp_server_langgraph / compliance / retention.py DataRetentionService.get_retention_summary   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / compliance / retention.py DataRetentionService._get_next_cleanup_time   0% 4 4 0   0% 2 0   0%
src / mcp_server_langgraph / compliance / retention.py (no function)   100% 34 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector.__init__   100% 6 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector.collect_all_evidence   100% 11 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector.collect_security_evidence   100% 8 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector.collect_availability_evidence   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector.collect_confidentiality_evidence   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector.collect_processing_integrity_evidence   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector.collect_privacy_evidence   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._collect_access_control_evidence   54% 39 18 0   42% 12 5   51%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._collect_logical_access_evidence   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._collect_audit_log_evidence   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._collect_system_monitoring_evidence   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._collect_change_management_evidence   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._collect_sla_evidence   79% 14 3 0   50% 2 1   75%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._collect_backup_evidence   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._collect_encryption_evidence   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._collect_data_access_evidence   100% 6 0 0   50% 2 1   88%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._collect_data_retention_evidence   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._collect_input_validation_evidence   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._collect_gdpr_evidence   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._collect_consent_evidence   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector.generate_compliance_report   100% 15 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._summarize_by_type   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._summarize_by_control   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._summarize_findings   100% 6 0 0   100% 2 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py EvidenceCollector._save_report   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / compliance / soc2 / evidence.py (no function)   100% 80 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / agent.py _initialize_pydantic_agent   100% 9 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / agent.py _create_checkpointer   100% 22 0 0   100% 6 0   100%
src / mcp_server_langgraph / core / agent.py create_checkpointer   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / agent.py cleanup_checkpointer   100% 9 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / agent.py _get_runnable_config   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / agent.py _fallback_routing   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / agent.py _create_agent_graph_singleton   88% 50 6 0   75% 4 1   87%
src / mcp_server_langgraph / core / agent.py _create_agent_graph_singleton.load_dynamic_context   11% 18 16 0   17% 6 1   12%
src / mcp_server_langgraph / core / agent.py _create_agent_graph_singleton.compact_context   31% 16 11 0   50% 4 2   35%
src / mcp_server_langgraph / core / agent.py _create_agent_graph_singleton.route_input   67% 21 7 0   50% 10 3   61%
src / mcp_server_langgraph / core / agent.py _create_agent_graph_singleton.use_tools   44% 16 9 0   17% 6 1   36%
src / mcp_server_langgraph / core / agent.py _create_agent_graph_singleton._execute_tools_serial   0% 24 24 0   0% 6 0   0%
src / mcp_server_langgraph / core / agent.py _create_agent_graph_singleton._execute_tools_parallel   0% 29 29 0   0% 6 0   0%
src / mcp_server_langgraph / core / agent.py _create_agent_graph_singleton._execute_tools_parallel.execute_single_tool   0% 7 7 0   0% 4 0   0%
src / mcp_server_langgraph / core / agent.py _create_agent_graph_singleton.generate_response   69% 16 5 0   50% 4 2   65%
src / mcp_server_langgraph / core / agent.py _create_agent_graph_singleton.verify_response   61% 28 11 0   33% 6 2   56%
src / mcp_server_langgraph / core / agent.py _create_agent_graph_singleton.refine_response   0% 8 8 0   100% 0 0   0%
src / mcp_server_langgraph / core / agent.py _create_agent_graph_singleton.should_continue   75% 4 1 0   50% 2 1   67%
src / mcp_server_langgraph / core / agent.py _create_agent_graph_singleton.should_verify   75% 4 1 0   50% 2 1   67%
src / mcp_server_langgraph / core / agent.py get_agent_graph   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / agent.py create_agent_graph   100% 7 0 0   100% 4 0   100%
src / mcp_server_langgraph / core / agent.py create_agent_graph_impl   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / agent.py create_agent   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / agent.py (no function)   85% 61 9 0   100% 0 0   85%
src / mcp_server_langgraph / core / cache.py _build_redis_url_with_db   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / cache.py CacheService.__init__   100% 27 0 0   100% 10 0   100%
src / mcp_server_langgraph / core / cache.py CacheService.get   100% 21 0 0   83% 6 1   96%
src / mcp_server_langgraph / core / cache.py CacheService.set   100% 12 0 0   83% 6 1   94%
src / mcp_server_langgraph / core / cache.py CacheService.delete   71% 7 2 0   100% 2 0   78%
src / mcp_server_langgraph / core / cache.py CacheService.clear   73% 11 3 0   75% 4 1   73%
src / mcp_server_langgraph / core / cache.py CacheService.get_with_lock   100% 10 0 0   100% 6 0   100%
src / mcp_server_langgraph / core / cache.py CacheService._get_ttl_from_key   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / cache.py CacheService._emit_cache_hit_metric   75% 8 2 0   100% 2 0   80%
src / mcp_server_langgraph / core / cache.py CacheService._emit_cache_miss_metric   75% 8 2 0   100% 2 0   80%
src / mcp_server_langgraph / core / cache.py CacheService._emit_cache_set_metric   75% 8 2 0   100% 2 0   80%
src / mcp_server_langgraph / core / cache.py CacheService.get_statistics   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / cache.py get_cache   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / cache.py cached   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / cache.py cached.decorator   100% 6 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / cache.py cached.decorator.async_wrapper   100% 16 0 0   100% 4 0   100%
src / mcp_server_langgraph / core / cache.py cached.decorator.sync_wrapper   85% 13 2 0   75% 4 1   82%
src / mcp_server_langgraph / core / cache.py cache_invalidate   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / cache.py create_anthropic_cached_message   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / cache.py generate_cache_key   100% 8 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / cache.py (no function)   100% 37 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / checkpoint_validator.py CheckpointConfigValidator.__init__   100% 0 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / checkpoint_validator.py CheckpointConfigValidator.validate_redis_url   100% 12 0 0   100% 8 0   100%
src / mcp_server_langgraph / core / checkpoint_validator.py CheckpointConfigValidator._validate_password_encoding   73% 22 6 0   70% 10 3   72%
src / mcp_server_langgraph / core / checkpoint_validator.py CheckpointConfigValidator._find_unencoded_chars   100% 8 0 0   88% 8 1   94%
src / mcp_server_langgraph / core / checkpoint_validator.py CheckpointConfigValidator._is_part_of_encoding   57% 7 3 0   50% 2 1   56%
src / mcp_server_langgraph / core / checkpoint_validator.py CheckpointConfigValidator._raise_encoding_error   100% 7 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / checkpoint_validator.py CheckpointConfigValidator._test_redis_connection   62% 13 5 0   100% 0 0   62%
src / mcp_server_langgraph / core / checkpoint_validator.py validate_checkpoint_config   90% 10 1 0   75% 4 1   86%
src / mcp_server_langgraph / core / checkpoint_validator.py (no function)   100% 14 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / config.py Settings.model_post_init   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / config.py Settings.parse_comma_separated_list   67% 3 1 0   50% 2 1   60%
src / mcp_server_langgraph / core / config.py Settings.validate_production_config   56% 16 7 0   57% 14 6   57%
src / mcp_server_langgraph / core / config.py Settings.get_mock_authorization_enabled   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / config.py Settings.get_cors_origins   100% 5 0 0   100% 4 0   100%
src / mcp_server_langgraph / core / config.py Settings.validate_cors_config   100% 8 0 0   100% 4 0   100%
src / mcp_server_langgraph / core / config.py Settings._validate_fallback_credentials   100% 17 0 0   93% 14 1   97%
src / mcp_server_langgraph / core / config.py Settings.load_secrets   48% 66 34 0   40% 68 21   44%
src / mcp_server_langgraph / core / config.py Settings.redis_checkpoint_url   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / config.py Settings.redis_session_url   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / config.py Settings.get_secret   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / config.py (no function)   97% 200 6 0   100% 0 0   97%
src / mcp_server_langgraph / core / container.py ContainerConfig.__post_init__   100% 6 0 0   100% 4 0   100%
src / mcp_server_langgraph / core / container.py TelemetryProvider.logger   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py TelemetryProvider.metrics   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py TelemetryProvider.tracer   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py AuthProvider.validate_token   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py AuthProvider.get_current_user   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py StorageProvider.get   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py StorageProvider.set   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py StorageProvider.delete   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py NoOpLogger.info   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py NoOpLogger.debug   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py NoOpLogger.warning   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py NoOpLogger.error   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py NoOpLogger.critical   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py NoOpMetrics.counter   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py NoOpMetrics.gauge   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py NoOpMetrics.histogram   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py NoOpTracer.start_as_current_span   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py NoOpTelemetryProvider.__init__   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / container.py NoOpTelemetryProvider.logger   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py NoOpTelemetryProvider.metrics   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py NoOpTelemetryProvider.tracer   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py NoOpAuthProvider.validate_token   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py NoOpAuthProvider.get_current_user   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py MemoryStorageProvider.__init__   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py MemoryStorageProvider.get   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py MemoryStorageProvider.set   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py MemoryStorageProvider.delete   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py ProductionTelemetryProvider.__init__   0% 4 4 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py ProductionTelemetryProvider.logger   0% 4 4 0   0% 2 0   0%
src / mcp_server_langgraph / core / container.py ProductionTelemetryProvider.metrics   0% 4 4 0   0% 2 0   0%
src / mcp_server_langgraph / core / container.py ProductionTelemetryProvider.tracer   0% 4 4 0   0% 2 0   0%
src / mcp_server_langgraph / core / container.py InMemoryAuthProvider.__init__   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py InMemoryAuthProvider.create_token   0% 4 4 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py InMemoryAuthProvider.validate_token   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py InMemoryAuthProvider.get_current_user   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py RedisStorageProvider.__init__   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py RedisStorageProvider._get_client   0% 4 4 0   0% 2 0   0%
src / mcp_server_langgraph / core / container.py RedisStorageProvider.get   0% 3 3 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py RedisStorageProvider.set   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py RedisStorageProvider.delete   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py ApplicationContainer.__init__   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / container.py ApplicationContainer.settings   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / container.py ApplicationContainer.get_telemetry   80% 5 1 0   50% 4 2   67%
src / mcp_server_langgraph / core / container.py ApplicationContainer.get_auth   57% 7 3 0   33% 6 2   46%
src / mcp_server_langgraph / core / container.py ApplicationContainer.get_storage   0% 7 7 0   0% 6 0   0%
src / mcp_server_langgraph / core / container.py create_test_container   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / container.py create_development_container   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py create_production_container   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / core / container.py (no function)   100% 87 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / context_manager.py ContextManager.__init__   100% 9 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / context_manager.py ContextManager.needs_compaction   100% 10 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / context_manager.py ContextManager.compact_conversation   100% 23 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / context_manager.py ContextManager._summarize_messages   100% 14 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / context_manager.py ContextManager.count_tokens   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / context_manager.py ContextManager._message_to_text   67% 3 1 0   50% 2 1   60%
src / mcp_server_langgraph / core / context_manager.py ContextManager._get_role_label   86% 7 1 0   83% 6 1   85%
src / mcp_server_langgraph / core / context_manager.py ContextManager.extract_key_information   100% 17 0 0   100% 14 0   100%
src / mcp_server_langgraph / core / context_manager.py ContextManager.extract_key_information_llm   100% 15 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / context_manager.py ContextManager._parse_extraction_response   100% 21 0 0   100% 18 0   100%
src / mcp_server_langgraph / core / context_manager.py compact_if_needed   100% 6 0 0   75% 4 1   90%
src / mcp_server_langgraph / core / context_manager.py (no function)   100% 23 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / dependencies.py get_keycloak_client   100% 5 0 0   50% 2 1   86%
src / mcp_server_langgraph / core / dependencies.py get_openfga_client   100% 9 0 0   75% 4 1   92%
src / mcp_server_langgraph / core / dependencies.py validate_production_auth_config   0% 11 11 0   0% 6 0   0%
src / mcp_server_langgraph / core / dependencies.py get_service_principal_manager   100% 3 0 0   50% 2 1   80%
src / mcp_server_langgraph / core / dependencies.py get_api_key_manager   76% 17 4 0   67% 6 2   74%
src / mcp_server_langgraph / core / dependencies.py reset_singleton_dependencies   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / dependencies.py (no function)   100% 17 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / dynamic_context_loader.py _create_embeddings   0% 33 33 0   0% 6 0   0%
src / mcp_server_langgraph / core / dynamic_context_loader.py DynamicContextLoader.__init__   0% 25 25 0   0% 4 0   0%
src / mcp_server_langgraph / core / dynamic_context_loader.py DynamicContextLoader._encrypt_content   0% 4 4 0   0% 2 0   0%
src / mcp_server_langgraph / core / dynamic_context_loader.py DynamicContextLoader._decrypt_content   0% 10 10 0   0% 2 0   0%
src / mcp_server_langgraph / core / dynamic_context_loader.py DynamicContextLoader._calculate_expiry_timestamp   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / core / dynamic_context_loader.py DynamicContextLoader._ensure_collection_exists   0% 10 10 0   0% 2 0   0%
src / mcp_server_langgraph / core / dynamic_context_loader.py DynamicContextLoader.index_context   0% 16 16 0   100% 0 0   0%
src / mcp_server_langgraph / core / dynamic_context_loader.py DynamicContextLoader.semantic_search   0% 24 24 0   0% 6 0   0%
src / mcp_server_langgraph / core / dynamic_context_loader.py DynamicContextLoader.progressive_discover   0% 22 22 0   0% 10 0   0%
src / mcp_server_langgraph / core / dynamic_context_loader.py DynamicContextLoader.load_context   0% 6 6 0   100% 0 0   0%
src / mcp_server_langgraph / core / dynamic_context_loader.py DynamicContextLoader._load_context_impl   0% 21 21 0   0% 4 0   0%
src / mcp_server_langgraph / core / dynamic_context_loader.py DynamicContextLoader.load_batch   0% 13 13 0   0% 4 0   0%
src / mcp_server_langgraph / core / dynamic_context_loader.py DynamicContextLoader.to_messages   0% 5 5 0   0% 2 0   0%
src / mcp_server_langgraph / core / dynamic_context_loader.py search_and_load_context   0% 5 5 0   0% 2 0   0%
src / mcp_server_langgraph / core / dynamic_context_loader.py (no function)   100% 41 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py MCPServerException.__init__   100% 10 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py MCPServerException._get_current_trace_id   71% 7 2 0   100% 2 0   78%
src / mcp_server_langgraph / core / exceptions.py MCPServerException._generate_user_message   86% 7 1 0   83% 6 1   85%
src / mcp_server_langgraph / core / exceptions.py MCPServerException.to_dict   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py MCPServerException.__str__   83% 6 1 0   50% 4 2   70%
src / mcp_server_langgraph / core / exceptions.py InvalidCredentialsError._generate_user_message   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py TokenExpiredError._generate_user_message   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py TokenInvalidError._generate_user_message   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py MFARequiredError._generate_user_message   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py PermissionDeniedError._generate_user_message   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py ResourceNotFoundError._generate_user_message   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py InsufficientPermissionsError._generate_user_message   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py RateLimitError._generate_user_message   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py QuotaExceededError._generate_user_message   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py InputValidationError._generate_user_message   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py LLMOverloadError.__init__   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py LLMOverloadError._generate_user_message   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / exceptions.py CircuitBreakerOpenError._generate_user_message   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py TimeoutError._generate_user_message   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py BulkheadRejectedError._generate_user_message   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / exceptions.py (no function)   100% 227 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / feature_flags.py FeatureFlags.is_feature_enabled   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / feature_flags.py FeatureFlags.get_feature_value   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / feature_flags.py FeatureFlags.should_use_experimental   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / feature_flags.py get_feature_flags   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / feature_flags.py is_enabled   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / feature_flags.py (no function)   100% 42 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / interrupts / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / interrupts / approval.py ApprovalRequired.set_requested_at_timestamp   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / interrupts / approval.py ApprovalResponse.set_approved_at_timestamp   100% 3 0 0   50% 2 1   80%
src / mcp_server_langgraph / core / interrupts / approval.py ApprovalNode.__init__   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / interrupts / approval.py ApprovalNode.__call__   100% 10 0 0   100% 4 0   100%
src / mcp_server_langgraph / core / interrupts / approval.py ApprovalNode._send_notification   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / interrupts / approval.py create_approval_workflow   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / interrupts / approval.py check_approval_status   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / interrupts / approval.py approve_action   100% 6 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / interrupts / approval.py reject_action   100% 7 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / interrupts / approval.py (no function)   100% 39 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / interrupts / interrupts.py InterruptHandler.__init__   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / interrupts / interrupts.py InterruptHandler.register_interrupt   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / interrupts / interrupts.py InterruptHandler.should_interrupt   100% 6 0 0   100% 6 0   100%
src / mcp_server_langgraph / core / interrupts / interrupts.py InterruptHandler.handle_interrupt   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / interrupts / interrupts.py InterruptHandler.resume   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / interrupts / interrupts.py create_interrupt_handler   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / interrupts / interrupts.py create_conditional_interrupt   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / interrupts / interrupts.py create_timeout_interrupt   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / interrupts / interrupts.py (no function)   100% 26 0 15   100% 0 0   100%
src / mcp_server_langgraph / core / parallel_executor.py ParallelToolExecutor.__init__   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / parallel_executor.py ParallelToolExecutor.execute_parallel   100% 23 0 0   100% 6 0   100%
src / mcp_server_langgraph / core / parallel_executor.py ParallelToolExecutor._execute_single   76% 17 4 0   100% 2 0   79%
src / mcp_server_langgraph / core / parallel_executor.py ParallelToolExecutor._build_dependency_graph   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / parallel_executor.py ParallelToolExecutor._topological_sort   67% 15 5 0   60% 10 2   64%
src / mcp_server_langgraph / core / parallel_executor.py ParallelToolExecutor._group_by_level   88% 17 2 0   70% 10 3   81%
src / mcp_server_langgraph / core / parallel_executor.py execute_multi_tool_request   0% 8 8 0   0% 2 0   0%
src / mcp_server_langgraph / core / parallel_executor.py execute_multi_tool_request.mock_tool_executor   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / core / parallel_executor.py (no function)   100% 28 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / prompts / __init__.py get_prompt   100% 11 0 0   100% 4 0   100%
src / mcp_server_langgraph / core / prompts / __init__.py get_prompt_version   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / prompts / __init__.py list_prompt_versions   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / prompts / __init__.py (no function)   100% 9 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / prompts / response_prompt.py (no function)   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / prompts / router_prompt.py (no function)   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / prompts / verification_prompt.py (no function)   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / security.py sanitize_for_logging   100% 8 0 0   100% 8 0   100%
src / mcp_server_langgraph / core / security.py sanitize_header_value   100% 13 0 0   100% 4 0   100%
src / mcp_server_langgraph / core / security.py (no function)   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / storage / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / storage / conversation_store.py ConversationMetadata.__post_init__   100% 2 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / storage / conversation_store.py ConversationStore.__init__   64% 14 5 0   75% 4 1   67%
src / mcp_server_langgraph / core / storage / conversation_store.py ConversationStore._redis_key   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / storage / conversation_store.py ConversationStore.record_conversation   75% 16 4 0   62% 8 3   71%
src / mcp_server_langgraph / core / storage / conversation_store.py ConversationStore.get_conversation   25% 8 6 0   25% 4 1   25%
src / mcp_server_langgraph / core / storage / conversation_store.py ConversationStore.list_user_conversations   27% 15 11 0   12% 8 1   22%
src / mcp_server_langgraph / core / storage / conversation_store.py ConversationStore.search_conversations   100% 9 0 0   100% 6 0   100%
src / mcp_server_langgraph / core / storage / conversation_store.py ConversationStore.delete_conversation   62% 8 3 0   75% 4 1   67%
src / mcp_server_langgraph / core / storage / conversation_store.py ConversationStore.get_stats   40% 5 3 0   50% 2 1   43%
src / mcp_server_langgraph / core / storage / conversation_store.py get_conversation_store   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / storage / conversation_store.py (no function)   91% 32 3 0   100% 0 0   91%
src / mcp_server_langgraph / core / test_helpers.py create_test_container   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / test_helpers.py create_test_settings   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / test_helpers.py create_test_agent   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / test_helpers.py create_test_server   100% 7 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / test_helpers.py create_mock_llm_response   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / test_helpers.py create_mock_llm_stream   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / test_helpers.py create_mock_mcp_request   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / test_helpers.py create_mock_jwt_token   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / test_helpers.py assert_valid_mcp_response   0% 4 4 0   100% 0 0   0%
src / mcp_server_langgraph / core / test_helpers.py assert_valid_agent_state   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / core / test_helpers.py (no function)   100% 17 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / time_provider.py TimeProvider.time   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / time_provider.py TimeProvider.sleep   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / time_provider.py TimeProvider.monotonic   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / time_provider.py TimeProvider.async_sleep   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / time_provider.py RealTimeProvider.time   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / time_provider.py RealTimeProvider.sleep   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / time_provider.py RealTimeProvider.monotonic   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / time_provider.py RealTimeProvider.async_sleep   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / time_provider.py VirtualClock.__init__   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / time_provider.py VirtualClock.time   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / time_provider.py VirtualClock.sleep   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / time_provider.py VirtualClock.monotonic   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / time_provider.py VirtualClock.async_sleep   100% 6 0 0   100% 2 0   100%
src / mcp_server_langgraph / core / time_provider.py VirtualClock.advance   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / time_provider.py get_default_time_provider   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / core / time_provider.py (no function)   100% 22 0 0   100% 0 0   100%
src / mcp_server_langgraph / core / url_utils.py ensure_redis_password_encoded   84% 25 4 0   83% 12 2   84%
src / mcp_server_langgraph / core / url_utils.py (no function)   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / database / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / database / models.py TokenUsageRecord.__repr__   100% 0 0 7   100% 0 0   100%
src / mcp_server_langgraph / database / models.py TokenUsageRecord.to_dict   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / database / models.py (no function)   100% 23 0 1   100% 0 0   100%
src / mcp_server_langgraph / database / session.py get_engine   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / database / session.py get_session_maker   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / database / session.py get_async_session   100% 9 0 0   100% 0 0   100%
src / mcp_server_langgraph / database / session.py init_database   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / database / session.py cleanup_database   100% 6 0 0   100% 2 0   100%
src / mcp_server_langgraph / database / session.py (no function)   100% 14 0 0   100% 0 0   100%
src / mcp_server_langgraph / execution / __init__.py (no function)   62% 16 6 0   100% 0 0   62%
src / mcp_server_langgraph / execution / code_validator.py ValidationResult.__repr__   100% 0 0 2   100% 0 0   100%
src / mcp_server_langgraph / execution / code_validator.py CodeValidator.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / execution / code_validator.py CodeValidator.validate   84% 19 3 0   100% 2 0   86%
src / mcp_server_langgraph / execution / code_validator.py SecurityVisitor.__init__   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / execution / code_validator.py SecurityVisitor.visit_Import   100% 8 0 0   100% 6 0   100%
src / mcp_server_langgraph / execution / code_validator.py SecurityVisitor.visit_ImportFrom   100% 8 0 0   67% 6 2   86%
src / mcp_server_langgraph / execution / code_validator.py SecurityVisitor.visit_Call   100% 8 0 0   100% 6 0   100%
src / mcp_server_langgraph / execution / code_validator.py SecurityVisitor.visit_Attribute   100% 6 0 0   100% 4 0   100%
src / mcp_server_langgraph / execution / code_validator.py SecurityVisitor.visit_Name   100% 6 0 0   100% 4 0   100%
src / mcp_server_langgraph / execution / code_validator.py SecurityVisitor.visit_While   100% 3 0 0   50% 2 1   80%
src / mcp_server_langgraph / execution / code_validator.py SecurityVisitor._get_call_name   100% 5 0 0   100% 4 0   100%
src / mcp_server_langgraph / execution / code_validator.py SecurityVisitor._is_blocked_module   100% 8 0 0   100% 6 0   100%
src / mcp_server_langgraph / execution / code_validator.py SecurityVisitor._check_suspicious_patterns   86% 7 1 0   88% 8 1   87%
src / mcp_server_langgraph / execution / code_validator.py (no function)   100% 25 0 1   100% 0 0   100%
src / mcp_server_langgraph / execution / docker_sandbox.py DockerSandbox.__init__   85% 13 2 0   50% 2 1   80%
src / mcp_server_langgraph / execution / docker_sandbox.py DockerSandbox._ensure_image   91% 11 1 0   100% 0 0   91%
src / mcp_server_langgraph / execution / docker_sandbox.py DockerSandbox.execute   0% 53 53 0   0% 16 0   0%
src / mcp_server_langgraph / execution / docker_sandbox.py DockerSandbox._create_container   0% 10 10 0   100% 0 0   0%
src / mcp_server_langgraph / execution / docker_sandbox.py DockerSandbox._get_network_mode   100% 7 0 0   83% 6 1   92%
src / mcp_server_langgraph / execution / docker_sandbox.py DockerSandbox._cleanup_container   37% 19 12 0   50% 2 1   38%
src / mcp_server_langgraph / execution / docker_sandbox.py DockerSandbox.__del__   60% 5 2 0   100% 2 0   71%
src / mcp_server_langgraph / execution / docker_sandbox.py (no function)   91% 23 2 4   100% 0 0   91%
src / mcp_server_langgraph / execution / kubernetes_sandbox.py KubernetesSandbox.__init__   0% 17 17 0   100% 0 0   0%
src / mcp_server_langgraph / execution / kubernetes_sandbox.py KubernetesSandbox._verify_namespace   0% 8 8 0   0% 2 0   0%
src / mcp_server_langgraph / execution / kubernetes_sandbox.py KubernetesSandbox.execute   0% 22 22 0   0% 8 0   0%
src / mcp_server_langgraph / execution / kubernetes_sandbox.py KubernetesSandbox._create_job   0% 17 17 0   100% 0 0   0%
src / mcp_server_langgraph / execution / kubernetes_sandbox.py KubernetesSandbox._wait_for_job   0% 19 19 0   0% 8 0   0%
src / mcp_server_langgraph / execution / kubernetes_sandbox.py KubernetesSandbox._get_job_logs   0% 14 14 0   0% 6 0   0%
src / mcp_server_langgraph / execution / kubernetes_sandbox.py KubernetesSandbox._cleanup_job   0% 8 8 0   0% 2 0   0%
src / mcp_server_langgraph / execution / kubernetes_sandbox.py (no function)   100% 16 0 0   100% 0 0   100%
src / mcp_server_langgraph / execution / resource_limits.py ResourceLimits.__post_init__   100% 6 0 0   100% 0 0   100%
src / mcp_server_langgraph / execution / resource_limits.py ResourceLimits._validate_timeout   100% 6 0 0   100% 4 0   100%
src / mcp_server_langgraph / execution / resource_limits.py ResourceLimits._validate_memory   100% 9 0 0   100% 6 0   100%
src / mcp_server_langgraph / execution / resource_limits.py ResourceLimits._validate_cpu   100% 6 0 0   100% 4 0   100%
src / mcp_server_langgraph / execution / resource_limits.py ResourceLimits._validate_disk   100% 6 0 0   100% 4 0   100%
src / mcp_server_langgraph / execution / resource_limits.py ResourceLimits._validate_processes   100% 6 0 0   100% 4 0   100%
src / mcp_server_langgraph / execution / resource_limits.py ResourceLimits._validate_network   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / execution / resource_limits.py ResourceLimits.to_dict   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / execution / resource_limits.py ResourceLimits.from_dict   67% 3 1 0   50% 2 1   60%
src / mcp_server_langgraph / execution / resource_limits.py ResourceLimits.is_within   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / execution / resource_limits.py ResourceLimits.development   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / execution / resource_limits.py ResourceLimits.production   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / execution / resource_limits.py ResourceLimits.testing   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / execution / resource_limits.py ResourceLimits.data_processing   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / execution / resource_limits.py (no function)   100% 32 0 0   100% 0 0   100%
src / mcp_server_langgraph / execution / sandbox.py ExecutionResult.__repr__   100% 0 0 4   100% 0 0   100%
src / mcp_server_langgraph / execution / sandbox.py Sandbox.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / execution / sandbox.py Sandbox.execute   100% 0 0 14   100% 0 0   100%
src / mcp_server_langgraph / execution / sandbox.py Sandbox._create_success_result   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / execution / sandbox.py Sandbox._create_failure_result   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / execution / sandbox.py Sandbox._measure_time   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / execution / sandbox.py (no function)   100% 20 0 3   100% 0 0   100%
src / mcp_server_langgraph / health / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / health / checks.py health_check   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / health / checks.py liveness_check   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / health / checks.py readiness_check   100% 32 0 0   100% 10 0   100%
src / mcp_server_langgraph / health / checks.py startup_check   100% 9 0 0   100% 0 0   100%
src / mcp_server_langgraph / health / checks.py prometheus_metrics   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / health / checks.py (no function)   100% 25 0 3   100% 0 0   100%
src / mcp_server_langgraph / health / database_checks.py DatabaseValidator.__init__   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / health / database_checks.py DatabaseValidator._detect_environment   100% 9 0 0   100% 6 0   100%
src / mcp_server_langgraph / health / database_checks.py DatabaseValidator.get_expected_databases   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / health / database_checks.py DatabaseValidator._check_database_exists   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / health / database_checks.py DatabaseValidator._check_table_exists   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / health / database_checks.py DatabaseValidator.validate_database   90% 29 3 0   100% 10 0   92%
src / mcp_server_langgraph / health / database_checks.py DatabaseValidator.validate   100% 15 0 0   100% 6 0   100%
src / mcp_server_langgraph / health / database_checks.py DatabaseValidationResult.is_valid   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / health / database_checks.py ValidationResult.to_dict   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / health / database_checks.py validate_database_architecture   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / health / database_checks.py (no function)   100% 43 0 0   100% 0 0   100%
src / mcp_server_langgraph / infrastructure / __init__.py (no function)   100% 0 0 0   100% 0 0   100%
src / mcp_server_langgraph / infrastructure / app_factory.py create_app   100% 16 0 0   100% 4 0   100%
src / mcp_server_langgraph / infrastructure / app_factory.py create_app.lifespan   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / infrastructure / app_factory.py create_app.health_check   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / infrastructure / app_factory.py create_lifespan   0% 23 23 0   0% 4 0   0%
src / mcp_server_langgraph / infrastructure / app_factory.py customize_openapi   88% 8 1 0   50% 2 1   80%
src / mcp_server_langgraph / infrastructure / app_factory.py (no function)   100% 14 0 0   100% 0 0   100%
src / mcp_server_langgraph / infrastructure / database.py check_database_connectivity   43% 21 12 0   0% 2 0   39%
src / mcp_server_langgraph / infrastructure / database.py create_connection_pool   0% 3 3 0   100% 0 0   0%
src / mcp_server_langgraph / infrastructure / database.py create_connection_pool._create_pool   0% 5 5 0   0% 2 0   0%
src / mcp_server_langgraph / infrastructure / database.py (no function)   100% 8 0 0   100% 0 0   100%
src / mcp_server_langgraph / infrastructure / middleware.py create_cors_middleware   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / infrastructure / middleware.py create_rate_limit_middleware   67% 3 1 0   50% 2 1   60%
src / mcp_server_langgraph / infrastructure / middleware.py create_auth_middleware   75% 4 1 0   50% 2 1   67%
src / mcp_server_langgraph / infrastructure / middleware.py (no function)   100% 8 0 0   100% 0 0   100%
src / mcp_server_langgraph / infrastructure / transport_adapters.py create_stdio_adapter   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / infrastructure / transport_adapters.py create_stdio_adapter.StdioAdapter.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / infrastructure / transport_adapters.py create_http_adapter   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / infrastructure / transport_adapters.py create_http_adapter.HttpAdapter.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / infrastructure / transport_adapters.py (no function)   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / integrations / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / integrations / alerting.py Alert.__post_init__   100% 7 0 0   50% 6 3   77%
src / mcp_server_langgraph / integrations / alerting.py Alert.to_dict   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / integrations / alerting.py AlertProvider.send_alert   100% 0 0 6   100% 0 0   100%
src / mcp_server_langgraph / integrations / alerting.py AlertProvider.close   100% 0 0 1   100% 0 0   100%
src / mcp_server_langgraph / integrations / alerting.py PagerDutyProvider.__init__   0% 4 4 0   100% 0 0   0%
src / mcp_server_langgraph / integrations / alerting.py PagerDutyProvider.send_alert   0% 9 9 0   100% 0 0   0%
src / mcp_server_langgraph / integrations / alerting.py PagerDutyProvider.close   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / integrations / alerting.py SlackProvider.__init__   0% 6 6 0   100% 0 0   0%
src / mcp_server_langgraph / integrations / alerting.py SlackProvider.send_alert   0% 18 18 0   0% 6 0   0%
src / mcp_server_langgraph / integrations / alerting.py SlackProvider.close   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / integrations / alerting.py EmailProvider.__init__   0% 5 5 0   100% 0 0   0%
src / mcp_server_langgraph / integrations / alerting.py EmailProvider.send_alert   0% 15 15 0   0% 6 0   0%
src / mcp_server_langgraph / integrations / alerting.py EmailProvider._format_email_body   0% 3 3 0   100% 0 0   0%
src / mcp_server_langgraph / integrations / alerting.py EmailProvider._send_via_sendgrid   0% 9 9 0   0% 2 0   0%
src / mcp_server_langgraph / integrations / alerting.py EmailProvider._send_via_ses   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / integrations / alerting.py EmailProvider.close   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / integrations / alerting.py AlertingService.__init__   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / integrations / alerting.py AlertingService._load_config_from_settings   64% 11 4 0   50% 8 4   58%
src / mcp_server_langgraph / integrations / alerting.py AlertingService.initialize   15% 26 22 0   14% 14 2   15%
src / mcp_server_langgraph / integrations / alerting.py AlertingService.send_alert   26% 19 14 0   20% 10 2   24%
src / mcp_server_langgraph / integrations / alerting.py AlertingService._is_duplicate   0% 5 5 0   0% 2 0   0%
src / mcp_server_langgraph / integrations / alerting.py AlertingService.get_alert_history   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / integrations / alerting.py AlertingService.get_alert_statistics   0% 8 8 0   0% 4 0   0%
src / mcp_server_langgraph / integrations / alerting.py AlertingService.close   0% 3 3 0   0% 2 0   0%
src / mcp_server_langgraph / integrations / alerting.py get_alerting_service   0% 4 4 0   0% 2 0   0%
src / mcp_server_langgraph / integrations / alerting.py send_alert   0% 3 3 0   100% 0 0   0%
src / mcp_server_langgraph / integrations / alerting.py (no function)   100% 71 0 4   100% 0 0   100%
src / mcp_server_langgraph / llm / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / llm / factory.py LLMFactory.__init__   100% 10 0 0   100% 0 0   100%
src / mcp_server_langgraph / llm / factory.py LLMFactory._get_provider_from_model   100% 16 0 0   100% 14 0   100%
src / mcp_server_langgraph / llm / factory.py LLMFactory._get_provider_kwargs   53% 15 7 0   30% 10 1   44%
src / mcp_server_langgraph / llm / factory.py LLMFactory._setup_environment   100% 16 0 0   100% 12 0   100%
src / mcp_server_langgraph / llm / factory.py LLMFactory._format_messages   100% 21 0 0   100% 16 0   100%
src / mcp_server_langgraph / llm / factory.py LLMFactory.invoke   94% 18 1 0   50% 2 1   90%
src / mcp_server_langgraph / llm / factory.py LLMFactory.ainvoke   79% 28 6 0   50% 10 5   71%
src / mcp_server_langgraph / llm / factory.py LLMFactory._try_fallback   94% 17 1 0   75% 4 1   90%
src / mcp_server_langgraph / llm / factory.py LLMFactory._try_fallback_async   71% 17 5 0   75% 4 1   71%
src / mcp_server_langgraph / llm / factory.py create_llm_from_config   75% 16 4 0   50% 10 5   65%
src / mcp_server_langgraph / llm / factory.py create_summarization_model   74% 19 5 0   58% 12 5   68%
src / mcp_server_langgraph / llm / factory.py create_verification_model   74% 19 5 0   58% 12 5   68%
src / mcp_server_langgraph / llm / factory.py (no function)   100% 26 0 0   100% 0 0   100%
src / mcp_server_langgraph / llm / pydantic_agent.py PydanticAIAgentWrapper.__init__   100% 6 0 0   100% 0 0   100%
src / mcp_server_langgraph / llm / pydantic_agent.py PydanticAIAgentWrapper._get_pydantic_model_name   100% 11 0 0   100% 8 0   100%
src / mcp_server_langgraph / llm / pydantic_agent.py PydanticAIAgentWrapper.route_message   100% 19 0 0   100% 2 0   100%
src / mcp_server_langgraph / llm / pydantic_agent.py PydanticAIAgentWrapper.generate_response   100% 20 0 0   100% 2 0   100%
src / mcp_server_langgraph / llm / pydantic_agent.py PydanticAIAgentWrapper._format_conversation   100% 8 0 0   100% 6 0   100%
src / mcp_server_langgraph / llm / pydantic_agent.py create_pydantic_agent   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / llm / pydantic_agent.py (no function)   92% 37 3 0   100% 0 0   92%
src / mcp_server_langgraph / llm / validators.py ValidatedResponse.__init__   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / llm / validators.py ValidatedResponse.is_valid   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / llm / validators.py ValidatedResponse.get_errors   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / llm / validators.py LLMValidator.validate_response   69% 39 12 0   62% 8 1   68%
src / mcp_server_langgraph / llm / validators.py LLMValidator.extract_entities   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / llm / validators.py LLMValidator.classify_intent   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / llm / validators.py LLMValidator.analyze_sentiment   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / llm / validators.py LLMValidator.extract_summary   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / llm / validators.py validate_llm_response   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / llm / validators.py (no function)   100% 38 0 0   100% 0 0   100%
src / mcp_server_langgraph / llm / verifier.py OutputVerifier.__init__   100% 7 0 0   100% 2 0   100%
src / mcp_server_langgraph / llm / verifier.py OutputVerifier.verify_response   100% 20 0 0   100% 0 0   100%
src / mcp_server_langgraph / llm / verifier.py OutputVerifier._build_verification_prompt   100% 8 0 0   100% 2 0   100%
src / mcp_server_langgraph / llm / verifier.py OutputVerifier._parse_verification_judgment   92% 52 4 0   93% 30 2   93%
src / mcp_server_langgraph / llm / verifier.py OutputVerifier._get_threshold_for_mode   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / llm / verifier.py OutputVerifier._get_role   62% 8 3 0   50% 6 1   57%
src / mcp_server_langgraph / llm / verifier.py OutputVerifier.verify_with_rules   93% 27 2 0   86% 14 2   90%
src / mcp_server_langgraph / llm / verifier.py verify_output   100% 3 0 0   50% 2 1   80%
src / mcp_server_langgraph / llm / verifier.py (no function)   100% 31 0 0   100% 0 0   100%
src / mcp_server_langgraph / mcp / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / mcp / server_stdio.py ChatInput.effective_user_id   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / mcp / server_stdio.py SearchConversationsInput.effective_user_id   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / mcp / server_stdio.py MCPAgentServer.__init__   88% 17 2 0   88% 8 1   88%
src / mcp_server_langgraph / mcp / server_stdio.py MCPAgentServer._create_openfga_client   100% 6 0 0   100% 2 0   100%
src / mcp_server_langgraph / mcp / server_stdio.py MCPAgentServer.list_tools_public   100% 6 0 0   100% 2 0   100%
src / mcp_server_langgraph / mcp / server_stdio.py MCPAgentServer.call_tool_public   0% 56 56 0   0% 26 0   0%
src / mcp_server_langgraph / mcp / server_stdio.py MCPAgentServer._setup_handlers   100% 6 0 0   100% 0 0   100%
src / mcp_server_langgraph / mcp / server_stdio.py MCPAgentServer._setup_handlers.list_tools   0% 3 3 0   100% 0 0   0%
src / mcp_server_langgraph / mcp / server_stdio.py MCPAgentServer._setup_handlers.call_tool   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / mcp / server_stdio.py MCPAgentServer._setup_handlers.list_resources   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / mcp / server_stdio.py MCPAgentServer._handle_chat   93% 58 4 0   83% 6 1   92%
src / mcp_server_langgraph / mcp / server_stdio.py MCPAgentServer._handle_get_conversation   95% 38 2 0   75% 16 2   89%
src / mcp_server_langgraph / mcp / server_stdio.py MCPAgentServer._handle_search_conversations   0% 39 39 0   0% 8 0   0%
src / mcp_server_langgraph / mcp / server_stdio.py MCPAgentServer._handle_search_tools   0% 11 11 0   100% 0 0   0%
src / mcp_server_langgraph / mcp / server_stdio.py MCPAgentServer._handle_execute_python   0% 13 13 0   100% 0 0   0%
src / mcp_server_langgraph / mcp / server_stdio.py MCPAgentServer.run   0% 3 3 0   100% 0 0   0%
src / mcp_server_langgraph / mcp / server_stdio.py main   0% 5 5 0   100% 0 0   0%
src / mcp_server_langgraph / mcp / server_stdio.py (no function)   100% 46 0 2   100% 0 0   100%
src / mcp_server_langgraph / mcp / server_streamable.py lifespan   0% 35 35 0   0% 8 0   0%
src / mcp_server_langgraph / mcp / server_streamable.py ChatInput.effective_user_id   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / mcp / server_streamable.py SearchConversationsInput.effective_user_id   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / mcp / server_streamable.py MCPAgentStreamableServer.__init__   100% 11 0 0   100% 4 0   100%
src / mcp_server_langgraph / mcp / server_streamable.py MCPAgentStreamableServer._create_openfga_client   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / mcp / server_streamable.py MCPAgentStreamableServer.list_tools_public   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / mcp / server_streamable.py MCPAgentStreamableServer.call_tool_public   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / mcp / server_streamable.py MCPAgentStreamableServer.list_resources_public   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / mcp / server_streamable.py MCPAgentStreamableServer._setup_handlers   100% 9 0 0   100% 0 0   100%
src / mcp_server_langgraph / mcp / server_streamable.py MCPAgentStreamableServer._setup_handlers.list_tools   100% 8 0 0   100% 2 0   100%
src / mcp_server_langgraph / mcp / server_streamable.py MCPAgentStreamableServer._setup_handlers.call_tool   59% 58 24 0   50% 28 10   56%
src / mcp_server_langgraph / mcp / server_streamable.py MCPAgentStreamableServer._setup_handlers.list_resources   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / mcp / server_streamable.py MCPAgentStreamableServer._handle_chat   93% 55 4 0   100% 8 0   94%
src / mcp_server_langgraph / mcp / server_streamable.py MCPAgentStreamableServer._handle_get_conversation   60% 40 16 0   50% 16 6   57%
src / mcp_server_langgraph / mcp / server_streamable.py MCPAgentStreamableServer._handle_search_conversations   93% 27 2 0   75% 8 2   89%
src / mcp_server_langgraph / mcp / server_streamable.py MCPAgentStreamableServer._handle_search_tools   100% 11 0 0   100% 0 0   100%
src / mcp_server_langgraph / mcp / server_streamable.py MCPAgentStreamableServer._handle_execute_python   100% 14 0 0   100% 0 0   100%
src / mcp_server_langgraph / mcp / server_streamable.py get_mcp_server   100% 7 0 0   75% 4 1   91%
src / mcp_server_langgraph / mcp / server_streamable.py root   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / mcp / server_streamable.py login   0% 19 19 0   0% 4 0   0%
src / mcp_server_langgraph / mcp / server_streamable.py refresh_token   0% 37 37 0   0% 12 0   0%
src / mcp_server_langgraph / mcp / server_streamable.py stream_jsonrpc_response   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / mcp / server_streamable.py handle_message   0% 52 52 0   0% 12 0   0%
src / mcp_server_langgraph / mcp / server_streamable.py list_tools   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / mcp / server_streamable.py list_resources   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / mcp / server_streamable.py custom_openapi   88% 16 2 0   67% 6 2   82%
src / mcp_server_langgraph / mcp / server_streamable.py main   0% 10 10 0   100% 0 0   0%
src / mcp_server_langgraph / mcp / server_streamable.py (no function)   97% 122 4 2   100% 0 0   97%
src / mcp_server_langgraph / mcp / streaming.py StreamedResponse.get_full_content   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / mcp / streaming.py MCPStreamingValidator.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / mcp / streaming.py MCPStreamingValidator.validate_chunk   100% 17 0 0   100% 2 0   100%
src / mcp_server_langgraph / mcp / streaming.py MCPStreamingValidator.finalize_stream   100% 17 0 0   100% 2 0   100%
src / mcp_server_langgraph / mcp / streaming.py stream_validated_response   73% 22 6 0   100% 2 0   75%
src / mcp_server_langgraph / mcp / streaming.py stream_agent_response   0% 6 6 0   0% 4 0   0%
src / mcp_server_langgraph / mcp / streaming.py get_streaming_validator   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / mcp / streaming.py (no function)   100% 25 0 0   100% 0 0   100%
src / mcp_server_langgraph / middleware / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / middleware / rate_limiter.py get_user_id_from_jwt   57% 7 3 0   100% 2 0   67%
src / mcp_server_langgraph / middleware / rate_limiter.py get_user_tier   100% 18 0 0   100% 10 0   100%
src / mcp_server_langgraph / middleware / rate_limiter.py get_rate_limit_key   100% 6 0 0   100% 4 0   100%
src / mcp_server_langgraph / middleware / rate_limiter.py get_rate_limit_for_tier   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / middleware / rate_limiter.py get_dynamic_limit   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / middleware / rate_limiter.py get_redis_storage_uri   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / middleware / rate_limiter.py custom_rate_limit_exceeded_handler   83% 12 2 0   100% 0 0   83%
src / mcp_server_langgraph / middleware / rate_limiter.py setup_rate_limiting   67% 6 2 0   100% 0 0   67%
src / mcp_server_langgraph / middleware / rate_limiter.py rate_limit_for_auth   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / middleware / rate_limiter.py rate_limit_for_llm   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / middleware / rate_limiter.py rate_limit_for_search   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / middleware / rate_limiter.py exempt_from_rate_limit   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / middleware / rate_limiter.py (no function)   100% 23 0 0   100% 0 0   100%
src / mcp_server_langgraph / middleware / session_timeout.py SessionTimeoutMiddleware.__init__   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / middleware / session_timeout.py SessionTimeoutMiddleware.dispatch   95% 21 1 0   88% 8 1   93%
src / mcp_server_langgraph / middleware / session_timeout.py SessionTimeoutMiddleware._handle_timeout   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / middleware / session_timeout.py SessionTimeoutMiddleware._decode_jwt_token   77% 13 3 0   100% 2 0   80%
src / mcp_server_langgraph / middleware / session_timeout.py SessionTimeoutMiddleware._get_session_id   100% 15 0 0   90% 10 1   96%
src / mcp_server_langgraph / middleware / session_timeout.py SessionTimeoutMiddleware._is_public_endpoint   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / middleware / session_timeout.py create_session_timeout_middleware   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / middleware / session_timeout.py (no function)   100% 18 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / __init__.py (no function)   67% 6 2 0   100% 0 0   67%
src / mcp_server_langgraph / monitoring / budget_monitor.py Budget.serialize_limit   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / budget_monitor.py Budget.serialize_thresholds   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / budget_monitor.py Budget.serialize_dates   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetStatus.serialize_decimals   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetStatus.serialize_dates   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetAlert.serialize_decimals   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetAlert.serialize_timestamp   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetMonitor.__init__   100% 13 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetMonitor.create_budget   100% 8 0 0   100% 2 0   100%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetMonitor.get_budget   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetMonitor.get_period_spend   0% 11 11 0   0% 2 0   0%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetMonitor.get_budget_status   94% 17 1 0   75% 4 1   90%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetMonitor.check_budget   95% 22 1 0   93% 14 1   94%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetMonitor._create_alert   100% 6 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetMonitor.send_alert   0% 12 12 0   0% 4 0   0%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetMonitor._send_email_alert   100% 14 0 0   100% 2 0   100%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetMonitor._send_smtp   0% 6 6 0   0% 2 0   0%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetMonitor._send_webhook_alert   100% 8 0 0   100% 2 0   100%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetMonitor._calculate_period_boundaries   100% 20 0 0   100% 10 0   100%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetMonitor._calculate_period_end   44% 9 5 0   38% 8 3   41%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetMonitor.reset_budget   100% 4 0 0   50% 2 1   83%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetMonitor.get_all_budgets   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / budget_monitor.py BudgetMonitor.get_alerts   86% 7 1 0   75% 4 1   82%
src / mcp_server_langgraph / monitoring / budget_monitor.py get_budget_monitor   0% 3 3 0   0% 2 0   0%
src / mcp_server_langgraph / monitoring / budget_monitor.py (no function)   100% 90 0 2   100% 0 0   100%
src / mcp_server_langgraph / monitoring / cost_api.py CostSummaryResponse.serialize_dates   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / cost_api.py UsageRecordResponse.serialize_timestamp   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / cost_api.py TrendDataPoint.serialize_timestamp   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / cost_api.py root   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / cost_api.py get_cost_summary   100% 17 0 0   100% 4 0   100%
src / mcp_server_langgraph / monitoring / cost_api.py get_usage_records   75% 8 2 0   50% 4 2   67%
src / mcp_server_langgraph / monitoring / cost_api.py get_budget_status   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / monitoring / cost_api.py create_budget   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / cost_api.py get_cost_trends   70% 23 7 0   50% 8 2   65%
src / mcp_server_langgraph / monitoring / cost_api.py export_cost_data   100% 15 0 0   100% 6 0   100%
src / mcp_server_langgraph / monitoring / cost_api.py health_check   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / cost_api.py (no function)   100% 68 0 17   100% 0 0   100%
src / mcp_server_langgraph / monitoring / cost_tracker.py TokenUsage.serialize_decimal   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / cost_tracker.py TokenUsage.serialize_timestamp   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / cost_tracker.py TokenUsage.__init__   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / monitoring / cost_tracker.py CostMetricsCollector.__init__   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / cost_tracker.py CostMetricsCollector.total_records   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / cost_tracker.py CostMetricsCollector.record_usage   62% 16 6 0   75% 4 1   65%
src / mcp_server_langgraph / monitoring / cost_tracker.py CostMetricsCollector._persist_to_database   0% 7 7 0   0% 2 0   0%
src / mcp_server_langgraph / monitoring / cost_tracker.py CostMetricsCollector.cleanup_old_records   32% 25 17 0   50% 2 1   33%
src / mcp_server_langgraph / monitoring / cost_tracker.py CostMetricsCollector.get_latest_record   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / cost_tracker.py CostMetricsCollector.get_records   100% 7 0 0   100% 4 0   100%
src / mcp_server_langgraph / monitoring / cost_tracker.py CostMetricsCollector.get_total_cost   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / cost_tracker.py CostAggregator.aggregate_by_model   100% 6 0 0   100% 2 0   100%
src / mcp_server_langgraph / monitoring / cost_tracker.py CostAggregator.aggregate_by_user   100% 6 0 0   100% 2 0   100%
src / mcp_server_langgraph / monitoring / cost_tracker.py CostAggregator.aggregate_by_feature   100% 6 0 0   100% 2 0   100%
src / mcp_server_langgraph / monitoring / cost_tracker.py CostAggregator.calculate_total   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / monitoring / cost_tracker.py get_cost_collector   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / monitoring / cost_tracker.py (no function)   70% 69 21 0   100% 0 0   70%
src / mcp_server_langgraph / monitoring / pricing.py calculate_cost   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / pricing.py get_all_models   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / monitoring / pricing.py get_model_pricing   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / monitoring / pricing.py estimate_cost_from_text   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / monitoring / pricing.py (no function)   100% 6 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / prometheus_client.py MetricValue.from_prometheus   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / prometheus_client.py QueryResult.get_latest_value   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / prometheus_client.py QueryResult.get_average   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / monitoring / prometheus_client.py PrometheusClient.__init__   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / prometheus_client.py PrometheusClient._load_config_from_settings   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / prometheus_client.py PrometheusClient.initialize   80% 10 2 0   100% 2 0   83%
src / mcp_server_langgraph / monitoring / prometheus_client.py PrometheusClient.close   100% 3 0 0   50% 2 1   80%
src / mcp_server_langgraph / monitoring / prometheus_client.py PrometheusClient.query   94% 17 1 0   83% 6 1   91%
src / mcp_server_langgraph / monitoring / prometheus_client.py PrometheusClient.query_range   83% 18 3 0   67% 6 2   79%
src / mcp_server_langgraph / monitoring / prometheus_client.py PrometheusClient._parse_query_result   100% 8 0 0   75% 4 1   92%
src / mcp_server_langgraph / monitoring / prometheus_client.py PrometheusClient._parse_range_result   100% 7 0 0   100% 2 0   100%
src / mcp_server_langgraph / monitoring / prometheus_client.py PrometheusClient.query_uptime   100% 12 0 0   100% 2 0   100%
src / mcp_server_langgraph / monitoring / prometheus_client.py PrometheusClient.query_downtime   100% 12 0 0   100% 6 0   100%
src / mcp_server_langgraph / monitoring / prometheus_client.py PrometheusClient.query_percentiles   81% 21 4 0   62% 8 3   76%
src / mcp_server_langgraph / monitoring / prometheus_client.py PrometheusClient.query_error_rate   100% 17 0 0   100% 4 0   100%
src / mcp_server_langgraph / monitoring / prometheus_client.py PrometheusClient.query_request_rate   0% 11 11 0   0% 2 0   0%
src / mcp_server_langgraph / monitoring / prometheus_client.py PrometheusClient.query_custom   0% 3 3 0   0% 2 0   0%
src / mcp_server_langgraph / monitoring / prometheus_client.py PrometheusClient.get_sla_metrics   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / prometheus_client.py get_prometheus_client   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / monitoring / prometheus_client.py (no function)   100% 45 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / sla.py SLAMonitor.__init__   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / sla.py SLAMonitor._default_sla_targets   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / monitoring / sla.py SLAMonitor.measure_uptime   88% 25 3 0   100% 4 0   90%
src / mcp_server_langgraph / monitoring / sla.py SLAMonitor.measure_response_time   76% 25 6 0   50% 4 2   72%
src / mcp_server_langgraph / monitoring / sla.py SLAMonitor.measure_error_rate   74% 23 6 0   50% 4 2   70%
src / mcp_server_langgraph / monitoring / sla.py SLAMonitor._determine_status   100% 11 0 0   100% 10 0   100%
src / mcp_server_langgraph / monitoring / sla.py SLAMonitor.generate_sla_report   92% 39 3 0   67% 18 4   84%
src / mcp_server_langgraph / monitoring / sla.py SLAMonitor._send_sla_alert   82% 11 2 0   100% 0 0   82%
src / mcp_server_langgraph / monitoring / sla.py get_sla_monitor   0% 3 3 0   0% 2 0   0%
src / mcp_server_langgraph / monitoring / sla.py set_sla_monitor   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / monitoring / sla.py (no function)   100% 57 0 0   100% 0 0   100%
src / mcp_server_langgraph / observability / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / observability / json_logger.py CustomJSONFormatter.__init__   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / observability / json_logger.py CustomJSONFormatter.add_fields   100% 26 0 0   100% 12 0   100%
src / mcp_server_langgraph / observability / json_logger.py CustomJSONFormatter.format   100% 10 0 0   88% 8 1   94%
src / mcp_server_langgraph / observability / json_logger.py setup_json_logging   100% 8 0 0   100% 0 0   100%
src / mcp_server_langgraph / observability / json_logger.py log_with_context   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / observability / json_logger.py (no function)   88% 16 2 2   100% 0 0   88%
src / mcp_server_langgraph / observability / langsmith.py configure_langsmith   100% 13 0 0   100% 4 0   100%
src / mcp_server_langgraph / observability / langsmith.py get_run_metadata   100% 8 0 0   100% 6 0   100%
src / mcp_server_langgraph / observability / langsmith.py get_run_tags   100% 6 0 0   100% 4 0   100%
src / mcp_server_langgraph / observability / langsmith.py LangSmithConfig.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / observability / langsmith.py LangSmithConfig.is_enabled   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / observability / langsmith.py LangSmithConfig.get_client_kwargs   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / observability / langsmith.py LangSmithConfig.create_run_config   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / observability / langsmith.py (no function)   100% 12 0 0   100% 0 0   100%
src / mcp_server_langgraph / observability / telemetry.py ObservabilityConfig.__init__   92% 12 1 0   50% 2 1   86%
src / mcp_server_langgraph / observability / telemetry.py ObservabilityConfig._setup_tracing   66% 29 10 0   40% 10 4   59%
src / mcp_server_langgraph / observability / telemetry.py ObservabilityConfig._setup_metrics   74% 23 6 0   40% 10 4   64%
src / mcp_server_langgraph / observability / telemetry.py ObservabilityConfig._create_metrics   100% 20 0 0   100% 0 0   100%
src / mcp_server_langgraph / observability / telemetry.py ObservabilityConfig._setup_logging   12% 43 38 0   17% 12 2   13%
src / mcp_server_langgraph / observability / telemetry.py ObservabilityConfig.get_tracer   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / observability / telemetry.py ObservabilityConfig.get_meter   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / observability / telemetry.py ObservabilityConfig.get_logger   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / observability / telemetry.py ObservabilityConfig._setup_langsmith   0% 14 14 0   0% 10 0   0%
src / mcp_server_langgraph / observability / telemetry.py is_initialized   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / observability / telemetry.py init_observability   100% 12 0 0   75% 4 1   94%
src / mcp_server_langgraph / observability / telemetry.py get_config   50% 4 2 0   50% 2 1   50%
src / mcp_server_langgraph / observability / telemetry.py shutdown_observability   75% 28 7 0   54% 24 11   65%
src / mcp_server_langgraph / observability / telemetry.py get_tracer   50% 4 2 0   50% 2 1   50%
src / mcp_server_langgraph / observability / telemetry.py get_meter   0% 4 4 0   0% 2 0   0%
src / mcp_server_langgraph / observability / telemetry.py get_logger   22% 9 7 0   25% 4 1   23%
src / mcp_server_langgraph / observability / telemetry.py inject_context   0% 4 4 0   0% 2 0   0%
src / mcp_server_langgraph / observability / telemetry.py extract_context   0% 4 4 0   0% 2 0   0%
src / mcp_server_langgraph / observability / telemetry.py _safe_metric_operation   71% 7 2 0   100% 2 0   78%
src / mcp_server_langgraph / observability / telemetry.py (no function)   92% 75 6 0   100% 0 0   92%
src / mcp_server_langgraph / patterns / __init__.py (no function)   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / patterns / hierarchical.py HierarchicalCoordinator.__init__   0% 5 5 0   100% 0 0   0%
src / mcp_server_langgraph / patterns / hierarchical.py HierarchicalCoordinator._ceo_node   0% 10 10 0   0% 6 0   0%
src / mcp_server_langgraph / patterns / hierarchical.py HierarchicalCoordinator._create_manager_node   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / patterns / hierarchical.py HierarchicalCoordinator._create_manager_node.manager_node   0% 18 18 0   0% 4 0   0%
src / mcp_server_langgraph / patterns / hierarchical.py HierarchicalCoordinator._consolidate_node   0% 16 16 0   0% 2 0   0%
src / mcp_server_langgraph / patterns / hierarchical.py HierarchicalCoordinator.build   0% 13 13 0   0% 6 0   0%
src / mcp_server_langgraph / patterns / hierarchical.py HierarchicalCoordinator.compile   0% 3 3 0   0% 2 0   0%
src / mcp_server_langgraph / patterns / hierarchical.py HierarchicalCoordinator.invoke   0% 4 4 0   100% 0 0   0%
src / mcp_server_langgraph / patterns / hierarchical.py ceo_agent   100% 0 0 2   100% 0 0   100%
src / mcp_server_langgraph / patterns / hierarchical.py research_manager   100% 0 0 2   100% 0 0   100%
src / mcp_server_langgraph / patterns / hierarchical.py dev_manager   100% 0 0 2   100% 0 0   100%
src / mcp_server_langgraph / patterns / hierarchical.py researcher_1   100% 0 0 2   100% 0 0   100%
src / mcp_server_langgraph / patterns / hierarchical.py researcher_2   100% 0 0 2   100% 0 0   100%
src / mcp_server_langgraph / patterns / hierarchical.py developer_1   100% 0 0 2   100% 0 0   100%
src / mcp_server_langgraph / patterns / hierarchical.py developer_2   100% 0 0 2   100% 0 0   100%
src / mcp_server_langgraph / patterns / hierarchical.py developer_3   100% 0 0 2   100% 0 0   100%
src / mcp_server_langgraph / patterns / hierarchical.py (no function)   100% 20 0 19   100% 0 0   100%
src / mcp_server_langgraph / patterns / supervisor.py Supervisor.__init__   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / patterns / supervisor.py Supervisor._default_supervisor_prompt   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / patterns / supervisor.py Supervisor._create_supervisor_node   70% 10 3 0   50% 6 3   62%
src / mcp_server_langgraph / patterns / supervisor.py Supervisor._create_worker_wrapper   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / patterns / supervisor.py Supervisor._create_worker_wrapper.worker_node   93% 15 1 0   75% 4 1   89%
src / mcp_server_langgraph / patterns / supervisor.py Supervisor._create_aggregator_node   100% 7 0 0   100% 2 0   100%
src / mcp_server_langgraph / patterns / supervisor.py Supervisor._routing_function   80% 5 1 0   75% 4 1   78%
src / mcp_server_langgraph / patterns / supervisor.py Supervisor.build   100% 12 0 0   100% 4 0   100%
src / mcp_server_langgraph / patterns / supervisor.py Supervisor.compile   100% 3 0 0   50% 2 1   80%
src / mcp_server_langgraph / patterns / supervisor.py Supervisor.invoke   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / patterns / supervisor.py research_agent   100% 0 0 2   100% 0 0   100%
src / mcp_server_langgraph / patterns / supervisor.py writer_agent   100% 0 0 2   100% 0 0   100%
src / mcp_server_langgraph / patterns / supervisor.py reviewer_agent   100% 0 0 2   100% 0 0   100%
src / mcp_server_langgraph / patterns / supervisor.py (no function)   100% 23 0 18   100% 0 0   100%
src / mcp_server_langgraph / patterns / swarm.py merge_agent_results   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / patterns / swarm.py Swarm.__init__   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / patterns / swarm.py Swarm._create_agent_wrapper   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / patterns / swarm.py Swarm._create_agent_wrapper.agent_node   100% 9 0 0   100% 0 0   100%
src / mcp_server_langgraph / patterns / swarm.py Swarm._calculate_consensus   100% 14 0 0   100% 8 0   100%
src / mcp_server_langgraph / patterns / swarm.py Swarm._aggregate_results   86% 29 4 0   75% 16 2   82%
src / mcp_server_langgraph / patterns / swarm.py Swarm.build   100% 12 0 0   100% 6 0   100%
src / mcp_server_langgraph / patterns / swarm.py Swarm.compile   100% 3 0 0   50% 2 1   80%
src / mcp_server_langgraph / patterns / swarm.py Swarm.invoke   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / patterns / swarm.py optimistic_agent   100% 0 0 2   100% 0 0   100%
src / mcp_server_langgraph / patterns / swarm.py pessimistic_agent   100% 0 0 2   100% 0 0   100%
src / mcp_server_langgraph / patterns / swarm.py neutral_agent   100% 0 0 2   100% 0 0   100%
src / mcp_server_langgraph / patterns / swarm.py (no function)   100% 20 0 17   100% 0 0   100%
src / mcp_server_langgraph / resilience / __init__.py (no function)   100% 7 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / bulkhead.py BulkheadConfig.__init__   100% 4 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / bulkhead.py BulkheadConfig.from_resilience_config   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / bulkhead.py get_bulkhead   100% 9 0 0   100% 4 0   100%
src / mcp_server_langgraph / resilience / bulkhead.py with_bulkhead   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / bulkhead.py with_bulkhead.decorator   100% 8 0 0   100% 2 0   100%
src / mcp_server_langgraph / resilience / bulkhead.py with_bulkhead.decorator.async_wrapper   76% 25 6 0   100% 2 0   78%
src / mcp_server_langgraph / resilience / bulkhead.py BulkheadContext.__init__   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / bulkhead.py BulkheadContext.__aenter__   100% 8 0 0   100% 2 0   100%
src / mcp_server_langgraph / resilience / bulkhead.py BulkheadContext.__aexit__   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / bulkhead.py get_bulkhead_stats   76% 17 4 0   100% 4 0   81%
src / mcp_server_langgraph / resilience / bulkhead.py reset_bulkhead   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / resilience / bulkhead.py reset_all_bulkheads   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / bulkhead.py (no function)   100% 26 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / circuit_breaker.py CircuitBreakerMetricsListener.__init__   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / circuit_breaker.py CircuitBreakerMetricsListener.state_change   90% 10 1 0   50% 2 1   83%
src / mcp_server_langgraph / resilience / circuit_breaker.py CircuitBreakerMetricsListener.before_call   100% 0 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / circuit_breaker.py CircuitBreakerMetricsListener.success   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / circuit_breaker.py CircuitBreakerMetricsListener.failure   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / circuit_breaker.py CircuitBreakerMetricsListener._map_state   100% 5 0 0   100% 4 0   100%
src / mcp_server_langgraph / resilience / circuit_breaker.py get_circuit_breaker   100% 11 0 0   100% 4 0   100%
src / mcp_server_langgraph / resilience / circuit_breaker.py circuit_breaker   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / circuit_breaker.py circuit_breaker.decorator   100% 13 0 0   100% 6 0   100%
src / mcp_server_langgraph / resilience / circuit_breaker.py circuit_breaker.decorator.async_wrapper   87% 54 7 0   79% 14 1   85%
src / mcp_server_langgraph / resilience / circuit_breaker.py circuit_breaker.decorator.async_wrapper._sync_wrapper   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / resilience / circuit_breaker.py circuit_breaker.decorator.sync_wrapper   100% 9 0 0   100% 2 0   100%
src / mcp_server_langgraph / resilience / circuit_breaker.py reset_circuit_breaker   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / resilience / circuit_breaker.py get_circuit_breaker_state   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / resilience / circuit_breaker.py get_all_circuit_breaker_states   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / circuit_breaker.py reset_all_circuit_breakers   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / resilience / circuit_breaker.py (no function)   100% 32 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / config.py ResilienceConfig.from_env   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / config.py get_resilience_config   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / resilience / config.py set_resilience_config   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / resilience / config.py (no function)   100% 50 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / fallback.py FallbackStrategy.get_fallback_value   0% 1 1 1   100% 0 0   0%
src / mcp_server_langgraph / resilience / fallback.py DefaultValueFallback.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / fallback.py DefaultValueFallback.get_fallback_value   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / fallback.py CachedValueFallback.__init__   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / fallback.py CachedValueFallback._default_cache_key   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / fallback.py CachedValueFallback.cache_value   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / fallback.py CachedValueFallback.get_fallback_value   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / fallback.py FunctionFallback.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / fallback.py FunctionFallback.get_fallback_value   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / fallback.py StaleDataFallback.__init__   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / fallback.py StaleDataFallback.cache_value   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / fallback.py StaleDataFallback.get_fallback_value   100% 9 0 0   75% 4 1   92%
src / mcp_server_langgraph / resilience / fallback.py with_fallback   100% 7 0 0   100% 2 0   100%
src / mcp_server_langgraph / resilience / fallback.py with_fallback.decorator   86% 7 1 0   50% 2 1   78%
src / mcp_server_langgraph / resilience / fallback.py with_fallback.decorator.async_wrapper   95% 19 1 0   88% 8 1   93%
src / mcp_server_langgraph / resilience / fallback.py with_fallback.decorator.sync_wrapper   0% 11 11 0   0% 6 0   0%
src / mcp_server_langgraph / resilience / fallback.py fail_open   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / fallback.py fail_closed   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / fallback.py return_empty_on_error   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / fallback.py return_empty_on_error.determine_empty_value   88% 8 1 0   75% 4 1   83%
src / mcp_server_langgraph / resilience / fallback.py (no function)   100% 32 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / metrics.py record_circuit_breaker_event   100% 9 0 0   88% 8 1   94%
src / mcp_server_langgraph / resilience / metrics.py record_retry_event   100% 11 0 0   90% 10 1   95%
src / mcp_server_langgraph / resilience / metrics.py record_timeout_event   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / metrics.py record_bulkhead_event   100% 7 0 0   100% 6 0   100%
src / mcp_server_langgraph / resilience / metrics.py record_fallback_event   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / resilience / metrics.py get_resilience_metrics_summary   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / metrics.py export_resilience_metrics_for_prometheus   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / metrics.py (no function)   100% 26 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / retry.py calculate_jitter_delay   100% 8 0 0   100% 6 0   100%
src / mcp_server_langgraph / resilience / retry.py parse_retry_after   100% 14 0 0   100% 4 0   100%
src / mcp_server_langgraph / resilience / retry.py extract_retry_after_from_exception   93% 14 1 0   67% 12 4   81%
src / mcp_server_langgraph / resilience / retry.py is_overload_error   86% 14 2 0   100% 6 0   90%
src / mcp_server_langgraph / resilience / retry.py should_retry_exception   76% 21 5 0   75% 16 4   76%
src / mcp_server_langgraph / resilience / retry.py log_retry_attempt   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / retry.py retry_with_backoff   100% 10 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / retry.py retry_with_backoff.decorator   86% 7 1 0   50% 2 1   78%
src / mcp_server_langgraph / resilience / retry.py retry_with_backoff.decorator.async_wrapper   87% 23 3 1   50% 8 2   77%
src / mcp_server_langgraph / resilience / retry.py retry_with_backoff.decorator.sync_wrapper   0% 13 13 1   0% 6 0   0%
src / mcp_server_langgraph / resilience / retry.py (no function)   100% 39 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / timeout.py TimeoutConfig.__init__   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / timeout.py TimeoutConfig.from_resilience_config   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / timeout.py get_timeout_for_operation   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / timeout.py with_timeout   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / timeout.py with_timeout.decorator   92% 12 1 0   83% 6 1   89%
src / mcp_server_langgraph / resilience / timeout.py with_timeout.decorator.async_wrapper   100% 12 0 0   100% 0 0   100%
src / mcp_server_langgraph / resilience / timeout.py TimeoutContext.__init__   86% 7 1 0   75% 4 1   82%
src / mcp_server_langgraph / resilience / timeout.py TimeoutContext.__aenter__   100% 4 0 0   50% 2 1   83%
src / mcp_server_langgraph / resilience / timeout.py TimeoutContext.__aexit__   58% 12 5 0   17% 6 1   44%
src / mcp_server_langgraph / resilience / timeout.py run_with_timeout   0% 2 2 0   100% 0 0   0%
src / mcp_server_langgraph / resilience / timeout.py (no function)   100% 23 0 0   100% 0 0   100%
src / mcp_server_langgraph / schedulers / __init__.py (no function)   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / schedulers / cleanup.py CleanupScheduler.__init__   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / schedulers / cleanup.py CleanupScheduler.start   100% 13 0 0   100% 2 0   100%
src / mcp_server_langgraph / schedulers / cleanup.py CleanupScheduler.stop   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / schedulers / cleanup.py CleanupScheduler._run_cleanup   100% 16 0 0   100% 4 0   100%
src / mcp_server_langgraph / schedulers / cleanup.py CleanupScheduler._send_cleanup_notification   73% 15 4 0   50% 2 1   71%
src / mcp_server_langgraph / schedulers / cleanup.py CleanupScheduler._get_next_run_time   71% 7 2 0   100% 2 0   78%
src / mcp_server_langgraph / schedulers / cleanup.py CleanupScheduler.run_now   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / schedulers / cleanup.py start_cleanup_scheduler   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / schedulers / cleanup.py stop_cleanup_scheduler   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / schedulers / cleanup.py get_cleanup_scheduler   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / schedulers / cleanup.py (no function)   100% 20 0 0   100% 0 0   100%
src / mcp_server_langgraph / schedulers / compliance.py ComplianceScheduler.__init__   100% 5 0 0   100% 0 0   100%
src / mcp_server_langgraph / schedulers / compliance.py ComplianceScheduler.start   78% 9 2 0   50% 2 1   73%
src / mcp_server_langgraph / schedulers / compliance.py ComplianceScheduler.stop   100% 4 0 0   50% 2 1   83%
src / mcp_server_langgraph / schedulers / compliance.py ComplianceScheduler.trigger_daily_check   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / schedulers / compliance.py ComplianceScheduler.trigger_weekly_review   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / schedulers / compliance.py ComplianceScheduler.trigger_monthly_report   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / schedulers / compliance.py ComplianceScheduler._run_daily_compliance_check   96% 26 1 0   75% 4 1   93%
src / mcp_server_langgraph / schedulers / compliance.py ComplianceScheduler._run_weekly_access_review   78% 32 7 0   50% 4 2   75%
src / mcp_server_langgraph / schedulers / compliance.py ComplianceScheduler._run_monthly_compliance_report   69% 16 5 0   100% 0 0   69%
src / mcp_server_langgraph / schedulers / compliance.py ComplianceScheduler._send_compliance_alert   80% 10 2 0   100% 0 0   80%
src / mcp_server_langgraph / schedulers / compliance.py ComplianceScheduler._send_access_review_notification   78% 9 2 0   100% 0 0   78%
src / mcp_server_langgraph / schedulers / compliance.py ComplianceScheduler._send_monthly_report_notification   78% 9 2 0   100% 0 0   78%
src / mcp_server_langgraph / schedulers / compliance.py start_compliance_scheduler   0% 5 5 0   0% 2 0   0%
src / mcp_server_langgraph / schedulers / compliance.py stop_compliance_scheduler   0% 3 3 0   0% 2 0   0%
src / mcp_server_langgraph / schedulers / compliance.py get_compliance_scheduler   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / schedulers / compliance.py (no function)   100% 48 0 0   100% 0 0   100%
src / mcp_server_langgraph / scim / schema.py SCIMUser.validate_schemas   50% 4 2 0   50% 2 1   50%
src / mcp_server_langgraph / scim / schema.py SCIMUser.validate_primary_email   60% 5 2 0   50% 2 1   57%
src / mcp_server_langgraph / scim / schema.py SCIMGroup.validate_schemas   0% 4 4 0   0% 2 0   0%
src / mcp_server_langgraph / scim / schema.py validate_scim_user   0% 5 5 0   100% 0 0   0%
src / mcp_server_langgraph / scim / schema.py validate_scim_group   0% 5 5 0   100% 0 0   0%
src / mcp_server_langgraph / scim / schema.py user_to_keycloak   0% 31 31 0   0% 26 0   0%
src / mcp_server_langgraph / scim / schema.py keycloak_to_scim_user   80% 15 3 0   50% 8 4   70%
src / mcp_server_langgraph / scim / schema.py (no function)   100% 112 0 0   100% 0 0   100%
src / mcp_server_langgraph / secrets / manager.py SecretString.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / secrets / manager.py SecretString.__str__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / secrets / manager.py SecretString.__repr__   100% 0 0 2   100% 0 0   100%
src / mcp_server_langgraph / secrets / manager.py SecretString.__eq__   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / secrets / manager.py SecretString.__hash__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / secrets / manager.py SecretString.get_secret_value   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / secrets / manager.py _get_logger   71% 7 2 0   100% 2 0   78%
src / mcp_server_langgraph / secrets / manager.py _get_tracer   71% 7 2 0   100% 2 0   78%
src / mcp_server_langgraph / secrets / manager.py SecretsManager.__init__   50% 20 10 0   25% 4 1   46%
src / mcp_server_langgraph / secrets / manager.py SecretsManager.__str__   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / secrets / manager.py SecretsManager.__repr__   100% 0 0 8   100% 0 0   100%
src / mcp_server_langgraph / secrets / manager.py SecretsManager.get_secret   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / secrets / manager.py SecretsManager._get_secret_impl   34% 32 21 0   38% 16 2   35%
src / mcp_server_langgraph / secrets / manager.py SecretsManager.get_all_secrets   80% 5 1 0   50% 2 1   71%
src / mcp_server_langgraph / secrets / manager.py SecretsManager._get_all_secrets_impl   20% 15 12 0   17% 6 1   19%
src / mcp_server_langgraph / secrets / manager.py SecretsManager.create_secret   25% 12 9 0   50% 2 1   29%
src / mcp_server_langgraph / secrets / manager.py SecretsManager.update_secret   25% 12 9 0   50% 2 1   29%
src / mcp_server_langgraph / secrets / manager.py SecretsManager.delete_secret   25% 12 9 0   50% 2 1   29%
src / mcp_server_langgraph / secrets / manager.py SecretsManager.invalidate_cache   0% 7 7 0   0% 4 0   0%
src / mcp_server_langgraph / secrets / manager.py get_secrets_manager   100% 3 0 0   100% 2 0   100%
src / mcp_server_langgraph / secrets / manager.py (no function)   97% 34 1 4   50% 2 1   94%
src / mcp_server_langgraph / tools / __init__.py get_all_tools   44% 9 5 0   50% 2 1   45%
src / mcp_server_langgraph / tools / __init__.py _get_code_execution_tools   29% 7 5 0   50% 2 1   33%
src / mcp_server_langgraph / tools / __init__.py get_tools   83% 12 2 0   88% 8 1   85%
src / mcp_server_langgraph / tools / __init__.py get_tool_by_name   100% 5 0 0   100% 4 0   100%
src / mcp_server_langgraph / tools / __init__.py (no function)   100% 16 0 0   100% 0 0   100%
src / mcp_server_langgraph / tools / calculator_tools.py _safe_log   60% 5 2 0   100% 0 0   60%
src / mcp_server_langgraph / tools / calculator_tools.py _safe_metric   60% 5 2 0   100% 0 0   60%
src / mcp_server_langgraph / tools / calculator_tools.py _safe_eval   100% 8 0 0   100% 0 0   100%
src / mcp_server_langgraph / tools / calculator_tools.py _safe_eval._eval   58% 19 8 0   67% 12 4   61%
src / mcp_server_langgraph / tools / calculator_tools.py calculator   100% 10 0 0   100% 0 0   100%
src / mcp_server_langgraph / tools / calculator_tools.py add   62% 8 3 0   100% 0 0   62%
src / mcp_server_langgraph / tools / calculator_tools.py subtract   62% 8 3 0   100% 0 0   62%
src / mcp_server_langgraph / tools / calculator_tools.py multiply   62% 8 3 0   100% 0 0   62%
src / mcp_server_langgraph / tools / calculator_tools.py divide   70% 10 3 0   100% 2 0   75%
src / mcp_server_langgraph / tools / calculator_tools.py (no function)   100% 19 0 0   100% 0 0   100%
src / mcp_server_langgraph / tools / code_execution_tools.py _is_execution_enabled   0% 1 1 0   100% 0 0   0%
src / mcp_server_langgraph / tools / code_execution_tools.py _get_sandbox   0% 8 8 0   0% 4 0   0%
src / mcp_server_langgraph / tools / code_execution_tools.py _truncate_output   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / tools / code_execution_tools.py execute_python   68% 40 13 0   67% 18 4   67%
src / mcp_server_langgraph / tools / code_execution_tools.py (no function)   100% 15 0 0   100% 0 0   100%
src / mcp_server_langgraph / tools / filesystem_tools.py _is_safe_path   82% 11 2 0   100% 4 0   87%
src / mcp_server_langgraph / tools / filesystem_tools.py read_file   84% 32 5 0   93% 14 1   87%
src / mcp_server_langgraph / tools / filesystem_tools.py list_directory   76% 37 9 0   81% 16 1   77%
src / mcp_server_langgraph / tools / filesystem_tools.py search_files   72% 36 10 0   60% 20 6   68%
src / mcp_server_langgraph / tools / filesystem_tools.py (no function)   100% 14 0 0   100% 0 0   100%
src / mcp_server_langgraph / tools / search_tools.py search_knowledge_base   78% 18 4 0   100% 2 0   80%
src / mcp_server_langgraph / tools / search_tools.py web_search   91% 43 4 0   100% 8 0   92%
src / mcp_server_langgraph / tools / search_tools.py (no function)   100% 11 0 0   100% 0 0   100%
src / mcp_server_langgraph / tools / tool_discovery.py _filter_tools_by_category   100% 14 0 0   100% 8 0   100%
src / mcp_server_langgraph / tools / tool_discovery.py _filter_tools_by_query   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / tools / tool_discovery.py _format_tool_minimal   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / tools / tool_discovery.py _format_tool_standard   100% 11 0 0   83% 6 1   94%
src / mcp_server_langgraph / tools / tool_discovery.py _format_tool_full   100% 15 0 0   83% 6 1   95%
src / mcp_server_langgraph / tools / tool_discovery.py _format_tool_results   100% 10 0 0   100% 10 0   100%
src / mcp_server_langgraph / tools / tool_discovery.py search_tools   100% 6 0 0   100% 4 0   100%
src / mcp_server_langgraph / tools / tool_discovery.py (no function)   100% 20 0 0   100% 0 0   100%
src / mcp_server_langgraph / utils / __init__.py (no function)   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / utils / response_optimizer.py ResponseOptimizer.__init__   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / utils / response_optimizer.py ResponseOptimizer.count_tokens   62% 8 3 0   100% 2 0   70%
src / mcp_server_langgraph / utils / response_optimizer.py ResponseOptimizer.truncate_response   82% 17 3 0   75% 8 2   80%
src / mcp_server_langgraph / utils / response_optimizer.py ResponseOptimizer.format_response   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / utils / response_optimizer.py ResponseOptimizer.extract_high_signal   100% 5 0 0   100% 2 0   100%
src / mcp_server_langgraph / utils / response_optimizer.py count_tokens   100% 4 0 0   100% 2 0   100%
src / mcp_server_langgraph / utils / response_optimizer.py truncate_response   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / utils / response_optimizer.py format_response   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / utils / response_optimizer.py extract_high_signal   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / utils / response_optimizer.py (no function)   100% 17 0 0   100% 0 0   100%
src / mcp_server_langgraph / utils / retry.py retry_with_backoff   88% 33 4 0   75% 16 2   84%
src / mcp_server_langgraph / utils / retry.py async_retry   100% 3 0 0   100% 0 0   100%
src / mcp_server_langgraph / utils / retry.py async_retry.decorator   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / utils / retry.py async_retry.decorator.wrapper   100% 2 0 0   100% 0 0   100%
src / mcp_server_langgraph / utils / retry.py async_retry.decorator.wrapper._call   100% 1 0 0   100% 0 0   100%
src / mcp_server_langgraph / utils / retry.py (no function)   100% 9 0 0   100% 0 0   100%
Total     78% 14729 3233 575   66% 3518 502   76%

No items found using the specified filter.