omnibase_infra 0.2.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- omnibase_infra/__init__.py +101 -0
- omnibase_infra/adapters/adapter_onex_tool_execution.py +451 -0
- omnibase_infra/capabilities/__init__.py +15 -0
- omnibase_infra/capabilities/capability_inference_rules.py +211 -0
- omnibase_infra/capabilities/contract_capability_extractor.py +221 -0
- omnibase_infra/capabilities/intent_type_extractor.py +160 -0
- omnibase_infra/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/configs/widget_mapping.yaml +176 -0
- omnibase_infra/constants_topic_patterns.py +26 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +264 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +141 -0
- omnibase_infra/decorators/__init__.py +29 -0
- omnibase_infra/decorators/allow_any.py +109 -0
- omnibase_infra/dlq/__init__.py +90 -0
- omnibase_infra/dlq/constants_dlq.py +57 -0
- omnibase_infra/dlq/models/__init__.py +26 -0
- omnibase_infra/dlq/models/enum_replay_status.py +37 -0
- omnibase_infra/dlq/models/model_dlq_replay_record.py +135 -0
- omnibase_infra/dlq/models/model_dlq_tracking_config.py +184 -0
- omnibase_infra/dlq/service_dlq_tracking.py +611 -0
- omnibase_infra/enums/__init__.py +132 -0
- omnibase_infra/enums/enum_any_type_violation.py +104 -0
- omnibase_infra/enums/enum_backend_type.py +27 -0
- omnibase_infra/enums/enum_capture_outcome.py +42 -0
- omnibase_infra/enums/enum_capture_state.py +88 -0
- omnibase_infra/enums/enum_chain_violation_type.py +119 -0
- omnibase_infra/enums/enum_circuit_state.py +51 -0
- omnibase_infra/enums/enum_confirmation_event_type.py +27 -0
- omnibase_infra/enums/enum_consumer_group_purpose.py +92 -0
- omnibase_infra/enums/enum_contract_type.py +84 -0
- omnibase_infra/enums/enum_dedupe_strategy.py +46 -0
- omnibase_infra/enums/enum_dispatch_status.py +191 -0
- omnibase_infra/enums/enum_environment.py +46 -0
- omnibase_infra/enums/enum_execution_shape_violation.py +103 -0
- omnibase_infra/enums/enum_handler_error_type.py +111 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -0
- omnibase_infra/enums/enum_handler_source_mode.py +86 -0
- omnibase_infra/enums/enum_handler_source_type.py +87 -0
- omnibase_infra/enums/enum_handler_type.py +77 -0
- omnibase_infra/enums/enum_handler_type_category.py +61 -0
- omnibase_infra/enums/enum_infra_transport_type.py +73 -0
- omnibase_infra/enums/enum_introspection_reason.py +154 -0
- omnibase_infra/enums/enum_kafka_acks.py +99 -0
- omnibase_infra/enums/enum_message_category.py +213 -0
- omnibase_infra/enums/enum_node_archetype.py +74 -0
- omnibase_infra/enums/enum_node_output_type.py +185 -0
- omnibase_infra/enums/enum_non_retryable_error_category.py +224 -0
- omnibase_infra/enums/enum_policy_type.py +32 -0
- omnibase_infra/enums/enum_registration_state.py +261 -0
- omnibase_infra/enums/enum_registration_status.py +33 -0
- omnibase_infra/enums/enum_registry_response_status.py +28 -0
- omnibase_infra/enums/enum_response_status.py +26 -0
- omnibase_infra/enums/enum_retry_error_category.py +98 -0
- omnibase_infra/enums/enum_security_rule_id.py +103 -0
- omnibase_infra/enums/enum_selection_strategy.py +91 -0
- omnibase_infra/enums/enum_topic_standard.py +42 -0
- omnibase_infra/enums/enum_validation_severity.py +78 -0
- omnibase_infra/errors/__init__.py +160 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_binding_resolution.py +128 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +95 -0
- omnibase_infra/errors/error_consul.py +132 -0
- omnibase_infra/errors/error_container_wiring.py +243 -0
- omnibase_infra/errors/error_event_bus_registry.py +105 -0
- omnibase_infra/errors/error_infra.py +610 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +115 -0
- omnibase_infra/errors/error_vault.py +123 -0
- omnibase_infra/event_bus/__init__.py +72 -0
- omnibase_infra/event_bus/configs/kafka_event_bus_config.yaml +84 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +797 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1716 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +180 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +771 -0
- omnibase_infra/event_bus/models/__init__.py +29 -0
- omnibase_infra/event_bus/models/config/__init__.py +20 -0
- omnibase_infra/event_bus/models/config/model_kafka_event_bus_config.py +693 -0
- omnibase_infra/event_bus/models/model_dlq_event.py +206 -0
- omnibase_infra/event_bus/models/model_dlq_metrics.py +304 -0
- omnibase_infra/event_bus/models/model_event_headers.py +115 -0
- omnibase_infra/event_bus/models/model_event_message.py +60 -0
- omnibase_infra/event_bus/testing/__init__.py +26 -0
- omnibase_infra/event_bus/testing/adapter_protocol_event_publisher_inmemory.py +418 -0
- omnibase_infra/event_bus/testing/model_publisher_metrics.py +64 -0
- omnibase_infra/event_bus/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +82 -0
- omnibase_infra/handlers/filesystem/__init__.py +48 -0
- omnibase_infra/handlers/filesystem/enum_file_system_operation.py +35 -0
- omnibase_infra/handlers/filesystem/model_file_system_request.py +298 -0
- omnibase_infra/handlers/filesystem/model_file_system_result.py +166 -0
- omnibase_infra/handlers/handler_consul.py +795 -0
- omnibase_infra/handlers/handler_db.py +1046 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +2015 -0
- omnibase_infra/handlers/handler_http.py +926 -0
- omnibase_infra/handlers/handler_intent.py +387 -0
- omnibase_infra/handlers/handler_manifest_persistence.contract.yaml +184 -0
- omnibase_infra/handlers/handler_manifest_persistence.py +1539 -0
- omnibase_infra/handlers/handler_mcp.py +1430 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +428 -0
- omnibase_infra/handlers/mcp/__init__.py +19 -0
- omnibase_infra/handlers/mcp/adapter_onex_to_mcp.py +446 -0
- omnibase_infra/handlers/mcp/protocols.py +178 -0
- omnibase_infra/handlers/mcp/transport_streamable_http.py +352 -0
- omnibase_infra/handlers/mixins/__init__.py +47 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +338 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +542 -0
- omnibase_infra/handlers/mixins/mixin_consul_topic_index.py +585 -0
- omnibase_infra/handlers/mixins/mixin_vault_initialization.py +338 -0
- omnibase_infra/handlers/mixins/mixin_vault_retry.py +412 -0
- omnibase_infra/handlers/mixins/mixin_vault_secrets.py +450 -0
- omnibase_infra/handlers/mixins/mixin_vault_token.py +365 -0
- omnibase_infra/handlers/models/__init__.py +286 -0
- omnibase_infra/handlers/models/consul/__init__.py +81 -0
- omnibase_infra/handlers/models/consul/enum_consul_operation_type.py +57 -0
- omnibase_infra/handlers/models/consul/model_consul_deregister_payload.py +51 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_config.py +153 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_payload.py +89 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_found_payload.py +55 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_not_found_payload.py +49 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_recurse_payload.py +50 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_item.py +33 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_put_payload.py +41 -0
- omnibase_infra/handlers/models/consul/model_consul_register_payload.py +53 -0
- omnibase_infra/handlers/models/consul/model_consul_retry_config.py +66 -0
- omnibase_infra/handlers/models/consul/model_payload_consul.py +66 -0
- omnibase_infra/handlers/models/consul/registry_payload_consul.py +214 -0
- omnibase_infra/handlers/models/graph/__init__.py +35 -0
- omnibase_infra/handlers/models/graph/enum_graph_operation_type.py +20 -0
- omnibase_infra/handlers/models/graph/model_graph_execute_payload.py +38 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_config.py +54 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_payload.py +44 -0
- omnibase_infra/handlers/models/graph/model_graph_query_payload.py +40 -0
- omnibase_infra/handlers/models/graph/model_graph_record.py +22 -0
- omnibase_infra/handlers/models/http/__init__.py +50 -0
- omnibase_infra/handlers/models/http/enum_http_operation_type.py +29 -0
- omnibase_infra/handlers/models/http/model_http_body_content.py +45 -0
- omnibase_infra/handlers/models/http/model_http_get_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_http_handler_payload.py +90 -0
- omnibase_infra/handlers/models/http/model_http_post_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_payload_http.py +66 -0
- omnibase_infra/handlers/models/http/registry_payload_http.py +212 -0
- omnibase_infra/handlers/models/mcp/__init__.py +23 -0
- omnibase_infra/handlers/models/mcp/enum_mcp_operation_type.py +24 -0
- omnibase_infra/handlers/models/mcp/model_mcp_handler_config.py +40 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_call.py +32 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_result.py +45 -0
- omnibase_infra/handlers/models/model_consul_handler_response.py +96 -0
- omnibase_infra/handlers/models/model_db_describe_response.py +83 -0
- omnibase_infra/handlers/models/model_db_query_payload.py +95 -0
- omnibase_infra/handlers/models/model_db_query_response.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_config.py +98 -0
- omnibase_infra/handlers/models/model_filesystem_delete_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_delete_result.py +77 -0
- omnibase_infra/handlers/models/model_filesystem_directory_entry.py +75 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_result.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_payload.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_result.py +68 -0
- omnibase_infra/handlers/models/model_filesystem_read_payload.py +62 -0
- omnibase_infra/handlers/models/model_filesystem_read_result.py +61 -0
- omnibase_infra/handlers/models/model_filesystem_write_payload.py +70 -0
- omnibase_infra/handlers/models/model_filesystem_write_result.py +55 -0
- omnibase_infra/handlers/models/model_graph_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_handler_response.py +103 -0
- omnibase_infra/handlers/models/model_http_handler_response.py +101 -0
- omnibase_infra/handlers/models/model_manifest_metadata.py +75 -0
- omnibase_infra/handlers/models/model_manifest_persistence_config.py +62 -0
- omnibase_infra/handlers/models/model_manifest_query_payload.py +90 -0
- omnibase_infra/handlers/models/model_manifest_query_result.py +97 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_payload.py +44 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_result.py +98 -0
- omnibase_infra/handlers/models/model_manifest_store_payload.py +47 -0
- omnibase_infra/handlers/models/model_manifest_store_result.py +67 -0
- omnibase_infra/handlers/models/model_operation_context.py +187 -0
- omnibase_infra/handlers/models/model_qdrant_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_retry_state.py +162 -0
- omnibase_infra/handlers/models/model_vault_handler_response.py +98 -0
- omnibase_infra/handlers/models/qdrant/__init__.py +44 -0
- omnibase_infra/handlers/models/qdrant/enum_qdrant_operation_type.py +26 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_collection_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_delete_payload.py +36 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_config.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_payload.py +54 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_result.py +30 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_upsert_payload.py +36 -0
- omnibase_infra/handlers/models/vault/__init__.py +69 -0
- omnibase_infra/handlers/models/vault/enum_vault_operation_type.py +35 -0
- omnibase_infra/handlers/models/vault/model_payload_vault.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_delete_payload.py +57 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_config.py +148 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_payload.py +101 -0
- omnibase_infra/handlers/models/vault/model_vault_list_payload.py +58 -0
- omnibase_infra/handlers/models/vault/model_vault_renew_token_payload.py +67 -0
- omnibase_infra/handlers/models/vault/model_vault_retry_config.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_secret_payload.py +106 -0
- omnibase_infra/handlers/models/vault/model_vault_write_payload.py +66 -0
- omnibase_infra/handlers/models/vault/registry_payload_vault.py +213 -0
- omnibase_infra/handlers/registration_storage/__init__.py +43 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_mock.py +392 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_postgres.py +922 -0
- omnibase_infra/handlers/registration_storage/models/__init__.py +23 -0
- omnibase_infra/handlers/registration_storage/models/model_delete_registration_request.py +58 -0
- omnibase_infra/handlers/registration_storage/models/model_update_registration_request.py +73 -0
- omnibase_infra/handlers/registration_storage/protocol_registration_persistence.py +191 -0
- omnibase_infra/handlers/service_discovery/__init__.py +43 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_consul.py +1051 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_mock.py +258 -0
- omnibase_infra/handlers/service_discovery/models/__init__.py +22 -0
- omnibase_infra/handlers/service_discovery/models/model_discovery_result.py +64 -0
- omnibase_infra/handlers/service_discovery/models/model_registration_result.py +138 -0
- omnibase_infra/handlers/service_discovery/models/model_service_info.py +109 -0
- omnibase_infra/handlers/service_discovery/protocol_discovery_operations.py +170 -0
- omnibase_infra/idempotency/__init__.py +94 -0
- omnibase_infra/idempotency/models/__init__.py +43 -0
- omnibase_infra/idempotency/models/model_idempotency_check_result.py +85 -0
- omnibase_infra/idempotency/models/model_idempotency_guard_config.py +130 -0
- omnibase_infra/idempotency/models/model_idempotency_record.py +86 -0
- omnibase_infra/idempotency/models/model_idempotency_store_health_check_result.py +81 -0
- omnibase_infra/idempotency/models/model_idempotency_store_metrics.py +140 -0
- omnibase_infra/idempotency/models/model_postgres_idempotency_store_config.py +299 -0
- omnibase_infra/idempotency/protocol_idempotency_store.py +184 -0
- omnibase_infra/idempotency/store_inmemory.py +265 -0
- omnibase_infra/idempotency/store_postgres.py +923 -0
- omnibase_infra/infrastructure/__init__.py +0 -0
- omnibase_infra/migrations/001_create_event_ledger.sql +166 -0
- omnibase_infra/migrations/001_drop_event_ledger.sql +18 -0
- omnibase_infra/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +656 -0
- omnibase_infra/mixins/mixin_dict_like_accessors.py +146 -0
- omnibase_infra/mixins/mixin_envelope_extraction.py +119 -0
- omnibase_infra/mixins/mixin_node_introspection.py +2670 -0
- omnibase_infra/mixins/mixin_retry_execution.py +386 -0
- omnibase_infra/mixins/protocol_circuit_breaker_aware.py +133 -0
- omnibase_infra/models/__init__.py +144 -0
- omnibase_infra/models/bindings/__init__.py +59 -0
- omnibase_infra/models/bindings/constants.py +144 -0
- omnibase_infra/models/bindings/model_binding_resolution_result.py +103 -0
- omnibase_infra/models/bindings/model_operation_binding.py +44 -0
- omnibase_infra/models/bindings/model_operation_bindings_subcontract.py +152 -0
- omnibase_infra/models/bindings/model_parsed_binding.py +52 -0
- omnibase_infra/models/corpus/__init__.py +17 -0
- omnibase_infra/models/corpus/model_capture_config.py +133 -0
- omnibase_infra/models/corpus/model_capture_result.py +86 -0
- omnibase_infra/models/discovery/__init__.py +42 -0
- omnibase_infra/models/discovery/model_dependency_spec.py +319 -0
- omnibase_infra/models/discovery/model_discovered_capabilities.py +50 -0
- omnibase_infra/models/discovery/model_introspection_config.py +330 -0
- omnibase_infra/models/discovery/model_introspection_performance_metrics.py +169 -0
- omnibase_infra/models/discovery/model_introspection_task_config.py +116 -0
- omnibase_infra/models/dispatch/__init__.py +155 -0
- omnibase_infra/models/dispatch/model_debug_trace_snapshot.py +114 -0
- omnibase_infra/models/dispatch/model_dispatch_context.py +439 -0
- omnibase_infra/models/dispatch/model_dispatch_error.py +336 -0
- omnibase_infra/models/dispatch/model_dispatch_log_context.py +400 -0
- omnibase_infra/models/dispatch/model_dispatch_metadata.py +228 -0
- omnibase_infra/models/dispatch/model_dispatch_metrics.py +496 -0
- omnibase_infra/models/dispatch/model_dispatch_outcome.py +317 -0
- omnibase_infra/models/dispatch/model_dispatch_outputs.py +231 -0
- omnibase_infra/models/dispatch/model_dispatch_result.py +436 -0
- omnibase_infra/models/dispatch/model_dispatch_route.py +279 -0
- omnibase_infra/models/dispatch/model_dispatcher_metrics.py +275 -0
- omnibase_infra/models/dispatch/model_dispatcher_registration.py +352 -0
- omnibase_infra/models/dispatch/model_materialized_dispatch.py +141 -0
- omnibase_infra/models/dispatch/model_parsed_topic.py +135 -0
- omnibase_infra/models/dispatch/model_topic_parser.py +725 -0
- omnibase_infra/models/dispatch/model_tracing_context.py +285 -0
- omnibase_infra/models/errors/__init__.py +45 -0
- omnibase_infra/models/errors/model_handler_validation_error.py +594 -0
- omnibase_infra/models/errors/model_infra_error_context.py +99 -0
- omnibase_infra/models/errors/model_message_type_registry_error_context.py +71 -0
- omnibase_infra/models/errors/model_timeout_error_context.py +110 -0
- omnibase_infra/models/handlers/__init__.py +80 -0
- omnibase_infra/models/handlers/model_bootstrap_handler_descriptor.py +162 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +82 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +200 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -0
- omnibase_infra/models/handlers/model_handler_source_config.py +220 -0
- omnibase_infra/models/health/__init__.py +9 -0
- omnibase_infra/models/health/model_health_check_result.py +40 -0
- omnibase_infra/models/lifecycle/__init__.py +39 -0
- omnibase_infra/models/logging/__init__.py +51 -0
- omnibase_infra/models/logging/model_log_context.py +756 -0
- omnibase_infra/models/mcp/__init__.py +15 -0
- omnibase_infra/models/mcp/model_mcp_contract_config.py +80 -0
- omnibase_infra/models/mcp/model_mcp_server_config.py +67 -0
- omnibase_infra/models/mcp/model_mcp_tool_definition.py +73 -0
- omnibase_infra/models/mcp/model_mcp_tool_parameter.py +35 -0
- omnibase_infra/models/model_node_identity.py +126 -0
- omnibase_infra/models/model_retry_error_classification.py +78 -0
- omnibase_infra/models/projection/__init__.py +43 -0
- omnibase_infra/models/projection/model_capability_fields.py +112 -0
- omnibase_infra/models/projection/model_registration_projection.py +434 -0
- omnibase_infra/models/projection/model_registration_snapshot.py +322 -0
- omnibase_infra/models/projection/model_sequence_info.py +182 -0
- omnibase_infra/models/projection/model_snapshot_topic_config.py +591 -0
- omnibase_infra/models/projectors/__init__.py +41 -0
- omnibase_infra/models/projectors/model_projector_column.py +289 -0
- omnibase_infra/models/projectors/model_projector_discovery_result.py +65 -0
- omnibase_infra/models/projectors/model_projector_index.py +270 -0
- omnibase_infra/models/projectors/model_projector_schema.py +415 -0
- omnibase_infra/models/projectors/model_projector_validation_error.py +63 -0
- omnibase_infra/models/projectors/util_sql_identifiers.py +115 -0
- omnibase_infra/models/registration/__init__.py +68 -0
- omnibase_infra/models/registration/commands/__init__.py +15 -0
- omnibase_infra/models/registration/commands/model_node_registration_acked.py +108 -0
- omnibase_infra/models/registration/events/__init__.py +56 -0
- omnibase_infra/models/registration/events/model_node_became_active.py +103 -0
- omnibase_infra/models/registration/events/model_node_liveness_expired.py +103 -0
- omnibase_infra/models/registration/events/model_node_registration_accepted.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_received.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_timed_out.py +112 -0
- omnibase_infra/models/registration/events/model_node_registration_initiated.py +107 -0
- omnibase_infra/models/registration/events/model_node_registration_rejected.py +104 -0
- omnibase_infra/models/registration/model_event_bus_topic_entry.py +59 -0
- omnibase_infra/models/registration/model_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +190 -0
- omnibase_infra/models/registration/model_node_event_bus_config.py +99 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +195 -0
- omnibase_infra/models/registration/model_node_metadata.py +79 -0
- omnibase_infra/models/registration/model_node_registration.py +162 -0
- omnibase_infra/models/registration/model_node_registration_record.py +162 -0
- omnibase_infra/models/registry/__init__.py +29 -0
- omnibase_infra/models/registry/model_domain_constraint.py +202 -0
- omnibase_infra/models/registry/model_message_type_entry.py +271 -0
- omnibase_infra/models/resilience/__init__.py +9 -0
- omnibase_infra/models/resilience/model_circuit_breaker_config.py +227 -0
- omnibase_infra/models/routing/__init__.py +25 -0
- omnibase_infra/models/routing/model_routing_entry.py +52 -0
- omnibase_infra/models/routing/model_routing_subcontract.py +70 -0
- omnibase_infra/models/runtime/__init__.py +49 -0
- omnibase_infra/models/runtime/model_contract_security_config.py +41 -0
- omnibase_infra/models/runtime/model_discovery_error.py +81 -0
- omnibase_infra/models/runtime/model_discovery_result.py +162 -0
- omnibase_infra/models/runtime/model_discovery_warning.py +74 -0
- omnibase_infra/models/runtime/model_failed_plugin_load.py +63 -0
- omnibase_infra/models/runtime/model_handler_contract.py +296 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +129 -0
- omnibase_infra/models/runtime/model_plugin_load_context.py +93 -0
- omnibase_infra/models/runtime/model_plugin_load_summary.py +124 -0
- omnibase_infra/models/security/__init__.py +50 -0
- omnibase_infra/models/security/classification_levels.py +99 -0
- omnibase_infra/models/security/model_environment_policy.py +145 -0
- omnibase_infra/models/security/model_handler_security_policy.py +107 -0
- omnibase_infra/models/security/model_security_error.py +81 -0
- omnibase_infra/models/security/model_security_validation_result.py +328 -0
- omnibase_infra/models/security/model_security_warning.py +67 -0
- omnibase_infra/models/snapshot/__init__.py +27 -0
- omnibase_infra/models/snapshot/model_field_change.py +65 -0
- omnibase_infra/models/snapshot/model_snapshot.py +270 -0
- omnibase_infra/models/snapshot/model_snapshot_diff.py +203 -0
- omnibase_infra/models/snapshot/model_subject_ref.py +81 -0
- omnibase_infra/models/types/__init__.py +71 -0
- omnibase_infra/models/validation/__init__.py +89 -0
- omnibase_infra/models/validation/model_any_type_validation_result.py +118 -0
- omnibase_infra/models/validation/model_any_type_violation.py +141 -0
- omnibase_infra/models/validation/model_category_match_result.py +345 -0
- omnibase_infra/models/validation/model_chain_violation.py +166 -0
- omnibase_infra/models/validation/model_coverage_metrics.py +316 -0
- omnibase_infra/models/validation/model_execution_shape_rule.py +159 -0
- omnibase_infra/models/validation/model_execution_shape_validation.py +208 -0
- omnibase_infra/models/validation/model_execution_shape_validation_result.py +294 -0
- omnibase_infra/models/validation/model_execution_shape_violation.py +122 -0
- omnibase_infra/models/validation/model_localhandler_validation_result.py +139 -0
- omnibase_infra/models/validation/model_localhandler_violation.py +100 -0
- omnibase_infra/models/validation/model_output_validation_params.py +74 -0
- omnibase_infra/models/validation/model_validate_and_raise_params.py +84 -0
- omnibase_infra/models/validation/model_validation_error_params.py +84 -0
- omnibase_infra/models/validation/model_validation_outcome.py +287 -0
- omnibase_infra/nodes/__init__.py +57 -0
- omnibase_infra/nodes/architecture_validator/__init__.py +79 -0
- omnibase_infra/nodes/architecture_validator/contract.yaml +252 -0
- omnibase_infra/nodes/architecture_validator/contract_architecture_validator.yaml +203 -0
- omnibase_infra/nodes/architecture_validator/mixins/__init__.py +16 -0
- omnibase_infra/nodes/architecture_validator/mixins/mixin_file_path_rule.py +92 -0
- omnibase_infra/nodes/architecture_validator/models/__init__.py +36 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_request.py +56 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_result.py +311 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_violation.py +163 -0
- omnibase_infra/nodes/architecture_validator/models/model_rule_check_result.py +265 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_request.py +105 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_result.py +314 -0
- omnibase_infra/nodes/architecture_validator/node.py +262 -0
- omnibase_infra/nodes/architecture_validator/node_architecture_validator.py +383 -0
- omnibase_infra/nodes/architecture_validator/protocols/__init__.py +9 -0
- omnibase_infra/nodes/architecture_validator/protocols/protocol_architecture_rule.py +225 -0
- omnibase_infra/nodes/architecture_validator/registry/__init__.py +28 -0
- omnibase_infra/nodes/architecture_validator/registry/registry_infra_architecture_validator.py +106 -0
- omnibase_infra/nodes/architecture_validator/validators/__init__.py +104 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_direct_dispatch.py +422 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_handler_publishing.py +481 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_orchestrator_fsm.py +491 -0
- omnibase_infra/nodes/contract_registry_reducer/__init__.py +29 -0
- omnibase_infra/nodes/contract_registry_reducer/contract.yaml +255 -0
- omnibase_infra/nodes/contract_registry_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_contract_registry_state.py +266 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_cleanup_topic_references.py +55 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_deactivate_contract.py +58 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_mark_stale.py +49 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_heartbeat.py +71 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_topic.py +66 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_upsert_contract.py +92 -0
- omnibase_infra/nodes/contract_registry_reducer/node.py +121 -0
- omnibase_infra/nodes/contract_registry_reducer/reducer.py +784 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/registry_infra_contract_registry_reducer.py +101 -0
- omnibase_infra/nodes/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +167 -0
- omnibase_infra/nodes/effects/models/__init__.py +32 -0
- omnibase_infra/nodes/effects/models/model_backend_result.py +190 -0
- omnibase_infra/nodes/effects/models/model_effect_idempotency_config.py +92 -0
- omnibase_infra/nodes/effects/models/model_registry_request.py +132 -0
- omnibase_infra/nodes/effects/models/model_registry_response.py +263 -0
- omnibase_infra/nodes/effects/protocol_consul_client.py +89 -0
- omnibase_infra/nodes/effects/protocol_effect_idempotency_store.py +143 -0
- omnibase_infra/nodes/effects/protocol_postgres_adapter.py +96 -0
- omnibase_infra/nodes/effects/registry_effect.py +525 -0
- omnibase_infra/nodes/effects/store_effect_idempotency_inmemory.py +425 -0
- omnibase_infra/nodes/handlers/consul/contract.yaml +85 -0
- omnibase_infra/nodes/handlers/db/contract.yaml +72 -0
- omnibase_infra/nodes/handlers/graph/contract.yaml +127 -0
- omnibase_infra/nodes/handlers/http/contract.yaml +74 -0
- omnibase_infra/nodes/handlers/intent/contract.yaml +66 -0
- omnibase_infra/nodes/handlers/mcp/contract.yaml +69 -0
- omnibase_infra/nodes/handlers/vault/contract.yaml +91 -0
- omnibase_infra/nodes/node_intent_storage_effect/__init__.py +50 -0
- omnibase_infra/nodes/node_intent_storage_effect/contract.yaml +194 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/__init__.py +24 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/model_intent_storage_input.py +141 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/model_intent_storage_output.py +130 -0
- omnibase_infra/nodes/node_intent_storage_effect/node.py +94 -0
- omnibase_infra/nodes/node_intent_storage_effect/registry/__init__.py +35 -0
- omnibase_infra/nodes/node_intent_storage_effect/registry/registry_infra_intent_storage.py +294 -0
- omnibase_infra/nodes/node_ledger_projection_compute/__init__.py +50 -0
- omnibase_infra/nodes/node_ledger_projection_compute/contract.yaml +104 -0
- omnibase_infra/nodes/node_ledger_projection_compute/node.py +284 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/__init__.py +29 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/registry_infra_ledger_projection.py +118 -0
- omnibase_infra/nodes/node_ledger_write_effect/__init__.py +82 -0
- omnibase_infra/nodes/node_ledger_write_effect/contract.yaml +200 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/__init__.py +22 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_append.py +372 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_query.py +597 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/__init__.py +31 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_append_result.py +54 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_entry.py +92 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query.py +53 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query_result.py +41 -0
- omnibase_infra/nodes/node_ledger_write_effect/node.py +89 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/__init__.py +13 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/protocol_ledger_persistence.py +127 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/registry_infra_ledger_write.py +121 -0
- omnibase_infra/nodes/node_registration_orchestrator/README.md +542 -0
- omnibase_infra/nodes/node_registration_orchestrator/__init__.py +120 -0
- omnibase_infra/nodes/node_registration_orchestrator/contract.yaml +482 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/__init__.py +53 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_introspected.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_registration_acked.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_runtime_tick.py +373 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/__init__.py +62 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_heartbeat.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_introspected.py +694 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_registration_acked.py +458 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_runtime_tick.py +364 -0
- omnibase_infra/nodes/node_registration_orchestrator/introspection_event_router.py +544 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/__init__.py +75 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_intent_payload.py +194 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_registration_intent.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_intent_execution_result.py +50 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_node_liveness_expired.py +107 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_config.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_input.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_output.py +166 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_intent_payload.py +235 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_upsert_intent.py +68 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_execution_result.py +384 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_state.py +60 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registration_intent.py +177 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registry_intent.py +247 -0
- omnibase_infra/nodes/node_registration_orchestrator/node.py +195 -0
- omnibase_infra/nodes/node_registration_orchestrator/plugin.py +909 -0
- omnibase_infra/nodes/node_registration_orchestrator/protocols.py +439 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/registry_infra_node_registration_orchestrator.py +528 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +393 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +743 -0
- omnibase_infra/nodes/node_registration_reducer/__init__.py +15 -0
- omnibase_infra/nodes/node_registration_reducer/contract.yaml +301 -0
- omnibase_infra/nodes/node_registration_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/node_registration_reducer/models/model_validation_result.py +113 -0
- omnibase_infra/nodes/node_registration_reducer/node.py +139 -0
- omnibase_infra/nodes/node_registration_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_registration_reducer/registry/registry_infra_node_registration_reducer.py +79 -0
- omnibase_infra/nodes/node_registration_storage_effect/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_storage_effect/contract.yaml +220 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/__init__.py +44 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_delete_result.py +132 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_record.py +199 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_update.py +155 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_details.py +123 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_result.py +117 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_query.py +100 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_result.py +136 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_upsert_result.py +127 -0
- omnibase_infra/nodes/node_registration_storage_effect/node.py +112 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/__init__.py +22 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/protocol_registration_persistence.py +333 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/__init__.py +23 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/registry_infra_registration_storage.py +215 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +677 -0
- omnibase_infra/nodes/node_registry_effect/handlers/__init__.py +70 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_deregister.py +211 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_register.py +212 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_partial_retry.py +417 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_deactivate.py +215 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_upsert.py +208 -0
- omnibase_infra/nodes/node_registry_effect/models/__init__.py +43 -0
- omnibase_infra/nodes/node_registry_effect/models/model_partial_retry_request.py +92 -0
- omnibase_infra/nodes/node_registry_effect/node.py +165 -0
- omnibase_infra/nodes/node_registry_effect/registry/__init__.py +27 -0
- omnibase_infra/nodes/node_registry_effect/registry/registry_infra_registry_effect.py +196 -0
- omnibase_infra/nodes/node_service_discovery_effect/__init__.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/contract.yaml +246 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/__init__.py +67 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_health_status.py +72 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_service_discovery_operation.py +58 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_query.py +99 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_result.py +98 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_health_check_config.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_query_metadata.py +63 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_registration_result.py +130 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_details.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_result.py +119 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_info.py +106 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_registration.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/node.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/__init__.py +14 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/protocol_discovery_operations.py +279 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/__init__.py +13 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/registry_infra_service_discovery.py +222 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +37 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +87 -0
- omnibase_infra/nodes/reducers/models/model_payload_ledger_append.py +133 -0
- omnibase_infra/nodes/reducers/models/model_payload_postgres_upsert_registration.py +60 -0
- omnibase_infra/nodes/reducers/models/model_registration_confirmation.py +166 -0
- omnibase_infra/nodes/reducers/models/model_registration_state.py +433 -0
- omnibase_infra/nodes/reducers/registration_reducer.py +1138 -0
- omnibase_infra/observability/__init__.py +143 -0
- omnibase_infra/observability/constants_metrics.py +91 -0
- omnibase_infra/observability/factory_observability_sink.py +525 -0
- omnibase_infra/observability/handlers/__init__.py +118 -0
- omnibase_infra/observability/handlers/handler_logging_structured.py +967 -0
- omnibase_infra/observability/handlers/handler_metrics_prometheus.py +1120 -0
- omnibase_infra/observability/handlers/model_logging_handler_config.py +71 -0
- omnibase_infra/observability/handlers/model_logging_handler_response.py +77 -0
- omnibase_infra/observability/handlers/model_metrics_handler_config.py +172 -0
- omnibase_infra/observability/handlers/model_metrics_handler_payload.py +135 -0
- omnibase_infra/observability/handlers/model_metrics_handler_response.py +101 -0
- omnibase_infra/observability/hooks/__init__.py +74 -0
- omnibase_infra/observability/hooks/hook_observability.py +1223 -0
- omnibase_infra/observability/models/__init__.py +30 -0
- omnibase_infra/observability/models/enum_required_log_context_key.py +77 -0
- omnibase_infra/observability/models/model_buffered_log_entry.py +117 -0
- omnibase_infra/observability/models/model_logging_sink_config.py +73 -0
- omnibase_infra/observability/models/model_metrics_sink_config.py +156 -0
- omnibase_infra/observability/sinks/__init__.py +69 -0
- omnibase_infra/observability/sinks/sink_logging_structured.py +809 -0
- omnibase_infra/observability/sinks/sink_metrics_prometheus.py +710 -0
- omnibase_infra/plugins/__init__.py +27 -0
- omnibase_infra/plugins/examples/__init__.py +28 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer.py +271 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer_error_handling.py +210 -0
- omnibase_infra/plugins/models/__init__.py +21 -0
- omnibase_infra/plugins/models/model_plugin_context.py +76 -0
- omnibase_infra/plugins/models/model_plugin_input_data.py +58 -0
- omnibase_infra/plugins/models/model_plugin_output_data.py +62 -0
- omnibase_infra/plugins/plugin_compute_base.py +449 -0
- omnibase_infra/projectors/__init__.py +30 -0
- omnibase_infra/projectors/contracts/__init__.py +63 -0
- omnibase_infra/projectors/contracts/registration_projector.yaml +370 -0
- omnibase_infra/projectors/projection_reader_registration.py +1559 -0
- omnibase_infra/projectors/snapshot_publisher_registration.py +1329 -0
- omnibase_infra/protocols/__init__.py +104 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -0
- omnibase_infra/protocols/protocol_container_aware.py +200 -0
- omnibase_infra/protocols/protocol_dispatch_engine.py +152 -0
- omnibase_infra/protocols/protocol_event_bus_like.py +127 -0
- omnibase_infra/protocols/protocol_event_projector.py +96 -0
- omnibase_infra/protocols/protocol_idempotency_store.py +142 -0
- omnibase_infra/protocols/protocol_message_dispatcher.py +247 -0
- omnibase_infra/protocols/protocol_message_type_registry.py +306 -0
- omnibase_infra/protocols/protocol_plugin_compute.py +368 -0
- omnibase_infra/protocols/protocol_projector_schema_validator.py +82 -0
- omnibase_infra/protocols/protocol_registry_metrics.py +215 -0
- omnibase_infra/protocols/protocol_snapshot_publisher.py +396 -0
- omnibase_infra/protocols/protocol_snapshot_store.py +567 -0
- omnibase_infra/runtime/__init__.py +445 -0
- omnibase_infra/runtime/binding_config_resolver.py +2771 -0
- omnibase_infra/runtime/binding_resolver.py +753 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/constants_notification.py +75 -0
- omnibase_infra/runtime/constants_security.py +70 -0
- omnibase_infra/runtime/contract_handler_discovery.py +587 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +51 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/contract_loaders/operation_bindings_loader.py +789 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -0
- omnibase_infra/runtime/emit_daemon/__init__.py +97 -0
- omnibase_infra/runtime/emit_daemon/cli.py +844 -0
- omnibase_infra/runtime/emit_daemon/client.py +811 -0
- omnibase_infra/runtime/emit_daemon/config.py +535 -0
- omnibase_infra/runtime/emit_daemon/daemon.py +812 -0
- omnibase_infra/runtime/emit_daemon/event_registry.py +477 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_request.py +139 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_response.py +191 -0
- omnibase_infra/runtime/emit_daemon/queue.py +618 -0
- omnibase_infra/runtime/enums/__init__.py +18 -0
- omnibase_infra/runtime/enums/enum_config_ref_scheme.py +33 -0
- omnibase_infra/runtime/enums/enum_scheduler_status.py +170 -0
- omnibase_infra/runtime/envelope_validator.py +179 -0
- omnibase_infra/runtime/event_bus_subcontract_wiring.py +466 -0
- omnibase_infra/runtime/handler_bootstrap_source.py +507 -0
- omnibase_infra/runtime/handler_contract_config_loader.py +603 -0
- omnibase_infra/runtime/handler_contract_source.py +750 -0
- omnibase_infra/runtime/handler_identity.py +81 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2046 -0
- omnibase_infra/runtime/handler_registry.py +329 -0
- omnibase_infra/runtime/handler_source_resolver.py +367 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kafka_contract_source.py +984 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +402 -0
- omnibase_infra/runtime/mixins/__init__.py +24 -0
- omnibase_infra/runtime/mixins/mixin_projector_notification_publishing.py +566 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +778 -0
- omnibase_infra/runtime/models/__init__.py +229 -0
- omnibase_infra/runtime/models/model_batch_lifecycle_result.py +217 -0
- omnibase_infra/runtime/models/model_binding_config.py +168 -0
- omnibase_infra/runtime/models/model_binding_config_cache_stats.py +135 -0
- omnibase_infra/runtime/models/model_binding_config_resolver_config.py +329 -0
- omnibase_infra/runtime/models/model_cached_secret.py +138 -0
- omnibase_infra/runtime/models/model_compute_key.py +138 -0
- omnibase_infra/runtime/models/model_compute_registration.py +97 -0
- omnibase_infra/runtime/models/model_config_cache_entry.py +61 -0
- omnibase_infra/runtime/models/model_config_ref.py +331 -0
- omnibase_infra/runtime/models/model_config_ref_parse_result.py +125 -0
- omnibase_infra/runtime/models/model_contract_load_result.py +224 -0
- omnibase_infra/runtime/models/model_domain_plugin_config.py +92 -0
- omnibase_infra/runtime/models/model_domain_plugin_result.py +270 -0
- omnibase_infra/runtime/models/model_duplicate_response.py +54 -0
- omnibase_infra/runtime/models/model_enabled_protocols_config.py +61 -0
- omnibase_infra/runtime/models/model_event_bus_config.py +54 -0
- omnibase_infra/runtime/models/model_failed_component.py +55 -0
- omnibase_infra/runtime/models/model_health_check_response.py +168 -0
- omnibase_infra/runtime/models/model_health_check_result.py +229 -0
- omnibase_infra/runtime/models/model_lifecycle_result.py +245 -0
- omnibase_infra/runtime/models/model_logging_config.py +42 -0
- omnibase_infra/runtime/models/model_optional_correlation_id.py +167 -0
- omnibase_infra/runtime/models/model_optional_string.py +94 -0
- omnibase_infra/runtime/models/model_optional_uuid.py +110 -0
- omnibase_infra/runtime/models/model_policy_context.py +100 -0
- omnibase_infra/runtime/models/model_policy_key.py +138 -0
- omnibase_infra/runtime/models/model_policy_registration.py +139 -0
- omnibase_infra/runtime/models/model_policy_result.py +103 -0
- omnibase_infra/runtime/models/model_policy_type_filter.py +157 -0
- omnibase_infra/runtime/models/model_projector_notification_config.py +171 -0
- omnibase_infra/runtime/models/model_projector_plugin_loader_config.py +47 -0
- omnibase_infra/runtime/models/model_protocol_registration_config.py +65 -0
- omnibase_infra/runtime/models/model_retry_policy.py +105 -0
- omnibase_infra/runtime/models/model_runtime_config.py +150 -0
- omnibase_infra/runtime/models/model_runtime_contract_config.py +268 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_config.py +625 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_metrics.py +233 -0
- omnibase_infra/runtime/models/model_runtime_tick.py +193 -0
- omnibase_infra/runtime/models/model_secret_cache_stats.py +82 -0
- omnibase_infra/runtime/models/model_secret_mapping.py +63 -0
- omnibase_infra/runtime/models/model_secret_resolver_config.py +107 -0
- omnibase_infra/runtime/models/model_secret_resolver_metrics.py +111 -0
- omnibase_infra/runtime/models/model_secret_source_info.py +72 -0
- omnibase_infra/runtime/models/model_secret_source_spec.py +66 -0
- omnibase_infra/runtime/models/model_security_config.py +109 -0
- omnibase_infra/runtime/models/model_shutdown_batch_result.py +75 -0
- omnibase_infra/runtime/models/model_shutdown_config.py +94 -0
- omnibase_infra/runtime/models/model_transition_notification_outbox_config.py +112 -0
- omnibase_infra/runtime/models/model_transition_notification_outbox_metrics.py +140 -0
- omnibase_infra/runtime/models/model_transition_notification_publisher_metrics.py +357 -0
- omnibase_infra/runtime/projector_plugin_loader.py +1462 -0
- omnibase_infra/runtime/projector_schema_manager.py +565 -0
- omnibase_infra/runtime/projector_shell.py +1330 -0
- omnibase_infra/runtime/protocol_contract_descriptor.py +92 -0
- omnibase_infra/runtime/protocol_contract_source.py +92 -0
- omnibase_infra/runtime/protocol_domain_plugin.py +474 -0
- omnibase_infra/runtime/protocol_handler_discovery.py +221 -0
- omnibase_infra/runtime/protocol_handler_plugin_loader.py +327 -0
- omnibase_infra/runtime/protocol_lifecycle_executor.py +435 -0
- omnibase_infra/runtime/protocol_policy.py +366 -0
- omnibase_infra/runtime/protocols/__init__.py +37 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -0
- omnibase_infra/runtime/publisher_topic_scoped.py +294 -0
- omnibase_infra/runtime/registry/__init__.py +93 -0
- omnibase_infra/runtime/registry/mixin_message_type_query.py +326 -0
- omnibase_infra/runtime/registry/mixin_message_type_registration.py +354 -0
- omnibase_infra/runtime/registry/registry_event_bus_binding.py +268 -0
- omnibase_infra/runtime/registry/registry_message_type.py +542 -0
- omnibase_infra/runtime/registry/registry_protocol_binding.py +445 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_contract_source.py +693 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1185 -0
- omnibase_infra/runtime/runtime_contract_config_loader.py +406 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2112 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1651 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +2350 -0
- omnibase_infra/runtime/service_runtime_host_process.py +3493 -0
- omnibase_infra/runtime/transition_notification_outbox.py +1190 -0
- omnibase_infra/runtime/transition_notification_publisher.py +765 -0
- omnibase_infra/runtime/util_container_wiring.py +1124 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +723 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/schemas/schema_transition_notification_outbox.sql +245 -0
- omnibase_infra/services/__init__.py +89 -0
- omnibase_infra/services/corpus_capture.py +684 -0
- omnibase_infra/services/mcp/__init__.py +31 -0
- omnibase_infra/services/mcp/mcp_server_lifecycle.py +449 -0
- omnibase_infra/services/mcp/service_mcp_tool_discovery.py +411 -0
- omnibase_infra/services/mcp/service_mcp_tool_registry.py +329 -0
- omnibase_infra/services/mcp/service_mcp_tool_sync.py +565 -0
- omnibase_infra/services/registry_api/__init__.py +40 -0
- omnibase_infra/services/registry_api/main.py +261 -0
- omnibase_infra/services/registry_api/models/__init__.py +66 -0
- omnibase_infra/services/registry_api/models/model_capability_widget_mapping.py +38 -0
- omnibase_infra/services/registry_api/models/model_pagination_info.py +48 -0
- omnibase_infra/services/registry_api/models/model_registry_discovery_response.py +73 -0
- omnibase_infra/services/registry_api/models/model_registry_health_response.py +49 -0
- omnibase_infra/services/registry_api/models/model_registry_instance_view.py +88 -0
- omnibase_infra/services/registry_api/models/model_registry_node_view.py +88 -0
- omnibase_infra/services/registry_api/models/model_registry_summary.py +60 -0
- omnibase_infra/services/registry_api/models/model_response_list_instances.py +43 -0
- omnibase_infra/services/registry_api/models/model_response_list_nodes.py +51 -0
- omnibase_infra/services/registry_api/models/model_warning.py +49 -0
- omnibase_infra/services/registry_api/models/model_widget_defaults.py +28 -0
- omnibase_infra/services/registry_api/models/model_widget_mapping.py +51 -0
- omnibase_infra/services/registry_api/routes.py +371 -0
- omnibase_infra/services/registry_api/service.py +837 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +898 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +699 -0
- omnibase_infra/services/service_timeout_scanner.py +394 -0
- omnibase_infra/services/session/__init__.py +56 -0
- omnibase_infra/services/session/config_consumer.py +137 -0
- omnibase_infra/services/session/config_store.py +139 -0
- omnibase_infra/services/session/consumer.py +1007 -0
- omnibase_infra/services/session/protocol_session_aggregator.py +117 -0
- omnibase_infra/services/session/store.py +997 -0
- omnibase_infra/services/snapshot/__init__.py +31 -0
- omnibase_infra/services/snapshot/service_snapshot.py +647 -0
- omnibase_infra/services/snapshot/store_inmemory.py +637 -0
- omnibase_infra/services/snapshot/store_postgres.py +1279 -0
- omnibase_infra/shared/__init__.py +8 -0
- omnibase_infra/testing/__init__.py +10 -0
- omnibase_infra/testing/utils.py +23 -0
- omnibase_infra/topics/__init__.py +45 -0
- omnibase_infra/topics/platform_topic_suffixes.py +140 -0
- omnibase_infra/topics/util_topic_composition.py +95 -0
- omnibase_infra/types/__init__.py +48 -0
- omnibase_infra/types/type_cache_info.py +49 -0
- omnibase_infra/types/type_dsn.py +173 -0
- omnibase_infra/types/type_infra_aliases.py +60 -0
- omnibase_infra/types/typed_dict/__init__.py +29 -0
- omnibase_infra/types/typed_dict/typed_dict_envelope_build_params.py +115 -0
- omnibase_infra/types/typed_dict/typed_dict_introspection_cache.py +128 -0
- omnibase_infra/types/typed_dict/typed_dict_performance_metrics_cache.py +140 -0
- omnibase_infra/types/typed_dict_capabilities.py +64 -0
- omnibase_infra/utils/__init__.py +117 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_atomic_file.py +261 -0
- omnibase_infra/utils/util_consumer_group.py +232 -0
- omnibase_infra/utils/util_datetime.py +372 -0
- omnibase_infra/utils/util_db_transaction.py +239 -0
- omnibase_infra/utils/util_dsn_validation.py +333 -0
- omnibase_infra/utils/util_env_parsing.py +264 -0
- omnibase_infra/utils/util_error_sanitization.py +457 -0
- omnibase_infra/utils/util_pydantic_validators.py +477 -0
- omnibase_infra/utils/util_retry_optimistic.py +281 -0
- omnibase_infra/utils/util_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -0
- omnibase_infra/validation/contracts/security.validation.yaml +114 -0
- omnibase_infra/validation/enums/__init__.py +11 -0
- omnibase_infra/validation/enums/enum_contract_violation_severity.py +13 -0
- omnibase_infra/validation/infra_validators.py +1514 -0
- omnibase_infra/validation/linter_contract.py +907 -0
- omnibase_infra/validation/mixin_any_type_classification.py +120 -0
- omnibase_infra/validation/mixin_any_type_exemption.py +580 -0
- omnibase_infra/validation/mixin_any_type_reporting.py +106 -0
- omnibase_infra/validation/mixin_execution_shape_violation_checks.py +596 -0
- omnibase_infra/validation/mixin_node_archetype_detection.py +254 -0
- omnibase_infra/validation/models/__init__.py +15 -0
- omnibase_infra/validation/models/model_contract_lint_result.py +101 -0
- omnibase_infra/validation/models/model_contract_violation.py +41 -0
- omnibase_infra/validation/service_validation_aggregator.py +395 -0
- omnibase_infra/validation/validation_exemptions.yaml +2033 -0
- omnibase_infra/validation/validator_any_type.py +715 -0
- omnibase_infra/validation/validator_chain_propagation.py +839 -0
- omnibase_infra/validation/validator_execution_shape.py +465 -0
- omnibase_infra/validation/validator_localhandler.py +261 -0
- omnibase_infra/validation/validator_registration_security.py +410 -0
- omnibase_infra/validation/validator_routing_coverage.py +1020 -0
- omnibase_infra/validation/validator_runtime_shape.py +915 -0
- omnibase_infra/validation/validator_security.py +513 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.6.dist-info/METADATA +197 -0
- omnibase_infra-0.2.6.dist-info/RECORD +833 -0
- omnibase_infra-0.2.6.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.6.dist-info/entry_points.txt +5 -0
- omnibase_infra-0.2.6.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,693 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Registry-Based Contract Source using Consul KV.
|
|
4
|
+
|
|
5
|
+
This module provides RegistryContractSource for discovering handler contracts
|
|
6
|
+
from Consul KV storage instead of the filesystem.
|
|
7
|
+
|
|
8
|
+
Part of OMN-1100: Registry-Based Handler Contract Discovery.
|
|
9
|
+
|
|
10
|
+
Contract Storage Convention:
|
|
11
|
+
- Prefix: onex/contracts/handlers/
|
|
12
|
+
- Key format: onex/contracts/handlers/{handler_id}
|
|
13
|
+
- Value: Full YAML contract content
|
|
14
|
+
|
|
15
|
+
Example Consul KV Structure:
|
|
16
|
+
onex/contracts/handlers/effect.consul.handler → (YAML content)
|
|
17
|
+
onex/contracts/handlers/effect.db.handler → (YAML content)
|
|
18
|
+
onex/contracts/handlers/compute.auth.handler → (YAML content)
|
|
19
|
+
|
|
20
|
+
See Also:
|
|
21
|
+
- HandlerContractSource: Filesystem-based discovery
|
|
22
|
+
- ProtocolContractSource: Protocol definition
|
|
23
|
+
|
|
24
|
+
.. versionadded:: 0.7.0
|
|
25
|
+
Created as part of OMN-1100 registry-based discovery.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
from __future__ import annotations
|
|
29
|
+
|
|
30
|
+
import logging
|
|
31
|
+
import os
|
|
32
|
+
from asyncio import to_thread
|
|
33
|
+
from typing import cast
|
|
34
|
+
from uuid import uuid4
|
|
35
|
+
|
|
36
|
+
import consul
|
|
37
|
+
import yaml
|
|
38
|
+
from pydantic import ValidationError
|
|
39
|
+
|
|
40
|
+
from omnibase_core.models.contracts.model_handler_contract import ModelHandlerContract
|
|
41
|
+
from omnibase_core.models.errors import ModelOnexError
|
|
42
|
+
from omnibase_infra.enums import (
|
|
43
|
+
EnumHandlerErrorType,
|
|
44
|
+
EnumHandlerSourceType,
|
|
45
|
+
EnumInfraTransportType,
|
|
46
|
+
)
|
|
47
|
+
from omnibase_infra.errors import (
|
|
48
|
+
InfraConnectionError,
|
|
49
|
+
ModelInfraErrorContext,
|
|
50
|
+
ProtocolConfigurationError,
|
|
51
|
+
)
|
|
52
|
+
from omnibase_infra.models.errors import ModelHandlerValidationError
|
|
53
|
+
from omnibase_infra.models.handlers import (
|
|
54
|
+
LiteralHandlerKind,
|
|
55
|
+
ModelContractDiscoveryResult,
|
|
56
|
+
ModelHandlerDescriptor,
|
|
57
|
+
ModelHandlerIdentifier,
|
|
58
|
+
)
|
|
59
|
+
from omnibase_infra.runtime.protocol_contract_source import ProtocolContractSource
|
|
60
|
+
|
|
61
|
+
logger = logging.getLogger(__name__)
|
|
62
|
+
|
|
63
|
+
# Forward Reference Resolution:
|
|
64
|
+
# ModelContractDiscoveryResult uses a forward reference to ModelHandlerValidationError.
|
|
65
|
+
# Since we import ModelHandlerValidationError above, we can call model_rebuild() here
|
|
66
|
+
# to resolve the forward reference. This call is idempotent - multiple calls are harmless.
|
|
67
|
+
ModelContractDiscoveryResult.model_rebuild()
|
|
68
|
+
|
|
69
|
+
# Default Consul KV prefix for contract storage
|
|
70
|
+
DEFAULT_CONTRACT_PREFIX = "onex/contracts/handlers/"
|
|
71
|
+
|
|
72
|
+
# Default Consul connection settings
|
|
73
|
+
# NOTE: Standard Consul port is 8500. Production deployments typically
|
|
74
|
+
# override via CONSUL_PORT env var (e.g., 28500 per CLAUDE.md infrastructure).
|
|
75
|
+
DEFAULT_CONSUL_HOST = "localhost"
|
|
76
|
+
DEFAULT_CONSUL_PORT = 8500
|
|
77
|
+
|
|
78
|
+
# Maximum contract size (same as filesystem source)
|
|
79
|
+
MAX_CONTRACT_SIZE = 10 * 1024 * 1024 # 10MB
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class RegistryContractSource(ProtocolContractSource):
|
|
83
|
+
"""Contract source that discovers handlers from Consul KV.
|
|
84
|
+
|
|
85
|
+
This source fetches handler contracts stored in Consul KV under a
|
|
86
|
+
configurable prefix, enabling remote/centralized contract management.
|
|
87
|
+
|
|
88
|
+
Attributes:
|
|
89
|
+
host: Consul host address.
|
|
90
|
+
port: Consul port.
|
|
91
|
+
token: Optional ACL token for authentication.
|
|
92
|
+
prefix: KV prefix for contract storage.
|
|
93
|
+
graceful_mode: If True, continue on errors and collect them.
|
|
94
|
+
|
|
95
|
+
Example:
|
|
96
|
+
>>> source = RegistryContractSource(
|
|
97
|
+
... host="consul.example.com",
|
|
98
|
+
... port=8500,
|
|
99
|
+
... token="my-acl-token",
|
|
100
|
+
... )
|
|
101
|
+
>>> result = await source.discover_handlers()
|
|
102
|
+
>>> for desc in result.descriptors:
|
|
103
|
+
... print(f"Found: {desc.handler_id}")
|
|
104
|
+
|
|
105
|
+
.. versionadded:: 0.7.0
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
def __init__(
|
|
109
|
+
self,
|
|
110
|
+
host: str | None = None,
|
|
111
|
+
port: int | None = None,
|
|
112
|
+
token: str | None = None,
|
|
113
|
+
scheme: str | None = None,
|
|
114
|
+
prefix: str = DEFAULT_CONTRACT_PREFIX,
|
|
115
|
+
graceful_mode: bool = False,
|
|
116
|
+
) -> None:
|
|
117
|
+
"""Initialize the registry contract source.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
host: Consul host address (default from CONSUL_HOST env var).
|
|
121
|
+
port: Consul port (default from CONSUL_PORT env var).
|
|
122
|
+
token: Optional ACL token (default from CONSUL_TOKEN env var).
|
|
123
|
+
scheme: HTTP scheme (default from CONSUL_SCHEME env var, or "http").
|
|
124
|
+
prefix: KV prefix for contracts.
|
|
125
|
+
graceful_mode: If True, collect errors instead of raising.
|
|
126
|
+
"""
|
|
127
|
+
# Configuration from environment variables (per CLAUDE.md)
|
|
128
|
+
self._host = host or os.environ.get("CONSUL_HOST", DEFAULT_CONSUL_HOST)
|
|
129
|
+
self._port = (
|
|
130
|
+
port
|
|
131
|
+
if port is not None
|
|
132
|
+
else int(os.environ.get("CONSUL_PORT", str(DEFAULT_CONSUL_PORT)))
|
|
133
|
+
)
|
|
134
|
+
self._token = token or os.environ.get("CONSUL_TOKEN")
|
|
135
|
+
self._scheme = scheme or os.environ.get("CONSUL_SCHEME", "http")
|
|
136
|
+
self._prefix = prefix
|
|
137
|
+
self._graceful_mode = graceful_mode
|
|
138
|
+
self._correlation_id = uuid4()
|
|
139
|
+
|
|
140
|
+
# Initialize Consul client with resolved configuration
|
|
141
|
+
self._client = consul.Consul(
|
|
142
|
+
host=self._host,
|
|
143
|
+
port=self._port,
|
|
144
|
+
token=self._token,
|
|
145
|
+
scheme=self._scheme,
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
logger.info(
|
|
149
|
+
"RegistryContractSource initialized",
|
|
150
|
+
extra={
|
|
151
|
+
"host": self._host,
|
|
152
|
+
"port": self._port,
|
|
153
|
+
"prefix": prefix,
|
|
154
|
+
"correlation_id": str(self._correlation_id),
|
|
155
|
+
},
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
@property
|
|
159
|
+
def source_type(self) -> str:
|
|
160
|
+
"""Return source type identifier."""
|
|
161
|
+
return "REGISTRY"
|
|
162
|
+
|
|
163
|
+
async def discover_handlers(self) -> ModelContractDiscoveryResult:
|
|
164
|
+
"""Discover handlers from Consul KV.
|
|
165
|
+
|
|
166
|
+
Fetches all keys under the configured prefix and parses each
|
|
167
|
+
value as a YAML handler contract.
|
|
168
|
+
|
|
169
|
+
Returns:
|
|
170
|
+
ModelContractDiscoveryResult with descriptors and any errors.
|
|
171
|
+
|
|
172
|
+
Raises:
|
|
173
|
+
ModelOnexError: In strict mode, if discovery fails.
|
|
174
|
+
"""
|
|
175
|
+
descriptors: list[ModelHandlerDescriptor] = []
|
|
176
|
+
validation_errors: list[ModelHandlerValidationError] = []
|
|
177
|
+
|
|
178
|
+
try:
|
|
179
|
+
# Fetch all keys under prefix (recurse=True)
|
|
180
|
+
# Wrap synchronous Consul client call to avoid blocking the event loop
|
|
181
|
+
_index, data = await to_thread(
|
|
182
|
+
self._client.kv.get, self._prefix, recurse=True
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
if data is None:
|
|
186
|
+
logger.info(
|
|
187
|
+
"No contracts found in registry",
|
|
188
|
+
extra={
|
|
189
|
+
"prefix": self._prefix,
|
|
190
|
+
"correlation_id": str(self._correlation_id),
|
|
191
|
+
},
|
|
192
|
+
)
|
|
193
|
+
return ModelContractDiscoveryResult(
|
|
194
|
+
descriptors=descriptors,
|
|
195
|
+
validation_errors=validation_errors,
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
logger.info(
|
|
199
|
+
"Found contracts in registry",
|
|
200
|
+
extra={
|
|
201
|
+
"count": len(data),
|
|
202
|
+
"prefix": self._prefix,
|
|
203
|
+
"correlation_id": str(self._correlation_id),
|
|
204
|
+
},
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
for item in data:
|
|
208
|
+
key = item.get("Key", "")
|
|
209
|
+
value = item.get("Value")
|
|
210
|
+
|
|
211
|
+
# Skip the prefix directory key itself
|
|
212
|
+
if key == self._prefix or key == self._prefix.rstrip("/"):
|
|
213
|
+
continue
|
|
214
|
+
|
|
215
|
+
# Extract handler_id from key
|
|
216
|
+
handler_id = key.removeprefix(self._prefix)
|
|
217
|
+
if not handler_id:
|
|
218
|
+
continue
|
|
219
|
+
|
|
220
|
+
try:
|
|
221
|
+
descriptor = self._parse_contract(
|
|
222
|
+
key=key,
|
|
223
|
+
value=value,
|
|
224
|
+
handler_id=handler_id,
|
|
225
|
+
)
|
|
226
|
+
if descriptor:
|
|
227
|
+
descriptors.append(descriptor)
|
|
228
|
+
logger.debug(
|
|
229
|
+
"Discovered handler from registry",
|
|
230
|
+
extra={
|
|
231
|
+
"handler_id": descriptor.handler_id,
|
|
232
|
+
"key": key,
|
|
233
|
+
},
|
|
234
|
+
)
|
|
235
|
+
except (
|
|
236
|
+
yaml.YAMLError,
|
|
237
|
+
ValidationError,
|
|
238
|
+
ValueError,
|
|
239
|
+
ModelOnexError,
|
|
240
|
+
) as e:
|
|
241
|
+
error = self._create_parse_error(key, handler_id, e)
|
|
242
|
+
if self._graceful_mode:
|
|
243
|
+
validation_errors.append(error)
|
|
244
|
+
logger.warning(
|
|
245
|
+
"Failed to parse contract (graceful mode)",
|
|
246
|
+
extra={"key": key, "error": str(e)},
|
|
247
|
+
)
|
|
248
|
+
else:
|
|
249
|
+
context = ModelInfraErrorContext.with_correlation(
|
|
250
|
+
correlation_id=self._correlation_id,
|
|
251
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
252
|
+
operation="parse_contract",
|
|
253
|
+
)
|
|
254
|
+
raise ProtocolConfigurationError(
|
|
255
|
+
f"Failed to parse contract from registry key '{key}': {e}",
|
|
256
|
+
context=context,
|
|
257
|
+
) from e
|
|
258
|
+
|
|
259
|
+
except consul.ConsulException as e:
|
|
260
|
+
error_msg = f"Consul connection failed: {e}"
|
|
261
|
+
logger.exception(
|
|
262
|
+
error_msg,
|
|
263
|
+
extra={
|
|
264
|
+
"host": self._host,
|
|
265
|
+
"port": self._port,
|
|
266
|
+
"correlation_id": str(self._correlation_id),
|
|
267
|
+
},
|
|
268
|
+
)
|
|
269
|
+
if not self._graceful_mode:
|
|
270
|
+
context = ModelInfraErrorContext.with_correlation(
|
|
271
|
+
correlation_id=self._correlation_id,
|
|
272
|
+
transport_type=EnumInfraTransportType.CONSUL,
|
|
273
|
+
operation="discover_handlers",
|
|
274
|
+
)
|
|
275
|
+
raise InfraConnectionError(
|
|
276
|
+
f"Consul connection failed: {e}",
|
|
277
|
+
context=context,
|
|
278
|
+
) from e
|
|
279
|
+
validation_errors.append(self._create_connection_error(e))
|
|
280
|
+
|
|
281
|
+
return ModelContractDiscoveryResult(
|
|
282
|
+
descriptors=descriptors,
|
|
283
|
+
validation_errors=validation_errors,
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
def _parse_contract(
|
|
287
|
+
self,
|
|
288
|
+
key: str,
|
|
289
|
+
value: bytes | None,
|
|
290
|
+
handler_id: str,
|
|
291
|
+
) -> ModelHandlerDescriptor | None:
|
|
292
|
+
"""Parse a contract from Consul KV value.
|
|
293
|
+
|
|
294
|
+
Args:
|
|
295
|
+
key: The Consul KV key.
|
|
296
|
+
value: The raw bytes value from Consul.
|
|
297
|
+
handler_id: Extracted handler ID from key.
|
|
298
|
+
|
|
299
|
+
Returns:
|
|
300
|
+
ModelHandlerDescriptor if valid, None if empty.
|
|
301
|
+
|
|
302
|
+
Raises:
|
|
303
|
+
ValueError: If contract is invalid.
|
|
304
|
+
"""
|
|
305
|
+
if value is None:
|
|
306
|
+
logger.debug(
|
|
307
|
+
"Skipping contract with None value",
|
|
308
|
+
extra={"key": key, "handler_id": handler_id},
|
|
309
|
+
)
|
|
310
|
+
return None
|
|
311
|
+
|
|
312
|
+
# Check size limit
|
|
313
|
+
if len(value) > MAX_CONTRACT_SIZE:
|
|
314
|
+
raise ValueError(
|
|
315
|
+
f"Contract exceeds size limit: {len(value)} > {MAX_CONTRACT_SIZE}"
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
# Decode and parse YAML
|
|
319
|
+
content = value.decode("utf-8")
|
|
320
|
+
contract_data = yaml.safe_load(content)
|
|
321
|
+
|
|
322
|
+
if not contract_data:
|
|
323
|
+
logger.debug(
|
|
324
|
+
"Skipping contract with empty YAML content",
|
|
325
|
+
extra={"key": key, "handler_id": handler_id},
|
|
326
|
+
)
|
|
327
|
+
return None
|
|
328
|
+
|
|
329
|
+
# Validate against ModelHandlerContract
|
|
330
|
+
contract = ModelHandlerContract.model_validate(contract_data)
|
|
331
|
+
|
|
332
|
+
# Validate handler_id consistency between key and contract content.
|
|
333
|
+
# NOTE: handler_id mismatch is NEVER silently ignored - it's always treated
|
|
334
|
+
# as an error in both modes. The difference is how the error is surfaced:
|
|
335
|
+
# - Strict mode: Raises ProtocolConfigurationError immediately
|
|
336
|
+
# - Graceful mode: Collects in validation_errors (ValueError caught upstream)
|
|
337
|
+
# This ensures data integrity issues are always reported, not swallowed.
|
|
338
|
+
if contract.handler_id != handler_id:
|
|
339
|
+
raise ValueError(
|
|
340
|
+
f"handler_id mismatch: key='{handler_id}' vs "
|
|
341
|
+
f"contract='{contract.handler_id}'"
|
|
342
|
+
)
|
|
343
|
+
|
|
344
|
+
# Extract handler_class from metadata (canonical location per contract schema)
|
|
345
|
+
metadata = contract_data.get("metadata", {})
|
|
346
|
+
handler_class = metadata.get("handler_class")
|
|
347
|
+
|
|
348
|
+
if handler_class is None:
|
|
349
|
+
logger.debug(
|
|
350
|
+
"handler_class missing from metadata, handler may not be loadable",
|
|
351
|
+
extra={"handler_id": handler_id, "key": key},
|
|
352
|
+
)
|
|
353
|
+
|
|
354
|
+
# Access node_archetype from the validated Pydantic model and cast to LiteralHandlerKind.
|
|
355
|
+
# ModelHandlerBehavior.node_archetype is an EnumNodeArchetype enum.
|
|
356
|
+
# Its .value property returns the handler_kind string ("compute", "effect", etc.).
|
|
357
|
+
# The cast is type-safe: EnumNodeArchetype values exactly match LiteralHandlerKind.
|
|
358
|
+
handler_kind = cast(
|
|
359
|
+
"LiteralHandlerKind", contract.descriptor.node_archetype.value
|
|
360
|
+
)
|
|
361
|
+
|
|
362
|
+
return ModelHandlerDescriptor(
|
|
363
|
+
handler_id=contract.handler_id,
|
|
364
|
+
name=contract.name,
|
|
365
|
+
# Use contract_version directly - it's already a ModelSemVer from Pydantic validation
|
|
366
|
+
version=contract.contract_version,
|
|
367
|
+
handler_kind=handler_kind,
|
|
368
|
+
input_model=contract.input_model,
|
|
369
|
+
output_model=contract.output_model,
|
|
370
|
+
description=contract.description,
|
|
371
|
+
handler_class=handler_class,
|
|
372
|
+
contract_path=f"consul://{self._host}:{self._port}/{key}",
|
|
373
|
+
contract_config=contract_data,
|
|
374
|
+
)
|
|
375
|
+
|
|
376
|
+
def _create_parse_error(
|
|
377
|
+
self,
|
|
378
|
+
key: str,
|
|
379
|
+
handler_id: str,
|
|
380
|
+
error: Exception,
|
|
381
|
+
) -> ModelHandlerValidationError:
|
|
382
|
+
"""Create a validation error for contract parse failures.
|
|
383
|
+
|
|
384
|
+
Args:
|
|
385
|
+
key: The Consul KV key.
|
|
386
|
+
handler_id: The handler identifier.
|
|
387
|
+
error: The parsing error.
|
|
388
|
+
|
|
389
|
+
Returns:
|
|
390
|
+
ModelHandlerValidationError with parse error details.
|
|
391
|
+
"""
|
|
392
|
+
handler_identity = ModelHandlerIdentifier.from_handler_id(
|
|
393
|
+
f"registry://{handler_id}"
|
|
394
|
+
)
|
|
395
|
+
|
|
396
|
+
return ModelHandlerValidationError(
|
|
397
|
+
error_type=EnumHandlerErrorType.CONTRACT_PARSE_ERROR,
|
|
398
|
+
rule_id="REGISTRY-001",
|
|
399
|
+
handler_identity=handler_identity,
|
|
400
|
+
source_type=EnumHandlerSourceType.CONTRACT,
|
|
401
|
+
message=f"Failed to parse contract from registry key '{key}': {error}",
|
|
402
|
+
remediation_hint="Check YAML syntax and required contract fields",
|
|
403
|
+
file_path=f"consul://{self._host}:{self._port}/{key}",
|
|
404
|
+
correlation_id=self._correlation_id,
|
|
405
|
+
)
|
|
406
|
+
|
|
407
|
+
def _create_connection_error(
|
|
408
|
+
self,
|
|
409
|
+
error: consul.ConsulException,
|
|
410
|
+
) -> ModelHandlerValidationError:
|
|
411
|
+
"""Create a validation error for Consul connection failures.
|
|
412
|
+
|
|
413
|
+
Args:
|
|
414
|
+
error: The Consul exception.
|
|
415
|
+
|
|
416
|
+
Returns:
|
|
417
|
+
ModelHandlerValidationError with connection error details.
|
|
418
|
+
"""
|
|
419
|
+
handler_identity = ModelHandlerIdentifier.from_handler_id("registry-source")
|
|
420
|
+
|
|
421
|
+
return ModelHandlerValidationError(
|
|
422
|
+
error_type=EnumHandlerErrorType.DISCOVERY_ERROR,
|
|
423
|
+
rule_id="REGISTRY-002",
|
|
424
|
+
handler_identity=handler_identity,
|
|
425
|
+
source_type=EnumHandlerSourceType.CONTRACT,
|
|
426
|
+
message=f"Failed to connect to Consul registry at {self._host}:{self._port}: {error}",
|
|
427
|
+
remediation_hint="Verify Consul is running and accessible",
|
|
428
|
+
correlation_id=self._correlation_id,
|
|
429
|
+
)
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
def _create_consul_client_from_env() -> consul.Consul:
|
|
433
|
+
"""Create Consul client using environment variables.
|
|
434
|
+
|
|
435
|
+
Configuration is sourced from environment (per CLAUDE.md):
|
|
436
|
+
- CONSUL_HOST: Host address (default: localhost)
|
|
437
|
+
- CONSUL_PORT: Port number (default: 8500)
|
|
438
|
+
- CONSUL_TOKEN: ACL token (default: None)
|
|
439
|
+
- CONSUL_SCHEME: HTTP scheme (default: http)
|
|
440
|
+
|
|
441
|
+
Returns:
|
|
442
|
+
Configured Consul client instance.
|
|
443
|
+
"""
|
|
444
|
+
return consul.Consul(
|
|
445
|
+
host=os.environ.get("CONSUL_HOST", DEFAULT_CONSUL_HOST),
|
|
446
|
+
port=int(os.environ.get("CONSUL_PORT", str(DEFAULT_CONSUL_PORT))),
|
|
447
|
+
token=os.environ.get("CONSUL_TOKEN"),
|
|
448
|
+
scheme=os.environ.get("CONSUL_SCHEME", "http"),
|
|
449
|
+
)
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
def store_contract_in_consul(
|
|
453
|
+
contract_yaml: str,
|
|
454
|
+
handler_id: str,
|
|
455
|
+
prefix: str = DEFAULT_CONTRACT_PREFIX,
|
|
456
|
+
client: consul.Consul | None = None,
|
|
457
|
+
) -> bool:
|
|
458
|
+
"""Store a handler contract in Consul KV.
|
|
459
|
+
|
|
460
|
+
This is a utility function for populating contracts in Consul,
|
|
461
|
+
useful for demos and initial setup. Consul connection is configured
|
|
462
|
+
via environment variables (CONSUL_HOST, CONSUL_PORT, etc.).
|
|
463
|
+
|
|
464
|
+
Args:
|
|
465
|
+
contract_yaml: The full YAML contract content.
|
|
466
|
+
handler_id: Handler ID (used as key suffix).
|
|
467
|
+
prefix: KV prefix (default: onex/contracts/handlers/).
|
|
468
|
+
client: Optional Consul client. If None, creates a new client from
|
|
469
|
+
environment variables.
|
|
470
|
+
|
|
471
|
+
Returns:
|
|
472
|
+
True if successful.
|
|
473
|
+
|
|
474
|
+
Example:
|
|
475
|
+
>>> contract = '''
|
|
476
|
+
... handler_id: effect.filesystem.handler
|
|
477
|
+
... name: Filesystem Handler
|
|
478
|
+
... version: "1.0.0"
|
|
479
|
+
... input_model: omnibase_infra.models.types.JsonDict
|
|
480
|
+
... output_model: omnibase_core.models.dispatch.ModelHandlerOutput
|
|
481
|
+
... descriptor:
|
|
482
|
+
... handler_kind: effect
|
|
483
|
+
... '''
|
|
484
|
+
>>> store_contract_in_consul(contract, "effect.filesystem.handler")
|
|
485
|
+
True
|
|
486
|
+
|
|
487
|
+
Note:
|
|
488
|
+
This is a synchronous function that makes blocking network calls.
|
|
489
|
+
Do not call from async code without wrapping in ``asyncio.to_thread()``.
|
|
490
|
+
For async usage, use ``RegistryContractSource.discover_handlers()`` instead.
|
|
491
|
+
|
|
492
|
+
For batch operations, pass an existing ``client`` to avoid creating
|
|
493
|
+
a new connection for each call. This improves performance when
|
|
494
|
+
storing multiple contracts.
|
|
495
|
+
"""
|
|
496
|
+
client = client or _create_consul_client_from_env()
|
|
497
|
+
key = f"{prefix}{handler_id}"
|
|
498
|
+
|
|
499
|
+
success: bool = client.kv.put(key, contract_yaml)
|
|
500
|
+
|
|
501
|
+
if success:
|
|
502
|
+
logger.info(
|
|
503
|
+
"Stored contract in Consul",
|
|
504
|
+
extra={"key": key, "handler_id": handler_id},
|
|
505
|
+
)
|
|
506
|
+
else:
|
|
507
|
+
logger.error(
|
|
508
|
+
"Failed to store contract in Consul",
|
|
509
|
+
extra={"key": key, "handler_id": handler_id},
|
|
510
|
+
)
|
|
511
|
+
|
|
512
|
+
return success
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
def list_contracts_in_consul(
|
|
516
|
+
prefix: str = DEFAULT_CONTRACT_PREFIX,
|
|
517
|
+
client: consul.Consul | None = None,
|
|
518
|
+
) -> list[str]:
|
|
519
|
+
"""List all contract keys in Consul KV.
|
|
520
|
+
|
|
521
|
+
Consul connection is configured via environment variables
|
|
522
|
+
(CONSUL_HOST, CONSUL_PORT, CONSUL_TOKEN, CONSUL_SCHEME).
|
|
523
|
+
|
|
524
|
+
Args:
|
|
525
|
+
prefix: KV prefix (default: onex/contracts/handlers/).
|
|
526
|
+
client: Optional Consul client. If None, creates a new client from
|
|
527
|
+
environment variables.
|
|
528
|
+
|
|
529
|
+
Returns:
|
|
530
|
+
List of handler IDs found.
|
|
531
|
+
|
|
532
|
+
Note:
|
|
533
|
+
This is a synchronous function that makes blocking network calls.
|
|
534
|
+
Do not call from async code without wrapping in ``asyncio.to_thread()``.
|
|
535
|
+
|
|
536
|
+
For batch operations, pass an existing ``client`` to avoid creating
|
|
537
|
+
a new connection for each call. This improves performance when
|
|
538
|
+
listing and then fetching multiple contracts.
|
|
539
|
+
"""
|
|
540
|
+
client = client or _create_consul_client_from_env()
|
|
541
|
+
_index, keys = client.kv.get(prefix, keys=True)
|
|
542
|
+
|
|
543
|
+
if keys is None:
|
|
544
|
+
return []
|
|
545
|
+
|
|
546
|
+
handler_ids = [
|
|
547
|
+
k.removeprefix(prefix) for k in keys if k != prefix and k != prefix.rstrip("/")
|
|
548
|
+
]
|
|
549
|
+
|
|
550
|
+
return handler_ids
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
def delete_contract_from_consul(
|
|
554
|
+
handler_id: str,
|
|
555
|
+
prefix: str = DEFAULT_CONTRACT_PREFIX,
|
|
556
|
+
client: consul.Consul | None = None,
|
|
557
|
+
) -> bool:
|
|
558
|
+
"""Delete a handler contract from Consul KV.
|
|
559
|
+
|
|
560
|
+
This is a utility function for removing contracts from Consul,
|
|
561
|
+
useful for cleanup and testing. Consul connection is configured
|
|
562
|
+
via environment variables (CONSUL_HOST, CONSUL_PORT, etc.).
|
|
563
|
+
|
|
564
|
+
Args:
|
|
565
|
+
handler_id: Handler ID (used as key suffix).
|
|
566
|
+
prefix: KV prefix (default: onex/contracts/handlers/).
|
|
567
|
+
client: Optional Consul client. If None, creates a new client from
|
|
568
|
+
environment variables.
|
|
569
|
+
|
|
570
|
+
Returns:
|
|
571
|
+
True if successful.
|
|
572
|
+
|
|
573
|
+
Example:
|
|
574
|
+
>>> delete_contract_from_consul("effect.filesystem.handler")
|
|
575
|
+
True
|
|
576
|
+
|
|
577
|
+
Note:
|
|
578
|
+
This is a synchronous function that makes blocking network calls.
|
|
579
|
+
Do not call from async code without wrapping in ``asyncio.to_thread()``.
|
|
580
|
+
|
|
581
|
+
For batch operations, pass an existing ``client`` to avoid creating
|
|
582
|
+
a new connection for each call. This improves performance when
|
|
583
|
+
deleting multiple contracts.
|
|
584
|
+
"""
|
|
585
|
+
client = client or _create_consul_client_from_env()
|
|
586
|
+
key = f"{prefix}{handler_id}"
|
|
587
|
+
|
|
588
|
+
success: bool = client.kv.delete(key)
|
|
589
|
+
|
|
590
|
+
if success:
|
|
591
|
+
logger.info(
|
|
592
|
+
"Deleted contract from Consul",
|
|
593
|
+
extra={"key": key, "handler_id": handler_id},
|
|
594
|
+
)
|
|
595
|
+
else:
|
|
596
|
+
logger.error(
|
|
597
|
+
"Failed to delete contract from Consul",
|
|
598
|
+
extra={"key": key, "handler_id": handler_id},
|
|
599
|
+
)
|
|
600
|
+
|
|
601
|
+
return success
|
|
602
|
+
|
|
603
|
+
|
|
604
|
+
async def astore_contract_in_consul(
|
|
605
|
+
contract_yaml: str,
|
|
606
|
+
handler_id: str,
|
|
607
|
+
prefix: str = DEFAULT_CONTRACT_PREFIX,
|
|
608
|
+
client: consul.Consul | None = None,
|
|
609
|
+
) -> bool:
|
|
610
|
+
"""Async variant of store_contract_in_consul.
|
|
611
|
+
|
|
612
|
+
Wraps the synchronous function in asyncio.to_thread() for non-blocking
|
|
613
|
+
execution in async contexts.
|
|
614
|
+
|
|
615
|
+
Args:
|
|
616
|
+
contract_yaml: The full YAML contract content.
|
|
617
|
+
handler_id: Handler ID (used as key suffix).
|
|
618
|
+
prefix: KV prefix (default: onex/contracts/handlers/).
|
|
619
|
+
client: Optional Consul client.
|
|
620
|
+
|
|
621
|
+
Returns:
|
|
622
|
+
True if successful.
|
|
623
|
+
"""
|
|
624
|
+
return await to_thread(
|
|
625
|
+
store_contract_in_consul,
|
|
626
|
+
contract_yaml,
|
|
627
|
+
handler_id,
|
|
628
|
+
prefix,
|
|
629
|
+
client,
|
|
630
|
+
)
|
|
631
|
+
|
|
632
|
+
|
|
633
|
+
async def alist_contracts_in_consul(
|
|
634
|
+
prefix: str = DEFAULT_CONTRACT_PREFIX,
|
|
635
|
+
client: consul.Consul | None = None,
|
|
636
|
+
) -> list[str]:
|
|
637
|
+
"""Async variant of list_contracts_in_consul.
|
|
638
|
+
|
|
639
|
+
Wraps the synchronous function in asyncio.to_thread() for non-blocking
|
|
640
|
+
execution in async contexts.
|
|
641
|
+
|
|
642
|
+
Args:
|
|
643
|
+
prefix: KV prefix (default: onex/contracts/handlers/).
|
|
644
|
+
client: Optional Consul client.
|
|
645
|
+
|
|
646
|
+
Returns:
|
|
647
|
+
List of handler IDs found.
|
|
648
|
+
"""
|
|
649
|
+
return await to_thread(
|
|
650
|
+
list_contracts_in_consul,
|
|
651
|
+
prefix,
|
|
652
|
+
client,
|
|
653
|
+
)
|
|
654
|
+
|
|
655
|
+
|
|
656
|
+
async def adelete_contract_from_consul(
|
|
657
|
+
handler_id: str,
|
|
658
|
+
prefix: str = DEFAULT_CONTRACT_PREFIX,
|
|
659
|
+
client: consul.Consul | None = None,
|
|
660
|
+
) -> bool:
|
|
661
|
+
"""Async variant of delete_contract_from_consul.
|
|
662
|
+
|
|
663
|
+
Wraps the synchronous function in asyncio.to_thread() for non-blocking
|
|
664
|
+
execution in async contexts.
|
|
665
|
+
|
|
666
|
+
Args:
|
|
667
|
+
handler_id: Handler ID (used as key suffix).
|
|
668
|
+
prefix: KV prefix (default: onex/contracts/handlers/).
|
|
669
|
+
client: Optional Consul client.
|
|
670
|
+
|
|
671
|
+
Returns:
|
|
672
|
+
True if successful.
|
|
673
|
+
"""
|
|
674
|
+
return await to_thread(
|
|
675
|
+
delete_contract_from_consul,
|
|
676
|
+
handler_id,
|
|
677
|
+
prefix,
|
|
678
|
+
client,
|
|
679
|
+
)
|
|
680
|
+
|
|
681
|
+
|
|
682
|
+
__all__ = [
|
|
683
|
+
"DEFAULT_CONSUL_HOST",
|
|
684
|
+
"DEFAULT_CONSUL_PORT",
|
|
685
|
+
"DEFAULT_CONTRACT_PREFIX",
|
|
686
|
+
"RegistryContractSource",
|
|
687
|
+
"adelete_contract_from_consul",
|
|
688
|
+
"alist_contracts_in_consul",
|
|
689
|
+
"astore_contract_in_consul",
|
|
690
|
+
"delete_contract_from_consul",
|
|
691
|
+
"list_contracts_in_consul",
|
|
692
|
+
"store_contract_in_consul",
|
|
693
|
+
]
|