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,467 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Chain-Aware Dispatch for Correlation and Causation Chain Validation.
|
|
4
|
+
|
|
5
|
+
Provides dispatch wrappers and helper functions that enforce correlation and
|
|
6
|
+
causation chain validation before message dispatch. This ensures all messages
|
|
7
|
+
in a workflow maintain proper traceability for distributed debugging.
|
|
8
|
+
|
|
9
|
+
Design Principles:
|
|
10
|
+
- **Wrapper Pattern**: ChainAwareDispatcher wraps MessageDispatchEngine without
|
|
11
|
+
modifying it, adding chain validation as a cross-cutting concern.
|
|
12
|
+
- **Helper Functions**: Standalone functions for envelope creation and validation
|
|
13
|
+
can be used independently of the wrapper for flexible integration.
|
|
14
|
+
- **Fail-Fast**: Chain violations are detected and raised before dispatch,
|
|
15
|
+
preventing malformed messages from entering the event stream.
|
|
16
|
+
|
|
17
|
+
Chain Requirements:
|
|
18
|
+
1. **Correlation Propagation**: Child messages must inherit parent's correlation_id
|
|
19
|
+
2. **Causation Chain**: Child's causation_id must equal parent's envelope_id
|
|
20
|
+
3. **New Message ID**: Child must have its own unique envelope_id
|
|
21
|
+
|
|
22
|
+
Thread Safety:
|
|
23
|
+
ChainAwareDispatcher is stateless (only holds references to engine and validator).
|
|
24
|
+
All validation and helper functions are pure functions that produce fresh objects.
|
|
25
|
+
Thread safety depends on the wrapped MessageDispatchEngine's thread safety.
|
|
26
|
+
|
|
27
|
+
Typing Note (ModelEventEnvelope[object]):
|
|
28
|
+
Functions in this module use ``ModelEventEnvelope[object]`` instead of ``Any``
|
|
29
|
+
per CLAUDE.md guidance: "Use ``object`` for generic payloads".
|
|
30
|
+
|
|
31
|
+
This is intentional:
|
|
32
|
+
- CLAUDE.md mandates "NEVER use ``Any``" for type annotations
|
|
33
|
+
- Chain validation functions must work with envelopes containing any payload
|
|
34
|
+
type, as they validate correlation/causation chains regardless of content
|
|
35
|
+
- The ``object`` type parameter signals "any object payload" while maintaining
|
|
36
|
+
type safety (unlike ``Any`` which disables type checking)
|
|
37
|
+
- When creating child envelopes with specific payload types, use the generic
|
|
38
|
+
``create_child_envelope[T]()`` method which preserves type information
|
|
39
|
+
|
|
40
|
+
Usage:
|
|
41
|
+
>>> from omnibase_infra.runtime import ChainAwareDispatcher, MessageDispatchEngine
|
|
42
|
+
>>> from omnibase_core.models.events.model_event_envelope import ModelEventEnvelope
|
|
43
|
+
>>>
|
|
44
|
+
>>> # Create chain-aware dispatcher
|
|
45
|
+
>>> engine = MessageDispatchEngine()
|
|
46
|
+
>>> engine.freeze() # After registration
|
|
47
|
+
>>> dispatcher = ChainAwareDispatcher(engine)
|
|
48
|
+
>>>
|
|
49
|
+
>>> # Create child envelope from parent
|
|
50
|
+
>>> child = dispatcher.create_child_envelope(parent, payload=MyEvent(...))
|
|
51
|
+
>>>
|
|
52
|
+
>>> # Dispatch with chain validation
|
|
53
|
+
>>> result = await dispatcher.dispatch_with_parent(
|
|
54
|
+
... topic="dev.events.v1",
|
|
55
|
+
... envelope=child,
|
|
56
|
+
... parent_envelope=parent,
|
|
57
|
+
... )
|
|
58
|
+
|
|
59
|
+
Related:
|
|
60
|
+
- OMN-951: Enforce Correlation and Causation Chain Validation
|
|
61
|
+
- ChainPropagationValidator: Core validation logic
|
|
62
|
+
- MessageDispatchEngine: Underlying dispatch engine
|
|
63
|
+
|
|
64
|
+
.. versionadded:: 0.5.0
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
from __future__ import annotations
|
|
68
|
+
|
|
69
|
+
__all__ = [
|
|
70
|
+
"ChainAwareDispatcher",
|
|
71
|
+
"propagate_chain_context",
|
|
72
|
+
"validate_dispatch_chain",
|
|
73
|
+
]
|
|
74
|
+
|
|
75
|
+
from typing import TYPE_CHECKING, TypeVar
|
|
76
|
+
from uuid import UUID, uuid4
|
|
77
|
+
|
|
78
|
+
from omnibase_infra.errors.error_chain_propagation import ChainPropagationError
|
|
79
|
+
from omnibase_infra.models.dispatch.model_dispatch_result import ModelDispatchResult
|
|
80
|
+
from omnibase_infra.models.errors.model_infra_error_context import (
|
|
81
|
+
ModelInfraErrorContext,
|
|
82
|
+
)
|
|
83
|
+
from omnibase_infra.runtime.service_message_dispatch_engine import MessageDispatchEngine
|
|
84
|
+
from omnibase_infra.validation.validator_chain_propagation import (
|
|
85
|
+
ChainPropagationValidator,
|
|
86
|
+
get_correlation_id,
|
|
87
|
+
get_message_id,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
if TYPE_CHECKING:
|
|
91
|
+
from omnibase_core.models.events.model_event_envelope import ModelEventEnvelope
|
|
92
|
+
|
|
93
|
+
# TypeVar for payload types when creating child envelopes
|
|
94
|
+
T = TypeVar("T")
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def propagate_chain_context(
|
|
98
|
+
parent: ModelEventEnvelope[object],
|
|
99
|
+
child: ModelEventEnvelope[object],
|
|
100
|
+
) -> ModelEventEnvelope[object]:
|
|
101
|
+
"""Propagate chain context from parent to child envelope.
|
|
102
|
+
|
|
103
|
+
Creates a new envelope with the same content as the child but with
|
|
104
|
+
proper chain context copied from the parent:
|
|
105
|
+
- correlation_id: Copied from parent (workflow trace)
|
|
106
|
+
- causation_id: Set to parent's envelope_id (parent-child link)
|
|
107
|
+
|
|
108
|
+
This function does NOT modify the original envelopes. It returns a new
|
|
109
|
+
envelope with updated chain fields.
|
|
110
|
+
|
|
111
|
+
Args:
|
|
112
|
+
parent: The parent message envelope containing the source chain context.
|
|
113
|
+
child: The child message envelope to receive chain context.
|
|
114
|
+
|
|
115
|
+
Returns:
|
|
116
|
+
A new ModelEventEnvelope with chain context properly set.
|
|
117
|
+
The envelope_id remains the child's original envelope_id.
|
|
118
|
+
|
|
119
|
+
Example:
|
|
120
|
+
>>> parent = ModelEventEnvelope(payload=ParentEvent(...), correlation_id=uuid4())
|
|
121
|
+
>>> child = ModelEventEnvelope(payload=ChildEvent(...))
|
|
122
|
+
>>> linked_child = propagate_chain_context(parent, child)
|
|
123
|
+
>>> linked_child.correlation_id == parent.correlation_id
|
|
124
|
+
True
|
|
125
|
+
>>> linked_child.causation_id == parent.envelope_id
|
|
126
|
+
True
|
|
127
|
+
|
|
128
|
+
Note:
|
|
129
|
+
If the child already has chain context that matches the parent,
|
|
130
|
+
the returned envelope will be identical to the input child.
|
|
131
|
+
"""
|
|
132
|
+
parent_message_id = get_message_id(parent)
|
|
133
|
+
parent_correlation_id = get_correlation_id(parent)
|
|
134
|
+
|
|
135
|
+
# Build update dict for chain context
|
|
136
|
+
updates: dict[str, UUID | None] = {}
|
|
137
|
+
|
|
138
|
+
# Propagate correlation_id from parent
|
|
139
|
+
if parent_correlation_id is not None:
|
|
140
|
+
updates["correlation_id"] = parent_correlation_id
|
|
141
|
+
|
|
142
|
+
# Set causation_id to parent's message_id (envelope_id)
|
|
143
|
+
updates["causation_id"] = parent_message_id
|
|
144
|
+
|
|
145
|
+
# Create new envelope with updated chain context
|
|
146
|
+
# model_copy creates a shallow copy with specified field updates
|
|
147
|
+
return child.model_copy(update=updates)
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def validate_dispatch_chain(
|
|
151
|
+
parent: ModelEventEnvelope[object],
|
|
152
|
+
child: ModelEventEnvelope[object],
|
|
153
|
+
) -> None:
|
|
154
|
+
"""Validate chain propagation and raise error if invalid.
|
|
155
|
+
|
|
156
|
+
Validates that the child envelope properly maintains chain context from
|
|
157
|
+
the parent. This is a convenience function that combines validation and
|
|
158
|
+
error raising for use in dispatch handlers.
|
|
159
|
+
|
|
160
|
+
Validation checks:
|
|
161
|
+
1. Child's correlation_id matches parent's correlation_id
|
|
162
|
+
2. Child's causation_id equals parent's envelope_id
|
|
163
|
+
|
|
164
|
+
Args:
|
|
165
|
+
parent: The parent message envelope.
|
|
166
|
+
child: The child message envelope to validate.
|
|
167
|
+
|
|
168
|
+
Raises:
|
|
169
|
+
ChainPropagationError: If any chain violations are detected.
|
|
170
|
+
Contains the list of violations for inspection.
|
|
171
|
+
|
|
172
|
+
Example:
|
|
173
|
+
>>> try:
|
|
174
|
+
... validate_dispatch_chain(parent, child)
|
|
175
|
+
... # Chain is valid, proceed with dispatch
|
|
176
|
+
... await engine.dispatch(topic, child)
|
|
177
|
+
... except ChainPropagationError as e:
|
|
178
|
+
... logger.error("Chain validation failed: %s", e.format_violations_for_logging())
|
|
179
|
+
... raise
|
|
180
|
+
|
|
181
|
+
Note:
|
|
182
|
+
This function uses the default singleton validator for efficiency.
|
|
183
|
+
For custom validation behavior, use ChainPropagationValidator directly.
|
|
184
|
+
"""
|
|
185
|
+
validator = ChainPropagationValidator()
|
|
186
|
+
violations = validator.validate_chain(parent, child)
|
|
187
|
+
|
|
188
|
+
if violations:
|
|
189
|
+
# Get correlation_id for error context
|
|
190
|
+
correlation_id = get_correlation_id(parent)
|
|
191
|
+
|
|
192
|
+
# Build error context
|
|
193
|
+
context = ModelInfraErrorContext(
|
|
194
|
+
operation="validate_dispatch_chain",
|
|
195
|
+
correlation_id=correlation_id,
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
raise ChainPropagationError(
|
|
199
|
+
message="Dispatch chain validation failed",
|
|
200
|
+
violations=violations,
|
|
201
|
+
context=context,
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
class ChainAwareDispatcher:
|
|
206
|
+
"""Dispatch wrapper that enforces correlation/causation chain validation.
|
|
207
|
+
|
|
208
|
+
Wraps the MessageDispatchEngine to add chain validation before dispatch.
|
|
209
|
+
This ensures all messages in a workflow maintain proper traceability for
|
|
210
|
+
distributed debugging and observability.
|
|
211
|
+
|
|
212
|
+
The wrapper does NOT modify the underlying engine. It adds a validation
|
|
213
|
+
layer that:
|
|
214
|
+
1. Validates chain context before dispatch (dispatch_with_parent)
|
|
215
|
+
2. Provides helpers to create properly linked child envelopes
|
|
216
|
+
|
|
217
|
+
Design Rationale:
|
|
218
|
+
Chain validation is a cross-cutting concern that affects all message
|
|
219
|
+
dispatch operations. By wrapping the engine instead of modifying it:
|
|
220
|
+
- MessageDispatchEngine remains focused on routing concerns
|
|
221
|
+
- Chain validation can be added/removed without engine changes
|
|
222
|
+
- Testing is simplified (mock either layer independently)
|
|
223
|
+
- Different validation policies can be applied via different wrappers
|
|
224
|
+
|
|
225
|
+
Attributes:
|
|
226
|
+
engine: The underlying MessageDispatchEngine for dispatch.
|
|
227
|
+
validator: The ChainPropagationValidator for chain validation.
|
|
228
|
+
|
|
229
|
+
Thread Safety:
|
|
230
|
+
ChainAwareDispatcher is stateless and thread-safe for concurrent use
|
|
231
|
+
after initialization. Thread safety during dispatch depends on the
|
|
232
|
+
wrapped MessageDispatchEngine's thread safety guarantees.
|
|
233
|
+
|
|
234
|
+
Example:
|
|
235
|
+
>>> from omnibase_infra.runtime import ChainAwareDispatcher, MessageDispatchEngine
|
|
236
|
+
>>>
|
|
237
|
+
>>> # Setup
|
|
238
|
+
>>> engine = MessageDispatchEngine()
|
|
239
|
+
>>> engine.register_dispatcher(...)
|
|
240
|
+
>>> engine.freeze()
|
|
241
|
+
>>>
|
|
242
|
+
>>> # Create chain-aware wrapper
|
|
243
|
+
>>> chain_dispatcher = ChainAwareDispatcher(engine)
|
|
244
|
+
>>>
|
|
245
|
+
>>> # Create child envelope from parent
|
|
246
|
+
>>> child = chain_dispatcher.create_child_envelope(
|
|
247
|
+
... parent_envelope=parent,
|
|
248
|
+
... payload=MyEvent(...),
|
|
249
|
+
... )
|
|
250
|
+
>>>
|
|
251
|
+
>>> # Dispatch with chain validation
|
|
252
|
+
>>> result = await chain_dispatcher.dispatch_with_parent(
|
|
253
|
+
... topic="dev.events.v1",
|
|
254
|
+
... envelope=child,
|
|
255
|
+
... parent_envelope=parent,
|
|
256
|
+
... )
|
|
257
|
+
|
|
258
|
+
See Also:
|
|
259
|
+
- MessageDispatchEngine: Underlying dispatch engine
|
|
260
|
+
- ChainPropagationValidator: Validation logic
|
|
261
|
+
- propagate_chain_context: Standalone context propagation
|
|
262
|
+
|
|
263
|
+
.. versionadded:: 0.5.0
|
|
264
|
+
"""
|
|
265
|
+
|
|
266
|
+
def __init__(
|
|
267
|
+
self,
|
|
268
|
+
engine: MessageDispatchEngine,
|
|
269
|
+
validator: ChainPropagationValidator | None = None,
|
|
270
|
+
) -> None:
|
|
271
|
+
"""Initialize ChainAwareDispatcher.
|
|
272
|
+
|
|
273
|
+
Args:
|
|
274
|
+
engine: The MessageDispatchEngine to wrap for dispatch operations.
|
|
275
|
+
Must be frozen before dispatch methods are called.
|
|
276
|
+
validator: Optional ChainPropagationValidator for chain validation.
|
|
277
|
+
If None, creates a default validator instance.
|
|
278
|
+
|
|
279
|
+
Example:
|
|
280
|
+
>>> engine = MessageDispatchEngine()
|
|
281
|
+
>>> engine.freeze()
|
|
282
|
+
>>> dispatcher = ChainAwareDispatcher(engine)
|
|
283
|
+
>>>
|
|
284
|
+
>>> # With custom validator
|
|
285
|
+
>>> custom_validator = ChainPropagationValidator()
|
|
286
|
+
>>> dispatcher = ChainAwareDispatcher(engine, validator=custom_validator)
|
|
287
|
+
"""
|
|
288
|
+
self._engine = engine
|
|
289
|
+
self._validator = (
|
|
290
|
+
validator if validator is not None else ChainPropagationValidator()
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
@property
|
|
294
|
+
def engine(self) -> MessageDispatchEngine:
|
|
295
|
+
"""Get the underlying MessageDispatchEngine.
|
|
296
|
+
|
|
297
|
+
Returns:
|
|
298
|
+
The wrapped MessageDispatchEngine instance.
|
|
299
|
+
"""
|
|
300
|
+
return self._engine
|
|
301
|
+
|
|
302
|
+
@property
|
|
303
|
+
def validator(self) -> ChainPropagationValidator:
|
|
304
|
+
"""Get the ChainPropagationValidator.
|
|
305
|
+
|
|
306
|
+
Returns:
|
|
307
|
+
The ChainPropagationValidator used for chain validation.
|
|
308
|
+
"""
|
|
309
|
+
return self._validator
|
|
310
|
+
|
|
311
|
+
async def dispatch_with_parent(
|
|
312
|
+
self,
|
|
313
|
+
topic: str,
|
|
314
|
+
envelope: ModelEventEnvelope[object],
|
|
315
|
+
parent_envelope: ModelEventEnvelope[object],
|
|
316
|
+
) -> ModelDispatchResult:
|
|
317
|
+
"""Dispatch with chain validation against parent envelope.
|
|
318
|
+
|
|
319
|
+
Validates that the envelope properly maintains chain context from the
|
|
320
|
+
parent envelope, then dispatches using the underlying engine. If chain
|
|
321
|
+
validation fails, raises ChainPropagationError before dispatch.
|
|
322
|
+
|
|
323
|
+
Validation checks:
|
|
324
|
+
1. envelope.correlation_id == parent_envelope.correlation_id
|
|
325
|
+
2. envelope.causation_id == parent_envelope.envelope_id
|
|
326
|
+
|
|
327
|
+
Args:
|
|
328
|
+
topic: The topic to dispatch to (e.g., "dev.user.events.v1").
|
|
329
|
+
envelope: The child message envelope to dispatch.
|
|
330
|
+
parent_envelope: The parent envelope for chain validation.
|
|
331
|
+
|
|
332
|
+
Returns:
|
|
333
|
+
ModelDispatchResult from the underlying engine dispatch.
|
|
334
|
+
|
|
335
|
+
Raises:
|
|
336
|
+
ChainPropagationError: If chain validation fails. Contains the
|
|
337
|
+
list of violations for inspection and logging.
|
|
338
|
+
ModelOnexError: If dispatch fails (from underlying engine).
|
|
339
|
+
|
|
340
|
+
Example:
|
|
341
|
+
>>> # Create child with proper chain context
|
|
342
|
+
>>> child = chain_dispatcher.create_child_envelope(parent, payload=event)
|
|
343
|
+
>>>
|
|
344
|
+
>>> # Dispatch with validation
|
|
345
|
+
>>> try:
|
|
346
|
+
... result = await chain_dispatcher.dispatch_with_parent(
|
|
347
|
+
... topic="dev.events.v1",
|
|
348
|
+
... envelope=child,
|
|
349
|
+
... parent_envelope=parent,
|
|
350
|
+
... )
|
|
351
|
+
... if result.is_successful():
|
|
352
|
+
... logger.info("Dispatch successful")
|
|
353
|
+
... except ChainPropagationError as e:
|
|
354
|
+
... logger.error("Chain broken: %s", e.format_violations_for_logging())
|
|
355
|
+
|
|
356
|
+
Note:
|
|
357
|
+
This method validates BEFORE dispatch. If you need to dispatch
|
|
358
|
+
regardless of chain validity (with warnings), use the underlying
|
|
359
|
+
engine directly and validate separately.
|
|
360
|
+
"""
|
|
361
|
+
# Validate chain before dispatch
|
|
362
|
+
violations = self._validator.validate_chain(parent_envelope, envelope)
|
|
363
|
+
|
|
364
|
+
if violations:
|
|
365
|
+
# Get correlation_id for error context
|
|
366
|
+
correlation_id = get_correlation_id(parent_envelope)
|
|
367
|
+
|
|
368
|
+
# Build error context
|
|
369
|
+
context = ModelInfraErrorContext(
|
|
370
|
+
operation="dispatch_with_parent",
|
|
371
|
+
target_name=topic,
|
|
372
|
+
correlation_id=correlation_id,
|
|
373
|
+
)
|
|
374
|
+
|
|
375
|
+
raise ChainPropagationError(
|
|
376
|
+
message="Chain validation failed before dispatch",
|
|
377
|
+
violations=violations,
|
|
378
|
+
context=context,
|
|
379
|
+
)
|
|
380
|
+
|
|
381
|
+
# Chain is valid, proceed with dispatch
|
|
382
|
+
return await self._engine.dispatch(topic, envelope)
|
|
383
|
+
|
|
384
|
+
def create_child_envelope(
|
|
385
|
+
self,
|
|
386
|
+
parent_envelope: ModelEventEnvelope[object],
|
|
387
|
+
payload: T,
|
|
388
|
+
message_type: str | None = None,
|
|
389
|
+
) -> ModelEventEnvelope[T]:
|
|
390
|
+
"""Create a properly linked child envelope from a parent.
|
|
391
|
+
|
|
392
|
+
Creates a new envelope with:
|
|
393
|
+
- A new unique envelope_id (generated)
|
|
394
|
+
- correlation_id copied from parent (workflow trace)
|
|
395
|
+
- causation_id set to parent's envelope_id (parent-child link)
|
|
396
|
+
- The provided payload
|
|
397
|
+
- Optional message_type override
|
|
398
|
+
|
|
399
|
+
This is the recommended way to create child envelopes that maintain
|
|
400
|
+
proper chain context for dispatch.
|
|
401
|
+
|
|
402
|
+
Args:
|
|
403
|
+
parent_envelope: The parent envelope to inherit chain context from.
|
|
404
|
+
payload: The payload for the new child envelope.
|
|
405
|
+
message_type: Optional message type override. If None, uses the
|
|
406
|
+
class name of the payload.
|
|
407
|
+
|
|
408
|
+
Returns:
|
|
409
|
+
A new ModelEventEnvelope with proper chain context and the
|
|
410
|
+
provided payload. The envelope is ready for dispatch.
|
|
411
|
+
|
|
412
|
+
Example:
|
|
413
|
+
>>> # Create child from parent
|
|
414
|
+
>>> child = chain_dispatcher.create_child_envelope(
|
|
415
|
+
... parent_envelope=parent,
|
|
416
|
+
... payload=UserCreatedEvent(user_id="123"),
|
|
417
|
+
... )
|
|
418
|
+
>>>
|
|
419
|
+
>>> # Child has proper chain context
|
|
420
|
+
>>> child.correlation_id == parent.correlation_id
|
|
421
|
+
True
|
|
422
|
+
>>> child.causation_id == parent.envelope_id
|
|
423
|
+
True
|
|
424
|
+
>>> child.envelope_id != parent.envelope_id # New ID
|
|
425
|
+
True
|
|
426
|
+
>>>
|
|
427
|
+
>>> # With custom message type
|
|
428
|
+
>>> child = chain_dispatcher.create_child_envelope(
|
|
429
|
+
... parent_envelope=parent,
|
|
430
|
+
... payload=event,
|
|
431
|
+
... message_type="CustomEventType",
|
|
432
|
+
... )
|
|
433
|
+
|
|
434
|
+
Note:
|
|
435
|
+
The trace_id is NOT copied from parent. Each envelope may have
|
|
436
|
+
its own trace context. For distributed tracing, correlation_id
|
|
437
|
+
provides workflow-level correlation, while trace_id is for
|
|
438
|
+
span-level tracing.
|
|
439
|
+
"""
|
|
440
|
+
# Local import to avoid circular import issues with omnibase_core
|
|
441
|
+
from omnibase_core.models.events.model_event_envelope import (
|
|
442
|
+
ModelEventEnvelope as EnvelopeClass,
|
|
443
|
+
)
|
|
444
|
+
|
|
445
|
+
# Get parent chain context
|
|
446
|
+
parent_message_id = get_message_id(parent_envelope)
|
|
447
|
+
parent_correlation_id = get_correlation_id(parent_envelope)
|
|
448
|
+
|
|
449
|
+
# Generate new envelope_id for child
|
|
450
|
+
child_envelope_id = uuid4()
|
|
451
|
+
|
|
452
|
+
# Determine message type
|
|
453
|
+
effective_message_type = (
|
|
454
|
+
message_type if message_type is not None else type(payload).__name__
|
|
455
|
+
)
|
|
456
|
+
|
|
457
|
+
# Create child envelope with proper chain context.
|
|
458
|
+
# The type annotation ModelEventEnvelope[T] enables static type checking of the payload,
|
|
459
|
+
# but Python's generics are erased at runtime - the envelope accepts any payload type.
|
|
460
|
+
envelope: ModelEventEnvelope[T] = EnvelopeClass(
|
|
461
|
+
envelope_id=child_envelope_id,
|
|
462
|
+
payload=payload,
|
|
463
|
+
message_type=effective_message_type,
|
|
464
|
+
correlation_id=parent_correlation_id,
|
|
465
|
+
causation_id=parent_message_id,
|
|
466
|
+
)
|
|
467
|
+
return envelope
|