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,208 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""
|
|
4
|
+
Execution Shape Validation Model.
|
|
5
|
+
|
|
6
|
+
Validates that message categories (EVENT, COMMAND, INTENT) can be processed
|
|
7
|
+
by specific node kinds (EFFECT, COMPUTE, REDUCER, ORCHESTRATOR) according to
|
|
8
|
+
ONEX architectural patterns.
|
|
9
|
+
|
|
10
|
+
Design Pattern:
|
|
11
|
+
ModelExecutionShapeValidation uses static rules to validate that a
|
|
12
|
+
message category can be routed to a target node kind. This ensures
|
|
13
|
+
ONEX architectural compliance at registration time.
|
|
14
|
+
|
|
15
|
+
Thread Safety:
|
|
16
|
+
All methods are pure functions operating on immutable data,
|
|
17
|
+
making this class fully thread-safe.
|
|
18
|
+
|
|
19
|
+
Valid Execution Shapes (source_category -> target_node_kinds):
|
|
20
|
+
- EVENT -> REDUCER, COMPUTE (events are consumed by reducers/projections)
|
|
21
|
+
- COMMAND -> EFFECT, ORCHESTRATOR (commands trigger actions/workflows)
|
|
22
|
+
- INTENT -> ORCHESTRATOR (intents require interpretation/routing)
|
|
23
|
+
|
|
24
|
+
Invalid Shapes:
|
|
25
|
+
- EVENT -> EFFECT (events should not trigger external I/O directly)
|
|
26
|
+
- EVENT -> ORCHESTRATOR (events are facts, not routing decisions)
|
|
27
|
+
- COMMAND -> REDUCER (commands should trigger actions, not aggregation)
|
|
28
|
+
- COMMAND -> COMPUTE (commands should trigger actions, not transforms)
|
|
29
|
+
- INTENT -> EFFECT (intents need interpretation first)
|
|
30
|
+
- INTENT -> REDUCER (intents need interpretation first)
|
|
31
|
+
- INTENT -> COMPUTE (intents need interpretation first)
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
from __future__ import annotations
|
|
35
|
+
|
|
36
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
37
|
+
|
|
38
|
+
from omnibase_core.enums import EnumNodeKind
|
|
39
|
+
from omnibase_infra.enums import EnumMessageCategory
|
|
40
|
+
|
|
41
|
+
# Valid execution shapes: category -> allowed node kinds
|
|
42
|
+
_VALID_SHAPES: dict[EnumMessageCategory, set[EnumNodeKind]] = {
|
|
43
|
+
EnumMessageCategory.EVENT: {EnumNodeKind.REDUCER, EnumNodeKind.COMPUTE},
|
|
44
|
+
EnumMessageCategory.COMMAND: {EnumNodeKind.EFFECT, EnumNodeKind.ORCHESTRATOR},
|
|
45
|
+
EnumMessageCategory.INTENT: {EnumNodeKind.ORCHESTRATOR},
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
# Rationales for invalid shapes
|
|
49
|
+
_INVALID_RATIONALES: dict[tuple[EnumMessageCategory, EnumNodeKind], str] = {
|
|
50
|
+
(EnumMessageCategory.EVENT, EnumNodeKind.EFFECT): (
|
|
51
|
+
"Events should not trigger external I/O directly. "
|
|
52
|
+
"Use a reducer or compute node to process events first."
|
|
53
|
+
),
|
|
54
|
+
(EnumMessageCategory.EVENT, EnumNodeKind.ORCHESTRATOR): (
|
|
55
|
+
"Events are immutable facts, not routing decisions. "
|
|
56
|
+
"Use a reducer to aggregate events."
|
|
57
|
+
),
|
|
58
|
+
(EnumMessageCategory.COMMAND, EnumNodeKind.REDUCER): (
|
|
59
|
+
"Commands should trigger actions, not aggregation. "
|
|
60
|
+
"Use an effect node to execute commands."
|
|
61
|
+
),
|
|
62
|
+
(EnumMessageCategory.COMMAND, EnumNodeKind.COMPUTE): (
|
|
63
|
+
"Commands should trigger actions, not pure transforms. "
|
|
64
|
+
"Use an effect or orchestrator node."
|
|
65
|
+
),
|
|
66
|
+
(EnumMessageCategory.INTENT, EnumNodeKind.EFFECT): (
|
|
67
|
+
"Intents need interpretation before triggering I/O. "
|
|
68
|
+
"Use an orchestrator to route intents."
|
|
69
|
+
),
|
|
70
|
+
(EnumMessageCategory.INTENT, EnumNodeKind.REDUCER): (
|
|
71
|
+
"Intents need interpretation first. "
|
|
72
|
+
"Use an orchestrator to interpret and route intents."
|
|
73
|
+
),
|
|
74
|
+
(EnumMessageCategory.INTENT, EnumNodeKind.COMPUTE): (
|
|
75
|
+
"Intents need interpretation first. "
|
|
76
|
+
"Use an orchestrator to interpret and route intents."
|
|
77
|
+
),
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class ModelExecutionShapeValidation(BaseModel):
|
|
82
|
+
"""
|
|
83
|
+
Result of validating an execution shape.
|
|
84
|
+
|
|
85
|
+
Contains the validation result and rationale for why a particular
|
|
86
|
+
message category -> node kind combination is valid or invalid.
|
|
87
|
+
|
|
88
|
+
Attributes:
|
|
89
|
+
source_category: The message category being routed.
|
|
90
|
+
target_node_kind: The target node kind for processing.
|
|
91
|
+
is_allowed: Whether this execution shape is valid.
|
|
92
|
+
rationale: Explanation of why the shape is valid/invalid.
|
|
93
|
+
|
|
94
|
+
Example:
|
|
95
|
+
>>> validation = ModelExecutionShapeValidation.validate_shape(
|
|
96
|
+
... source_category=EnumMessageCategory.EVENT,
|
|
97
|
+
... target_node_kind=EnumNodeKind.REDUCER,
|
|
98
|
+
... )
|
|
99
|
+
>>> validation.is_allowed
|
|
100
|
+
True
|
|
101
|
+
>>> validation.rationale
|
|
102
|
+
'EVENT -> REDUCER is a valid execution shape for event aggregation.'
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
model_config = ConfigDict(
|
|
106
|
+
frozen=True,
|
|
107
|
+
extra="forbid",
|
|
108
|
+
from_attributes=True,
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
source_category: EnumMessageCategory = Field(
|
|
112
|
+
...,
|
|
113
|
+
description="The message category being routed.",
|
|
114
|
+
)
|
|
115
|
+
target_node_kind: EnumNodeKind = Field(
|
|
116
|
+
...,
|
|
117
|
+
description="The target node kind for processing.",
|
|
118
|
+
)
|
|
119
|
+
is_allowed: bool = Field(
|
|
120
|
+
...,
|
|
121
|
+
description="Whether this execution shape is valid.",
|
|
122
|
+
)
|
|
123
|
+
rationale: str = Field(
|
|
124
|
+
...,
|
|
125
|
+
description="Explanation of why the shape is valid/invalid.",
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
@classmethod
|
|
129
|
+
def validate_shape(
|
|
130
|
+
cls,
|
|
131
|
+
source_category: EnumMessageCategory,
|
|
132
|
+
target_node_kind: EnumNodeKind,
|
|
133
|
+
) -> ModelExecutionShapeValidation:
|
|
134
|
+
"""
|
|
135
|
+
Validate that a message category can be routed to a node kind.
|
|
136
|
+
|
|
137
|
+
Args:
|
|
138
|
+
source_category: The message category (EVENT, COMMAND, INTENT).
|
|
139
|
+
target_node_kind: The target node kind (EFFECT, COMPUTE, REDUCER, ORCHESTRATOR).
|
|
140
|
+
|
|
141
|
+
Returns:
|
|
142
|
+
ModelExecutionShapeValidation with validation result.
|
|
143
|
+
|
|
144
|
+
Example:
|
|
145
|
+
>>> # Valid shape: EVENT -> REDUCER
|
|
146
|
+
>>> validation = ModelExecutionShapeValidation.validate_shape(
|
|
147
|
+
... source_category=EnumMessageCategory.EVENT,
|
|
148
|
+
... target_node_kind=EnumNodeKind.REDUCER,
|
|
149
|
+
... )
|
|
150
|
+
>>> validation.is_allowed
|
|
151
|
+
True
|
|
152
|
+
|
|
153
|
+
>>> # Invalid shape: EVENT -> EFFECT
|
|
154
|
+
>>> validation = ModelExecutionShapeValidation.validate_shape(
|
|
155
|
+
... source_category=EnumMessageCategory.EVENT,
|
|
156
|
+
... target_node_kind=EnumNodeKind.EFFECT,
|
|
157
|
+
... )
|
|
158
|
+
>>> validation.is_allowed
|
|
159
|
+
False
|
|
160
|
+
"""
|
|
161
|
+
allowed_kinds = _VALID_SHAPES.get(source_category, set())
|
|
162
|
+
is_allowed = target_node_kind in allowed_kinds
|
|
163
|
+
|
|
164
|
+
if is_allowed:
|
|
165
|
+
rationale = (
|
|
166
|
+
f"{source_category.value.upper()} -> {target_node_kind.value.upper()} "
|
|
167
|
+
f"is a valid execution shape."
|
|
168
|
+
)
|
|
169
|
+
else:
|
|
170
|
+
# Get specific rationale or use generic message
|
|
171
|
+
key = (source_category, target_node_kind)
|
|
172
|
+
rationale = _INVALID_RATIONALES.get(
|
|
173
|
+
key,
|
|
174
|
+
f"{source_category.value.upper()} -> {target_node_kind.value.upper()} "
|
|
175
|
+
f"is not a valid execution shape.",
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
return cls(
|
|
179
|
+
source_category=source_category,
|
|
180
|
+
target_node_kind=target_node_kind,
|
|
181
|
+
is_allowed=is_allowed,
|
|
182
|
+
rationale=rationale,
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
@classmethod
|
|
186
|
+
def get_valid_node_kinds(cls, category: EnumMessageCategory) -> set[EnumNodeKind]:
|
|
187
|
+
"""
|
|
188
|
+
Get the valid target node kinds for a message category.
|
|
189
|
+
|
|
190
|
+
Args:
|
|
191
|
+
category: The message category to check.
|
|
192
|
+
|
|
193
|
+
Returns:
|
|
194
|
+
Set of valid node kinds for this category.
|
|
195
|
+
|
|
196
|
+
Example:
|
|
197
|
+
>>> kinds = ModelExecutionShapeValidation.get_valid_node_kinds(
|
|
198
|
+
... EnumMessageCategory.EVENT
|
|
199
|
+
... )
|
|
200
|
+
>>> EnumNodeKind.REDUCER in kinds
|
|
201
|
+
True
|
|
202
|
+
>>> EnumNodeKind.EFFECT in kinds
|
|
203
|
+
False
|
|
204
|
+
"""
|
|
205
|
+
return _VALID_SHAPES.get(category, set()).copy()
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
__all__ = ["ModelExecutionShapeValidation"]
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Execution Shape Validation Result Model.
|
|
4
|
+
|
|
5
|
+
Defines the aggregate result structure for execution shape validation,
|
|
6
|
+
replacing the tuple pattern `tuple[bool, list[ModelExecutionShapeViolationResult]]`
|
|
7
|
+
used by `validate_execution_shapes_ci`. This model provides richer context
|
|
8
|
+
for CI gate integration and violation aggregation.
|
|
9
|
+
|
|
10
|
+
Note:
|
|
11
|
+
This model aggregates multiple violations and determines pass/fail status
|
|
12
|
+
based on whether any blocking (error-severity) violations exist.
|
|
13
|
+
|
|
14
|
+
.. versionadded:: 0.6.0
|
|
15
|
+
Created as part of Union Reduction Phase 3 (OMN-1003).
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
from typing import Self
|
|
21
|
+
|
|
22
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
23
|
+
|
|
24
|
+
from omnibase_infra.models.validation.model_execution_shape_violation import (
|
|
25
|
+
ModelExecutionShapeViolationResult,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ModelExecutionShapeValidationResult(BaseModel):
|
|
30
|
+
"""Aggregate result of execution shape validation.
|
|
31
|
+
|
|
32
|
+
Contains the overall pass/fail status and all detected violations.
|
|
33
|
+
This model replaces the `tuple[bool, list[ModelExecutionShapeViolationResult]]`
|
|
34
|
+
pattern used by `validate_execution_shapes_ci`, providing a more expressive
|
|
35
|
+
API with factory methods and computed properties.
|
|
36
|
+
|
|
37
|
+
Attributes:
|
|
38
|
+
passed: Whether validation passed (no blocking violations).
|
|
39
|
+
violations: All violations detected during validation.
|
|
40
|
+
|
|
41
|
+
Example:
|
|
42
|
+
>>> # Create from violations list
|
|
43
|
+
>>> result = ModelExecutionShapeValidationResult.from_violations(violations)
|
|
44
|
+
>>> if not result.passed:
|
|
45
|
+
... print(f"Found {result.blocking_count} blocking violations")
|
|
46
|
+
... for line in result.format_for_ci():
|
|
47
|
+
... print(line)
|
|
48
|
+
|
|
49
|
+
>>> # Create successful result
|
|
50
|
+
>>> result = ModelExecutionShapeValidationResult.success()
|
|
51
|
+
>>> result.passed
|
|
52
|
+
True
|
|
53
|
+
|
|
54
|
+
.. versionadded:: 0.6.0
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
passed: bool = Field(
|
|
58
|
+
description="Whether validation passed (no blocking violations)",
|
|
59
|
+
)
|
|
60
|
+
violations: list[ModelExecutionShapeViolationResult] = Field(
|
|
61
|
+
default_factory=list,
|
|
62
|
+
description="All violations found during validation",
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
model_config = ConfigDict(
|
|
66
|
+
strict=True,
|
|
67
|
+
frozen=True,
|
|
68
|
+
extra="forbid",
|
|
69
|
+
str_strip_whitespace=True,
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
@property
|
|
73
|
+
def has_blocking(self) -> bool:
|
|
74
|
+
"""Check if any blocking violations exist.
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
True if any violation has severity 'error'.
|
|
78
|
+
|
|
79
|
+
Example:
|
|
80
|
+
>>> result = ModelExecutionShapeValidationResult.success()
|
|
81
|
+
>>> result.has_blocking
|
|
82
|
+
False
|
|
83
|
+
|
|
84
|
+
.. versionadded:: 0.6.0
|
|
85
|
+
"""
|
|
86
|
+
return any(v.is_blocking() for v in self.violations)
|
|
87
|
+
|
|
88
|
+
@property
|
|
89
|
+
def violation_count(self) -> int:
|
|
90
|
+
"""Total number of violations.
|
|
91
|
+
|
|
92
|
+
Returns:
|
|
93
|
+
Count of all violations (both blocking and warnings).
|
|
94
|
+
|
|
95
|
+
.. versionadded:: 0.6.0
|
|
96
|
+
"""
|
|
97
|
+
return len(self.violations)
|
|
98
|
+
|
|
99
|
+
@property
|
|
100
|
+
def blocking_count(self) -> int:
|
|
101
|
+
"""Number of blocking (error-severity) violations.
|
|
102
|
+
|
|
103
|
+
Returns:
|
|
104
|
+
Count of violations that would block CI.
|
|
105
|
+
|
|
106
|
+
.. versionadded:: 0.6.0
|
|
107
|
+
"""
|
|
108
|
+
return sum(1 for v in self.violations if v.is_blocking())
|
|
109
|
+
|
|
110
|
+
@property
|
|
111
|
+
def warning_count(self) -> int:
|
|
112
|
+
"""Number of warning-severity violations.
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
Count of non-blocking violations.
|
|
116
|
+
|
|
117
|
+
.. versionadded:: 0.6.0
|
|
118
|
+
"""
|
|
119
|
+
return sum(1 for v in self.violations if not v.is_blocking())
|
|
120
|
+
|
|
121
|
+
@classmethod
|
|
122
|
+
def from_violations(
|
|
123
|
+
cls, violations: list[ModelExecutionShapeViolationResult]
|
|
124
|
+
) -> Self:
|
|
125
|
+
"""Create from violations list, auto-determining pass/fail.
|
|
126
|
+
|
|
127
|
+
The result passes if there are no blocking (error-severity) violations.
|
|
128
|
+
Warning-severity violations do not cause failure.
|
|
129
|
+
|
|
130
|
+
Args:
|
|
131
|
+
violations: List of all detected violations.
|
|
132
|
+
|
|
133
|
+
Returns:
|
|
134
|
+
ModelExecutionShapeValidationResult with auto-determined pass/fail.
|
|
135
|
+
|
|
136
|
+
Example:
|
|
137
|
+
>>> violations = [
|
|
138
|
+
... ModelExecutionShapeViolationResult(
|
|
139
|
+
... violation_type=EnumExecutionShapeViolation.REDUCER_RETURNS_EVENTS,
|
|
140
|
+
... file_path="/src/handler.py",
|
|
141
|
+
... line_number=42,
|
|
142
|
+
... message="Reducer returns EVENT",
|
|
143
|
+
... severity="error",
|
|
144
|
+
... )
|
|
145
|
+
... ]
|
|
146
|
+
>>> result = ModelExecutionShapeValidationResult.from_violations(violations)
|
|
147
|
+
>>> result.passed
|
|
148
|
+
False
|
|
149
|
+
|
|
150
|
+
.. versionadded:: 0.6.0
|
|
151
|
+
"""
|
|
152
|
+
has_blocking = any(v.is_blocking() for v in violations)
|
|
153
|
+
return cls(passed=not has_blocking, violations=violations)
|
|
154
|
+
|
|
155
|
+
@classmethod
|
|
156
|
+
def success(cls) -> Self:
|
|
157
|
+
"""Create a successful validation result with no violations.
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
ModelExecutionShapeValidationResult with passed=True and empty violations.
|
|
161
|
+
|
|
162
|
+
Example:
|
|
163
|
+
>>> result = ModelExecutionShapeValidationResult.success()
|
|
164
|
+
>>> result.passed
|
|
165
|
+
True
|
|
166
|
+
>>> result.violation_count
|
|
167
|
+
0
|
|
168
|
+
|
|
169
|
+
.. versionadded:: 0.6.0
|
|
170
|
+
"""
|
|
171
|
+
return cls(passed=True, violations=[])
|
|
172
|
+
|
|
173
|
+
@classmethod
|
|
174
|
+
def from_legacy_result(
|
|
175
|
+
cls, result: tuple[bool, list[ModelExecutionShapeViolationResult]]
|
|
176
|
+
) -> Self:
|
|
177
|
+
"""Create from legacy tuple-based validation result.
|
|
178
|
+
|
|
179
|
+
This factory method handles conversion from the old tuple pattern
|
|
180
|
+
to the new model structure for gradual migration.
|
|
181
|
+
|
|
182
|
+
Args:
|
|
183
|
+
result: Legacy result as (passed, violations).
|
|
184
|
+
|
|
185
|
+
Returns:
|
|
186
|
+
ModelExecutionShapeValidationResult with equivalent values.
|
|
187
|
+
|
|
188
|
+
Example:
|
|
189
|
+
>>> legacy = (False, [violation])
|
|
190
|
+
>>> result = ModelExecutionShapeValidationResult.from_legacy_result(legacy)
|
|
191
|
+
>>> result.passed
|
|
192
|
+
False
|
|
193
|
+
|
|
194
|
+
.. versionadded:: 0.6.0
|
|
195
|
+
"""
|
|
196
|
+
passed, violations = result
|
|
197
|
+
return cls(passed=passed, violations=violations)
|
|
198
|
+
|
|
199
|
+
def to_legacy_result(self) -> tuple[bool, list[ModelExecutionShapeViolationResult]]:
|
|
200
|
+
"""Convert back to legacy tuple format.
|
|
201
|
+
|
|
202
|
+
This method enables gradual migration by allowing conversion back
|
|
203
|
+
to the original format where needed.
|
|
204
|
+
|
|
205
|
+
Returns:
|
|
206
|
+
Tuple of (passed, violations).
|
|
207
|
+
|
|
208
|
+
Example:
|
|
209
|
+
>>> result = ModelExecutionShapeValidationResult.success()
|
|
210
|
+
>>> result.to_legacy_result()
|
|
211
|
+
(True, [])
|
|
212
|
+
|
|
213
|
+
.. versionadded:: 0.6.0
|
|
214
|
+
"""
|
|
215
|
+
return (self.passed, list(self.violations))
|
|
216
|
+
|
|
217
|
+
def format_for_ci(self) -> list[str]:
|
|
218
|
+
"""Format all violations for CI output.
|
|
219
|
+
|
|
220
|
+
Returns:
|
|
221
|
+
List of formatted violation strings in GitHub Actions format.
|
|
222
|
+
|
|
223
|
+
Example:
|
|
224
|
+
>>> for line in result.format_for_ci():
|
|
225
|
+
... print(line)
|
|
226
|
+
|
|
227
|
+
.. versionadded:: 0.6.0
|
|
228
|
+
"""
|
|
229
|
+
return [v.format_for_ci() for v in self.violations]
|
|
230
|
+
|
|
231
|
+
def __bool__(self) -> bool:
|
|
232
|
+
"""Allow using result in boolean context.
|
|
233
|
+
|
|
234
|
+
Warning:
|
|
235
|
+
**Non-standard __bool__ behavior**: This model overrides ``__bool__`` to
|
|
236
|
+
return ``True`` only when ``passed`` is True (no blocking violations).
|
|
237
|
+
This differs from typical Pydantic model behavior where ``bool(model)``
|
|
238
|
+
always returns ``True`` for any valid model instance.
|
|
239
|
+
|
|
240
|
+
This design enables idiomatic CI gate checks::
|
|
241
|
+
|
|
242
|
+
if result:
|
|
243
|
+
# Validation passed - can proceed
|
|
244
|
+
deploy()
|
|
245
|
+
else:
|
|
246
|
+
# Has blocking violations - fail CI
|
|
247
|
+
for line in result.format_for_ci():
|
|
248
|
+
print(line)
|
|
249
|
+
sys.exit(1)
|
|
250
|
+
|
|
251
|
+
If you need to check model validity instead, use explicit attribute access::
|
|
252
|
+
|
|
253
|
+
# Check for pass (uses __bool__)
|
|
254
|
+
if result:
|
|
255
|
+
...
|
|
256
|
+
|
|
257
|
+
# Check model is valid (always True for constructed instance)
|
|
258
|
+
if result is not None:
|
|
259
|
+
...
|
|
260
|
+
|
|
261
|
+
# Explicit pass check (preferred for clarity)
|
|
262
|
+
if result.passed:
|
|
263
|
+
...
|
|
264
|
+
|
|
265
|
+
Returns:
|
|
266
|
+
True if validation passed, False otherwise.
|
|
267
|
+
|
|
268
|
+
Example:
|
|
269
|
+
>>> if ModelExecutionShapeValidationResult.success():
|
|
270
|
+
... print("All clear!")
|
|
271
|
+
All clear!
|
|
272
|
+
|
|
273
|
+
.. versionadded:: 0.6.0
|
|
274
|
+
"""
|
|
275
|
+
return self.passed
|
|
276
|
+
|
|
277
|
+
def __str__(self) -> str:
|
|
278
|
+
"""Return a human-readable string representation for debugging.
|
|
279
|
+
|
|
280
|
+
Returns:
|
|
281
|
+
String format showing pass/fail status and violation counts.
|
|
282
|
+
|
|
283
|
+
.. versionadded:: 0.6.0
|
|
284
|
+
"""
|
|
285
|
+
status = "passed" if self.passed else "failed"
|
|
286
|
+
return (
|
|
287
|
+
f"ModelExecutionShapeValidationResult("
|
|
288
|
+
f"{status}, "
|
|
289
|
+
f"violations={self.violation_count}, "
|
|
290
|
+
f"blocking={self.blocking_count})"
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
__all__ = ["ModelExecutionShapeValidationResult"]
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Execution Shape Violation Result Model.
|
|
4
|
+
|
|
5
|
+
Defines the result structure for detected execution shape violations.
|
|
6
|
+
Used by the execution shape validator to report constraint breaches
|
|
7
|
+
with full context for debugging and CI gate integration.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
13
|
+
|
|
14
|
+
from omnibase_infra.enums import (
|
|
15
|
+
EnumExecutionShapeViolation,
|
|
16
|
+
EnumNodeArchetype,
|
|
17
|
+
EnumValidationSeverity,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ModelExecutionShapeViolationResult(BaseModel):
|
|
22
|
+
"""Result of an execution shape violation detection.
|
|
23
|
+
|
|
24
|
+
Contains full context about a detected violation for debugging,
|
|
25
|
+
reporting, and CI gate integration. Each violation includes the
|
|
26
|
+
source location, violation type, and severity classification.
|
|
27
|
+
|
|
28
|
+
Attributes:
|
|
29
|
+
violation_type: The specific violation detected.
|
|
30
|
+
node_archetype: The node archetype where the violation occurred, or None
|
|
31
|
+
if the node archetype cannot be determined (e.g., runtime validation
|
|
32
|
+
without node context, or file-level errors like syntax errors).
|
|
33
|
+
file_path: Absolute path to the source file containing the violation.
|
|
34
|
+
line_number: Line number where the violation was detected.
|
|
35
|
+
message: Human-readable description of the violation.
|
|
36
|
+
severity: Severity classification (error blocks CI, warning is advisory).
|
|
37
|
+
|
|
38
|
+
Example:
|
|
39
|
+
>>> result = ModelExecutionShapeViolationResult(
|
|
40
|
+
... violation_type=EnumExecutionShapeViolation.REDUCER_RETURNS_EVENTS,
|
|
41
|
+
... node_archetype=EnumNodeArchetype.REDUCER,
|
|
42
|
+
... file_path="/src/handlers/order_reducer.py",
|
|
43
|
+
... line_number=42,
|
|
44
|
+
... message="Reducer 'OrderReducer.handle' returns EVENT type 'OrderCreated'",
|
|
45
|
+
... severity=EnumValidationSeverity.ERROR,
|
|
46
|
+
... )
|
|
47
|
+
|
|
48
|
+
Note:
|
|
49
|
+
Violations with severity=EnumValidationSeverity.ERROR should block CI pipelines.
|
|
50
|
+
Violations with severity=EnumValidationSeverity.WARNING are advisory and should be logged.
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
violation_type: EnumExecutionShapeViolation = Field(
|
|
54
|
+
...,
|
|
55
|
+
description="The specific execution shape violation detected",
|
|
56
|
+
)
|
|
57
|
+
node_archetype: EnumNodeArchetype | None = Field(
|
|
58
|
+
default=None,
|
|
59
|
+
description=(
|
|
60
|
+
"The node archetype where the violation occurred, or None if unknown. "
|
|
61
|
+
"Node archetype may be None for runtime validation without node context, "
|
|
62
|
+
"file-level errors (syntax errors, file not found), or when the node "
|
|
63
|
+
"archetype cannot be inferred from the code structure."
|
|
64
|
+
),
|
|
65
|
+
)
|
|
66
|
+
file_path: str = Field(
|
|
67
|
+
...,
|
|
68
|
+
description="Absolute path to the source file containing the violation",
|
|
69
|
+
)
|
|
70
|
+
line_number: int = Field(
|
|
71
|
+
...,
|
|
72
|
+
ge=1,
|
|
73
|
+
description="Line number where the violation was detected (1-indexed)",
|
|
74
|
+
)
|
|
75
|
+
message: str = Field(
|
|
76
|
+
...,
|
|
77
|
+
min_length=1,
|
|
78
|
+
description="Human-readable description of the violation",
|
|
79
|
+
)
|
|
80
|
+
severity: EnumValidationSeverity = Field(
|
|
81
|
+
default=EnumValidationSeverity.ERROR,
|
|
82
|
+
description="Severity classification: 'error' blocks CI, 'warning' is advisory",
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
model_config = ConfigDict(
|
|
86
|
+
frozen=True,
|
|
87
|
+
extra="forbid",
|
|
88
|
+
strict=True,
|
|
89
|
+
str_strip_whitespace=True,
|
|
90
|
+
use_enum_values=False, # Keep enum objects for type safety
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
def is_blocking(self) -> bool:
|
|
94
|
+
"""Check if this violation should block CI.
|
|
95
|
+
|
|
96
|
+
Returns:
|
|
97
|
+
True if severity is 'error', False for 'warning'.
|
|
98
|
+
"""
|
|
99
|
+
return self.severity == EnumValidationSeverity.ERROR
|
|
100
|
+
|
|
101
|
+
def format_for_ci(self) -> str:
|
|
102
|
+
"""Format violation for CI output (GitHub Actions compatible).
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
Formatted string in GitHub Actions annotation format.
|
|
106
|
+
Includes node archetype when available for better diagnostics.
|
|
107
|
+
|
|
108
|
+
Example:
|
|
109
|
+
::error file=src/handler.py,line=42::[REDUCER] REDUCER_RETURNS_EVENTS: ...
|
|
110
|
+
::error file=src/handler.py,line=42::UNMAPPED_MESSAGE_ROUTE: ...
|
|
111
|
+
"""
|
|
112
|
+
annotation_type = "error" if self.is_blocking() else "warning"
|
|
113
|
+
archetype_prefix = (
|
|
114
|
+
f"[{self.node_archetype.value.upper()}] " if self.node_archetype else ""
|
|
115
|
+
)
|
|
116
|
+
return (
|
|
117
|
+
f"::{annotation_type} file={self.file_path},line={self.line_number}::"
|
|
118
|
+
f"{archetype_prefix}{self.violation_type.value}: {self.message}"
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
__all__ = ["ModelExecutionShapeViolationResult"]
|