omnibase_infra 0.2.1__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/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +261 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +138 -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 +123 -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_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 +101 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -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_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 +156 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +92 -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 +102 -0
- omnibase_infra/errors/error_infra.py +608 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +112 -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 +86 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +743 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1658 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +184 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +765 -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 +725 -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/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +75 -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 +787 -0
- omnibase_infra/handlers/handler_db.py +1039 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +1154 -0
- omnibase_infra/handlers/handler_http.py +920 -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 +748 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +422 -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 +42 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +337 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +277 -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 +915 -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 +747 -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 +99 -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/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +655 -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 +2465 -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 +136 -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 +311 -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 +147 -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_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 +37 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +80 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +185 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -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/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 +590 -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 +59 -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_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +179 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +175 -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 +40 -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 +280 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +120 -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 +48 -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 +208 -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 +99 -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/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +172 -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/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 +475 -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 +609 -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 +525 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +392 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +742 -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 +225 -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 +109 -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 +194 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +682 -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 +416 -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 +214 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +32 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +76 -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 +1137 -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 +435 -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 +99 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -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 +296 -0
- omnibase_infra/runtime/binding_config_resolver.py +2706 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/contract_handler_discovery.py +582 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +42 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -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/handler_contract_source.py +669 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2029 -0
- omnibase_infra/runtime/handler_registry.py +321 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +378 -0
- omnibase_infra/runtime/mixins/__init__.py +17 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +757 -0
- omnibase_infra/runtime/models/__init__.py +192 -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_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 +228 -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_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_scheduler_config.py +624 -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_shutdown_batch_result.py +75 -0
- omnibase_infra/runtime/models/model_shutdown_config.py +94 -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 +1102 -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 +27 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -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 +444 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1502 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2110 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1573 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +1805 -0
- omnibase_infra/runtime/service_runtime_host_process.py +2260 -0
- omnibase_infra/runtime/util_container_wiring.py +1123 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +566 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/services/__init__.py +68 -0
- omnibase_infra/services/corpus_capture.py +678 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +897 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +682 -0
- omnibase_infra/services/service_timeout_scanner.py +390 -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/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 +21 -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 +89 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_datetime.py +372 -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_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -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 +1486 -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 +1710 -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 +410 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.1.dist-info/METADATA +197 -0
- omnibase_infra-0.2.1.dist-info/RECORD +675 -0
- omnibase_infra-0.2.1.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.1.dist-info/entry_points.txt +4 -0
- omnibase_infra-0.2.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,742 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Registration domain wiring for MessageDispatchEngine integration.
|
|
4
|
+
|
|
5
|
+
This module provides domain-specific wiring functions for the Registration
|
|
6
|
+
orchestrator, enabling dispatchers to be registered with MessageDispatchEngine.
|
|
7
|
+
|
|
8
|
+
The wiring follows the domain-driven design principle where Registration-specific
|
|
9
|
+
code (dispatchers, route IDs, handlers) lives in the Registration domain rather
|
|
10
|
+
than the generic runtime layer.
|
|
11
|
+
|
|
12
|
+
Design Pattern:
|
|
13
|
+
The container_wiring.py module in runtime/ delegates to this domain wiring
|
|
14
|
+
module for Registration-specific wiring. This keeps the generic runtime
|
|
15
|
+
layer clean while allowing domain-specific customization.
|
|
16
|
+
|
|
17
|
+
```python
|
|
18
|
+
# In container_wiring.py (generic runtime)
|
|
19
|
+
from omnibase_infra.nodes.node_registration_orchestrator.wiring import (
|
|
20
|
+
wire_registration_dispatchers,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
# Delegation pattern - no Registration-specific logic in runtime
|
|
24
|
+
result = await wire_registration_dispatchers(container, engine)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Route ID Constants:
|
|
28
|
+
This module defines Registration-specific route IDs used for topic-based
|
|
29
|
+
routing in the MessageDispatchEngine:
|
|
30
|
+
- ROUTE_ID_NODE_INTROSPECTION: route.registration.node-introspection
|
|
31
|
+
- ROUTE_ID_RUNTIME_TICK: route.registration.runtime-tick
|
|
32
|
+
- ROUTE_ID_NODE_REGISTRATION_ACKED: route.registration.node-registration-acked
|
|
33
|
+
|
|
34
|
+
Related:
|
|
35
|
+
- OMN-888: Registration Orchestrator
|
|
36
|
+
- OMN-892: 2-way Registration E2E Integration Test
|
|
37
|
+
- OMN-934: Message Dispatch Engine
|
|
38
|
+
- OMN-1346: Registration Code Extraction
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
from __future__ import annotations
|
|
42
|
+
|
|
43
|
+
import logging
|
|
44
|
+
from typing import TYPE_CHECKING, TypedDict, cast
|
|
45
|
+
from uuid import UUID
|
|
46
|
+
|
|
47
|
+
from omnibase_infra.enums import EnumInfraTransportType
|
|
48
|
+
from omnibase_infra.errors import (
|
|
49
|
+
ContainerValidationError,
|
|
50
|
+
ContainerWiringError,
|
|
51
|
+
ServiceResolutionError,
|
|
52
|
+
)
|
|
53
|
+
from omnibase_infra.models.errors.model_infra_error_context import (
|
|
54
|
+
ModelInfraErrorContext,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class WiringResult(TypedDict):
|
|
59
|
+
"""Result of wire_registration_handlers operation.
|
|
60
|
+
|
|
61
|
+
This TypedDict provides precise typing for the return value,
|
|
62
|
+
eliminating the need for type narrowing in callers.
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
services: list[str]
|
|
66
|
+
status: str
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
if TYPE_CHECKING:
|
|
70
|
+
import asyncpg
|
|
71
|
+
|
|
72
|
+
from omnibase_core.container import ModelONEXContainer
|
|
73
|
+
from omnibase_infra.handlers.handler_consul import HandlerConsul
|
|
74
|
+
from omnibase_infra.nodes.node_registration_orchestrator.handlers import (
|
|
75
|
+
HandlerNodeIntrospected,
|
|
76
|
+
HandlerNodeRegistrationAcked,
|
|
77
|
+
HandlerRuntimeTick,
|
|
78
|
+
)
|
|
79
|
+
from omnibase_infra.projectors import ProjectionReaderRegistration
|
|
80
|
+
from omnibase_infra.runtime import MessageDispatchEngine, ProjectorShell
|
|
81
|
+
|
|
82
|
+
logger = logging.getLogger(__name__)
|
|
83
|
+
|
|
84
|
+
# =============================================================================
|
|
85
|
+
# Registration Domain Route IDs
|
|
86
|
+
# =============================================================================
|
|
87
|
+
# These route IDs are Registration-specific and belong in this domain module
|
|
88
|
+
# rather than the generic runtime layer.
|
|
89
|
+
|
|
90
|
+
ROUTE_ID_NODE_INTROSPECTION = "route.registration.node-introspection"
|
|
91
|
+
"""Route ID for node introspection events.
|
|
92
|
+
|
|
93
|
+
Topic pattern: *.node.introspection.events.*
|
|
94
|
+
Message type: ModelNodeIntrospectionEvent
|
|
95
|
+
Category: EVENT
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
ROUTE_ID_RUNTIME_TICK = "route.registration.runtime-tick"
|
|
99
|
+
"""Route ID for runtime tick events.
|
|
100
|
+
|
|
101
|
+
Topic pattern: *.runtime.tick.events.*
|
|
102
|
+
Message type: ModelRuntimeTick
|
|
103
|
+
Category: EVENT
|
|
104
|
+
"""
|
|
105
|
+
|
|
106
|
+
ROUTE_ID_NODE_REGISTRATION_ACKED = "route.registration.node-registration-acked"
|
|
107
|
+
"""Route ID for node registration ack commands.
|
|
108
|
+
|
|
109
|
+
Topic pattern: *.node.registration.commands.*
|
|
110
|
+
Message type: ModelNodeRegistrationAcked
|
|
111
|
+
Category: COMMAND
|
|
112
|
+
"""
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def _validate_service_registry(
|
|
116
|
+
container: ModelONEXContainer,
|
|
117
|
+
operation: str,
|
|
118
|
+
) -> None:
|
|
119
|
+
"""Validate that container.service_registry is not None.
|
|
120
|
+
|
|
121
|
+
This validation should be called before any operation that uses
|
|
122
|
+
container.service_registry to provide clear error messages when
|
|
123
|
+
the service registry is unavailable.
|
|
124
|
+
|
|
125
|
+
Note:
|
|
126
|
+
This is a local copy of the validation function to avoid circular
|
|
127
|
+
imports between this module and container_wiring.py.
|
|
128
|
+
|
|
129
|
+
Args:
|
|
130
|
+
container: The ONEX container to validate.
|
|
131
|
+
operation: Description of the operation being attempted.
|
|
132
|
+
|
|
133
|
+
Raises:
|
|
134
|
+
ServiceRegistryUnavailableError: If service_registry is None.
|
|
135
|
+
"""
|
|
136
|
+
# Import here to avoid circular import at module level
|
|
137
|
+
from omnibase_infra.errors import ServiceRegistryUnavailableError
|
|
138
|
+
|
|
139
|
+
if not hasattr(container, "service_registry"):
|
|
140
|
+
raise ServiceRegistryUnavailableError(
|
|
141
|
+
"Container missing 'service_registry' attribute",
|
|
142
|
+
operation=operation,
|
|
143
|
+
hint=(
|
|
144
|
+
"Expected ModelONEXContainer from omnibase_core. "
|
|
145
|
+
"Check that omnibase_core is properly installed."
|
|
146
|
+
),
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
if container.service_registry is None:
|
|
150
|
+
raise ServiceRegistryUnavailableError(
|
|
151
|
+
"Container service_registry is None",
|
|
152
|
+
operation=operation,
|
|
153
|
+
hint=(
|
|
154
|
+
"ModelONEXContainer.service_registry returns None when:\n"
|
|
155
|
+
" 1. enable_service_registry=False was passed to constructor\n"
|
|
156
|
+
" 2. ServiceRegistry module is not available/installed\n"
|
|
157
|
+
" 3. Container initialization encountered an import error\n"
|
|
158
|
+
"Check container logs for 'ServiceRegistry not available' warnings."
|
|
159
|
+
),
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
async def wire_registration_dispatchers(
|
|
164
|
+
container: ModelONEXContainer,
|
|
165
|
+
engine: MessageDispatchEngine,
|
|
166
|
+
correlation_id: UUID | None = None,
|
|
167
|
+
) -> dict[str, list[str] | str]:
|
|
168
|
+
"""Wire registration dispatchers into MessageDispatchEngine.
|
|
169
|
+
|
|
170
|
+
Creates dispatcher adapters for the registration handlers and registers
|
|
171
|
+
them with the MessageDispatchEngine. This enables the engine to route
|
|
172
|
+
introspection events to the appropriate handlers.
|
|
173
|
+
|
|
174
|
+
Prerequisites:
|
|
175
|
+
- wire_registration_handlers() must be called first to register
|
|
176
|
+
the underlying handlers in the container.
|
|
177
|
+
- MessageDispatchEngine must not be frozen yet. If the engine is already
|
|
178
|
+
frozen, dispatcher registration will fail with a RuntimeError from the
|
|
179
|
+
engine's register_dispatcher() method.
|
|
180
|
+
|
|
181
|
+
Args:
|
|
182
|
+
container: ONEX container with registered handlers.
|
|
183
|
+
engine: MessageDispatchEngine instance to register dispatchers with.
|
|
184
|
+
correlation_id: Optional correlation ID for error tracking. If not provided,
|
|
185
|
+
one will be auto-generated when errors are raised.
|
|
186
|
+
|
|
187
|
+
Returns:
|
|
188
|
+
Summary dict with diagnostic information:
|
|
189
|
+
- dispatchers: List of registered dispatcher IDs (e.g.,
|
|
190
|
+
['dispatcher.node-introspected', 'dispatcher.runtime-tick',
|
|
191
|
+
'dispatcher.node-registration-acked'])
|
|
192
|
+
- routes: List of registered route IDs (e.g.,
|
|
193
|
+
['route.registration.node-introspection', 'route.registration.runtime-tick',
|
|
194
|
+
'route.registration.node-registration-acked'])
|
|
195
|
+
- status: Always "success" (errors raise exceptions)
|
|
196
|
+
|
|
197
|
+
This diagnostic output can be logged or used to verify correct wiring.
|
|
198
|
+
|
|
199
|
+
Raises:
|
|
200
|
+
ServiceRegistryUnavailableError: If service_registry is missing or None.
|
|
201
|
+
ContainerWiringError: If required handlers are not registered in the container,
|
|
202
|
+
or if the engine is already frozen (cannot register new dispatchers).
|
|
203
|
+
|
|
204
|
+
Engine Frozen Behavior:
|
|
205
|
+
If engine.freeze() has been called before this function, the engine
|
|
206
|
+
will reject new dispatcher registrations. Ensure this function is called
|
|
207
|
+
during the wiring phase before engine.freeze() is invoked.
|
|
208
|
+
|
|
209
|
+
Example:
|
|
210
|
+
>>> from omnibase_core.container import ModelONEXContainer
|
|
211
|
+
>>> from omnibase_infra.runtime import MessageDispatchEngine
|
|
212
|
+
>>> import asyncpg
|
|
213
|
+
>>>
|
|
214
|
+
>>> container = ModelONEXContainer()
|
|
215
|
+
>>> pool = await asyncpg.create_pool(dsn)
|
|
216
|
+
>>> await wire_registration_handlers(container, pool)
|
|
217
|
+
>>>
|
|
218
|
+
>>> engine = MessageDispatchEngine()
|
|
219
|
+
>>> summary = await wire_registration_dispatchers(container, engine)
|
|
220
|
+
>>> print(summary)
|
|
221
|
+
{'dispatchers': [...], 'routes': [...]}
|
|
222
|
+
>>> engine.freeze() # Must freeze after wiring
|
|
223
|
+
"""
|
|
224
|
+
# Validate service_registry is available and has required methods.
|
|
225
|
+
# NOTE: Validation is done BEFORE imports for fail-fast behavior - no point loading
|
|
226
|
+
# heavy infrastructure modules if service_registry is unavailable.
|
|
227
|
+
_validate_service_registry(container, "wire_registration_dispatchers")
|
|
228
|
+
|
|
229
|
+
# Deferred imports: These imports are placed inside the function to avoid circular
|
|
230
|
+
# import issues and to delay loading dispatcher infrastructure until this function
|
|
231
|
+
# is actually called.
|
|
232
|
+
from omnibase_infra.enums import EnumMessageCategory
|
|
233
|
+
from omnibase_infra.models.dispatch.model_dispatch_route import ModelDispatchRoute
|
|
234
|
+
from omnibase_infra.nodes.node_registration_orchestrator.dispatchers import (
|
|
235
|
+
DispatcherNodeIntrospected,
|
|
236
|
+
DispatcherNodeRegistrationAcked,
|
|
237
|
+
DispatcherRuntimeTick,
|
|
238
|
+
)
|
|
239
|
+
from omnibase_infra.nodes.node_registration_orchestrator.handlers import (
|
|
240
|
+
HandlerNodeIntrospected,
|
|
241
|
+
HandlerNodeRegistrationAcked,
|
|
242
|
+
HandlerRuntimeTick,
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
dispatchers_registered: list[str] = []
|
|
246
|
+
routes_registered: list[str] = []
|
|
247
|
+
|
|
248
|
+
try:
|
|
249
|
+
# 1. Resolve handlers from container
|
|
250
|
+
handler_introspected: HandlerNodeIntrospected = (
|
|
251
|
+
await container.service_registry.resolve_service(HandlerNodeIntrospected)
|
|
252
|
+
)
|
|
253
|
+
handler_runtime_tick: HandlerRuntimeTick = (
|
|
254
|
+
await container.service_registry.resolve_service(HandlerRuntimeTick)
|
|
255
|
+
)
|
|
256
|
+
handler_acked: HandlerNodeRegistrationAcked = (
|
|
257
|
+
await container.service_registry.resolve_service(
|
|
258
|
+
HandlerNodeRegistrationAcked
|
|
259
|
+
)
|
|
260
|
+
)
|
|
261
|
+
|
|
262
|
+
# 2. Create dispatcher adapters
|
|
263
|
+
dispatcher_introspected = DispatcherNodeIntrospected(handler_introspected)
|
|
264
|
+
dispatcher_runtime_tick = DispatcherRuntimeTick(handler_runtime_tick)
|
|
265
|
+
dispatcher_acked = DispatcherNodeRegistrationAcked(handler_acked)
|
|
266
|
+
|
|
267
|
+
# 3. Register dispatchers with engine
|
|
268
|
+
# Note: Using the function-based API rather than protocol-based API
|
|
269
|
+
# because MessageDispatchEngine.register_dispatcher() takes a callable
|
|
270
|
+
|
|
271
|
+
# 3a. Register DispatcherNodeIntrospected
|
|
272
|
+
engine.register_dispatcher(
|
|
273
|
+
dispatcher_id=dispatcher_introspected.dispatcher_id,
|
|
274
|
+
dispatcher=dispatcher_introspected.handle,
|
|
275
|
+
category=dispatcher_introspected.category,
|
|
276
|
+
message_types=dispatcher_introspected.message_types,
|
|
277
|
+
node_kind=dispatcher_introspected.node_kind,
|
|
278
|
+
)
|
|
279
|
+
dispatchers_registered.append(dispatcher_introspected.dispatcher_id)
|
|
280
|
+
|
|
281
|
+
# 3b. Register DispatcherRuntimeTick
|
|
282
|
+
engine.register_dispatcher(
|
|
283
|
+
dispatcher_id=dispatcher_runtime_tick.dispatcher_id,
|
|
284
|
+
dispatcher=dispatcher_runtime_tick.handle,
|
|
285
|
+
category=dispatcher_runtime_tick.category,
|
|
286
|
+
message_types=dispatcher_runtime_tick.message_types,
|
|
287
|
+
node_kind=dispatcher_runtime_tick.node_kind,
|
|
288
|
+
)
|
|
289
|
+
dispatchers_registered.append(dispatcher_runtime_tick.dispatcher_id)
|
|
290
|
+
|
|
291
|
+
# 3c. Register DispatcherNodeRegistrationAcked
|
|
292
|
+
engine.register_dispatcher(
|
|
293
|
+
dispatcher_id=dispatcher_acked.dispatcher_id,
|
|
294
|
+
dispatcher=dispatcher_acked.handle,
|
|
295
|
+
category=dispatcher_acked.category,
|
|
296
|
+
message_types=dispatcher_acked.message_types,
|
|
297
|
+
node_kind=dispatcher_acked.node_kind,
|
|
298
|
+
)
|
|
299
|
+
dispatchers_registered.append(dispatcher_acked.dispatcher_id)
|
|
300
|
+
|
|
301
|
+
# 4. Register routes for topic-based routing
|
|
302
|
+
# 4a. Route for introspection events
|
|
303
|
+
route_introspection = ModelDispatchRoute(
|
|
304
|
+
route_id=ROUTE_ID_NODE_INTROSPECTION,
|
|
305
|
+
topic_pattern="*.node.introspection.events.*",
|
|
306
|
+
message_category=EnumMessageCategory.EVENT,
|
|
307
|
+
dispatcher_id=dispatcher_introspected.dispatcher_id,
|
|
308
|
+
message_type="ModelNodeIntrospectionEvent",
|
|
309
|
+
)
|
|
310
|
+
engine.register_route(route_introspection)
|
|
311
|
+
routes_registered.append(route_introspection.route_id)
|
|
312
|
+
|
|
313
|
+
# 4b. Route for runtime tick events
|
|
314
|
+
route_runtime_tick = ModelDispatchRoute(
|
|
315
|
+
route_id=ROUTE_ID_RUNTIME_TICK,
|
|
316
|
+
topic_pattern="*.runtime.tick.events.*",
|
|
317
|
+
message_category=EnumMessageCategory.EVENT,
|
|
318
|
+
dispatcher_id=dispatcher_runtime_tick.dispatcher_id,
|
|
319
|
+
message_type="ModelRuntimeTick",
|
|
320
|
+
)
|
|
321
|
+
engine.register_route(route_runtime_tick)
|
|
322
|
+
routes_registered.append(route_runtime_tick.route_id)
|
|
323
|
+
|
|
324
|
+
# 4c. Route for registration ack commands
|
|
325
|
+
route_acked = ModelDispatchRoute(
|
|
326
|
+
route_id=ROUTE_ID_NODE_REGISTRATION_ACKED,
|
|
327
|
+
topic_pattern="*.node.registration.commands.*",
|
|
328
|
+
message_category=EnumMessageCategory.COMMAND,
|
|
329
|
+
dispatcher_id=dispatcher_acked.dispatcher_id,
|
|
330
|
+
message_type="ModelNodeRegistrationAcked",
|
|
331
|
+
)
|
|
332
|
+
engine.register_route(route_acked)
|
|
333
|
+
routes_registered.append(route_acked.route_id)
|
|
334
|
+
|
|
335
|
+
logger.info(
|
|
336
|
+
"Registration dispatchers wired successfully",
|
|
337
|
+
extra={
|
|
338
|
+
"dispatcher_count": len(dispatchers_registered),
|
|
339
|
+
"dispatchers": dispatchers_registered,
|
|
340
|
+
"route_count": len(routes_registered),
|
|
341
|
+
"routes": routes_registered,
|
|
342
|
+
},
|
|
343
|
+
)
|
|
344
|
+
|
|
345
|
+
except Exception as e:
|
|
346
|
+
logger.exception(
|
|
347
|
+
"Failed to wire registration dispatchers",
|
|
348
|
+
extra={"error": str(e), "error_type": type(e).__name__},
|
|
349
|
+
)
|
|
350
|
+
context = ModelInfraErrorContext.with_correlation(
|
|
351
|
+
correlation_id=correlation_id,
|
|
352
|
+
transport_type=EnumInfraTransportType.RUNTIME,
|
|
353
|
+
operation="wire_registration_dispatchers",
|
|
354
|
+
)
|
|
355
|
+
raise ContainerWiringError(
|
|
356
|
+
f"Failed to wire registration dispatchers: {e}\n"
|
|
357
|
+
f"Fix: Ensure wire_registration_handlers(container, pool) "
|
|
358
|
+
f"was called first.",
|
|
359
|
+
context=context,
|
|
360
|
+
) from e
|
|
361
|
+
|
|
362
|
+
return {
|
|
363
|
+
"dispatchers": dispatchers_registered,
|
|
364
|
+
"routes": routes_registered,
|
|
365
|
+
"status": "success",
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
# =============================================================================
|
|
370
|
+
# Handler Wiring (OMN-1346)
|
|
371
|
+
# =============================================================================
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
async def wire_registration_handlers(
|
|
375
|
+
container: ModelONEXContainer,
|
|
376
|
+
pool: asyncpg.Pool,
|
|
377
|
+
liveness_interval_seconds: int | None = None,
|
|
378
|
+
projector: ProjectorShell | None = None,
|
|
379
|
+
consul_handler: HandlerConsul | None = None,
|
|
380
|
+
correlation_id: UUID | None = None,
|
|
381
|
+
) -> WiringResult:
|
|
382
|
+
"""Register registration orchestrator handlers with the container.
|
|
383
|
+
|
|
384
|
+
Registers ProjectionReaderRegistration and the three registration handlers:
|
|
385
|
+
- HandlerNodeIntrospected
|
|
386
|
+
- HandlerRuntimeTick
|
|
387
|
+
- HandlerNodeRegistrationAcked
|
|
388
|
+
|
|
389
|
+
All handlers depend on ProjectionReaderRegistration, which is registered first.
|
|
390
|
+
|
|
391
|
+
Args:
|
|
392
|
+
container: ONEX container instance to register services in.
|
|
393
|
+
pool: asyncpg connection pool for database access.
|
|
394
|
+
liveness_interval_seconds: Liveness deadline interval for ack handler.
|
|
395
|
+
If None, uses ONEX_LIVENESS_INTERVAL_SECONDS env var or default (60s).
|
|
396
|
+
projector: Optional ProjectorShell for persisting state transitions.
|
|
397
|
+
consul_handler: Optional HandlerConsul for dual registration with Consul.
|
|
398
|
+
correlation_id: Optional correlation ID for error tracking. If not provided,
|
|
399
|
+
one will be auto-generated when errors are raised.
|
|
400
|
+
|
|
401
|
+
Returns:
|
|
402
|
+
WiringResult TypedDict with:
|
|
403
|
+
- services: List of registered service names
|
|
404
|
+
- status: Always "success" (errors raise exceptions)
|
|
405
|
+
|
|
406
|
+
Raises:
|
|
407
|
+
ServiceRegistryUnavailableError: If service_registry is missing or None.
|
|
408
|
+
ContainerValidationError: If container missing required service_registry API.
|
|
409
|
+
ContainerWiringError: If service registration fails.
|
|
410
|
+
|
|
411
|
+
Note:
|
|
412
|
+
Services are registered with scope="global" and may conflict if multiple
|
|
413
|
+
plugins register the same interface type. This is acceptable for the
|
|
414
|
+
Registration domain as these handlers are singletons by design. If you
|
|
415
|
+
need to register multiple implementations of the same interface, use
|
|
416
|
+
domain-specific interface types or scoped registrations to ensure isolation.
|
|
417
|
+
"""
|
|
418
|
+
_validate_service_registry(container, "wire_registration_handlers")
|
|
419
|
+
|
|
420
|
+
from omnibase_core.models.primitives import ModelSemVer
|
|
421
|
+
from omnibase_infra.nodes.node_registration_orchestrator.handlers import (
|
|
422
|
+
HandlerNodeIntrospected,
|
|
423
|
+
HandlerNodeRegistrationAcked,
|
|
424
|
+
HandlerRuntimeTick,
|
|
425
|
+
)
|
|
426
|
+
from omnibase_infra.nodes.node_registration_orchestrator.handlers.handler_node_registration_acked import (
|
|
427
|
+
get_liveness_interval_seconds,
|
|
428
|
+
)
|
|
429
|
+
from omnibase_infra.projectors import ProjectionReaderRegistration
|
|
430
|
+
from omnibase_infra.runtime.projector_shell import ProjectorShell
|
|
431
|
+
|
|
432
|
+
semver_default = ModelSemVer.parse("1.0.0")
|
|
433
|
+
resolved_liveness_interval = get_liveness_interval_seconds(
|
|
434
|
+
liveness_interval_seconds
|
|
435
|
+
)
|
|
436
|
+
services_registered: list[str] = []
|
|
437
|
+
|
|
438
|
+
try:
|
|
439
|
+
projection_reader = ProjectionReaderRegistration(pool)
|
|
440
|
+
await container.service_registry.register_instance(
|
|
441
|
+
interface=ProjectionReaderRegistration,
|
|
442
|
+
instance=projection_reader,
|
|
443
|
+
scope="global",
|
|
444
|
+
metadata={
|
|
445
|
+
"description": "Registration projection reader",
|
|
446
|
+
"version": str(semver_default),
|
|
447
|
+
},
|
|
448
|
+
)
|
|
449
|
+
services_registered.append("ProjectionReaderRegistration")
|
|
450
|
+
logger.debug("Registered ProjectionReaderRegistration in container")
|
|
451
|
+
|
|
452
|
+
if projector is not None:
|
|
453
|
+
await container.service_registry.register_instance(
|
|
454
|
+
interface=ProjectorShell,
|
|
455
|
+
instance=projector,
|
|
456
|
+
scope="global",
|
|
457
|
+
metadata={
|
|
458
|
+
"description": "Registration projector",
|
|
459
|
+
"version": str(semver_default),
|
|
460
|
+
},
|
|
461
|
+
)
|
|
462
|
+
services_registered.append("ProjectorShell")
|
|
463
|
+
logger.debug("Registered ProjectorShell in container")
|
|
464
|
+
|
|
465
|
+
handler_introspected = HandlerNodeIntrospected(
|
|
466
|
+
projection_reader,
|
|
467
|
+
projector=projector,
|
|
468
|
+
consul_handler=consul_handler,
|
|
469
|
+
)
|
|
470
|
+
await container.service_registry.register_instance(
|
|
471
|
+
interface=HandlerNodeIntrospected,
|
|
472
|
+
instance=handler_introspected,
|
|
473
|
+
scope="global",
|
|
474
|
+
metadata={
|
|
475
|
+
"description": "Handler for NodeIntrospectionEvent",
|
|
476
|
+
"version": str(semver_default),
|
|
477
|
+
"has_projector": projector is not None,
|
|
478
|
+
"has_consul_handler": consul_handler is not None,
|
|
479
|
+
},
|
|
480
|
+
)
|
|
481
|
+
services_registered.append("HandlerNodeIntrospected")
|
|
482
|
+
logger.debug("Registered HandlerNodeIntrospected in container")
|
|
483
|
+
|
|
484
|
+
handler_runtime_tick = HandlerRuntimeTick(projection_reader)
|
|
485
|
+
await container.service_registry.register_instance(
|
|
486
|
+
interface=HandlerRuntimeTick,
|
|
487
|
+
instance=handler_runtime_tick,
|
|
488
|
+
scope="global",
|
|
489
|
+
metadata={
|
|
490
|
+
"description": "Handler for RuntimeTick",
|
|
491
|
+
"version": str(semver_default),
|
|
492
|
+
},
|
|
493
|
+
)
|
|
494
|
+
services_registered.append("HandlerRuntimeTick")
|
|
495
|
+
logger.debug("Registered HandlerRuntimeTick in container")
|
|
496
|
+
|
|
497
|
+
handler_acked = HandlerNodeRegistrationAcked(
|
|
498
|
+
projection_reader,
|
|
499
|
+
liveness_interval_seconds=resolved_liveness_interval,
|
|
500
|
+
)
|
|
501
|
+
await container.service_registry.register_instance(
|
|
502
|
+
interface=HandlerNodeRegistrationAcked,
|
|
503
|
+
instance=handler_acked,
|
|
504
|
+
scope="global",
|
|
505
|
+
metadata={
|
|
506
|
+
"description": "Handler for NodeRegistrationAcked",
|
|
507
|
+
"version": str(semver_default),
|
|
508
|
+
"liveness_interval_seconds": resolved_liveness_interval,
|
|
509
|
+
},
|
|
510
|
+
)
|
|
511
|
+
services_registered.append("HandlerNodeRegistrationAcked")
|
|
512
|
+
logger.debug("Registered HandlerNodeRegistrationAcked in container")
|
|
513
|
+
|
|
514
|
+
except AttributeError as e:
|
|
515
|
+
error_str = str(e)
|
|
516
|
+
hint = (
|
|
517
|
+
"Container.service_registry missing 'register_instance' method."
|
|
518
|
+
if "register_instance" in error_str
|
|
519
|
+
else f"Missing attribute: {e}"
|
|
520
|
+
)
|
|
521
|
+
logger.exception("Failed to register handlers", extra={"hint": hint})
|
|
522
|
+
context = ModelInfraErrorContext.with_correlation(
|
|
523
|
+
correlation_id=correlation_id,
|
|
524
|
+
transport_type=EnumInfraTransportType.RUNTIME,
|
|
525
|
+
operation="wire_registration_handlers",
|
|
526
|
+
)
|
|
527
|
+
raise ContainerValidationError(
|
|
528
|
+
f"Handler wiring failed - {hint}\nOriginal: {e}",
|
|
529
|
+
context=context,
|
|
530
|
+
missing_attribute="register_instance"
|
|
531
|
+
if "register_instance" in error_str
|
|
532
|
+
else str(e),
|
|
533
|
+
) from e
|
|
534
|
+
except Exception as e:
|
|
535
|
+
logger.exception("Failed to register handlers", extra={"error": str(e)})
|
|
536
|
+
context = ModelInfraErrorContext.with_correlation(
|
|
537
|
+
correlation_id=correlation_id,
|
|
538
|
+
transport_type=EnumInfraTransportType.RUNTIME,
|
|
539
|
+
operation="wire_registration_handlers",
|
|
540
|
+
)
|
|
541
|
+
raise ContainerWiringError(
|
|
542
|
+
f"Failed to wire registration handlers: {e}",
|
|
543
|
+
context=context,
|
|
544
|
+
) from e
|
|
545
|
+
|
|
546
|
+
logger.info(
|
|
547
|
+
"Registration handlers wired successfully",
|
|
548
|
+
extra={
|
|
549
|
+
"service_count": len(services_registered),
|
|
550
|
+
"services": services_registered,
|
|
551
|
+
},
|
|
552
|
+
)
|
|
553
|
+
return {"services": services_registered, "status": "success"}
|
|
554
|
+
|
|
555
|
+
|
|
556
|
+
# =============================================================================
|
|
557
|
+
# Handler Getters (OMN-1346)
|
|
558
|
+
# =============================================================================
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
async def get_projection_reader_from_container(
|
|
562
|
+
container: ModelONEXContainer,
|
|
563
|
+
correlation_id: UUID | None = None,
|
|
564
|
+
) -> ProjectionReaderRegistration:
|
|
565
|
+
"""Get ProjectionReaderRegistration from container.
|
|
566
|
+
|
|
567
|
+
Args:
|
|
568
|
+
container: ONEX container with registered services.
|
|
569
|
+
correlation_id: Optional correlation ID for error tracking.
|
|
570
|
+
|
|
571
|
+
Returns:
|
|
572
|
+
ProjectionReaderRegistration instance from container.
|
|
573
|
+
|
|
574
|
+
Raises:
|
|
575
|
+
ServiceResolutionError: If service is not registered.
|
|
576
|
+
"""
|
|
577
|
+
from omnibase_infra.projectors import ProjectionReaderRegistration
|
|
578
|
+
|
|
579
|
+
_validate_service_registry(container, "resolve ProjectionReaderRegistration")
|
|
580
|
+
try:
|
|
581
|
+
return cast(
|
|
582
|
+
ProjectionReaderRegistration,
|
|
583
|
+
await container.service_registry.resolve_service(
|
|
584
|
+
ProjectionReaderRegistration
|
|
585
|
+
),
|
|
586
|
+
)
|
|
587
|
+
except Exception as e:
|
|
588
|
+
logger.exception("Failed to resolve ProjectionReaderRegistration")
|
|
589
|
+
context = ModelInfraErrorContext.with_correlation(
|
|
590
|
+
correlation_id=correlation_id,
|
|
591
|
+
transport_type=EnumInfraTransportType.RUNTIME,
|
|
592
|
+
operation="resolve_ProjectionReaderRegistration",
|
|
593
|
+
)
|
|
594
|
+
raise ServiceResolutionError(
|
|
595
|
+
f"ProjectionReaderRegistration not registered. "
|
|
596
|
+
f"Call wire_registration_handlers first. Error: {e}",
|
|
597
|
+
service_name="ProjectionReaderRegistration",
|
|
598
|
+
context=context,
|
|
599
|
+
) from e
|
|
600
|
+
|
|
601
|
+
|
|
602
|
+
async def get_handler_node_introspected_from_container(
|
|
603
|
+
container: ModelONEXContainer,
|
|
604
|
+
correlation_id: UUID | None = None,
|
|
605
|
+
) -> HandlerNodeIntrospected:
|
|
606
|
+
"""Get HandlerNodeIntrospected from container.
|
|
607
|
+
|
|
608
|
+
Args:
|
|
609
|
+
container: ONEX container with registered services.
|
|
610
|
+
correlation_id: Optional correlation ID for error tracking.
|
|
611
|
+
|
|
612
|
+
Returns:
|
|
613
|
+
HandlerNodeIntrospected instance from container.
|
|
614
|
+
|
|
615
|
+
Raises:
|
|
616
|
+
ServiceResolutionError: If service is not registered.
|
|
617
|
+
"""
|
|
618
|
+
from omnibase_infra.nodes.node_registration_orchestrator.handlers import (
|
|
619
|
+
HandlerNodeIntrospected,
|
|
620
|
+
)
|
|
621
|
+
|
|
622
|
+
_validate_service_registry(container, "resolve HandlerNodeIntrospected")
|
|
623
|
+
try:
|
|
624
|
+
return cast(
|
|
625
|
+
HandlerNodeIntrospected,
|
|
626
|
+
await container.service_registry.resolve_service(HandlerNodeIntrospected),
|
|
627
|
+
)
|
|
628
|
+
except Exception as e:
|
|
629
|
+
logger.exception("Failed to resolve HandlerNodeIntrospected")
|
|
630
|
+
context = ModelInfraErrorContext.with_correlation(
|
|
631
|
+
correlation_id=correlation_id,
|
|
632
|
+
transport_type=EnumInfraTransportType.RUNTIME,
|
|
633
|
+
operation="resolve_HandlerNodeIntrospected",
|
|
634
|
+
)
|
|
635
|
+
raise ServiceResolutionError(
|
|
636
|
+
f"HandlerNodeIntrospected not registered. "
|
|
637
|
+
f"Call wire_registration_handlers first. Error: {e}",
|
|
638
|
+
service_name="HandlerNodeIntrospected",
|
|
639
|
+
context=context,
|
|
640
|
+
) from e
|
|
641
|
+
|
|
642
|
+
|
|
643
|
+
async def get_handler_runtime_tick_from_container(
|
|
644
|
+
container: ModelONEXContainer,
|
|
645
|
+
correlation_id: UUID | None = None,
|
|
646
|
+
) -> HandlerRuntimeTick:
|
|
647
|
+
"""Get HandlerRuntimeTick from container.
|
|
648
|
+
|
|
649
|
+
Args:
|
|
650
|
+
container: ONEX container with registered services.
|
|
651
|
+
correlation_id: Optional correlation ID for error tracking.
|
|
652
|
+
|
|
653
|
+
Returns:
|
|
654
|
+
HandlerRuntimeTick instance from container.
|
|
655
|
+
|
|
656
|
+
Raises:
|
|
657
|
+
ServiceResolutionError: If service is not registered.
|
|
658
|
+
"""
|
|
659
|
+
from omnibase_infra.nodes.node_registration_orchestrator.handlers import (
|
|
660
|
+
HandlerRuntimeTick,
|
|
661
|
+
)
|
|
662
|
+
|
|
663
|
+
_validate_service_registry(container, "resolve HandlerRuntimeTick")
|
|
664
|
+
try:
|
|
665
|
+
return cast(
|
|
666
|
+
HandlerRuntimeTick,
|
|
667
|
+
await container.service_registry.resolve_service(HandlerRuntimeTick),
|
|
668
|
+
)
|
|
669
|
+
except Exception as e:
|
|
670
|
+
logger.exception("Failed to resolve HandlerRuntimeTick")
|
|
671
|
+
context = ModelInfraErrorContext.with_correlation(
|
|
672
|
+
correlation_id=correlation_id,
|
|
673
|
+
transport_type=EnumInfraTransportType.RUNTIME,
|
|
674
|
+
operation="resolve_HandlerRuntimeTick",
|
|
675
|
+
)
|
|
676
|
+
raise ServiceResolutionError(
|
|
677
|
+
f"HandlerRuntimeTick not registered. "
|
|
678
|
+
f"Call wire_registration_handlers first. Error: {e}",
|
|
679
|
+
service_name="HandlerRuntimeTick",
|
|
680
|
+
context=context,
|
|
681
|
+
) from e
|
|
682
|
+
|
|
683
|
+
|
|
684
|
+
async def get_handler_node_registration_acked_from_container(
|
|
685
|
+
container: ModelONEXContainer,
|
|
686
|
+
correlation_id: UUID | None = None,
|
|
687
|
+
) -> HandlerNodeRegistrationAcked:
|
|
688
|
+
"""Get HandlerNodeRegistrationAcked from container.
|
|
689
|
+
|
|
690
|
+
Args:
|
|
691
|
+
container: ONEX container with registered services.
|
|
692
|
+
correlation_id: Optional correlation ID for error tracking.
|
|
693
|
+
|
|
694
|
+
Returns:
|
|
695
|
+
HandlerNodeRegistrationAcked instance from container.
|
|
696
|
+
|
|
697
|
+
Raises:
|
|
698
|
+
ServiceResolutionError: If service is not registered.
|
|
699
|
+
"""
|
|
700
|
+
from omnibase_infra.nodes.node_registration_orchestrator.handlers import (
|
|
701
|
+
HandlerNodeRegistrationAcked,
|
|
702
|
+
)
|
|
703
|
+
|
|
704
|
+
_validate_service_registry(container, "resolve HandlerNodeRegistrationAcked")
|
|
705
|
+
try:
|
|
706
|
+
return cast(
|
|
707
|
+
HandlerNodeRegistrationAcked,
|
|
708
|
+
await container.service_registry.resolve_service(
|
|
709
|
+
HandlerNodeRegistrationAcked
|
|
710
|
+
),
|
|
711
|
+
)
|
|
712
|
+
except Exception as e:
|
|
713
|
+
logger.exception("Failed to resolve HandlerNodeRegistrationAcked")
|
|
714
|
+
context = ModelInfraErrorContext.with_correlation(
|
|
715
|
+
correlation_id=correlation_id,
|
|
716
|
+
transport_type=EnumInfraTransportType.RUNTIME,
|
|
717
|
+
operation="resolve_HandlerNodeRegistrationAcked",
|
|
718
|
+
)
|
|
719
|
+
raise ServiceResolutionError(
|
|
720
|
+
f"HandlerNodeRegistrationAcked not registered. "
|
|
721
|
+
f"Call wire_registration_handlers first. Error: {e}",
|
|
722
|
+
service_name="HandlerNodeRegistrationAcked",
|
|
723
|
+
context=context,
|
|
724
|
+
) from e
|
|
725
|
+
|
|
726
|
+
|
|
727
|
+
__all__: list[str] = [
|
|
728
|
+
# Route ID constants
|
|
729
|
+
"ROUTE_ID_NODE_INTROSPECTION",
|
|
730
|
+
"ROUTE_ID_NODE_REGISTRATION_ACKED",
|
|
731
|
+
"ROUTE_ID_RUNTIME_TICK",
|
|
732
|
+
# Dispatcher wiring
|
|
733
|
+
"wire_registration_dispatchers",
|
|
734
|
+
# Handler wiring (OMN-1346)
|
|
735
|
+
"wire_registration_handlers",
|
|
736
|
+
"WiringResult",
|
|
737
|
+
# Handler getters (OMN-1346)
|
|
738
|
+
"get_projection_reader_from_container",
|
|
739
|
+
"get_handler_node_introspected_from_container",
|
|
740
|
+
"get_handler_runtime_tick_from_container",
|
|
741
|
+
"get_handler_node_registration_acked_from_container",
|
|
742
|
+
]
|