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,594 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Handler Validation Error Model for Structured Error Reporting.
|
|
4
|
+
|
|
5
|
+
This module defines the canonical error model for handler validation failures,
|
|
6
|
+
capturing structured information about validation errors from contract parsing,
|
|
7
|
+
descriptor validation, security validation, and architecture validation paths.
|
|
8
|
+
|
|
9
|
+
Part of OMN-1091: Structured Validation & Error Reporting for Handlers.
|
|
10
|
+
|
|
11
|
+
The model provides:
|
|
12
|
+
- Structured error classification with EnumHandlerErrorType
|
|
13
|
+
- Handler identification via ModelHandlerIdentifier
|
|
14
|
+
- Source attribution via EnumHandlerSourceType
|
|
15
|
+
- Location information (file path, line number)
|
|
16
|
+
- Actionable remediation hints
|
|
17
|
+
- Error chaining for root cause analysis
|
|
18
|
+
- Distributed tracing support via correlation_id
|
|
19
|
+
- Multiple output formats (logging, CI, structured JSON)
|
|
20
|
+
|
|
21
|
+
See Also:
|
|
22
|
+
- EnumHandlerErrorType: Error type classification
|
|
23
|
+
- EnumHandlerSourceType: Validation stage identification
|
|
24
|
+
- ModelHandlerIdentifier: Handler identity model
|
|
25
|
+
- ModelExecutionShapeViolationResult: Related validation result model
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
from __future__ import annotations
|
|
29
|
+
|
|
30
|
+
from typing import Self
|
|
31
|
+
from uuid import UUID, uuid4
|
|
32
|
+
|
|
33
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
34
|
+
|
|
35
|
+
from omnibase_infra.enums import (
|
|
36
|
+
EnumHandlerErrorType,
|
|
37
|
+
EnumHandlerSourceType,
|
|
38
|
+
EnumValidationSeverity,
|
|
39
|
+
)
|
|
40
|
+
from omnibase_infra.models.handlers import ModelHandlerIdentifier
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class ModelHandlerValidationError(BaseModel):
|
|
44
|
+
"""Canonical error model for handler validation failures.
|
|
45
|
+
|
|
46
|
+
This model captures structured information about validation errors
|
|
47
|
+
from contract parsing, descriptor validation, security validation,
|
|
48
|
+
and architecture validation paths. It provides multiple output
|
|
49
|
+
formats for logging, CI integration, and structured reporting.
|
|
50
|
+
|
|
51
|
+
Attributes:
|
|
52
|
+
error_type: Type of validation error (contract, descriptor, security, etc.).
|
|
53
|
+
rule_id: Unique identifier for the validation rule (e.g., "CONTRACT-001").
|
|
54
|
+
handler_identity: Handler identification information.
|
|
55
|
+
source_type: Where the error originated (contract, descriptor, static analysis, etc.).
|
|
56
|
+
message: Human-readable error message describing the failure.
|
|
57
|
+
remediation_hint: Actionable fix suggestion for developers.
|
|
58
|
+
file_path: File where error occurred (optional).
|
|
59
|
+
line_number: Line number if applicable (optional, 1-indexed).
|
|
60
|
+
details: Additional context (optional, uses object for generic payloads).
|
|
61
|
+
caused_by: Chained error for root cause analysis (optional).
|
|
62
|
+
correlation_id: Request correlation ID for distributed tracing (optional).
|
|
63
|
+
severity: Severity level ('error' blocks startup, 'warning' is advisory).
|
|
64
|
+
|
|
65
|
+
Example:
|
|
66
|
+
>>> # Contract parsing error
|
|
67
|
+
>>> error = ModelHandlerValidationError.from_contract_error(
|
|
68
|
+
... rule_id="CONTRACT-001",
|
|
69
|
+
... message="Invalid YAML syntax in contract.yaml",
|
|
70
|
+
... file_path="nodes/registration/contract.yaml",
|
|
71
|
+
... remediation_hint="Check YAML indentation and syntax",
|
|
72
|
+
... handler_identity=ModelHandlerIdentifier.from_handler_id("registration-orchestrator"),
|
|
73
|
+
... )
|
|
74
|
+
>>> error.is_blocking()
|
|
75
|
+
True
|
|
76
|
+
>>> print(error.format_for_ci())
|
|
77
|
+
::error file=nodes/registration/contract.yaml,line=1::[CONTRACT-001] Invalid YAML syntax...
|
|
78
|
+
|
|
79
|
+
>>> # Security violation
|
|
80
|
+
>>> error = ModelHandlerValidationError.from_security_violation(
|
|
81
|
+
... rule_id="SECURITY-002",
|
|
82
|
+
... message="Handler exposes sensitive method names",
|
|
83
|
+
... remediation_hint="Prefix internal methods with underscore",
|
|
84
|
+
... handler_identity=ModelHandlerIdentifier.from_node(
|
|
85
|
+
... node_path="nodes/auth/node.py",
|
|
86
|
+
... handler_type=EnumHandlerType.INFRA_HANDLER,
|
|
87
|
+
... ),
|
|
88
|
+
... line_number=42,
|
|
89
|
+
... )
|
|
90
|
+
|
|
91
|
+
Note:
|
|
92
|
+
This model is frozen to ensure immutability in error contexts.
|
|
93
|
+
Attempting to mutate any field after instantiation will raise a
|
|
94
|
+
pydantic.ValidationError. The severity field defaults to 'error'
|
|
95
|
+
for blocking validation failures.
|
|
96
|
+
|
|
97
|
+
.. versionadded:: 0.6.1
|
|
98
|
+
Created as part of OMN-1091 structured validation and error reporting.
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
model_config = ConfigDict(
|
|
102
|
+
frozen=True,
|
|
103
|
+
extra="forbid",
|
|
104
|
+
strict=True,
|
|
105
|
+
str_strip_whitespace=True,
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
error_type: EnumHandlerErrorType = Field(
|
|
109
|
+
...,
|
|
110
|
+
description="Type of validation error (contract, descriptor, security, etc.)",
|
|
111
|
+
)
|
|
112
|
+
rule_id: str = Field(
|
|
113
|
+
...,
|
|
114
|
+
min_length=1,
|
|
115
|
+
pattern=r"^[A-Z]+-\d+$",
|
|
116
|
+
description="Unique identifier for the validation rule (e.g., 'CONTRACT-001')",
|
|
117
|
+
)
|
|
118
|
+
handler_identity: ModelHandlerIdentifier = Field(
|
|
119
|
+
...,
|
|
120
|
+
description="Handler identification information",
|
|
121
|
+
)
|
|
122
|
+
source_type: EnumHandlerSourceType = Field(
|
|
123
|
+
...,
|
|
124
|
+
description="Where the error originated (contract, descriptor, static analysis, etc.)",
|
|
125
|
+
)
|
|
126
|
+
message: str = Field(
|
|
127
|
+
...,
|
|
128
|
+
min_length=1,
|
|
129
|
+
description="Human-readable error message describing the failure",
|
|
130
|
+
)
|
|
131
|
+
remediation_hint: str = Field(
|
|
132
|
+
...,
|
|
133
|
+
min_length=1,
|
|
134
|
+
description="Actionable fix suggestion for developers",
|
|
135
|
+
)
|
|
136
|
+
file_path: str | None = Field(
|
|
137
|
+
default=None,
|
|
138
|
+
description="File where error occurred (optional)",
|
|
139
|
+
)
|
|
140
|
+
line_number: int | None = Field(
|
|
141
|
+
default=None,
|
|
142
|
+
ge=1,
|
|
143
|
+
description="Line number if applicable (optional, 1-indexed)",
|
|
144
|
+
)
|
|
145
|
+
details: dict[str, object] | None = Field(
|
|
146
|
+
default=None,
|
|
147
|
+
description="Additional context (uses object for generic payloads, not Any)",
|
|
148
|
+
)
|
|
149
|
+
caused_by: ModelHandlerValidationError | None = Field(
|
|
150
|
+
default=None,
|
|
151
|
+
description="Chained error for root cause analysis (optional)",
|
|
152
|
+
)
|
|
153
|
+
correlation_id: UUID | None = Field(
|
|
154
|
+
default=None,
|
|
155
|
+
description="Request correlation ID for distributed tracing (optional)",
|
|
156
|
+
)
|
|
157
|
+
severity: EnumValidationSeverity = Field(
|
|
158
|
+
default=EnumValidationSeverity.ERROR,
|
|
159
|
+
description="Severity level: 'error' blocks startup, 'warning' is advisory",
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
def is_blocking(self) -> bool:
|
|
163
|
+
"""Check if this error should block handler startup or CI.
|
|
164
|
+
|
|
165
|
+
Returns:
|
|
166
|
+
True if severity is 'error', False for 'warning'.
|
|
167
|
+
|
|
168
|
+
Example:
|
|
169
|
+
>>> error = ModelHandlerValidationError.from_contract_error(...)
|
|
170
|
+
>>> if error.is_blocking():
|
|
171
|
+
... from omnibase_infra.errors import ProtocolConfigurationError
|
|
172
|
+
... raise ProtocolConfigurationError(
|
|
173
|
+
... "Cannot start with validation errors",
|
|
174
|
+
... code="HANDLER_VALIDATION_FAILED",
|
|
175
|
+
... errors=[error.to_structured_dict()],
|
|
176
|
+
... )
|
|
177
|
+
"""
|
|
178
|
+
return self.severity == EnumValidationSeverity.ERROR
|
|
179
|
+
|
|
180
|
+
def format_for_logging(self) -> str:
|
|
181
|
+
"""Format error for structured logging output.
|
|
182
|
+
|
|
183
|
+
Produces a multi-line formatted string suitable for logging systems,
|
|
184
|
+
including all relevant error context and remediation hints.
|
|
185
|
+
|
|
186
|
+
Returns:
|
|
187
|
+
Formatted string for logging with error details and remediation.
|
|
188
|
+
|
|
189
|
+
Example:
|
|
190
|
+
>>> error = ModelHandlerValidationError.from_contract_error(...)
|
|
191
|
+
>>> logger.error(error.format_for_logging())
|
|
192
|
+
Handler Validation Error [CONTRACT-001]
|
|
193
|
+
Error Type: CONTRACT_PARSE_ERROR (EnumHandlerErrorType.CONTRACT_PARSE_ERROR)
|
|
194
|
+
Source: CONTRACT (EnumHandlerSourceType.CONTRACT)
|
|
195
|
+
Handler: registration-orchestrator
|
|
196
|
+
File: nodes/registration/contract.yaml:1
|
|
197
|
+
Message: Invalid YAML syntax in contract.yaml
|
|
198
|
+
Remediation: Check YAML indentation and syntax
|
|
199
|
+
"""
|
|
200
|
+
# Include enum names for clarity in logs
|
|
201
|
+
error_type_display = (
|
|
202
|
+
f"{self.error_type.name} (EnumHandlerErrorType.{self.error_type.name})"
|
|
203
|
+
)
|
|
204
|
+
source_type_display = (
|
|
205
|
+
f"{self.source_type.name} (EnumHandlerSourceType.{self.source_type.name})"
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
lines = [
|
|
209
|
+
f"Handler Validation Error [{self.rule_id}]",
|
|
210
|
+
f"Severity: {self.severity.upper()}",
|
|
211
|
+
f"Error Type: {error_type_display}",
|
|
212
|
+
f"Source: {source_type_display}",
|
|
213
|
+
f"Handler: {self.handler_identity.format_for_error()}",
|
|
214
|
+
]
|
|
215
|
+
|
|
216
|
+
# Add location if available
|
|
217
|
+
if self.file_path:
|
|
218
|
+
location = self.file_path
|
|
219
|
+
if self.line_number:
|
|
220
|
+
location = f"{location}:{self.line_number}"
|
|
221
|
+
lines.append(f"Location: {location}")
|
|
222
|
+
|
|
223
|
+
lines.extend(
|
|
224
|
+
[
|
|
225
|
+
f"Message: {self.message}",
|
|
226
|
+
f"Remediation: {self.remediation_hint}",
|
|
227
|
+
]
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
# Add correlation ID if present
|
|
231
|
+
if self.correlation_id:
|
|
232
|
+
lines.append(f"Correlation ID: {self.correlation_id}")
|
|
233
|
+
|
|
234
|
+
# Add chained error if present
|
|
235
|
+
if self.caused_by:
|
|
236
|
+
lines.append(
|
|
237
|
+
f"Caused by: [{self.caused_by.rule_id}] {self.caused_by.message}"
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
return "\n".join(lines)
|
|
241
|
+
|
|
242
|
+
def format_for_ci(self) -> str:
|
|
243
|
+
"""Format error for CI output (GitHub Actions compatible).
|
|
244
|
+
|
|
245
|
+
Produces a GitHub Actions annotation format string that will
|
|
246
|
+
be rendered as an inline annotation in pull requests.
|
|
247
|
+
|
|
248
|
+
Returns:
|
|
249
|
+
Formatted string in GitHub Actions annotation format.
|
|
250
|
+
|
|
251
|
+
Example:
|
|
252
|
+
>>> error = ModelHandlerValidationError.from_contract_error(...)
|
|
253
|
+
>>> print(error.format_for_ci())
|
|
254
|
+
::error file=nodes/registration/contract.yaml,line=1::[CONTRACT-001] (CONTRACT_PARSE_ERROR) Invalid YAML...
|
|
255
|
+
"""
|
|
256
|
+
annotation_type = "error" if self.is_blocking() else "warning"
|
|
257
|
+
|
|
258
|
+
# Build file location string
|
|
259
|
+
file_location = f"file={self.file_path or 'unknown'}"
|
|
260
|
+
if self.line_number:
|
|
261
|
+
file_location += f",line={self.line_number}"
|
|
262
|
+
|
|
263
|
+
# Build error message with rule ID and error type for clarity
|
|
264
|
+
error_message = f"[{self.rule_id}] ({self.error_type.name}) {self.message}"
|
|
265
|
+
|
|
266
|
+
# Include remediation hint in CI output
|
|
267
|
+
full_message = f"{error_message}. Remediation: {self.remediation_hint}"
|
|
268
|
+
|
|
269
|
+
return f"::{annotation_type} {file_location}::{full_message}"
|
|
270
|
+
|
|
271
|
+
def to_structured_dict(self) -> dict[str, object]:
|
|
272
|
+
"""Convert error to structured dictionary for JSON serialization.
|
|
273
|
+
|
|
274
|
+
Produces a dictionary representation suitable for JSON APIs,
|
|
275
|
+
logging systems, and error aggregation services.
|
|
276
|
+
|
|
277
|
+
Returns:
|
|
278
|
+
Dictionary representation with all error fields.
|
|
279
|
+
|
|
280
|
+
Example:
|
|
281
|
+
>>> error = ModelHandlerValidationError.from_contract_error(...)
|
|
282
|
+
>>> json.dumps(error.to_structured_dict())
|
|
283
|
+
'{"error_type": "contract_parse_error", "rule_id": "CONTRACT-001", ...}'
|
|
284
|
+
"""
|
|
285
|
+
result: dict[str, object] = {
|
|
286
|
+
"error_type": self.error_type.value,
|
|
287
|
+
"rule_id": self.rule_id,
|
|
288
|
+
"handler_identity": {
|
|
289
|
+
"handler_id": self.handler_identity.handler_id,
|
|
290
|
+
"handler_type": (
|
|
291
|
+
self.handler_identity.handler_type.value
|
|
292
|
+
if self.handler_identity.handler_type
|
|
293
|
+
else None
|
|
294
|
+
),
|
|
295
|
+
"handler_name": self.handler_identity.handler_name,
|
|
296
|
+
"node_path": self.handler_identity.node_path,
|
|
297
|
+
},
|
|
298
|
+
"source_type": self.source_type.value,
|
|
299
|
+
"message": self.message,
|
|
300
|
+
"remediation_hint": self.remediation_hint,
|
|
301
|
+
"severity": self.severity.value,
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
# Add optional fields if present
|
|
305
|
+
if self.file_path:
|
|
306
|
+
result["file_path"] = self.file_path
|
|
307
|
+
if self.line_number:
|
|
308
|
+
result["line_number"] = self.line_number
|
|
309
|
+
if self.details:
|
|
310
|
+
result["details"] = self.details
|
|
311
|
+
if self.correlation_id:
|
|
312
|
+
result["correlation_id"] = str(self.correlation_id)
|
|
313
|
+
if self.caused_by:
|
|
314
|
+
result["caused_by"] = self.caused_by.to_structured_dict()
|
|
315
|
+
|
|
316
|
+
return result
|
|
317
|
+
|
|
318
|
+
@classmethod
|
|
319
|
+
def from_contract_error(
|
|
320
|
+
cls,
|
|
321
|
+
rule_id: str,
|
|
322
|
+
message: str,
|
|
323
|
+
file_path: str,
|
|
324
|
+
remediation_hint: str,
|
|
325
|
+
handler_identity: ModelHandlerIdentifier,
|
|
326
|
+
line_number: int | None = None,
|
|
327
|
+
details: dict[str, object] | None = None,
|
|
328
|
+
caused_by: ModelHandlerValidationError | None = None,
|
|
329
|
+
correlation_id: UUID | None = None,
|
|
330
|
+
severity: EnumValidationSeverity = EnumValidationSeverity.ERROR,
|
|
331
|
+
) -> Self:
|
|
332
|
+
"""Create error from contract validation failure.
|
|
333
|
+
|
|
334
|
+
Factory method for creating errors detected during contract.yaml
|
|
335
|
+
parsing and validation. Automatically sets error_type to
|
|
336
|
+
CONTRACT_PARSE_ERROR or CONTRACT_VALIDATION_ERROR based on context,
|
|
337
|
+
and source_type to CONTRACT.
|
|
338
|
+
|
|
339
|
+
Args:
|
|
340
|
+
rule_id: Unique identifier for the validation rule.
|
|
341
|
+
message: Human-readable error message.
|
|
342
|
+
file_path: Path to contract.yaml file.
|
|
343
|
+
remediation_hint: Actionable fix suggestion.
|
|
344
|
+
handler_identity: Handler identification information.
|
|
345
|
+
line_number: Line number in contract file (optional).
|
|
346
|
+
details: Additional context (optional).
|
|
347
|
+
caused_by: Chained error for root cause (optional).
|
|
348
|
+
correlation_id: Request correlation ID (optional).
|
|
349
|
+
severity: Severity level (defaults to 'error').
|
|
350
|
+
|
|
351
|
+
Returns:
|
|
352
|
+
ModelHandlerValidationError configured for contract errors.
|
|
353
|
+
|
|
354
|
+
Example:
|
|
355
|
+
>>> error = ModelHandlerValidationError.from_contract_error(
|
|
356
|
+
... rule_id="CONTRACT-001",
|
|
357
|
+
... message="Missing required field 'handler_routing'",
|
|
358
|
+
... file_path="nodes/registration/contract.yaml",
|
|
359
|
+
... remediation_hint="Add handler_routing section to contract",
|
|
360
|
+
... handler_identity=ModelHandlerIdentifier.from_handler_id("registration"),
|
|
361
|
+
... line_number=5,
|
|
362
|
+
... )
|
|
363
|
+
|
|
364
|
+
Note:
|
|
365
|
+
Error Type Heuristic - The method automatically classifies errors into
|
|
366
|
+
CONTRACT_PARSE_ERROR or CONTRACT_VALIDATION_ERROR based on message content:
|
|
367
|
+
|
|
368
|
+
- CONTRACT_PARSE_ERROR: Triggered when message contains "parse" or "yaml"
|
|
369
|
+
(case-insensitive). These are syntax-level errors preventing the contract
|
|
370
|
+
from being read (e.g., "YAML parse error", "Invalid YAML syntax").
|
|
371
|
+
|
|
372
|
+
- CONTRACT_VALIDATION_ERROR: Default for all other contract errors. These
|
|
373
|
+
are semantic errors where the contract is readable but violates schema
|
|
374
|
+
requirements (e.g., "Missing required field", "Invalid node_type").
|
|
375
|
+
|
|
376
|
+
This keyword-based heuristic provides automatic error classification without
|
|
377
|
+
requiring callers to explicitly specify the error type. The approach is
|
|
378
|
+
intentionally simple and robust - YAML/parse errors have distinct
|
|
379
|
+
terminology that rarely appears in validation error messages.
|
|
380
|
+
"""
|
|
381
|
+
# Determine error type based on message content using keyword heuristic.
|
|
382
|
+
# See docstring Note section above for classification rules.
|
|
383
|
+
error_type = (
|
|
384
|
+
EnumHandlerErrorType.CONTRACT_PARSE_ERROR
|
|
385
|
+
if "parse" in message.lower() or "yaml" in message.lower()
|
|
386
|
+
else EnumHandlerErrorType.CONTRACT_VALIDATION_ERROR
|
|
387
|
+
)
|
|
388
|
+
|
|
389
|
+
return cls(
|
|
390
|
+
error_type=error_type,
|
|
391
|
+
rule_id=rule_id,
|
|
392
|
+
handler_identity=handler_identity,
|
|
393
|
+
source_type=EnumHandlerSourceType.CONTRACT,
|
|
394
|
+
message=message,
|
|
395
|
+
remediation_hint=remediation_hint,
|
|
396
|
+
file_path=file_path,
|
|
397
|
+
line_number=line_number,
|
|
398
|
+
details=details,
|
|
399
|
+
caused_by=caused_by,
|
|
400
|
+
correlation_id=correlation_id or uuid4(),
|
|
401
|
+
severity=severity,
|
|
402
|
+
)
|
|
403
|
+
|
|
404
|
+
@classmethod
|
|
405
|
+
def from_security_violation(
|
|
406
|
+
cls,
|
|
407
|
+
rule_id: str,
|
|
408
|
+
message: str,
|
|
409
|
+
remediation_hint: str,
|
|
410
|
+
handler_identity: ModelHandlerIdentifier,
|
|
411
|
+
file_path: str | None = None,
|
|
412
|
+
line_number: int | None = None,
|
|
413
|
+
details: dict[str, object] | None = None,
|
|
414
|
+
caused_by: ModelHandlerValidationError | None = None,
|
|
415
|
+
correlation_id: UUID | None = None,
|
|
416
|
+
severity: EnumValidationSeverity = EnumValidationSeverity.ERROR,
|
|
417
|
+
) -> Self:
|
|
418
|
+
"""Create error from security constraint violation.
|
|
419
|
+
|
|
420
|
+
Factory method for creating errors detected during security
|
|
421
|
+
validation (introspection restrictions, input validation,
|
|
422
|
+
secret handling). Automatically sets error_type to
|
|
423
|
+
SECURITY_VALIDATION_ERROR and source_type to STATIC_ANALYSIS.
|
|
424
|
+
|
|
425
|
+
Args:
|
|
426
|
+
rule_id: Unique identifier for the validation rule.
|
|
427
|
+
message: Human-readable error message.
|
|
428
|
+
remediation_hint: Actionable fix suggestion.
|
|
429
|
+
handler_identity: Handler identification information.
|
|
430
|
+
file_path: Path to source file (optional).
|
|
431
|
+
line_number: Line number in source file (optional).
|
|
432
|
+
details: Additional context (optional).
|
|
433
|
+
caused_by: Chained error for root cause (optional).
|
|
434
|
+
correlation_id: Request correlation ID (optional).
|
|
435
|
+
severity: Severity level (defaults to 'error').
|
|
436
|
+
|
|
437
|
+
Returns:
|
|
438
|
+
ModelHandlerValidationError configured for security violations.
|
|
439
|
+
|
|
440
|
+
Example:
|
|
441
|
+
>>> error = ModelHandlerValidationError.from_security_violation(
|
|
442
|
+
... rule_id="SECURITY-002",
|
|
443
|
+
... message="Handler exposes sensitive method 'get_api_key'",
|
|
444
|
+
... remediation_hint="Prefix method with underscore: '_get_api_key'",
|
|
445
|
+
... handler_identity=ModelHandlerIdentifier.from_node(
|
|
446
|
+
... node_path="nodes/auth/node.py",
|
|
447
|
+
... handler_type=EnumHandlerType.INFRA_HANDLER,
|
|
448
|
+
... ),
|
|
449
|
+
... file_path="nodes/auth/handlers/handler_authenticate.py",
|
|
450
|
+
... line_number=42,
|
|
451
|
+
... )
|
|
452
|
+
"""
|
|
453
|
+
return cls(
|
|
454
|
+
error_type=EnumHandlerErrorType.SECURITY_VALIDATION_ERROR,
|
|
455
|
+
rule_id=rule_id,
|
|
456
|
+
handler_identity=handler_identity,
|
|
457
|
+
source_type=EnumHandlerSourceType.STATIC_ANALYSIS,
|
|
458
|
+
message=message,
|
|
459
|
+
remediation_hint=remediation_hint,
|
|
460
|
+
file_path=file_path,
|
|
461
|
+
line_number=line_number,
|
|
462
|
+
details=details,
|
|
463
|
+
caused_by=caused_by,
|
|
464
|
+
correlation_id=correlation_id or uuid4(),
|
|
465
|
+
severity=severity,
|
|
466
|
+
)
|
|
467
|
+
|
|
468
|
+
@classmethod
|
|
469
|
+
def from_descriptor_error(
|
|
470
|
+
cls,
|
|
471
|
+
rule_id: str,
|
|
472
|
+
message: str,
|
|
473
|
+
remediation_hint: str,
|
|
474
|
+
handler_identity: ModelHandlerIdentifier,
|
|
475
|
+
file_path: str | None = None,
|
|
476
|
+
line_number: int | None = None,
|
|
477
|
+
details: dict[str, object] | None = None,
|
|
478
|
+
caused_by: ModelHandlerValidationError | None = None,
|
|
479
|
+
correlation_id: UUID | None = None,
|
|
480
|
+
severity: EnumValidationSeverity = EnumValidationSeverity.ERROR,
|
|
481
|
+
) -> Self:
|
|
482
|
+
"""Create error from handler descriptor validation failure.
|
|
483
|
+
|
|
484
|
+
Factory method for creating errors detected during handler
|
|
485
|
+
descriptor validation (signature, protocol compliance, etc.).
|
|
486
|
+
Automatically sets error_type to DESCRIPTOR_VALIDATION_ERROR
|
|
487
|
+
and source_type to DESCRIPTOR.
|
|
488
|
+
|
|
489
|
+
Args:
|
|
490
|
+
rule_id: Unique identifier for the validation rule.
|
|
491
|
+
message: Human-readable error message.
|
|
492
|
+
remediation_hint: Actionable fix suggestion.
|
|
493
|
+
handler_identity: Handler identification information.
|
|
494
|
+
file_path: Path to handler file (optional).
|
|
495
|
+
line_number: Line number in handler file (optional).
|
|
496
|
+
details: Additional context (optional).
|
|
497
|
+
caused_by: Chained error for root cause (optional).
|
|
498
|
+
correlation_id: Request correlation ID (optional).
|
|
499
|
+
severity: Severity level (defaults to 'error').
|
|
500
|
+
|
|
501
|
+
Returns:
|
|
502
|
+
ModelHandlerValidationError configured for descriptor errors.
|
|
503
|
+
|
|
504
|
+
Example:
|
|
505
|
+
>>> error = ModelHandlerValidationError.from_descriptor_error(
|
|
506
|
+
... rule_id="DESCRIPTOR-001",
|
|
507
|
+
... message="Handler missing required 'handle' method",
|
|
508
|
+
... remediation_hint="Add async def handle(self, event) method",
|
|
509
|
+
... handler_identity=ModelHandlerIdentifier.from_node(
|
|
510
|
+
... node_path="nodes/compute/node.py",
|
|
511
|
+
... handler_type=EnumHandlerType.COMPUTE_HANDLER,
|
|
512
|
+
... ),
|
|
513
|
+
... )
|
|
514
|
+
"""
|
|
515
|
+
return cls(
|
|
516
|
+
error_type=EnumHandlerErrorType.DESCRIPTOR_VALIDATION_ERROR,
|
|
517
|
+
rule_id=rule_id,
|
|
518
|
+
handler_identity=handler_identity,
|
|
519
|
+
source_type=EnumHandlerSourceType.DESCRIPTOR,
|
|
520
|
+
message=message,
|
|
521
|
+
remediation_hint=remediation_hint,
|
|
522
|
+
file_path=file_path,
|
|
523
|
+
line_number=line_number,
|
|
524
|
+
details=details,
|
|
525
|
+
caused_by=caused_by,
|
|
526
|
+
correlation_id=correlation_id or uuid4(),
|
|
527
|
+
severity=severity,
|
|
528
|
+
)
|
|
529
|
+
|
|
530
|
+
@classmethod
|
|
531
|
+
def from_architecture_error(
|
|
532
|
+
cls,
|
|
533
|
+
rule_id: str,
|
|
534
|
+
message: str,
|
|
535
|
+
remediation_hint: str,
|
|
536
|
+
handler_identity: ModelHandlerIdentifier,
|
|
537
|
+
file_path: str | None = None,
|
|
538
|
+
line_number: int | None = None,
|
|
539
|
+
details: dict[str, object] | None = None,
|
|
540
|
+
caused_by: ModelHandlerValidationError | None = None,
|
|
541
|
+
correlation_id: UUID | None = None,
|
|
542
|
+
severity: EnumValidationSeverity = EnumValidationSeverity.ERROR,
|
|
543
|
+
) -> Self:
|
|
544
|
+
"""Create error from architecture pattern violation.
|
|
545
|
+
|
|
546
|
+
Factory method for creating errors detected during architecture
|
|
547
|
+
validation (layering, dependency injection, archetype patterns).
|
|
548
|
+
Automatically sets error_type to ARCHITECTURE_VALIDATION_ERROR
|
|
549
|
+
and source_type to STATIC_ANALYSIS.
|
|
550
|
+
|
|
551
|
+
Args:
|
|
552
|
+
rule_id: Unique identifier for the validation rule.
|
|
553
|
+
message: Human-readable error message.
|
|
554
|
+
remediation_hint: Actionable fix suggestion.
|
|
555
|
+
handler_identity: Handler identification information.
|
|
556
|
+
file_path: Path to source file (optional).
|
|
557
|
+
line_number: Line number in source file (optional).
|
|
558
|
+
details: Additional context (optional).
|
|
559
|
+
caused_by: Chained error for root cause (optional).
|
|
560
|
+
correlation_id: Request correlation ID (optional).
|
|
561
|
+
severity: Severity level (defaults to 'error').
|
|
562
|
+
|
|
563
|
+
Returns:
|
|
564
|
+
ModelHandlerValidationError configured for architecture violations.
|
|
565
|
+
|
|
566
|
+
Example:
|
|
567
|
+
>>> error = ModelHandlerValidationError.from_architecture_error(
|
|
568
|
+
... rule_id="ARCH-001",
|
|
569
|
+
... message="COMPUTE_HANDLER performs I/O operation",
|
|
570
|
+
... remediation_hint="Move I/O logic to INFRA_HANDLER",
|
|
571
|
+
... handler_identity=ModelHandlerIdentifier.from_node(
|
|
572
|
+
... node_path="nodes/compute/node.py",
|
|
573
|
+
... handler_type=EnumHandlerType.COMPUTE_HANDLER,
|
|
574
|
+
... ),
|
|
575
|
+
... line_number=85,
|
|
576
|
+
... )
|
|
577
|
+
"""
|
|
578
|
+
return cls(
|
|
579
|
+
error_type=EnumHandlerErrorType.ARCHITECTURE_VALIDATION_ERROR,
|
|
580
|
+
rule_id=rule_id,
|
|
581
|
+
handler_identity=handler_identity,
|
|
582
|
+
source_type=EnumHandlerSourceType.STATIC_ANALYSIS,
|
|
583
|
+
message=message,
|
|
584
|
+
remediation_hint=remediation_hint,
|
|
585
|
+
file_path=file_path,
|
|
586
|
+
line_number=line_number,
|
|
587
|
+
details=details,
|
|
588
|
+
caused_by=caused_by,
|
|
589
|
+
correlation_id=correlation_id or uuid4(),
|
|
590
|
+
severity=severity,
|
|
591
|
+
)
|
|
592
|
+
|
|
593
|
+
|
|
594
|
+
__all__ = ["ModelHandlerValidationError"]
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Infrastructure Error Context Configuration Model.
|
|
4
|
+
|
|
5
|
+
This module defines the configuration model for infrastructure error context,
|
|
6
|
+
encapsulating common structured fields to reduce __init__ parameter count
|
|
7
|
+
while maintaining strong typing per ONEX standards.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from uuid import UUID, uuid4
|
|
11
|
+
|
|
12
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
13
|
+
|
|
14
|
+
from omnibase_infra.enums import EnumInfraTransportType
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ModelInfraErrorContext(BaseModel):
|
|
18
|
+
"""Configuration model for infrastructure error context.
|
|
19
|
+
|
|
20
|
+
Encapsulates common structured fields for infrastructure errors
|
|
21
|
+
to reduce __init__ parameter count while maintaining strong typing.
|
|
22
|
+
This follows the ONEX pattern of using configuration models to
|
|
23
|
+
bundle related parameters.
|
|
24
|
+
|
|
25
|
+
Attributes:
|
|
26
|
+
transport_type: Type of infrastructure transport (HTTP, DATABASE, KAFKA, etc.)
|
|
27
|
+
operation: Operation being performed (connect, query, authenticate, etc.)
|
|
28
|
+
target_name: Target resource or endpoint name
|
|
29
|
+
correlation_id: Request correlation ID for distributed tracing
|
|
30
|
+
namespace: Vault namespace (Enterprise feature) or other service-specific namespace
|
|
31
|
+
|
|
32
|
+
Example:
|
|
33
|
+
>>> context = ModelInfraErrorContext(
|
|
34
|
+
... transport_type=EnumInfraTransportType.HTTP,
|
|
35
|
+
... operation="process_request",
|
|
36
|
+
... target_name="api-gateway",
|
|
37
|
+
... correlation_id=uuid4(),
|
|
38
|
+
... namespace="engineering",
|
|
39
|
+
... )
|
|
40
|
+
>>> raise RuntimeHostError("Operation failed", context=context)
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
model_config = ConfigDict(
|
|
44
|
+
frozen=True, # Immutable for thread safety
|
|
45
|
+
extra="forbid", # Strict validation - no extra fields
|
|
46
|
+
from_attributes=True, # Support pytest-xdist compatibility
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
transport_type: EnumInfraTransportType | None = Field(
|
|
50
|
+
default=None,
|
|
51
|
+
description="Type of infrastructure transport (HTTP, DATABASE, KAFKA, etc.)",
|
|
52
|
+
)
|
|
53
|
+
operation: str | None = Field(
|
|
54
|
+
default=None,
|
|
55
|
+
description="Operation being performed (connect, query, authenticate, etc.)",
|
|
56
|
+
)
|
|
57
|
+
target_name: str | None = Field(
|
|
58
|
+
default=None,
|
|
59
|
+
description="Target resource or endpoint name",
|
|
60
|
+
)
|
|
61
|
+
correlation_id: UUID | None = Field(
|
|
62
|
+
default=None,
|
|
63
|
+
description="Request correlation ID for distributed tracing",
|
|
64
|
+
)
|
|
65
|
+
namespace: str | None = Field(
|
|
66
|
+
default=None,
|
|
67
|
+
description="Vault namespace (Enterprise feature) or other service-specific namespace",
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
@classmethod
|
|
71
|
+
def with_correlation(
|
|
72
|
+
cls,
|
|
73
|
+
correlation_id: UUID | None = None,
|
|
74
|
+
**kwargs: object,
|
|
75
|
+
) -> "ModelInfraErrorContext":
|
|
76
|
+
"""Create context with auto-generated correlation_id if not provided.
|
|
77
|
+
|
|
78
|
+
This factory method ensures a correlation_id is always present,
|
|
79
|
+
generating one if not explicitly provided. Useful for distributed
|
|
80
|
+
tracing scenarios where every error should be traceable.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
correlation_id: Optional correlation ID. If None, one is auto-generated.
|
|
84
|
+
**kwargs: Additional context fields (transport_type, operation, target_name).
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
ModelInfraErrorContext with guaranteed correlation_id.
|
|
88
|
+
|
|
89
|
+
Example:
|
|
90
|
+
>>> context = ModelInfraErrorContext.with_correlation(
|
|
91
|
+
... transport_type=EnumInfraTransportType.HTTP,
|
|
92
|
+
... operation="process_request",
|
|
93
|
+
... )
|
|
94
|
+
>>> assert context.correlation_id is not None
|
|
95
|
+
"""
|
|
96
|
+
return cls(correlation_id=correlation_id or uuid4(), **kwargs)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
__all__ = ["ModelInfraErrorContext"]
|