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,229 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Health Check Result Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for component health check operation results.
|
|
6
|
+
|
|
7
|
+
Design Pattern:
|
|
8
|
+
ModelHealthCheckResult replaces tuple[str, Any] returns from
|
|
9
|
+
check_health() with a strongly-typed model that provides:
|
|
10
|
+
- Component type identification
|
|
11
|
+
- Typed health status with structured details
|
|
12
|
+
- Factory methods for common healthy/unhealthy patterns
|
|
13
|
+
|
|
14
|
+
Thread Safety:
|
|
15
|
+
ModelHealthCheckResult is immutable (frozen=True) after creation,
|
|
16
|
+
making it thread-safe for concurrent read access.
|
|
17
|
+
|
|
18
|
+
Example:
|
|
19
|
+
>>> from omnibase_infra.runtime.models import ModelHealthCheckResult
|
|
20
|
+
>>>
|
|
21
|
+
>>> # Create a healthy result
|
|
22
|
+
>>> healthy = ModelHealthCheckResult.healthy_result("kafka")
|
|
23
|
+
>>> healthy.healthy
|
|
24
|
+
True
|
|
25
|
+
>>>
|
|
26
|
+
>>> # Create an unhealthy result (timeout)
|
|
27
|
+
>>> unhealthy = ModelHealthCheckResult.timeout_result("db", 5.0)
|
|
28
|
+
>>> unhealthy.healthy
|
|
29
|
+
False
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
from __future__ import annotations
|
|
33
|
+
|
|
34
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
35
|
+
|
|
36
|
+
from omnibase_core.types import JsonType
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class ModelHealthCheckResult(BaseModel):
|
|
40
|
+
"""Result of a handler health check operation.
|
|
41
|
+
|
|
42
|
+
Encapsulates the result of checking a single handler's health,
|
|
43
|
+
providing the handler type, health status, and detailed health data.
|
|
44
|
+
|
|
45
|
+
Attributes:
|
|
46
|
+
handler_type: The handler type identifier (e.g., "http", "db").
|
|
47
|
+
healthy: Whether the handler is healthy and operational.
|
|
48
|
+
details: Detailed health check data returned by the handler.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
model_config = ConfigDict(
|
|
52
|
+
strict=True,
|
|
53
|
+
frozen=True,
|
|
54
|
+
extra="forbid",
|
|
55
|
+
from_attributes=True,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
handler_type: str = Field(
|
|
59
|
+
...,
|
|
60
|
+
description="Handler type identifier",
|
|
61
|
+
min_length=1,
|
|
62
|
+
)
|
|
63
|
+
healthy: bool = Field(
|
|
64
|
+
...,
|
|
65
|
+
description="Whether the handler is healthy",
|
|
66
|
+
)
|
|
67
|
+
details: dict[str, JsonType] = Field(
|
|
68
|
+
default_factory=dict,
|
|
69
|
+
description="Detailed health check data from the handler",
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
@classmethod
|
|
73
|
+
def healthy_result(
|
|
74
|
+
cls,
|
|
75
|
+
handler_type: str,
|
|
76
|
+
note: str = "",
|
|
77
|
+
) -> ModelHealthCheckResult:
|
|
78
|
+
"""Create a healthy result for a handler.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
handler_type: The handler type identifier.
|
|
82
|
+
note: Optional note about the healthy status. Empty string means no note.
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
ModelHealthCheckResult indicating healthy status.
|
|
86
|
+
|
|
87
|
+
Example:
|
|
88
|
+
>>> result = ModelHealthCheckResult.healthy_result("kafka")
|
|
89
|
+
>>> result.healthy
|
|
90
|
+
True
|
|
91
|
+
"""
|
|
92
|
+
details: dict[str, JsonType] = {"healthy": True}
|
|
93
|
+
if note:
|
|
94
|
+
details["note"] = note
|
|
95
|
+
return cls(handler_type=handler_type, healthy=True, details=details)
|
|
96
|
+
|
|
97
|
+
@classmethod
|
|
98
|
+
def no_health_check_result(cls, handler_type: str) -> ModelHealthCheckResult:
|
|
99
|
+
"""Create a result for a handler without health_check method.
|
|
100
|
+
|
|
101
|
+
By convention, handlers without health_check are assumed healthy.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
handler_type: The handler type identifier.
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
ModelHealthCheckResult indicating healthy (no health_check method).
|
|
108
|
+
|
|
109
|
+
Example:
|
|
110
|
+
>>> result = ModelHealthCheckResult.no_health_check_result("custom")
|
|
111
|
+
>>> result.healthy
|
|
112
|
+
True
|
|
113
|
+
"""
|
|
114
|
+
return cls(
|
|
115
|
+
handler_type=handler_type,
|
|
116
|
+
healthy=True,
|
|
117
|
+
details={"healthy": True, "note": "no health_check method"},
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
@classmethod
|
|
121
|
+
def timeout_result(
|
|
122
|
+
cls,
|
|
123
|
+
handler_type: str,
|
|
124
|
+
timeout_seconds: float,
|
|
125
|
+
) -> ModelHealthCheckResult:
|
|
126
|
+
"""Create an unhealthy result for a health check timeout.
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
handler_type: The handler type identifier.
|
|
130
|
+
timeout_seconds: The timeout duration that was exceeded.
|
|
131
|
+
|
|
132
|
+
Returns:
|
|
133
|
+
ModelHealthCheckResult indicating timeout failure.
|
|
134
|
+
|
|
135
|
+
Example:
|
|
136
|
+
>>> result = ModelHealthCheckResult.timeout_result("db", 5.0)
|
|
137
|
+
>>> result.healthy
|
|
138
|
+
False
|
|
139
|
+
"""
|
|
140
|
+
return cls(
|
|
141
|
+
handler_type=handler_type,
|
|
142
|
+
healthy=False,
|
|
143
|
+
details={
|
|
144
|
+
"healthy": False,
|
|
145
|
+
"error": f"health check timeout after {timeout_seconds}s",
|
|
146
|
+
},
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
@classmethod
|
|
150
|
+
def error_result(
|
|
151
|
+
cls,
|
|
152
|
+
handler_type: str,
|
|
153
|
+
error: str,
|
|
154
|
+
) -> ModelHealthCheckResult:
|
|
155
|
+
"""Create an unhealthy result for a health check exception.
|
|
156
|
+
|
|
157
|
+
Args:
|
|
158
|
+
handler_type: The handler type identifier.
|
|
159
|
+
error: The error message from the exception.
|
|
160
|
+
|
|
161
|
+
Returns:
|
|
162
|
+
ModelHealthCheckResult indicating error failure.
|
|
163
|
+
|
|
164
|
+
Example:
|
|
165
|
+
>>> result = ModelHealthCheckResult.error_result(
|
|
166
|
+
... "vault",
|
|
167
|
+
... "Authentication token expired",
|
|
168
|
+
... )
|
|
169
|
+
>>> result.healthy
|
|
170
|
+
False
|
|
171
|
+
"""
|
|
172
|
+
return cls(
|
|
173
|
+
handler_type=handler_type,
|
|
174
|
+
healthy=False,
|
|
175
|
+
details={"healthy": False, "error": error},
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
@classmethod
|
|
179
|
+
def from_handler_response(
|
|
180
|
+
cls,
|
|
181
|
+
handler_type: str,
|
|
182
|
+
health_response: object,
|
|
183
|
+
) -> ModelHealthCheckResult:
|
|
184
|
+
"""Create a result from a raw handler health check response.
|
|
185
|
+
|
|
186
|
+
Parses the handler's health check response and extracts health status.
|
|
187
|
+
|
|
188
|
+
Args:
|
|
189
|
+
handler_type: The handler type identifier.
|
|
190
|
+
health_response: The raw response from handler.health_check().
|
|
191
|
+
|
|
192
|
+
Returns:
|
|
193
|
+
ModelHealthCheckResult from the response.
|
|
194
|
+
|
|
195
|
+
Example:
|
|
196
|
+
>>> response = {"healthy": True, "lag": 100}
|
|
197
|
+
>>> result = ModelHealthCheckResult.from_handler_response(
|
|
198
|
+
... "kafka",
|
|
199
|
+
... response,
|
|
200
|
+
... )
|
|
201
|
+
>>> result.healthy
|
|
202
|
+
True
|
|
203
|
+
"""
|
|
204
|
+
if isinstance(health_response, dict):
|
|
205
|
+
healthy = bool(health_response.get("healthy", False))
|
|
206
|
+
return cls(
|
|
207
|
+
handler_type=handler_type,
|
|
208
|
+
healthy=healthy,
|
|
209
|
+
details=health_response,
|
|
210
|
+
)
|
|
211
|
+
# Non-dict response - treat as details, assume healthy
|
|
212
|
+
# Convert to string representation for JsonType compatibility
|
|
213
|
+
return cls(
|
|
214
|
+
handler_type=handler_type,
|
|
215
|
+
healthy=True,
|
|
216
|
+
details={"raw_response": str(health_response)},
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
def __str__(self) -> str:
|
|
220
|
+
"""Return a human-readable string representation for debugging.
|
|
221
|
+
|
|
222
|
+
Returns:
|
|
223
|
+
String format: "ModelHealthCheckResult(handler_type='...', healthy=...)"
|
|
224
|
+
"""
|
|
225
|
+
status = "healthy" if self.healthy else "unhealthy"
|
|
226
|
+
return f"ModelHealthCheckResult(handler_type='{self.handler_type}', {status})"
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
__all__: list[str] = ["ModelHealthCheckResult"]
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Lifecycle Result Model for handler shutdown operations.
|
|
4
|
+
|
|
5
|
+
This module provides the ModelLifecycleResult class for representing the outcome
|
|
6
|
+
of individual handler lifecycle operations (e.g., shutdown).
|
|
7
|
+
|
|
8
|
+
Design Pattern:
|
|
9
|
+
ModelLifecycleResult replaces tuple[str, bool, str | None] returns from
|
|
10
|
+
shutdown_handler() with a strongly-typed, self-documenting model that
|
|
11
|
+
provides factory methods for success/failure cases.
|
|
12
|
+
|
|
13
|
+
The model uses an empty string sentinel instead of None for error_message
|
|
14
|
+
to eliminate union types and reduce type complexity. Use the `has_error`
|
|
15
|
+
property to check if an error exists before accessing error_message.
|
|
16
|
+
|
|
17
|
+
Thread Safety:
|
|
18
|
+
ModelLifecycleResult is immutable (frozen=True) after creation,
|
|
19
|
+
making it thread-safe for concurrent read access.
|
|
20
|
+
|
|
21
|
+
Example:
|
|
22
|
+
>>> from omnibase_infra.runtime.models import ModelLifecycleResult
|
|
23
|
+
>>>
|
|
24
|
+
>>> # Create a successful shutdown result
|
|
25
|
+
>>> success = ModelLifecycleResult.succeeded("kafka")
|
|
26
|
+
>>> success.handler_type
|
|
27
|
+
'kafka'
|
|
28
|
+
>>> success.success
|
|
29
|
+
True
|
|
30
|
+
>>> success.has_error
|
|
31
|
+
False
|
|
32
|
+
>>>
|
|
33
|
+
>>> # Create a failed shutdown result
|
|
34
|
+
>>> failure = ModelLifecycleResult.failed("db", "Connection timeout")
|
|
35
|
+
>>> failure.success
|
|
36
|
+
False
|
|
37
|
+
>>> failure.error_message
|
|
38
|
+
'Connection timeout'
|
|
39
|
+
>>> failure.has_error
|
|
40
|
+
True
|
|
41
|
+
|
|
42
|
+
.. versionchanged:: 0.7.0
|
|
43
|
+
Changed error_message from str | None to str with empty string sentinel
|
|
44
|
+
to reduce union count (OMN-1003 consolidation).
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
48
|
+
|
|
49
|
+
from omnibase_infra.enums import EnumInfraTransportType
|
|
50
|
+
from omnibase_infra.errors import ModelInfraErrorContext, ProtocolConfigurationError
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class ModelLifecycleResult(BaseModel):
|
|
54
|
+
"""Result of a single handler lifecycle operation (e.g., shutdown).
|
|
55
|
+
|
|
56
|
+
Provides a strongly-typed replacement for tuple[str, bool, str | None]
|
|
57
|
+
with factory methods for common success/failure patterns.
|
|
58
|
+
|
|
59
|
+
Note:
|
|
60
|
+
The ``error_message`` field uses an empty string sentinel instead
|
|
61
|
+
of None to eliminate union types. Use the ``has_error`` property
|
|
62
|
+
to check if an error message exists before accessing it.
|
|
63
|
+
|
|
64
|
+
Attributes:
|
|
65
|
+
handler_type: The handler type identifier (e.g., "kafka", "db", "http").
|
|
66
|
+
success: True if the lifecycle operation completed successfully.
|
|
67
|
+
error_message: Error description if the operation failed, empty string
|
|
68
|
+
otherwise. Use ``has_error`` to check if an error exists.
|
|
69
|
+
|
|
70
|
+
Example:
|
|
71
|
+
>>> result = ModelLifecycleResult.succeeded("consul")
|
|
72
|
+
>>> result.success
|
|
73
|
+
True
|
|
74
|
+
>>> result.has_error
|
|
75
|
+
False
|
|
76
|
+
|
|
77
|
+
>>> result = ModelLifecycleResult.failed("vault", "Auth expired")
|
|
78
|
+
>>> result.success
|
|
79
|
+
False
|
|
80
|
+
>>> result.error_message
|
|
81
|
+
'Auth expired'
|
|
82
|
+
>>> result.has_error
|
|
83
|
+
True
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
model_config = ConfigDict(
|
|
87
|
+
strict=True,
|
|
88
|
+
frozen=True,
|
|
89
|
+
extra="forbid",
|
|
90
|
+
from_attributes=True,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
handler_type: str = Field(
|
|
94
|
+
...,
|
|
95
|
+
description="The handler type identifier (e.g., 'kafka', 'db').",
|
|
96
|
+
min_length=1,
|
|
97
|
+
)
|
|
98
|
+
success: bool = Field(
|
|
99
|
+
...,
|
|
100
|
+
description="True if the lifecycle operation completed successfully.",
|
|
101
|
+
)
|
|
102
|
+
error_message: str = Field(
|
|
103
|
+
default="",
|
|
104
|
+
description="Error description if the operation failed, empty string otherwise. "
|
|
105
|
+
"Use has_error property to check if an error exists.",
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
@property
|
|
109
|
+
def has_error(self) -> bool:
|
|
110
|
+
"""Check if an error message exists.
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
True if error_message is non-empty, False otherwise.
|
|
114
|
+
|
|
115
|
+
Example:
|
|
116
|
+
>>> ModelLifecycleResult.succeeded("kafka").has_error
|
|
117
|
+
False
|
|
118
|
+
>>> ModelLifecycleResult.failed("db", "Error").has_error
|
|
119
|
+
True
|
|
120
|
+
"""
|
|
121
|
+
return bool(self.error_message)
|
|
122
|
+
|
|
123
|
+
@classmethod
|
|
124
|
+
def succeeded(cls, handler_type: str) -> "ModelLifecycleResult":
|
|
125
|
+
"""Create a successful lifecycle result.
|
|
126
|
+
|
|
127
|
+
Args:
|
|
128
|
+
handler_type: The handler type identifier.
|
|
129
|
+
|
|
130
|
+
Returns:
|
|
131
|
+
ModelLifecycleResult indicating success.
|
|
132
|
+
|
|
133
|
+
Example:
|
|
134
|
+
>>> result = ModelLifecycleResult.succeeded("kafka")
|
|
135
|
+
>>> result.success
|
|
136
|
+
True
|
|
137
|
+
>>> result.has_error
|
|
138
|
+
False
|
|
139
|
+
"""
|
|
140
|
+
return cls(handler_type=handler_type, success=True, error_message="")
|
|
141
|
+
|
|
142
|
+
@classmethod
|
|
143
|
+
def failed(cls, handler_type: str, error_message: str) -> "ModelLifecycleResult":
|
|
144
|
+
"""Create a failed lifecycle result.
|
|
145
|
+
|
|
146
|
+
Args:
|
|
147
|
+
handler_type: The handler type identifier.
|
|
148
|
+
error_message: Description of the error that occurred. Must be non-empty.
|
|
149
|
+
|
|
150
|
+
Returns:
|
|
151
|
+
ModelLifecycleResult indicating failure with error details.
|
|
152
|
+
|
|
153
|
+
Raises:
|
|
154
|
+
ValueError: If error_message is empty.
|
|
155
|
+
|
|
156
|
+
Example:
|
|
157
|
+
>>> result = ModelLifecycleResult.failed("db", "Connection refused")
|
|
158
|
+
>>> result.success
|
|
159
|
+
False
|
|
160
|
+
>>> result.error_message
|
|
161
|
+
'Connection refused'
|
|
162
|
+
"""
|
|
163
|
+
if not error_message:
|
|
164
|
+
context = ModelInfraErrorContext(
|
|
165
|
+
transport_type=EnumInfraTransportType.RUNTIME,
|
|
166
|
+
operation="lifecycle_failed",
|
|
167
|
+
)
|
|
168
|
+
raise ProtocolConfigurationError(
|
|
169
|
+
"error_message must be non-empty for failed results",
|
|
170
|
+
context=context,
|
|
171
|
+
)
|
|
172
|
+
return cls(
|
|
173
|
+
handler_type=handler_type, success=False, error_message=error_message
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
def is_success(self) -> bool:
|
|
177
|
+
"""Check if the lifecycle operation succeeded.
|
|
178
|
+
|
|
179
|
+
Returns:
|
|
180
|
+
True if success is True, False otherwise.
|
|
181
|
+
"""
|
|
182
|
+
return self.success
|
|
183
|
+
|
|
184
|
+
def is_failure(self) -> bool:
|
|
185
|
+
"""Check if the lifecycle operation failed.
|
|
186
|
+
|
|
187
|
+
Returns:
|
|
188
|
+
True if success is False, False otherwise.
|
|
189
|
+
"""
|
|
190
|
+
return not self.success
|
|
191
|
+
|
|
192
|
+
def __bool__(self) -> bool:
|
|
193
|
+
"""Allow using result in boolean context.
|
|
194
|
+
|
|
195
|
+
Warning:
|
|
196
|
+
**Non-standard __bool__ behavior**: This model overrides ``__bool__`` to
|
|
197
|
+
return ``True`` only when ``success`` is True. This differs from typical
|
|
198
|
+
Pydantic model behavior where ``bool(model)`` always returns ``True`` for
|
|
199
|
+
any valid model instance.
|
|
200
|
+
|
|
201
|
+
This design enables idiomatic lifecycle operation checks::
|
|
202
|
+
|
|
203
|
+
if result:
|
|
204
|
+
# Operation succeeded - continue
|
|
205
|
+
continue_shutdown_sequence()
|
|
206
|
+
else:
|
|
207
|
+
# Operation failed - handle error
|
|
208
|
+
log_error(result.error_message)
|
|
209
|
+
raise LifecycleError(result.error_message)
|
|
210
|
+
|
|
211
|
+
If you need to check model validity instead, use explicit attribute access::
|
|
212
|
+
|
|
213
|
+
# Check for success (uses __bool__)
|
|
214
|
+
if result:
|
|
215
|
+
...
|
|
216
|
+
|
|
217
|
+
# Check model is valid (always True for constructed instance)
|
|
218
|
+
if result is not None:
|
|
219
|
+
...
|
|
220
|
+
|
|
221
|
+
# Explicit success check (preferred for clarity)
|
|
222
|
+
if result.success:
|
|
223
|
+
...
|
|
224
|
+
|
|
225
|
+
Returns:
|
|
226
|
+
True if operation succeeded, False otherwise.
|
|
227
|
+
|
|
228
|
+
Example:
|
|
229
|
+
>>> if ModelLifecycleResult.succeeded("kafka"):
|
|
230
|
+
... print("Shutdown complete!")
|
|
231
|
+
Shutdown complete!
|
|
232
|
+
"""
|
|
233
|
+
return self.success
|
|
234
|
+
|
|
235
|
+
def __str__(self) -> str:
|
|
236
|
+
"""Return a human-readable string representation for debugging.
|
|
237
|
+
|
|
238
|
+
Returns:
|
|
239
|
+
String format: "ModelLifecycleResult(handler_type='...', success=...)"
|
|
240
|
+
"""
|
|
241
|
+
status = "succeeded" if self.success else f"failed: {self.error_message}"
|
|
242
|
+
return f"ModelLifecycleResult(handler_type='{self.handler_type}', {status})"
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
__all__ = ["ModelLifecycleResult"]
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Logging Configuration Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for logging configuration.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from typing import Literal
|
|
11
|
+
|
|
12
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ModelLoggingConfig(BaseModel):
|
|
16
|
+
"""Logging configuration model.
|
|
17
|
+
|
|
18
|
+
Defines logging level and format for the runtime.
|
|
19
|
+
|
|
20
|
+
Attributes:
|
|
21
|
+
level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
|
|
22
|
+
format: Log message format string
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
model_config = ConfigDict(
|
|
26
|
+
strict=True,
|
|
27
|
+
frozen=True,
|
|
28
|
+
extra="forbid",
|
|
29
|
+
from_attributes=True, # Support pytest-xdist compatibility
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
level: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] = Field(
|
|
33
|
+
default="INFO",
|
|
34
|
+
description="Logging level",
|
|
35
|
+
)
|
|
36
|
+
format: str = Field(
|
|
37
|
+
default="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
|
|
38
|
+
description="Log message format string",
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
__all__: list[str] = ["ModelLoggingConfig"]
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Model for optional correlation ID values in runtime module.
|
|
4
|
+
|
|
5
|
+
This module provides a strongly-typed Pydantic model for optional
|
|
6
|
+
correlation ID values (UUIDs), replacing `UUID | None` union types
|
|
7
|
+
to comply with ONEX standards.
|
|
8
|
+
|
|
9
|
+
Correlation IDs are used throughout the runtime for request tracing,
|
|
10
|
+
logging, and distributed system observability.
|
|
11
|
+
|
|
12
|
+
Design Decision (PR #47 Review):
|
|
13
|
+
This model intentionally duplicates patterns from ModelOptionalUUID rather than
|
|
14
|
+
using inheritance or generics. This design choice provides:
|
|
15
|
+
|
|
16
|
+
1. **Self-contained model**: No dependencies on base classes or mixins
|
|
17
|
+
2. **Correlation-specific methods**: `get_or_generate()` is specific to correlation IDs
|
|
18
|
+
3. **ONEX compliance**: Follows "composition over inheritance" principle
|
|
19
|
+
4. **Future-ready**: Available for strongly-typed correlation ID handling
|
|
20
|
+
in RuntimeHostProcess and event envelope processing
|
|
21
|
+
|
|
22
|
+
While currently not actively used, this model is pre-built for consistent
|
|
23
|
+
correlation ID handling as the codebase evolves. The trade-off of code
|
|
24
|
+
duplication vs. generic abstractions was intentionally chosen for clarity
|
|
25
|
+
and type safety.
|
|
26
|
+
|
|
27
|
+
See Also:
|
|
28
|
+
- ModelOptionalUUID: Similar pattern for generic optional UUIDs
|
|
29
|
+
- docs/patterns/correlation_id_tracking.md: Correlation ID best practices
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
from uuid import UUID, uuid4
|
|
33
|
+
|
|
34
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class ModelOptionalCorrelationId(BaseModel):
|
|
38
|
+
"""Strongly-typed model for optional correlation ID values.
|
|
39
|
+
|
|
40
|
+
Replaces `UUID | None` for correlation IDs to comply with ONEX
|
|
41
|
+
standards requiring specific typed models instead of generic union types.
|
|
42
|
+
|
|
43
|
+
This specialized wrapper is designed for correlation ID use cases,
|
|
44
|
+
providing factory methods to generate new UUIDs when needed and
|
|
45
|
+
ensuring consistent handling across the runtime module.
|
|
46
|
+
|
|
47
|
+
Attributes:
|
|
48
|
+
value: The optional correlation ID (UUID), defaults to None.
|
|
49
|
+
|
|
50
|
+
Example:
|
|
51
|
+
>>> corr = ModelOptionalCorrelationId.generate()
|
|
52
|
+
>>> corr.has_value()
|
|
53
|
+
True
|
|
54
|
+
>>> empty = ModelOptionalCorrelationId()
|
|
55
|
+
>>> filled = empty.get_or_generate()
|
|
56
|
+
>>> filled.has_value()
|
|
57
|
+
True
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
model_config = ConfigDict(frozen=True, from_attributes=True, extra="forbid")
|
|
61
|
+
|
|
62
|
+
value: UUID | None = Field(
|
|
63
|
+
default=None, description="Optional correlation ID (UUID)"
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
@classmethod
|
|
67
|
+
def generate(cls) -> "ModelOptionalCorrelationId":
|
|
68
|
+
"""Create a new correlation ID with a generated UUID.
|
|
69
|
+
|
|
70
|
+
Factory method that creates a ModelOptionalCorrelationId with
|
|
71
|
+
a newly generated UUID4 value.
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
A new ModelOptionalCorrelationId with a generated UUID.
|
|
75
|
+
"""
|
|
76
|
+
return cls(value=uuid4())
|
|
77
|
+
|
|
78
|
+
@classmethod
|
|
79
|
+
def from_uuid(cls, value: UUID) -> "ModelOptionalCorrelationId":
|
|
80
|
+
"""Create a correlation ID from an existing UUID.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
value: An existing UUID to wrap.
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
A new ModelOptionalCorrelationId with the given UUID.
|
|
87
|
+
"""
|
|
88
|
+
return cls(value=value)
|
|
89
|
+
|
|
90
|
+
@classmethod
|
|
91
|
+
def none(cls) -> "ModelOptionalCorrelationId":
|
|
92
|
+
"""Create an empty correlation ID.
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
A new ModelOptionalCorrelationId with no value.
|
|
96
|
+
"""
|
|
97
|
+
return cls()
|
|
98
|
+
|
|
99
|
+
def get(self) -> UUID | None:
|
|
100
|
+
"""Get the optional correlation ID.
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
The UUID value if present, None otherwise.
|
|
104
|
+
"""
|
|
105
|
+
return self.value
|
|
106
|
+
|
|
107
|
+
def has_value(self) -> bool:
|
|
108
|
+
"""Check if correlation ID is present.
|
|
109
|
+
|
|
110
|
+
Returns:
|
|
111
|
+
True if value is not None, False otherwise.
|
|
112
|
+
"""
|
|
113
|
+
return self.value is not None
|
|
114
|
+
|
|
115
|
+
def get_or_default(self, default: UUID) -> UUID:
|
|
116
|
+
"""Get correlation ID or return default if None.
|
|
117
|
+
|
|
118
|
+
Args:
|
|
119
|
+
default: The default UUID to return if None.
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
The stored value if present, otherwise the default.
|
|
123
|
+
"""
|
|
124
|
+
return self.value if self.value is not None else default
|
|
125
|
+
|
|
126
|
+
def get_or_generate(self) -> "ModelOptionalCorrelationId":
|
|
127
|
+
"""Get this correlation ID or generate a new one if None.
|
|
128
|
+
|
|
129
|
+
Returns a new ModelOptionalCorrelationId with either:
|
|
130
|
+
- The existing UUID if present
|
|
131
|
+
- A newly generated UUID if None
|
|
132
|
+
|
|
133
|
+
Returns:
|
|
134
|
+
A ModelOptionalCorrelationId that always has a value.
|
|
135
|
+
"""
|
|
136
|
+
if self.value is not None:
|
|
137
|
+
return self
|
|
138
|
+
return ModelOptionalCorrelationId.generate()
|
|
139
|
+
|
|
140
|
+
def __bool__(self) -> bool:
|
|
141
|
+
"""Boolean representation based on value presence.
|
|
142
|
+
|
|
143
|
+
Warning:
|
|
144
|
+
**Non-standard __bool__ behavior**: This model overrides ``__bool__`` to
|
|
145
|
+
return ``True`` only when a correlation ID is present. This differs from
|
|
146
|
+
typical Pydantic model behavior where ``bool(model)`` always returns
|
|
147
|
+
``True`` for any valid model instance.
|
|
148
|
+
|
|
149
|
+
This design enables idiomatic presence checks::
|
|
150
|
+
|
|
151
|
+
if corr_id:
|
|
152
|
+
# Correlation ID is present - propagate it
|
|
153
|
+
context.set_correlation_id(corr_id.value)
|
|
154
|
+
else:
|
|
155
|
+
# No correlation ID - generate new one
|
|
156
|
+
corr_id = corr_id.get_or_generate()
|
|
157
|
+
|
|
158
|
+
Use ``corr_id.has_value()`` for explicit, self-documenting code.
|
|
159
|
+
Use ``corr_id is not None`` if you need to check model existence.
|
|
160
|
+
|
|
161
|
+
Returns:
|
|
162
|
+
True if correlation ID is present, False otherwise.
|
|
163
|
+
"""
|
|
164
|
+
return self.has_value()
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
__all__ = ["ModelOptionalCorrelationId"]
|