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,15 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Node Registration Reducer - FSM-driven declarative reducer for node registration."""
|
|
4
|
+
|
|
5
|
+
from omnibase_infra.nodes.node_registration_reducer.models import ModelValidationResult
|
|
6
|
+
from omnibase_infra.nodes.node_registration_reducer.node import NodeRegistrationReducer
|
|
7
|
+
from omnibase_infra.nodes.node_registration_reducer.registry import (
|
|
8
|
+
RegistryInfraNodeRegistrationReducer,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"ModelValidationResult",
|
|
13
|
+
"NodeRegistrationReducer",
|
|
14
|
+
"RegistryInfraNodeRegistrationReducer",
|
|
15
|
+
]
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
# ONEX Node Contract - Registration Reducer Node
|
|
4
|
+
#
|
|
5
|
+
# This reducer follows the pure function pattern for node registration workflows:
|
|
6
|
+
# reduce(state, event) -> ModelReducerOutput[state + intents]
|
|
7
|
+
#
|
|
8
|
+
# The FSM defines state transitions for the registration lifecycle:
|
|
9
|
+
# idle -> pending -> partial -> complete
|
|
10
|
+
# \ \
|
|
11
|
+
# -> failed <-
|
|
12
|
+
#
|
|
13
|
+
# All state transition logic is driven by this contract.
|
|
14
|
+
# =============================================================================
|
|
15
|
+
contract_version:
|
|
16
|
+
major: 1
|
|
17
|
+
minor: 0
|
|
18
|
+
patch: 0
|
|
19
|
+
node_version: "1.0.0"
|
|
20
|
+
name: "node_registration_reducer"
|
|
21
|
+
node_type: "REDUCER_GENERIC"
|
|
22
|
+
# Enum Usage (CLAUDE.md reference):
|
|
23
|
+
# - node_type uses EnumNodeOutputType.REDUCER for validation
|
|
24
|
+
# - Reducer outputs are PROJECTION type (state + intents) via EnumNodeOutputType
|
|
25
|
+
# - Incoming messages are routed via EnumMessageCategory (EVENT/COMMAND)
|
|
26
|
+
# - PROJECTION exists only in EnumNodeOutputType and is only valid for REDUCER nodes
|
|
27
|
+
# - See: docs/decisions/adr-enum-message-category-vs-node-output-type.md
|
|
28
|
+
description: "Pure reducer for node registration workflow - processes introspection events and emits registration intents for Consul and PostgreSQL backends."
|
|
29
|
+
input_model:
|
|
30
|
+
name: "ModelReducerInput"
|
|
31
|
+
module: "omnibase_core.models.reducer.model_reducer_input"
|
|
32
|
+
description: "Reducer input containing introspection event and trigger."
|
|
33
|
+
output_model:
|
|
34
|
+
name: "ModelReducerOutput"
|
|
35
|
+
module: "omnibase_core.models.reducer.model_reducer_output"
|
|
36
|
+
description: "Reducer output containing new state and registration intents."
|
|
37
|
+
# FSM State Machine Definition
|
|
38
|
+
# ============================
|
|
39
|
+
# The registration reducer uses an FSM to manage the registration lifecycle.
|
|
40
|
+
# This is the SINGLE SOURCE OF TRUTH for all state transition logic.
|
|
41
|
+
#
|
|
42
|
+
# State Diagram:
|
|
43
|
+
# +-------+ introspection +---------+
|
|
44
|
+
# | idle | ----------------> | pending |
|
|
45
|
+
# +-------+ +---------+
|
|
46
|
+
# ^ | |
|
|
47
|
+
# | consul confirmed | | postgres confirmed
|
|
48
|
+
# | (first) v v (first)
|
|
49
|
+
# | +---------+
|
|
50
|
+
# | | partial |
|
|
51
|
+
# | +---------+
|
|
52
|
+
# | | |
|
|
53
|
+
# | remaining | | error received
|
|
54
|
+
# | confirmed v v
|
|
55
|
+
# | +---------+ +---------+
|
|
56
|
+
# +---reset------| complete| | failed |---reset---+
|
|
57
|
+
# +---------+ +---------+ |
|
|
58
|
+
# v
|
|
59
|
+
# +-------+
|
|
60
|
+
# | idle |
|
|
61
|
+
# +-------+
|
|
62
|
+
#
|
|
63
|
+
state_machine:
|
|
64
|
+
state_machine_name: "registration_fsm"
|
|
65
|
+
initial_state: "idle"
|
|
66
|
+
states:
|
|
67
|
+
- state_name: "idle"
|
|
68
|
+
description: "Initial state - waiting for introspection event"
|
|
69
|
+
entry_actions: []
|
|
70
|
+
exit_actions: []
|
|
71
|
+
required_data: []
|
|
72
|
+
- state_name: "pending"
|
|
73
|
+
description: "Registration initiated - waiting for backend confirmations"
|
|
74
|
+
entry_actions:
|
|
75
|
+
- "emit_consul_intent"
|
|
76
|
+
- "emit_postgres_intent"
|
|
77
|
+
exit_actions: []
|
|
78
|
+
required_data:
|
|
79
|
+
- "node_id"
|
|
80
|
+
- "correlation_id"
|
|
81
|
+
- state_name: "partial"
|
|
82
|
+
description: "One backend confirmed - waiting for remaining confirmation"
|
|
83
|
+
entry_actions: []
|
|
84
|
+
exit_actions: []
|
|
85
|
+
required_data:
|
|
86
|
+
- "node_id"
|
|
87
|
+
- "correlation_id"
|
|
88
|
+
- state_name: "complete"
|
|
89
|
+
description: "Both backends confirmed - registration successful"
|
|
90
|
+
is_terminal: false # Can be reset for re-registration
|
|
91
|
+
entry_actions: []
|
|
92
|
+
exit_actions: []
|
|
93
|
+
required_data:
|
|
94
|
+
- "node_id"
|
|
95
|
+
- state_name: "failed"
|
|
96
|
+
description: "Registration failed - recoverable via reset"
|
|
97
|
+
is_terminal: false # Can be reset for retry
|
|
98
|
+
entry_actions: []
|
|
99
|
+
exit_actions: []
|
|
100
|
+
required_data:
|
|
101
|
+
- "failure_reason"
|
|
102
|
+
transitions:
|
|
103
|
+
# idle -> pending: On introspection event
|
|
104
|
+
- from_state: "idle"
|
|
105
|
+
to_state: "pending"
|
|
106
|
+
trigger: "introspection_received"
|
|
107
|
+
description: "Start registration on introspection event"
|
|
108
|
+
conditions:
|
|
109
|
+
- expression: "node_id is_present"
|
|
110
|
+
required: true
|
|
111
|
+
- expression: "node_type is_valid"
|
|
112
|
+
required: true
|
|
113
|
+
actions:
|
|
114
|
+
- action_name: "build_consul_intent"
|
|
115
|
+
action_type: "intent_emission"
|
|
116
|
+
- action_name: "build_postgres_intent"
|
|
117
|
+
action_type: "intent_emission"
|
|
118
|
+
# pending -> partial: On first confirmation
|
|
119
|
+
- from_state: "pending"
|
|
120
|
+
to_state: "partial"
|
|
121
|
+
trigger: "consul_confirmed"
|
|
122
|
+
description: "Consul registration confirmed"
|
|
123
|
+
actions:
|
|
124
|
+
- action_name: "mark_consul_confirmed"
|
|
125
|
+
action_type: "state_update"
|
|
126
|
+
- from_state: "pending"
|
|
127
|
+
to_state: "partial"
|
|
128
|
+
trigger: "postgres_confirmed"
|
|
129
|
+
description: "PostgreSQL registration confirmed"
|
|
130
|
+
actions:
|
|
131
|
+
- action_name: "mark_postgres_confirmed"
|
|
132
|
+
action_type: "state_update"
|
|
133
|
+
# pending -> failed: On error
|
|
134
|
+
- from_state: "pending"
|
|
135
|
+
to_state: "failed"
|
|
136
|
+
trigger: "error_received"
|
|
137
|
+
description: "Registration failed from pending state"
|
|
138
|
+
actions:
|
|
139
|
+
- action_name: "record_failure"
|
|
140
|
+
action_type: "state_update"
|
|
141
|
+
# partial -> complete: On second confirmation
|
|
142
|
+
- from_state: "partial"
|
|
143
|
+
to_state: "complete"
|
|
144
|
+
trigger: "consul_confirmed"
|
|
145
|
+
description: "Consul confirmed after postgres - registration complete"
|
|
146
|
+
conditions:
|
|
147
|
+
- expression: "postgres_confirmed is_true"
|
|
148
|
+
required: true
|
|
149
|
+
- from_state: "partial"
|
|
150
|
+
to_state: "complete"
|
|
151
|
+
trigger: "postgres_confirmed"
|
|
152
|
+
description: "PostgreSQL confirmed after consul - registration complete"
|
|
153
|
+
conditions:
|
|
154
|
+
- expression: "consul_confirmed is_true"
|
|
155
|
+
required: true
|
|
156
|
+
# partial -> failed: On error
|
|
157
|
+
- from_state: "partial"
|
|
158
|
+
to_state: "failed"
|
|
159
|
+
trigger: "error_received"
|
|
160
|
+
description: "Registration failed from partial state"
|
|
161
|
+
actions:
|
|
162
|
+
- action_name: "record_failure"
|
|
163
|
+
action_type: "state_update"
|
|
164
|
+
# Reset transitions: failed/complete -> idle
|
|
165
|
+
- from_state: "failed"
|
|
166
|
+
to_state: "idle"
|
|
167
|
+
trigger: "reset"
|
|
168
|
+
description: "Reset from failed state for retry"
|
|
169
|
+
actions:
|
|
170
|
+
- action_name: "clear_state"
|
|
171
|
+
action_type: "state_update"
|
|
172
|
+
- from_state: "complete"
|
|
173
|
+
to_state: "idle"
|
|
174
|
+
trigger: "reset"
|
|
175
|
+
description: "Reset from complete state for re-registration"
|
|
176
|
+
actions:
|
|
177
|
+
- action_name: "clear_state"
|
|
178
|
+
action_type: "state_update"
|
|
179
|
+
# Validation failure: idle -> failed
|
|
180
|
+
- from_state: "idle"
|
|
181
|
+
to_state: "failed"
|
|
182
|
+
trigger: "validation_failed"
|
|
183
|
+
description: "Event validation failed"
|
|
184
|
+
actions:
|
|
185
|
+
- action_name: "record_validation_failure"
|
|
186
|
+
action_type: "state_update"
|
|
187
|
+
# NOTE: persistence_enabled controls FSM intent emission (implemented in omnibase_core
|
|
188
|
+
# fsm_executor.py). When true, FSM transitions emit "persist_state" intents. However,
|
|
189
|
+
# the generic intent dispatch handler for these intents is NOT YET IMPLEMENTED.
|
|
190
|
+
# Current workaround: Handlers call RegistrationProjector.persist_state_transition()
|
|
191
|
+
# directly instead of relying on intent-based persistence. This flag is kept true
|
|
192
|
+
# for forward compatibility when generic state persistence dispatch is implemented.
|
|
193
|
+
# See: omnibase_core/utils/fsm_executor.py:168 for intent emission logic.
|
|
194
|
+
persistence_enabled: true
|
|
195
|
+
terminal_states: []
|
|
196
|
+
# Note: complete and failed are NOT true terminals - they can reset to idle
|
|
197
|
+
# This list is empty because all states can transition (via reset)
|
|
198
|
+
# Intent Emission Configuration
|
|
199
|
+
# ============================
|
|
200
|
+
# The reducer emits intents for Effect layer execution.
|
|
201
|
+
# These intents are NOT executed by the reducer - they are returned
|
|
202
|
+
# in the ModelReducerOutput for the Runtime to publish.
|
|
203
|
+
intent_emission:
|
|
204
|
+
enabled: true
|
|
205
|
+
intents:
|
|
206
|
+
- intent_type: "consul.register"
|
|
207
|
+
target_pattern: "consul://service/{service_name}"
|
|
208
|
+
payload_model: "ModelPayloadConsulRegister"
|
|
209
|
+
payload_module: "omnibase_infra.nodes.reducers.models.model_payload_consul_register"
|
|
210
|
+
description: "Register node with Consul service discovery"
|
|
211
|
+
- intent_type: "postgres.upsert_registration"
|
|
212
|
+
target_pattern: "postgres://node_registrations/{node_id}"
|
|
213
|
+
payload_model: "ModelPayloadPostgresUpsertRegistration"
|
|
214
|
+
payload_module: "omnibase_infra.nodes.reducers.models.model_payload_postgres_upsert_registration"
|
|
215
|
+
description: "Upsert node registration record in PostgreSQL"
|
|
216
|
+
# State Model Configuration
|
|
217
|
+
# =========================
|
|
218
|
+
# The reducer uses ModelRegistrationState for immutable state management.
|
|
219
|
+
state_model:
|
|
220
|
+
name: "ModelRegistrationState"
|
|
221
|
+
module: "omnibase_infra.nodes.reducers.models.model_registration_state"
|
|
222
|
+
description: "Immutable state model for pure reducer pattern"
|
|
223
|
+
# Validation Configuration
|
|
224
|
+
# ========================
|
|
225
|
+
# Event validation rules applied before state transitions.
|
|
226
|
+
validation:
|
|
227
|
+
enabled: true
|
|
228
|
+
rules:
|
|
229
|
+
- field: "node_id"
|
|
230
|
+
required: true
|
|
231
|
+
error_code: "missing_node_id"
|
|
232
|
+
error_message: "node_id is required for registration identity"
|
|
233
|
+
- field: "node_type"
|
|
234
|
+
required: true
|
|
235
|
+
valid_values:
|
|
236
|
+
- "effect"
|
|
237
|
+
- "compute"
|
|
238
|
+
- "reducer"
|
|
239
|
+
- "orchestrator"
|
|
240
|
+
error_code: "missing_node_type"
|
|
241
|
+
invalid_error_code: "invalid_node_type"
|
|
242
|
+
error_message: "node_type is required for service categorization"
|
|
243
|
+
# Performance Configuration
|
|
244
|
+
# =========================
|
|
245
|
+
# Performance thresholds for monitoring.
|
|
246
|
+
# Values can be overridden via environment variables.
|
|
247
|
+
performance:
|
|
248
|
+
thresholds:
|
|
249
|
+
reduce_ms:
|
|
250
|
+
default: 300.0
|
|
251
|
+
env_var: "ONEX_PERF_THRESHOLD_REDUCE_MS"
|
|
252
|
+
description: "Target processing time for reduce() method"
|
|
253
|
+
intent_build_ms:
|
|
254
|
+
default: 50.0
|
|
255
|
+
env_var: "ONEX_PERF_THRESHOLD_INTENT_BUILD_MS"
|
|
256
|
+
description: "Target processing time for intent building"
|
|
257
|
+
idempotency_check_ms:
|
|
258
|
+
default: 1.0
|
|
259
|
+
env_var: "ONEX_PERF_THRESHOLD_IDEMPOTENCY_CHECK_MS"
|
|
260
|
+
description: "Target processing time for idempotency check"
|
|
261
|
+
# Idempotency Configuration
|
|
262
|
+
# =========================
|
|
263
|
+
# The reducer supports idempotent event processing via event_id tracking.
|
|
264
|
+
idempotency:
|
|
265
|
+
enabled: true
|
|
266
|
+
strategy: "event_id_tracking"
|
|
267
|
+
derivation: "deterministic_hash"
|
|
268
|
+
hash_fields:
|
|
269
|
+
- "node_id"
|
|
270
|
+
- "node_type"
|
|
271
|
+
- "timestamp"
|
|
272
|
+
description: "Skip duplicate events based on event_id or derived hash"
|
|
273
|
+
# Dependencies
|
|
274
|
+
# ============
|
|
275
|
+
dependencies:
|
|
276
|
+
- name: "container"
|
|
277
|
+
type: "ModelONEXContainer"
|
|
278
|
+
module: "omnibase_core.models.container.model_onex_container"
|
|
279
|
+
description: "ONEX dependency injection container"
|
|
280
|
+
# Health Check
|
|
281
|
+
# ============
|
|
282
|
+
health_check:
|
|
283
|
+
enabled: true
|
|
284
|
+
endpoint: "/health"
|
|
285
|
+
interval_seconds: 30
|
|
286
|
+
# Metadata
|
|
287
|
+
# ========
|
|
288
|
+
metadata:
|
|
289
|
+
author: "OmniNode Team"
|
|
290
|
+
created: "2025-12-28"
|
|
291
|
+
updated: "2026-01-06"
|
|
292
|
+
tags:
|
|
293
|
+
- "reducer"
|
|
294
|
+
- "registration"
|
|
295
|
+
- "fsm"
|
|
296
|
+
- "pure-function"
|
|
297
|
+
- "mvp"
|
|
298
|
+
related_tickets:
|
|
299
|
+
- "OMN-889"
|
|
300
|
+
- "OMN-1104"
|
|
301
|
+
- "OMN-1263" # Pre-existing test failures and integration test coverage tracking
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Models for NodeRegistrationReducer.
|
|
4
|
+
|
|
5
|
+
This module exports models used by the NodeRegistrationReducer (FSM-driven pattern).
|
|
6
|
+
|
|
7
|
+
Available Models:
|
|
8
|
+
- ModelValidationResult: Validation result with error details
|
|
9
|
+
- ModelRegistrationState: Immutable state for reducer FSM
|
|
10
|
+
- ModelRegistrationConfirmation: Confirmation event from Effect layer
|
|
11
|
+
- ModelPayloadConsulRegister: Payload for Consul registration intents
|
|
12
|
+
- ModelPayloadPostgresUpsertRegistration: Payload for PostgreSQL upsert intents
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
# Node-specific model
|
|
16
|
+
from omnibase_infra.nodes.node_registration_reducer.models.model_validation_result import (
|
|
17
|
+
ModelValidationResult,
|
|
18
|
+
ValidationErrorCode,
|
|
19
|
+
ValidationResult,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
# Re-export shared models from the reducers module for convenience
|
|
23
|
+
from omnibase_infra.nodes.reducers.models import (
|
|
24
|
+
ModelPayloadConsulRegister,
|
|
25
|
+
ModelPayloadPostgresUpsertRegistration,
|
|
26
|
+
ModelRegistrationConfirmation,
|
|
27
|
+
ModelRegistrationState,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
__all__ = [
|
|
31
|
+
"ModelPayloadConsulRegister",
|
|
32
|
+
"ModelPayloadPostgresUpsertRegistration",
|
|
33
|
+
"ModelRegistrationConfirmation",
|
|
34
|
+
"ModelRegistrationState",
|
|
35
|
+
"ModelValidationResult",
|
|
36
|
+
"ValidationErrorCode",
|
|
37
|
+
"ValidationResult",
|
|
38
|
+
]
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Validation result model for registration reducer.
|
|
4
|
+
|
|
5
|
+
This model represents the result of event validation with detailed error
|
|
6
|
+
information. It follows the ONEX pattern of using sentinel values instead
|
|
7
|
+
of nullable unions to minimize union count (OMN-1004).
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from typing import Literal
|
|
13
|
+
|
|
14
|
+
from pydantic import BaseModel, ConfigDict, field_validator
|
|
15
|
+
|
|
16
|
+
# Validation error codes for distinct error identification
|
|
17
|
+
ValidationErrorCode = Literal[
|
|
18
|
+
"missing_node_id",
|
|
19
|
+
"missing_node_type",
|
|
20
|
+
"invalid_node_type",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
# Sentinel value for "not set" state
|
|
24
|
+
_SENTINEL_STR: str = ""
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class ModelValidationResult(BaseModel):
|
|
28
|
+
"""Result of event validation with detailed error information.
|
|
29
|
+
|
|
30
|
+
This Pydantic model follows ONEX requirements for Pydantic-based
|
|
31
|
+
data structures with sentinel values instead of nullable unions
|
|
32
|
+
(OMN-1004).
|
|
33
|
+
|
|
34
|
+
Sentinel Values:
|
|
35
|
+
- Empty string ("") for field_name and error_message means "not set"
|
|
36
|
+
- None for error_code (unavoidable for Literal type safety)
|
|
37
|
+
- Use ``has_field_name``, ``has_error_message`` to check
|
|
38
|
+
|
|
39
|
+
Input Normalization:
|
|
40
|
+
Constructors accept ``None`` for string fields and convert to sentinel
|
|
41
|
+
for developer convenience. This is NOT backwards compatibility (per
|
|
42
|
+
CLAUDE.md policy) - it is input normalization that may be removed in
|
|
43
|
+
future versions without notice.
|
|
44
|
+
|
|
45
|
+
Attributes:
|
|
46
|
+
is_valid: Whether the event passed validation.
|
|
47
|
+
error_code: Distinct code identifying the validation failure (if any).
|
|
48
|
+
field_name: Name of the field that failed validation. Empty string if not set.
|
|
49
|
+
error_message: Human-readable error message for logging. Empty string if not set.
|
|
50
|
+
|
|
51
|
+
.. versionchanged:: 0.7.0
|
|
52
|
+
Refactored to use sentinel values for string fields (OMN-1004).
|
|
53
|
+
Extracted to separate file (OMN-1104).
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
model_config = ConfigDict(frozen=True, extra="forbid", from_attributes=True)
|
|
57
|
+
|
|
58
|
+
is_valid: bool
|
|
59
|
+
error_code: ValidationErrorCode | None = None
|
|
60
|
+
field_name: str = _SENTINEL_STR
|
|
61
|
+
error_message: str = _SENTINEL_STR
|
|
62
|
+
|
|
63
|
+
# ---- Validators for None-to-Sentinel Conversion ----
|
|
64
|
+
@field_validator("field_name", "error_message", mode="before")
|
|
65
|
+
@classmethod
|
|
66
|
+
def _convert_none_to_str_sentinel(cls, v: object) -> str:
|
|
67
|
+
"""Convert None to empty string sentinel for input normalization."""
|
|
68
|
+
if v is None:
|
|
69
|
+
return _SENTINEL_STR
|
|
70
|
+
if isinstance(v, str):
|
|
71
|
+
return v
|
|
72
|
+
return str(v)
|
|
73
|
+
|
|
74
|
+
# ---- Sentinel Check Properties ----
|
|
75
|
+
@property
|
|
76
|
+
def has_field_name(self) -> bool:
|
|
77
|
+
"""Check if field_name is set (not empty string)."""
|
|
78
|
+
return self.field_name != _SENTINEL_STR
|
|
79
|
+
|
|
80
|
+
@property
|
|
81
|
+
def has_error_message(self) -> bool:
|
|
82
|
+
"""Check if error_message is set (not empty string)."""
|
|
83
|
+
return self.error_message != _SENTINEL_STR
|
|
84
|
+
|
|
85
|
+
@classmethod
|
|
86
|
+
def success(cls) -> ModelValidationResult:
|
|
87
|
+
"""Create a successful validation result."""
|
|
88
|
+
return cls(is_valid=True)
|
|
89
|
+
|
|
90
|
+
@classmethod
|
|
91
|
+
def failure(
|
|
92
|
+
cls,
|
|
93
|
+
error_code: ValidationErrorCode,
|
|
94
|
+
field_name: str,
|
|
95
|
+
error_message: str,
|
|
96
|
+
) -> ModelValidationResult:
|
|
97
|
+
"""Create a failed validation result with error details."""
|
|
98
|
+
return cls(
|
|
99
|
+
is_valid=False,
|
|
100
|
+
error_code=error_code,
|
|
101
|
+
field_name=field_name,
|
|
102
|
+
error_message=error_message,
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
# Convenience alias (not backwards compatibility - may be removed without notice)
|
|
107
|
+
ValidationResult = ModelValidationResult
|
|
108
|
+
|
|
109
|
+
__all__ = [
|
|
110
|
+
"ModelValidationResult",
|
|
111
|
+
"ValidationErrorCode",
|
|
112
|
+
"ValidationResult",
|
|
113
|
+
]
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Node Registration Reducer - FSM-driven declarative reducer.
|
|
4
|
+
|
|
5
|
+
This reducer follows the ONEX declarative pattern:
|
|
6
|
+
- DECLARATIVE reducer driven by contract.yaml
|
|
7
|
+
- Zero custom routing logic - all behavior from FSM state_machine
|
|
8
|
+
- Lightweight shell that delegates to NodeReducer base class
|
|
9
|
+
- Used for ONEX-compliant runtime execution via RuntimeHostProcess
|
|
10
|
+
- Pattern: "Contract-driven, FSM state transitions"
|
|
11
|
+
|
|
12
|
+
Extends NodeReducer from omnibase_core for FSM-driven state management.
|
|
13
|
+
All state transition logic is 100% driven by contract.yaml, not Python code.
|
|
14
|
+
|
|
15
|
+
FSM Pattern:
|
|
16
|
+
1. Receive introspection event (trigger: introspection_received)
|
|
17
|
+
2. FSM transitions idle -> pending (emits registration intents)
|
|
18
|
+
3. Receive confirmation events (triggers: consul_confirmed, postgres_confirmed)
|
|
19
|
+
4. FSM transitions pending -> partial -> complete
|
|
20
|
+
5. On errors, FSM transitions to failed
|
|
21
|
+
6. Reset events allow retry (failed/complete -> idle)
|
|
22
|
+
|
|
23
|
+
All state transitions, intent emission, and validation are handled by the
|
|
24
|
+
NodeReducer base class using contract.yaml FSM configuration.
|
|
25
|
+
|
|
26
|
+
Design Decisions:
|
|
27
|
+
- 100% Contract-Driven: All FSM logic in YAML, not Python
|
|
28
|
+
- Zero Custom Methods: Base class handles everything
|
|
29
|
+
- Declarative Execution: State transitions defined in state_machine
|
|
30
|
+
- Pure Function Pattern: (state, event) -> (new_state, intents)
|
|
31
|
+
|
|
32
|
+
Related Modules:
|
|
33
|
+
- contract.yaml: FSM state machine and intent emission configuration
|
|
34
|
+
- models/: Validation result and state models
|
|
35
|
+
- registry/: Dependency injection registry
|
|
36
|
+
|
|
37
|
+
Testing Notes:
|
|
38
|
+
- Unit tests: tests/unit/nodes/node_registration_reducer/
|
|
39
|
+
- Integration tests: REQUIRED before production (OMN-1263)
|
|
40
|
+
WARNING: This reducer MUST NOT be deployed to production without
|
|
41
|
+
the following integration tests implemented and passing:
|
|
42
|
+
* Intent emission through RuntimeHostProcess
|
|
43
|
+
* End-to-end registration workflow with Consul/PostgreSQL mocks
|
|
44
|
+
* FSM state persistence via RegistrationProjector
|
|
45
|
+
- Test coverage matrix: docs/decisions/adr-any-type-pydantic-workaround.md
|
|
46
|
+
|
|
47
|
+
Tracking:
|
|
48
|
+
- OMN-1104: Declarative reducer refactoring
|
|
49
|
+
- OMN-1263: Integration test coverage (https://linear.app/omninode/issue/OMN-1263)
|
|
50
|
+
Pre-production blocker - prioritize before deployment
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
from __future__ import annotations
|
|
54
|
+
|
|
55
|
+
from typing import TYPE_CHECKING
|
|
56
|
+
|
|
57
|
+
from omnibase_core.nodes.node_reducer import NodeReducer
|
|
58
|
+
|
|
59
|
+
if TYPE_CHECKING:
|
|
60
|
+
from omnibase_core.models.container.model_onex_container import ModelONEXContainer
|
|
61
|
+
|
|
62
|
+
# Import needed for string annotation in class definition (NodeReducer["ModelRegistrationState", ...])
|
|
63
|
+
from omnibase_infra.nodes.node_registration_reducer.models.model_registration_state import (
|
|
64
|
+
ModelRegistrationState,
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class NodeRegistrationReducer(
|
|
69
|
+
NodeReducer["ModelRegistrationState", "ModelRegistrationState"]
|
|
70
|
+
):
|
|
71
|
+
"""Registration reducer - FSM state transitions driven by contract.yaml.
|
|
72
|
+
|
|
73
|
+
This reducer processes node registration workflows by:
|
|
74
|
+
1. Receiving introspection events (via process() method)
|
|
75
|
+
2. Executing FSM transitions defined in contract.yaml
|
|
76
|
+
3. Emitting registration intents for Consul and PostgreSQL
|
|
77
|
+
4. Processing confirmation events to complete registration
|
|
78
|
+
|
|
79
|
+
All state transition logic, intent emission, and validation are driven
|
|
80
|
+
entirely by the contract.yaml FSM configuration.
|
|
81
|
+
|
|
82
|
+
Example YAML Contract (state_machine section):
|
|
83
|
+
```yaml
|
|
84
|
+
state_machine:
|
|
85
|
+
state_machine_name: registration_fsm
|
|
86
|
+
initial_state: idle
|
|
87
|
+
states:
|
|
88
|
+
- state_name: idle
|
|
89
|
+
description: "Waiting for introspection event"
|
|
90
|
+
- state_name: pending
|
|
91
|
+
description: "Registration initiated"
|
|
92
|
+
entry_actions:
|
|
93
|
+
- emit_consul_intent
|
|
94
|
+
- emit_postgres_intent
|
|
95
|
+
- state_name: partial
|
|
96
|
+
description: "One backend confirmed"
|
|
97
|
+
- state_name: complete
|
|
98
|
+
description: "Registration successful"
|
|
99
|
+
- state_name: failed
|
|
100
|
+
description: "Registration failed"
|
|
101
|
+
transitions:
|
|
102
|
+
- from_state: idle
|
|
103
|
+
to_state: pending
|
|
104
|
+
trigger: introspection_received
|
|
105
|
+
conditions:
|
|
106
|
+
- expression: "node_id is_present"
|
|
107
|
+
required: true
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Usage:
|
|
111
|
+
```python
|
|
112
|
+
from omnibase_core.models.container import ModelONEXContainer
|
|
113
|
+
from omnibase_core.models.reducer import ModelReducerInput
|
|
114
|
+
from omnibase_core.enums import EnumReductionType
|
|
115
|
+
|
|
116
|
+
# Create and initialize
|
|
117
|
+
container = ModelONEXContainer()
|
|
118
|
+
reducer = NodeRegistrationReducer(container)
|
|
119
|
+
|
|
120
|
+
# Process input via FSM
|
|
121
|
+
input_data = ModelReducerInput(
|
|
122
|
+
data=introspection_event,
|
|
123
|
+
reduction_type=EnumReductionType.MERGE,
|
|
124
|
+
metadata=ModelReducerMetadata(trigger="introspection_received"),
|
|
125
|
+
)
|
|
126
|
+
result = await reducer.process(input_data)
|
|
127
|
+
```
|
|
128
|
+
"""
|
|
129
|
+
|
|
130
|
+
def __init__(self, container: ModelONEXContainer) -> None:
|
|
131
|
+
"""Initialize the reducer.
|
|
132
|
+
|
|
133
|
+
Args:
|
|
134
|
+
container: ONEX dependency injection container
|
|
135
|
+
"""
|
|
136
|
+
super().__init__(container)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
__all__ = ["NodeRegistrationReducer"]
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Registry module for NodeRegistrationReducer."""
|
|
4
|
+
|
|
5
|
+
from omnibase_infra.nodes.node_registration_reducer.registry.registry_infra_node_registration_reducer import (
|
|
6
|
+
RegistryInfraNodeRegistrationReducer,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
__all__ = ["RegistryInfraNodeRegistrationReducer"]
|