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,439 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Protocols for the registration orchestrator workflow.
|
|
4
|
+
|
|
5
|
+
This module defines the protocols for the reducer and effect nodes that
|
|
6
|
+
participate in the registration workflow. These protocols enable duck typing
|
|
7
|
+
and dependency injection.
|
|
8
|
+
|
|
9
|
+
Protocol Responsibilities:
|
|
10
|
+
ProtocolReducer: Pure function that computes intents from events
|
|
11
|
+
ProtocolEffect: Side-effectful executor that performs infrastructure operations
|
|
12
|
+
|
|
13
|
+
Concurrency Safety:
|
|
14
|
+
All protocol implementations MUST be safe for concurrent async coroutine calls.
|
|
15
|
+
|
|
16
|
+
ProtocolReducer:
|
|
17
|
+
- Same reducer instance may process multiple events concurrently
|
|
18
|
+
- Treat ModelReducerState as immutable (return new instances)
|
|
19
|
+
- Avoid instance-level caches that could cause race conditions
|
|
20
|
+
|
|
21
|
+
ProtocolEffect:
|
|
22
|
+
- Multiple coroutines may invoke execute_intent() simultaneously
|
|
23
|
+
- Use asyncio.Lock for any shared mutable state (coroutine-safe, not thread-safe)
|
|
24
|
+
- Ensure underlying clients (Consul, PostgreSQL) are async-safe
|
|
25
|
+
|
|
26
|
+
Error Handling and Sanitization:
|
|
27
|
+
All implementations MUST follow ONEX error sanitization guidelines.
|
|
28
|
+
|
|
29
|
+
NEVER include in error messages:
|
|
30
|
+
- Passwords, API keys, tokens, secrets
|
|
31
|
+
- Full connection strings with credentials
|
|
32
|
+
- PII (names, emails, SSNs, phone numbers)
|
|
33
|
+
- Internal IP addresses (in production)
|
|
34
|
+
- Private keys or certificates
|
|
35
|
+
- Raw event payload content (may contain secrets)
|
|
36
|
+
|
|
37
|
+
SAFE to include in error messages:
|
|
38
|
+
- Service names (e.g., "consul", "postgres")
|
|
39
|
+
- Operation names (e.g., "register", "upsert")
|
|
40
|
+
- Correlation IDs (always include for tracing)
|
|
41
|
+
- Error codes (e.g., EnumCoreErrorCode values)
|
|
42
|
+
- Sanitized hostnames (e.g., "db.example.com")
|
|
43
|
+
- Port numbers, retry counts, timeout values
|
|
44
|
+
- Field names that are invalid or missing
|
|
45
|
+
- node_id (UUID, not PII)
|
|
46
|
+
|
|
47
|
+
ProtocolEffect errors should use InfraError subclasses:
|
|
48
|
+
- InfraConnectionError: Connection failures
|
|
49
|
+
- InfraTimeoutError: Operation timeouts
|
|
50
|
+
- InfraAuthenticationError: Auth failures
|
|
51
|
+
- InfraUnavailableError: Service unavailable
|
|
52
|
+
|
|
53
|
+
Design Notes:
|
|
54
|
+
- Uses @runtime_checkable for duck typing support
|
|
55
|
+
- Type hints use forward references to avoid circular imports
|
|
56
|
+
- The orchestrator owns the workflow; reducer and effect are pluggable
|
|
57
|
+
- Domain-grouped protocols per ONEX conventions (CLAUDE.md)
|
|
58
|
+
|
|
59
|
+
Related Modules:
|
|
60
|
+
- omnibase_infra.models.registration: Event models
|
|
61
|
+
- omnibase_infra.nodes.node_registry_effect: Effect implementation
|
|
62
|
+
- OMN-912: Intent models in omnibase_core (pending)
|
|
63
|
+
- OMN-889: Reducer implementation (pending)
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
from __future__ import annotations
|
|
67
|
+
|
|
68
|
+
from typing import TYPE_CHECKING, Protocol, runtime_checkable
|
|
69
|
+
from uuid import UUID
|
|
70
|
+
|
|
71
|
+
from omnibase_infra.nodes.node_registration_orchestrator.models.model_reducer_execution_result import (
|
|
72
|
+
ModelReducerExecutionResult,
|
|
73
|
+
)
|
|
74
|
+
from omnibase_infra.nodes.node_registration_orchestrator.models.model_reducer_state import (
|
|
75
|
+
ModelReducerState,
|
|
76
|
+
)
|
|
77
|
+
from omnibase_infra.nodes.node_registration_orchestrator.models.model_registration_intent import (
|
|
78
|
+
ModelRegistrationIntent,
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
@runtime_checkable
|
|
83
|
+
class ProtocolRegistrationIntent(Protocol):
|
|
84
|
+
"""Protocol for registration intent models.
|
|
85
|
+
|
|
86
|
+
This protocol defines the structural interface that all registration intent
|
|
87
|
+
models must implement. Using a protocol instead of a union type:
|
|
88
|
+
- Eliminates duplicate union definitions across modules
|
|
89
|
+
- Allows future intent types to be added by simply implementing the protocol
|
|
90
|
+
- Follows ONEX duck typing principles
|
|
91
|
+
- Enables structural typing for type narrowing without import dependencies
|
|
92
|
+
|
|
93
|
+
Thread Safety:
|
|
94
|
+
Intent models implementing this protocol MUST be immutable (frozen=True
|
|
95
|
+
in Pydantic ConfigDict) to ensure safe concurrent access.
|
|
96
|
+
|
|
97
|
+
Implementers:
|
|
98
|
+
- ModelConsulRegistrationIntent: Consul service registration intents
|
|
99
|
+
- ModelPostgresUpsertIntent: PostgreSQL upsert intents
|
|
100
|
+
(future intent types are automatically supported via structural typing)
|
|
101
|
+
|
|
102
|
+
Example:
|
|
103
|
+
>>> def process_intent(intent: ProtocolRegistrationIntent) -> None:
|
|
104
|
+
... # Access common properties through the protocol
|
|
105
|
+
... print(f"Processing {intent.kind} intent for node {intent.node_id}")
|
|
106
|
+
... print(f"Operation: {intent.operation}")
|
|
107
|
+
... print(f"Correlation ID: {intent.correlation_id}")
|
|
108
|
+
|
|
109
|
+
Related:
|
|
110
|
+
- ModelRegistrationIntent: Annotated discriminated union for Pydantic parsing
|
|
111
|
+
- ProtocolEffect.execute_intent(): Uses this protocol for intent parameters
|
|
112
|
+
|
|
113
|
+
.. versionadded:: 0.7.0
|
|
114
|
+
Created as part of OMN-1007 to replace duplicated union type definitions.
|
|
115
|
+
"""
|
|
116
|
+
|
|
117
|
+
@property
|
|
118
|
+
def kind(self) -> str:
|
|
119
|
+
"""The intent kind identifier (e.g., 'consul', 'postgres').
|
|
120
|
+
|
|
121
|
+
This field is used as a discriminator for intent routing and type
|
|
122
|
+
narrowing. Each intent implementation MUST use a unique kind value.
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
String identifier for the intent type.
|
|
126
|
+
"""
|
|
127
|
+
...
|
|
128
|
+
|
|
129
|
+
@property
|
|
130
|
+
def operation(self) -> str:
|
|
131
|
+
"""The operation to perform (e.g., 'register', 'upsert', 'deregister').
|
|
132
|
+
|
|
133
|
+
Returns:
|
|
134
|
+
String identifier for the operation.
|
|
135
|
+
"""
|
|
136
|
+
...
|
|
137
|
+
|
|
138
|
+
@property
|
|
139
|
+
def node_id(self) -> UUID:
|
|
140
|
+
"""The target node identifier.
|
|
141
|
+
|
|
142
|
+
Returns:
|
|
143
|
+
UUID of the node this intent operates on.
|
|
144
|
+
"""
|
|
145
|
+
...
|
|
146
|
+
|
|
147
|
+
@property
|
|
148
|
+
def correlation_id(self) -> UUID:
|
|
149
|
+
"""Correlation ID for distributed tracing.
|
|
150
|
+
|
|
151
|
+
This ID enables tracing intent execution across services. It should
|
|
152
|
+
be propagated through all infrastructure operations triggered by
|
|
153
|
+
this intent.
|
|
154
|
+
|
|
155
|
+
Returns:
|
|
156
|
+
UUID for correlation/tracing.
|
|
157
|
+
"""
|
|
158
|
+
...
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
if TYPE_CHECKING:
|
|
162
|
+
from omnibase_infra.models.registration import ModelNodeIntrospectionEvent
|
|
163
|
+
from omnibase_infra.nodes.node_registration_orchestrator.models import (
|
|
164
|
+
ModelIntentExecutionResult,
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
@runtime_checkable
|
|
169
|
+
class ProtocolReducer(Protocol):
|
|
170
|
+
"""Protocol for the reducer that computes registration intents.
|
|
171
|
+
|
|
172
|
+
The reducer implements a pure function pattern: given the current state
|
|
173
|
+
and an incoming event, it returns updated state plus a list of typed
|
|
174
|
+
intents describing what infrastructure operations should occur.
|
|
175
|
+
|
|
176
|
+
Concurrency Safety:
|
|
177
|
+
Implementations MUST be safe for concurrent async coroutine calls.
|
|
178
|
+
The same reducer instance may process multiple events concurrently.
|
|
179
|
+
Follow these guidelines:
|
|
180
|
+
- Treat ModelReducerState as immutable (create new instances)
|
|
181
|
+
- Do not store event-specific data as instance attributes
|
|
182
|
+
- Use frozenset for processed_node_ids to ensure immutability
|
|
183
|
+
|
|
184
|
+
Error Handling:
|
|
185
|
+
When validation fails, raise ValueError with sanitized messages:
|
|
186
|
+
- NEVER include raw event payloads in error messages
|
|
187
|
+
- NEVER expose PII from node metadata
|
|
188
|
+
- SAFE to include: node_id, event_type, field names, correlation_id
|
|
189
|
+
|
|
190
|
+
Contract:
|
|
191
|
+
- Reducer MUST be deterministic (same inputs -> same outputs)
|
|
192
|
+
- Reducer MUST NOT perform I/O operations
|
|
193
|
+
- Reducer MUST return valid intents that the effect node can execute
|
|
194
|
+
- Reducer MUST sanitize any data included in ValueError messages
|
|
195
|
+
- Reducer MAY filter duplicate or invalid events
|
|
196
|
+
|
|
197
|
+
Example:
|
|
198
|
+
```python
|
|
199
|
+
from uuid import uuid4
|
|
200
|
+
|
|
201
|
+
class MyReducer:
|
|
202
|
+
async def reduce(
|
|
203
|
+
self,
|
|
204
|
+
state: ModelReducerState,
|
|
205
|
+
event: ModelNodeIntrospectionEvent,
|
|
206
|
+
) -> ModelReducerExecutionResult:
|
|
207
|
+
# Validate event - use sanitized error messages
|
|
208
|
+
if not event.node_id:
|
|
209
|
+
raise ValueError("Missing required field: node_id")
|
|
210
|
+
|
|
211
|
+
if event.node_id in state.processed_node_ids:
|
|
212
|
+
# Already processed - return no_change result
|
|
213
|
+
return ModelReducerExecutionResult.no_change(state)
|
|
214
|
+
|
|
215
|
+
# Propagate correlation_id with uuid4() fallback for tracing.
|
|
216
|
+
# This ensures every intent has a valid correlation_id even if
|
|
217
|
+
# the source event lacks one (e.g., legacy events, test fixtures).
|
|
218
|
+
correlation_id = event.correlation_id or uuid4()
|
|
219
|
+
|
|
220
|
+
# Generate intents with typed payloads
|
|
221
|
+
intents = [
|
|
222
|
+
ModelConsulRegistrationIntent(
|
|
223
|
+
operation="register",
|
|
224
|
+
node_id=event.node_id,
|
|
225
|
+
correlation_id=correlation_id,
|
|
226
|
+
payload=ModelConsulIntentPayload(
|
|
227
|
+
service_name=f"onex-{event.node_type.value}",
|
|
228
|
+
),
|
|
229
|
+
),
|
|
230
|
+
ModelPostgresUpsertIntent(
|
|
231
|
+
operation="upsert",
|
|
232
|
+
node_id=event.node_id,
|
|
233
|
+
correlation_id=correlation_id,
|
|
234
|
+
payload=ModelPostgresIntentPayload(
|
|
235
|
+
node_id=event.node_id,
|
|
236
|
+
node_type=event.node_type,
|
|
237
|
+
node_version=event.node_version,
|
|
238
|
+
capabilities=event.declared_capabilities, # Strongly-typed model
|
|
239
|
+
endpoints=event.endpoints,
|
|
240
|
+
node_role=event.node_role,
|
|
241
|
+
metadata=event.metadata, # Strongly-typed model
|
|
242
|
+
correlation_id=correlation_id,
|
|
243
|
+
network_id=event.network_id,
|
|
244
|
+
deployment_id=event.deployment_id,
|
|
245
|
+
epoch=event.epoch,
|
|
246
|
+
timestamp=event.timestamp.isoformat(),
|
|
247
|
+
),
|
|
248
|
+
),
|
|
249
|
+
]
|
|
250
|
+
|
|
251
|
+
# Update state - create new immutable state
|
|
252
|
+
new_state = ModelReducerState(
|
|
253
|
+
last_event_timestamp=event.timestamp.isoformat(),
|
|
254
|
+
processed_node_ids=state.processed_node_ids | {event.node_id},
|
|
255
|
+
pending_registrations=state.pending_registrations + len(intents),
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
return ModelReducerExecutionResult.with_intents(new_state, intents)
|
|
259
|
+
```
|
|
260
|
+
"""
|
|
261
|
+
|
|
262
|
+
async def reduce(
|
|
263
|
+
self,
|
|
264
|
+
state: ModelReducerState,
|
|
265
|
+
event: ModelNodeIntrospectionEvent,
|
|
266
|
+
) -> ModelReducerExecutionResult:
|
|
267
|
+
"""Reduce an introspection event to state and intents.
|
|
268
|
+
|
|
269
|
+
This method processes an incoming introspection event and produces
|
|
270
|
+
a ModelReducerExecutionResult containing:
|
|
271
|
+
1. Updated reducer state (for deduplication, rate limiting, etc.)
|
|
272
|
+
2. A tuple of intents describing infrastructure operations to perform
|
|
273
|
+
|
|
274
|
+
Concurrency Safety:
|
|
275
|
+
This method MUST be safe to call concurrently from multiple
|
|
276
|
+
coroutines. Implementations should:
|
|
277
|
+
- Not modify the input state object
|
|
278
|
+
- Return a new ModelReducerState instance
|
|
279
|
+
- Avoid instance-level mutation
|
|
280
|
+
|
|
281
|
+
Error Sanitization:
|
|
282
|
+
When raising ValueError, NEVER include:
|
|
283
|
+
- Raw event payload content (may contain secrets)
|
|
284
|
+
- Full node metadata dumps
|
|
285
|
+
- PII or credentials
|
|
286
|
+
|
|
287
|
+
SAFE to include in ValueError messages:
|
|
288
|
+
- Field names that are invalid or missing
|
|
289
|
+
- node_id (UUID, not PII)
|
|
290
|
+
- event_type or correlation_id
|
|
291
|
+
|
|
292
|
+
Args:
|
|
293
|
+
state: Current reducer state. Pass ModelReducerState.initial()
|
|
294
|
+
for the first reduction. Treat as immutable.
|
|
295
|
+
event: The introspection event to process. Contains node metadata,
|
|
296
|
+
capabilities, and endpoints. May contain sensitive data
|
|
297
|
+
that MUST NOT appear in error messages.
|
|
298
|
+
|
|
299
|
+
Returns:
|
|
300
|
+
ModelReducerExecutionResult containing:
|
|
301
|
+
- state: NEW reducer state instance (do not mutate input)
|
|
302
|
+
- intents: Tuple of intents for the effect node to execute.
|
|
303
|
+
May be empty if the event should be filtered.
|
|
304
|
+
|
|
305
|
+
Use factory methods for common patterns:
|
|
306
|
+
- ModelReducerExecutionResult.no_change(state) for filtered events
|
|
307
|
+
- ModelReducerExecutionResult.with_intents(state, intents) for normal flow
|
|
308
|
+
- ModelReducerExecutionResult.empty() for initial/reset state
|
|
309
|
+
|
|
310
|
+
Raises:
|
|
311
|
+
ValueError: If the event is malformed or cannot be processed.
|
|
312
|
+
Error message MUST be sanitized - no payload content or PII.
|
|
313
|
+
|
|
314
|
+
Note:
|
|
315
|
+
This method is async to allow for potential future enhancements
|
|
316
|
+
(e.g., async validation), but implementations MUST NOT perform
|
|
317
|
+
actual I/O operations.
|
|
318
|
+
"""
|
|
319
|
+
...
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
@runtime_checkable
|
|
323
|
+
class ProtocolEffect(Protocol):
|
|
324
|
+
"""Protocol for the effect node that executes intents.
|
|
325
|
+
|
|
326
|
+
The effect node performs the actual I/O operations (Consul registration,
|
|
327
|
+
PostgreSQL upsert, etc.) based on typed intents from the reducer.
|
|
328
|
+
|
|
329
|
+
Concurrency Safety:
|
|
330
|
+
Implementations MUST be safe for concurrent async coroutine calls.
|
|
331
|
+
Multiple coroutines may invoke execute_intent() simultaneously.
|
|
332
|
+
Use asyncio.Lock for any shared mutable state (coroutine-safe).
|
|
333
|
+
|
|
334
|
+
Error Handling:
|
|
335
|
+
Implementations MUST follow error sanitization guidelines:
|
|
336
|
+
- NEVER include credentials or secrets in error messages
|
|
337
|
+
- ALWAYS include correlation_id for distributed tracing
|
|
338
|
+
- Use InfraError subclasses (InfraConnectionError, InfraTimeoutError, etc.)
|
|
339
|
+
- Capture errors in ModelIntentExecutionResult.error, do not raise
|
|
340
|
+
|
|
341
|
+
Contract:
|
|
342
|
+
- Effect MUST execute exactly the operation specified by the intent
|
|
343
|
+
- Effect MUST propagate correlation_id for distributed tracing
|
|
344
|
+
- Effect MUST return a result even on failure (with success=False)
|
|
345
|
+
- Effect MUST sanitize error messages before storing in result
|
|
346
|
+
- Effect MAY implement retry logic internally
|
|
347
|
+
|
|
348
|
+
Example:
|
|
349
|
+
```python
|
|
350
|
+
class MyEffect:
|
|
351
|
+
def __init__(self, consul_client, db_client):
|
|
352
|
+
self._consul = consul_client
|
|
353
|
+
self._db = db_client
|
|
354
|
+
|
|
355
|
+
async def execute_intent(
|
|
356
|
+
self,
|
|
357
|
+
intent: ModelRegistrationIntent,
|
|
358
|
+
correlation_id: UUID,
|
|
359
|
+
) -> ModelIntentExecutionResult:
|
|
360
|
+
start_time = time.perf_counter()
|
|
361
|
+
try:
|
|
362
|
+
if intent.kind == "consul":
|
|
363
|
+
await self._consul.register(intent.payload)
|
|
364
|
+
elif intent.kind == "postgres":
|
|
365
|
+
await self._db.upsert(intent.payload)
|
|
366
|
+
|
|
367
|
+
return ModelIntentExecutionResult(
|
|
368
|
+
intent_kind=intent.kind,
|
|
369
|
+
success=True,
|
|
370
|
+
error=None,
|
|
371
|
+
execution_time_ms=(time.perf_counter() - start_time) * 1000,
|
|
372
|
+
)
|
|
373
|
+
except Exception as e:
|
|
374
|
+
# Sanitize error - never include credentials
|
|
375
|
+
sanitized_error = f"{intent.kind} {intent.operation} failed"
|
|
376
|
+
return ModelIntentExecutionResult(
|
|
377
|
+
intent_kind=intent.kind,
|
|
378
|
+
success=False,
|
|
379
|
+
error=sanitized_error,
|
|
380
|
+
execution_time_ms=(time.perf_counter() - start_time) * 1000,
|
|
381
|
+
)
|
|
382
|
+
```
|
|
383
|
+
"""
|
|
384
|
+
|
|
385
|
+
async def execute_intent(
|
|
386
|
+
self,
|
|
387
|
+
intent: ModelRegistrationIntent,
|
|
388
|
+
correlation_id: UUID,
|
|
389
|
+
) -> ModelIntentExecutionResult:
|
|
390
|
+
"""Execute a single registration intent.
|
|
391
|
+
|
|
392
|
+
Performs the infrastructure operation described by the intent and
|
|
393
|
+
returns a result capturing success/failure and timing.
|
|
394
|
+
|
|
395
|
+
Concurrency Safety:
|
|
396
|
+
This method MUST be safe to call concurrently from multiple
|
|
397
|
+
coroutines. Implementations should not rely on instance state
|
|
398
|
+
that could be modified by concurrent calls.
|
|
399
|
+
|
|
400
|
+
Error Sanitization:
|
|
401
|
+
The returned ModelIntentExecutionResult.error field MUST NOT
|
|
402
|
+
contain sensitive information. Sanitize all error messages:
|
|
403
|
+
- Remove credentials, tokens, connection strings
|
|
404
|
+
- Include only: service name, operation, correlation_id
|
|
405
|
+
- Use generic error descriptions, not raw exception messages
|
|
406
|
+
|
|
407
|
+
Args:
|
|
408
|
+
intent: The typed intent to execute. Contains:
|
|
409
|
+
- kind: Target system ('consul', 'postgres', etc.)
|
|
410
|
+
- operation: Action to perform ('register', 'upsert', etc.)
|
|
411
|
+
- node_id: Target node identifier
|
|
412
|
+
- correlation_id: Intent-level correlation ID
|
|
413
|
+
- payload: Operation-specific data (may contain sensitive
|
|
414
|
+
data that MUST NOT appear in error messages)
|
|
415
|
+
correlation_id: Request-level correlation ID for tracing.
|
|
416
|
+
This may differ from intent.correlation_id in batched
|
|
417
|
+
workflows. ALWAYS include in logs and error context.
|
|
418
|
+
|
|
419
|
+
Returns:
|
|
420
|
+
ModelIntentExecutionResult containing:
|
|
421
|
+
- intent_kind: Echoed from intent.kind
|
|
422
|
+
- success: True if operation completed without error
|
|
423
|
+
- error: Sanitized error message if failed, None otherwise.
|
|
424
|
+
MUST NOT contain credentials or PII.
|
|
425
|
+
- execution_time_ms: Duration of the operation
|
|
426
|
+
|
|
427
|
+
Raises:
|
|
428
|
+
This method SHOULD NOT raise exceptions. All errors should be
|
|
429
|
+
captured in the returned ModelIntentExecutionResult with
|
|
430
|
+
success=False and a sanitized error message.
|
|
431
|
+
"""
|
|
432
|
+
...
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
__all__ = [
|
|
436
|
+
"ProtocolEffect",
|
|
437
|
+
"ProtocolReducer",
|
|
438
|
+
"ProtocolRegistrationIntent",
|
|
439
|
+
]
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Registry module for NodeRegistrationOrchestrator handler wiring.
|
|
4
|
+
|
|
5
|
+
This module provides the handler registry for the NodeRegistrationOrchestrator,
|
|
6
|
+
enabling a static factory method for creating frozen handler registries.
|
|
7
|
+
|
|
8
|
+
Handlers Wired:
|
|
9
|
+
- HandlerNodeIntrospected: Processes NodeIntrospectionEvent (registration trigger)
|
|
10
|
+
- HandlerRuntimeTick: Processes RuntimeTick (timeout detection)
|
|
11
|
+
- HandlerNodeRegistrationAcked: Processes NodeRegistrationAcked (ack processing)
|
|
12
|
+
- HandlerNodeHeartbeat: Processes NodeHeartbeatEvent (liveness tracking)
|
|
13
|
+
|
|
14
|
+
Usage:
|
|
15
|
+
```python
|
|
16
|
+
from omnibase_infra.nodes.node_registration_orchestrator.registry import (
|
|
17
|
+
RegistryInfraNodeRegistrationOrchestrator,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
registry = RegistryInfraNodeRegistrationOrchestrator.create_registry(
|
|
21
|
+
projection_reader=reader,
|
|
22
|
+
projector=projector,
|
|
23
|
+
consul_handler=consul_handler,
|
|
24
|
+
)
|
|
25
|
+
# registry is frozen and thread-safe
|
|
26
|
+
|
|
27
|
+
handler = registry.get_handler_by_id("handler-node-introspected")
|
|
28
|
+
result = await handler.handle(envelope)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Related:
|
|
32
|
+
- contract.yaml: Defines handler_routing with event-to-handler mappings
|
|
33
|
+
- handlers/: Handler implementations
|
|
34
|
+
- OMN-1102: Make NodeRegistrationOrchestrator fully declarative
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
from omnibase_infra.nodes.node_registration_orchestrator.registry.registry_infra_node_registration_orchestrator import (
|
|
38
|
+
RegistryInfraNodeRegistrationOrchestrator,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
__all__ = ["RegistryInfraNodeRegistrationOrchestrator"]
|