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,265 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Rule check result model for architecture validation.
|
|
4
|
+
|
|
5
|
+
This module defines the result model returned by architecture validation rules
|
|
6
|
+
when checking targets (nodes, handlers, etc.) for compliance violations.
|
|
7
|
+
|
|
8
|
+
Result Semantics:
|
|
9
|
+
The combination of ``passed`` and ``skipped`` fields determines the outcome:
|
|
10
|
+
|
|
11
|
+
- ``passed=True, skipped=False``: Target was validated and passed the rule
|
|
12
|
+
- ``passed=True, skipped=True``: Input not applicable to this rule (e.g.,
|
|
13
|
+
rule checks file paths but received a non-path object)
|
|
14
|
+
- ``passed=False, skipped=False``: Violation detected
|
|
15
|
+
|
|
16
|
+
The ``skipped`` field disambiguates between "actually passed validation"
|
|
17
|
+
and "input was not applicable to this rule". This is important for
|
|
18
|
+
accurate reporting and metrics.
|
|
19
|
+
|
|
20
|
+
Thread Safety:
|
|
21
|
+
ModelRuleCheckResult is immutable (frozen=True) after creation,
|
|
22
|
+
making it thread-safe for concurrent read access.
|
|
23
|
+
|
|
24
|
+
Example:
|
|
25
|
+
>>> from omnibase_infra.nodes.architecture_validator.models import ModelRuleCheckResult
|
|
26
|
+
>>>
|
|
27
|
+
>>> # Successful check - target validated and passed
|
|
28
|
+
>>> result = ModelRuleCheckResult(
|
|
29
|
+
... passed=True,
|
|
30
|
+
... rule_id="NO_HANDLER_PUBLISHING",
|
|
31
|
+
... )
|
|
32
|
+
>>> result.is_applicable()
|
|
33
|
+
True
|
|
34
|
+
>>>
|
|
35
|
+
>>> # Skipped check - input not applicable to rule
|
|
36
|
+
>>> result = ModelRuleCheckResult(
|
|
37
|
+
... passed=True,
|
|
38
|
+
... skipped=True,
|
|
39
|
+
... rule_id="FILE_PATH_CONVENTION",
|
|
40
|
+
... reason="Input is not a file path",
|
|
41
|
+
... )
|
|
42
|
+
>>> result.is_applicable()
|
|
43
|
+
False
|
|
44
|
+
>>>
|
|
45
|
+
>>> # Failed check with details
|
|
46
|
+
>>> result = ModelRuleCheckResult(
|
|
47
|
+
... passed=False,
|
|
48
|
+
... rule_id="NO_HANDLER_PUBLISHING",
|
|
49
|
+
... message="Handler has direct event bus access",
|
|
50
|
+
... details={"handler_class": "MyHandler", "forbidden_attribute": "_event_bus"},
|
|
51
|
+
... )
|
|
52
|
+
|
|
53
|
+
See Also:
|
|
54
|
+
omnibase_infra.nodes.architecture_validator.protocols.ProtocolArchitectureRule:
|
|
55
|
+
Protocol that produces these results
|
|
56
|
+
omnibase_infra.enums.EnumValidationSeverity:
|
|
57
|
+
Severity levels for rule violations
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
from __future__ import annotations
|
|
61
|
+
|
|
62
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
63
|
+
|
|
64
|
+
__all__ = ["ModelRuleCheckResult"]
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class ModelRuleCheckResult(BaseModel):
|
|
68
|
+
"""Result of checking a target against an architecture rule.
|
|
69
|
+
|
|
70
|
+
Captures the outcome of validating a node, handler, or other architectural
|
|
71
|
+
component against a specific rule. Used for aggregating validation results
|
|
72
|
+
and reporting violations.
|
|
73
|
+
|
|
74
|
+
Result Semantics:
|
|
75
|
+
The combination of ``passed`` and ``skipped`` determines the outcome:
|
|
76
|
+
|
|
77
|
+
- ``passed=True, skipped=False``: Target was validated and passed
|
|
78
|
+
- ``passed=True, skipped=True``: Input not applicable to this rule
|
|
79
|
+
- ``passed=False, skipped=False``: Violation detected
|
|
80
|
+
|
|
81
|
+
Use ``is_applicable()`` to check if the rule was actually evaluated,
|
|
82
|
+
and ``is_violation()`` to check if a violation was detected.
|
|
83
|
+
|
|
84
|
+
Attributes:
|
|
85
|
+
passed: Whether the target passed the rule check. Note that when
|
|
86
|
+
``skipped=True``, this is ``True`` by convention but does not
|
|
87
|
+
indicate actual validation success.
|
|
88
|
+
skipped: Whether the check was skipped because the input was not
|
|
89
|
+
applicable to this rule. For example, a file-path naming rule
|
|
90
|
+
would skip non-path inputs. Defaults to ``False``.
|
|
91
|
+
rule_id: Unique identifier of the rule that was checked.
|
|
92
|
+
message: Human-readable message describing the result or violation.
|
|
93
|
+
reason: Explanation for why the check was skipped. Only populated
|
|
94
|
+
when ``skipped=True``. Example: "Input is not a file path".
|
|
95
|
+
details: Additional details about the check result for debugging.
|
|
96
|
+
|
|
97
|
+
Example:
|
|
98
|
+
>>> # Violation detected
|
|
99
|
+
>>> result = ModelRuleCheckResult(
|
|
100
|
+
... passed=False,
|
|
101
|
+
... rule_id="NO_WORKFLOW_LOGIC_IN_REDUCER",
|
|
102
|
+
... message="Reducer contains orchestration logic",
|
|
103
|
+
... details={
|
|
104
|
+
... "reducer_class": "MyReducer",
|
|
105
|
+
... "forbidden_method": "execute_workflow",
|
|
106
|
+
... },
|
|
107
|
+
... )
|
|
108
|
+
>>> result.passed
|
|
109
|
+
False
|
|
110
|
+
>>> result.is_violation()
|
|
111
|
+
True
|
|
112
|
+
>>> result.is_applicable()
|
|
113
|
+
True
|
|
114
|
+
>>>
|
|
115
|
+
>>> # Skipped - input not applicable
|
|
116
|
+
>>> skipped_result = ModelRuleCheckResult(
|
|
117
|
+
... passed=True,
|
|
118
|
+
... skipped=True,
|
|
119
|
+
... rule_id="FILE_NAMING_CONVENTION",
|
|
120
|
+
... reason="Input is not a file path",
|
|
121
|
+
... )
|
|
122
|
+
>>> skipped_result.passed
|
|
123
|
+
True
|
|
124
|
+
>>> skipped_result.is_applicable()
|
|
125
|
+
False
|
|
126
|
+
"""
|
|
127
|
+
|
|
128
|
+
model_config = ConfigDict(
|
|
129
|
+
frozen=True,
|
|
130
|
+
extra="forbid",
|
|
131
|
+
from_attributes=True,
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
passed: bool = Field(
|
|
135
|
+
...,
|
|
136
|
+
description=(
|
|
137
|
+
"Whether the target passed the rule check. Note that when "
|
|
138
|
+
"skipped=True, this is True by convention but does not indicate "
|
|
139
|
+
"actual validation success."
|
|
140
|
+
),
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
skipped: bool = Field(
|
|
144
|
+
default=False,
|
|
145
|
+
description=(
|
|
146
|
+
"Whether the check was skipped because the input was not "
|
|
147
|
+
"applicable to this rule. For example, a file-path naming rule "
|
|
148
|
+
"would skip non-path inputs. When True, passed is also True by "
|
|
149
|
+
"convention."
|
|
150
|
+
),
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
rule_id: str = Field(
|
|
154
|
+
...,
|
|
155
|
+
description="Unique identifier of the rule that was checked.",
|
|
156
|
+
min_length=1,
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
message: str | None = Field(
|
|
160
|
+
default=None,
|
|
161
|
+
description=(
|
|
162
|
+
"Human-readable message describing the result or violation. "
|
|
163
|
+
"Typically populated when the check fails."
|
|
164
|
+
),
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
reason: str | None = Field(
|
|
168
|
+
default=None,
|
|
169
|
+
description=(
|
|
170
|
+
"Explanation for why the check was skipped. Only populated when "
|
|
171
|
+
"skipped=True. Example: 'Input is not a file path'."
|
|
172
|
+
),
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
details: dict[str, object] | None = Field(
|
|
176
|
+
default=None,
|
|
177
|
+
description=(
|
|
178
|
+
"Additional details about the check result for debugging. "
|
|
179
|
+
"May include target class names, forbidden attributes, etc."
|
|
180
|
+
),
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
def is_violation(self) -> bool:
|
|
184
|
+
"""Check if this result represents a rule violation.
|
|
185
|
+
|
|
186
|
+
A result is a violation only when the check was actually performed
|
|
187
|
+
(not skipped) and failed.
|
|
188
|
+
|
|
189
|
+
Returns:
|
|
190
|
+
True if the check failed (violation detected), False otherwise.
|
|
191
|
+
Returns False when skipped, even though passed=True.
|
|
192
|
+
|
|
193
|
+
Example:
|
|
194
|
+
>>> result = ModelRuleCheckResult(passed=False, rule_id="RULE_1")
|
|
195
|
+
>>> result.is_violation()
|
|
196
|
+
True
|
|
197
|
+
>>> skipped = ModelRuleCheckResult(
|
|
198
|
+
... passed=True, skipped=True, rule_id="RULE_1", reason="N/A"
|
|
199
|
+
... )
|
|
200
|
+
>>> skipped.is_violation()
|
|
201
|
+
False
|
|
202
|
+
"""
|
|
203
|
+
return not self.passed
|
|
204
|
+
|
|
205
|
+
def is_applicable(self) -> bool:
|
|
206
|
+
"""Check if the rule was applicable to the input.
|
|
207
|
+
|
|
208
|
+
A rule is applicable when it was actually evaluated against the input,
|
|
209
|
+
as opposed to being skipped because the input type was not relevant
|
|
210
|
+
to the rule.
|
|
211
|
+
|
|
212
|
+
Returns:
|
|
213
|
+
True if the rule was evaluated (not skipped), False if skipped.
|
|
214
|
+
|
|
215
|
+
Example:
|
|
216
|
+
>>> # Rule was evaluated and passed
|
|
217
|
+
>>> result = ModelRuleCheckResult(passed=True, rule_id="RULE_1")
|
|
218
|
+
>>> result.is_applicable()
|
|
219
|
+
True
|
|
220
|
+
>>>
|
|
221
|
+
>>> # Rule was skipped - input not applicable
|
|
222
|
+
>>> skipped = ModelRuleCheckResult(
|
|
223
|
+
... passed=True,
|
|
224
|
+
... skipped=True,
|
|
225
|
+
... rule_id="FILE_PATH_RULE",
|
|
226
|
+
... reason="Input is not a file path",
|
|
227
|
+
... )
|
|
228
|
+
>>> skipped.is_applicable()
|
|
229
|
+
False
|
|
230
|
+
"""
|
|
231
|
+
return not self.skipped
|
|
232
|
+
|
|
233
|
+
def with_message(self, message: str) -> ModelRuleCheckResult:
|
|
234
|
+
"""Create a new result with an updated message.
|
|
235
|
+
|
|
236
|
+
Args:
|
|
237
|
+
message: The new message to set.
|
|
238
|
+
|
|
239
|
+
Returns:
|
|
240
|
+
New ModelRuleCheckResult with the updated message.
|
|
241
|
+
|
|
242
|
+
Example:
|
|
243
|
+
>>> result = ModelRuleCheckResult(passed=False, rule_id="RULE_1")
|
|
244
|
+
>>> updated = result.with_message("Violation detected")
|
|
245
|
+
>>> updated.message
|
|
246
|
+
'Violation detected'
|
|
247
|
+
"""
|
|
248
|
+
return self.model_copy(update={"message": message})
|
|
249
|
+
|
|
250
|
+
def with_details(self, details: dict[str, object]) -> ModelRuleCheckResult:
|
|
251
|
+
"""Create a new result with updated details.
|
|
252
|
+
|
|
253
|
+
Args:
|
|
254
|
+
details: The new details to set.
|
|
255
|
+
|
|
256
|
+
Returns:
|
|
257
|
+
New ModelRuleCheckResult with the updated details.
|
|
258
|
+
|
|
259
|
+
Example:
|
|
260
|
+
>>> result = ModelRuleCheckResult(passed=False, rule_id="RULE_1")
|
|
261
|
+
>>> updated = result.with_details({"class": "MyHandler"})
|
|
262
|
+
>>> updated.details
|
|
263
|
+
{'class': 'MyHandler'}
|
|
264
|
+
"""
|
|
265
|
+
return self.model_copy(update={"details": details})
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Architecture validation request model for the architecture validator node.
|
|
4
|
+
|
|
5
|
+
This module defines the input model for requesting architecture validation.
|
|
6
|
+
Callers can specify paths to validate, specific rules to check, and
|
|
7
|
+
whether to fail fast on the first violation.
|
|
8
|
+
|
|
9
|
+
Example:
|
|
10
|
+
>>> from omnibase_infra.nodes.architecture_validator.models import (
|
|
11
|
+
... ModelArchitectureValidationRequest,
|
|
12
|
+
... )
|
|
13
|
+
>>> # Validate specific files with all rules
|
|
14
|
+
>>> request = ModelArchitectureValidationRequest(
|
|
15
|
+
... paths=["src/mymodule/service.py", "src/mymodule/models/"],
|
|
16
|
+
... )
|
|
17
|
+
>>> # Validate with specific rules only
|
|
18
|
+
>>> request = ModelArchitectureValidationRequest(
|
|
19
|
+
... paths=["src/"],
|
|
20
|
+
... rule_ids=["ARCH-001", "ARCH-002"],
|
|
21
|
+
... fail_fast=True,
|
|
22
|
+
... )
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from __future__ import annotations
|
|
26
|
+
|
|
27
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class ModelArchitectureValidationRequest(BaseModel):
|
|
31
|
+
"""Request to validate architecture patterns in code.
|
|
32
|
+
|
|
33
|
+
This model represents a validation request containing the paths
|
|
34
|
+
to validate, optional rule filters, and execution options.
|
|
35
|
+
|
|
36
|
+
Attributes:
|
|
37
|
+
paths: List of paths to validate. Can be files, directories,
|
|
38
|
+
or glob patterns (e.g., "src/**/*.py"). If empty, validation
|
|
39
|
+
may use a default scope or fail depending on implementation.
|
|
40
|
+
rule_ids: Optional list of specific rule IDs to check.
|
|
41
|
+
If empty, all available rules are applied.
|
|
42
|
+
fail_fast: If True, stop validation on the first violation found.
|
|
43
|
+
Useful for quick CI checks. Default is False (check all).
|
|
44
|
+
|
|
45
|
+
Example:
|
|
46
|
+
>>> # Validate entire src directory
|
|
47
|
+
>>> request = ModelArchitectureValidationRequest(
|
|
48
|
+
... paths=["src/"],
|
|
49
|
+
... )
|
|
50
|
+
>>> # Validate with specific rules and fail fast
|
|
51
|
+
>>> request = ModelArchitectureValidationRequest(
|
|
52
|
+
... paths=["src/omnibase_infra/"],
|
|
53
|
+
... rule_ids=["ARCH-001", "ARCH-003"],
|
|
54
|
+
... fail_fast=True,
|
|
55
|
+
... )
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
model_config = ConfigDict(
|
|
59
|
+
frozen=True,
|
|
60
|
+
extra="forbid",
|
|
61
|
+
strict=True,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
paths: list[str] = Field(
|
|
65
|
+
default_factory=list,
|
|
66
|
+
description=(
|
|
67
|
+
"Paths to validate. Can be files, directories, or glob patterns. "
|
|
68
|
+
"If empty, validation scope depends on implementation."
|
|
69
|
+
),
|
|
70
|
+
)
|
|
71
|
+
rule_ids: list[str] = Field(
|
|
72
|
+
default_factory=list,
|
|
73
|
+
description=(
|
|
74
|
+
"Optional list of specific rule IDs to check (e.g., ['ARCH-001']). "
|
|
75
|
+
"If empty, all available rules are applied."
|
|
76
|
+
),
|
|
77
|
+
)
|
|
78
|
+
fail_fast: bool = Field(
|
|
79
|
+
default=False,
|
|
80
|
+
description=(
|
|
81
|
+
"If True, stop validation on the first violation found. "
|
|
82
|
+
"Useful for quick CI checks."
|
|
83
|
+
),
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
@property
|
|
87
|
+
def has_paths(self) -> bool:
|
|
88
|
+
"""Check if any paths are specified for validation.
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
True if paths list is non-empty, False otherwise.
|
|
92
|
+
"""
|
|
93
|
+
return len(self.paths) > 0
|
|
94
|
+
|
|
95
|
+
@property
|
|
96
|
+
def has_rule_filter(self) -> bool:
|
|
97
|
+
"""Check if specific rules are requested.
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
True if rule_ids list is non-empty, False otherwise.
|
|
101
|
+
"""
|
|
102
|
+
return len(self.rule_ids) > 0
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
__all__ = ["ModelArchitectureValidationRequest"]
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""File-based validation result model for the architecture validator node.
|
|
4
|
+
|
|
5
|
+
This module defines the output model for file-based architecture validation
|
|
6
|
+
results (OMN-1099). It contains the overall validation status, any violations
|
|
7
|
+
found, and metadata about the validation run.
|
|
8
|
+
|
|
9
|
+
Note:
|
|
10
|
+
This is distinct from ModelArchitectureValidationResult in
|
|
11
|
+
model_architecture_validation_result.py (OMN-1138) which is used for
|
|
12
|
+
node/handler validation with different fields (nodes_checked, handlers_checked).
|
|
13
|
+
|
|
14
|
+
Design Pattern:
|
|
15
|
+
ModelFileValidationResult overrides ``__bool__`` to return
|
|
16
|
+
``True`` only when validation passed (no violations). This enables
|
|
17
|
+
idiomatic conditional checks::
|
|
18
|
+
|
|
19
|
+
result = validator.validate(request)
|
|
20
|
+
if result:
|
|
21
|
+
print("Validation passed!")
|
|
22
|
+
else:
|
|
23
|
+
print(f"Found {len(result.violations)} violations")
|
|
24
|
+
|
|
25
|
+
Example:
|
|
26
|
+
>>> from omnibase_infra.nodes.architecture_validator.models.model_validation_result import (
|
|
27
|
+
... ModelFileValidationResult,
|
|
28
|
+
... )
|
|
29
|
+
>>> from omnibase_infra.nodes.architecture_validator.models import (
|
|
30
|
+
... ModelArchitectureViolation,
|
|
31
|
+
... EnumValidationSeverity,
|
|
32
|
+
... )
|
|
33
|
+
>>> # Passing result
|
|
34
|
+
>>> result = ModelFileValidationResult(
|
|
35
|
+
... valid=True,
|
|
36
|
+
... violations=[],
|
|
37
|
+
... files_checked=42,
|
|
38
|
+
... rules_checked=["ARCH-001", "ARCH-002"],
|
|
39
|
+
... )
|
|
40
|
+
>>> bool(result)
|
|
41
|
+
True
|
|
42
|
+
>>>
|
|
43
|
+
>>> # Failing result
|
|
44
|
+
>>> violation = ModelArchitectureViolation(
|
|
45
|
+
... rule_id="ARCH-001",
|
|
46
|
+
... rule_name="No Any Types",
|
|
47
|
+
... severity=EnumValidationSeverity.ERROR,
|
|
48
|
+
... target_type="model",
|
|
49
|
+
... target_name="BadModel",
|
|
50
|
+
... message="Found Any type",
|
|
51
|
+
... )
|
|
52
|
+
>>> result = ModelFileValidationResult(
|
|
53
|
+
... valid=False,
|
|
54
|
+
... violations=[violation],
|
|
55
|
+
... files_checked=42,
|
|
56
|
+
... rules_checked=["ARCH-001"],
|
|
57
|
+
... )
|
|
58
|
+
>>> bool(result)
|
|
59
|
+
False
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
from __future__ import annotations
|
|
63
|
+
|
|
64
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
65
|
+
|
|
66
|
+
from omnibase_infra.enums import EnumValidationSeverity
|
|
67
|
+
from omnibase_infra.nodes.architecture_validator.models.model_architecture_violation import (
|
|
68
|
+
ModelArchitectureViolation,
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class ModelFileValidationResult(BaseModel):
|
|
73
|
+
"""Result of file-based architecture validation containing status and violations.
|
|
74
|
+
|
|
75
|
+
This model represents the complete result of a file-based validation run
|
|
76
|
+
(OMN-1099), including whether validation passed, any violations found,
|
|
77
|
+
and metadata about what was checked.
|
|
78
|
+
|
|
79
|
+
Note:
|
|
80
|
+
This is distinct from ModelArchitectureValidationResult in
|
|
81
|
+
model_architecture_validation_result.py (OMN-1138) which uses
|
|
82
|
+
nodes_checked and handlers_checked instead of files_checked.
|
|
83
|
+
|
|
84
|
+
Attributes:
|
|
85
|
+
valid: True if no violations were found, False otherwise.
|
|
86
|
+
violations: List of architecture violations detected.
|
|
87
|
+
files_checked: Number of files that were validated.
|
|
88
|
+
rules_checked: List of rule IDs that were applied.
|
|
89
|
+
|
|
90
|
+
Warning:
|
|
91
|
+
**Non-standard __bool__ behavior**: This model overrides ``__bool__``
|
|
92
|
+
to return ``True`` only when validation passed (``valid`` is True).
|
|
93
|
+
This differs from typical Pydantic model behavior where ``bool(model)``
|
|
94
|
+
always returns ``True`` for any valid model instance.
|
|
95
|
+
|
|
96
|
+
This design enables idiomatic conditional checks::
|
|
97
|
+
|
|
98
|
+
if result:
|
|
99
|
+
# Validation passed - no violations
|
|
100
|
+
deploy()
|
|
101
|
+
else:
|
|
102
|
+
# Validation failed - has violations
|
|
103
|
+
print(result.violations)
|
|
104
|
+
|
|
105
|
+
If you need to check model validity instead, use explicit attribute access::
|
|
106
|
+
|
|
107
|
+
# Check validation passed (uses __bool__)
|
|
108
|
+
if result:
|
|
109
|
+
...
|
|
110
|
+
|
|
111
|
+
# Check model is valid (always True for constructed instance)
|
|
112
|
+
if result is not None:
|
|
113
|
+
...
|
|
114
|
+
|
|
115
|
+
# Explicit validation check (preferred for clarity)
|
|
116
|
+
if result.valid:
|
|
117
|
+
...
|
|
118
|
+
|
|
119
|
+
Example:
|
|
120
|
+
>>> # Create a passing result
|
|
121
|
+
>>> result = ModelFileValidationResult(
|
|
122
|
+
... valid=True,
|
|
123
|
+
... files_checked=100,
|
|
124
|
+
... rules_checked=["ARCH-001", "ARCH-002", "ARCH-003"],
|
|
125
|
+
... )
|
|
126
|
+
>>> result.valid
|
|
127
|
+
True
|
|
128
|
+
>>> bool(result)
|
|
129
|
+
True
|
|
130
|
+
>>>
|
|
131
|
+
>>> # Create a failing result
|
|
132
|
+
>>> result = ModelFileValidationResult(
|
|
133
|
+
... valid=False,
|
|
134
|
+
... violations=[violation],
|
|
135
|
+
... files_checked=100,
|
|
136
|
+
... rules_checked=["ARCH-001"],
|
|
137
|
+
... )
|
|
138
|
+
>>> result.valid
|
|
139
|
+
False
|
|
140
|
+
>>> bool(result)
|
|
141
|
+
False
|
|
142
|
+
"""
|
|
143
|
+
|
|
144
|
+
model_config = ConfigDict(
|
|
145
|
+
frozen=True,
|
|
146
|
+
extra="forbid",
|
|
147
|
+
strict=True,
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
valid: bool = Field(
|
|
151
|
+
...,
|
|
152
|
+
description="True if no violations were found, False otherwise.",
|
|
153
|
+
)
|
|
154
|
+
violations: list[ModelArchitectureViolation] = Field(
|
|
155
|
+
default_factory=list,
|
|
156
|
+
description="List of architecture violations detected during validation.",
|
|
157
|
+
)
|
|
158
|
+
files_checked: int = Field(
|
|
159
|
+
default=0,
|
|
160
|
+
description="Number of files that were validated.",
|
|
161
|
+
ge=0,
|
|
162
|
+
)
|
|
163
|
+
rules_checked: list[str] = Field(
|
|
164
|
+
default_factory=list,
|
|
165
|
+
description="List of rule IDs that were applied during validation.",
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
@property
|
|
169
|
+
def violation_count(self) -> int:
|
|
170
|
+
"""Get the number of violations found.
|
|
171
|
+
|
|
172
|
+
Returns:
|
|
173
|
+
Number of violations in the violations list.
|
|
174
|
+
"""
|
|
175
|
+
return len(self.violations)
|
|
176
|
+
|
|
177
|
+
@property
|
|
178
|
+
def error_count(self) -> int:
|
|
179
|
+
"""Get the number of ERROR severity violations.
|
|
180
|
+
|
|
181
|
+
Returns:
|
|
182
|
+
Count of violations with ERROR severity.
|
|
183
|
+
"""
|
|
184
|
+
return sum(
|
|
185
|
+
1 for v in self.violations if v.severity == EnumValidationSeverity.ERROR
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
@property
|
|
189
|
+
def warning_count(self) -> int:
|
|
190
|
+
"""Get the number of WARNING severity violations.
|
|
191
|
+
|
|
192
|
+
Returns:
|
|
193
|
+
Count of violations with WARNING severity.
|
|
194
|
+
"""
|
|
195
|
+
return sum(
|
|
196
|
+
1 for v in self.violations if v.severity == EnumValidationSeverity.WARNING
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
def __bool__(self) -> bool:
|
|
200
|
+
"""Allow using result in boolean context to check validation status.
|
|
201
|
+
|
|
202
|
+
Returns True if validation passed (no violations found),
|
|
203
|
+
indicating the code meets architecture requirements.
|
|
204
|
+
|
|
205
|
+
Warning:
|
|
206
|
+
This differs from typical Pydantic model behavior where ``bool(model)``
|
|
207
|
+
always returns ``True`` for any valid model instance. Here, ``bool(result)``
|
|
208
|
+
returns ``False`` for valid results that have violations.
|
|
209
|
+
|
|
210
|
+
Use ``result.valid`` for explicit, self-documenting code.
|
|
211
|
+
Use ``result is not None`` if you need to check model existence.
|
|
212
|
+
|
|
213
|
+
Returns:
|
|
214
|
+
True if valid is True, False otherwise.
|
|
215
|
+
|
|
216
|
+
Example:
|
|
217
|
+
>>> result_pass = ModelFileValidationResult(valid=True)
|
|
218
|
+
>>> bool(result_pass)
|
|
219
|
+
True
|
|
220
|
+
>>>
|
|
221
|
+
>>> result_fail = ModelFileValidationResult(
|
|
222
|
+
... valid=False,
|
|
223
|
+
... violations=[some_violation],
|
|
224
|
+
... )
|
|
225
|
+
>>> bool(result_fail) # False even though model is valid!
|
|
226
|
+
False
|
|
227
|
+
"""
|
|
228
|
+
return self.valid
|
|
229
|
+
|
|
230
|
+
def __str__(self) -> str:
|
|
231
|
+
"""Return a human-readable string representation for debugging.
|
|
232
|
+
|
|
233
|
+
Returns:
|
|
234
|
+
String showing validation status, file count, and violation count.
|
|
235
|
+
"""
|
|
236
|
+
status = "PASSED" if self.valid else "FAILED"
|
|
237
|
+
return (
|
|
238
|
+
f"ModelFileValidationResult("
|
|
239
|
+
f"status={status}, "
|
|
240
|
+
f"files={self.files_checked}, "
|
|
241
|
+
f"violations={self.violation_count})"
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
@classmethod
|
|
245
|
+
def passed(
|
|
246
|
+
cls,
|
|
247
|
+
files_checked: int = 0,
|
|
248
|
+
rules_checked: list[str] | None = None,
|
|
249
|
+
) -> ModelFileValidationResult:
|
|
250
|
+
"""Create a passing validation result.
|
|
251
|
+
|
|
252
|
+
Factory method for creating a result with no violations.
|
|
253
|
+
|
|
254
|
+
Args:
|
|
255
|
+
files_checked: Number of files that were validated.
|
|
256
|
+
rules_checked: List of rule IDs that were applied.
|
|
257
|
+
|
|
258
|
+
Returns:
|
|
259
|
+
ModelFileValidationResult with valid=True and no violations.
|
|
260
|
+
|
|
261
|
+
Example:
|
|
262
|
+
>>> result = ModelFileValidationResult.passed(
|
|
263
|
+
... files_checked=50,
|
|
264
|
+
... rules_checked=["ARCH-001", "ARCH-002"],
|
|
265
|
+
... )
|
|
266
|
+
>>> result.valid
|
|
267
|
+
True
|
|
268
|
+
"""
|
|
269
|
+
return cls(
|
|
270
|
+
valid=True,
|
|
271
|
+
violations=[],
|
|
272
|
+
files_checked=files_checked,
|
|
273
|
+
rules_checked=rules_checked or [],
|
|
274
|
+
)
|
|
275
|
+
|
|
276
|
+
@classmethod
|
|
277
|
+
def failed(
|
|
278
|
+
cls,
|
|
279
|
+
violations: list[ModelArchitectureViolation],
|
|
280
|
+
files_checked: int = 0,
|
|
281
|
+
rules_checked: list[str] | None = None,
|
|
282
|
+
) -> ModelFileValidationResult:
|
|
283
|
+
"""Create a failing validation result.
|
|
284
|
+
|
|
285
|
+
Factory method for creating a result with violations.
|
|
286
|
+
|
|
287
|
+
Args:
|
|
288
|
+
violations: List of architecture violations found.
|
|
289
|
+
files_checked: Number of files that were validated.
|
|
290
|
+
rules_checked: List of rule IDs that were applied.
|
|
291
|
+
|
|
292
|
+
Returns:
|
|
293
|
+
ModelFileValidationResult with valid=False and violations.
|
|
294
|
+
|
|
295
|
+
Example:
|
|
296
|
+
>>> result = ModelFileValidationResult.failed(
|
|
297
|
+
... violations=[violation1, violation2],
|
|
298
|
+
... files_checked=50,
|
|
299
|
+
... rules_checked=["ARCH-001"],
|
|
300
|
+
... )
|
|
301
|
+
>>> result.valid
|
|
302
|
+
False
|
|
303
|
+
>>> result.violation_count
|
|
304
|
+
2
|
|
305
|
+
"""
|
|
306
|
+
return cls(
|
|
307
|
+
valid=False,
|
|
308
|
+
violations=violations,
|
|
309
|
+
files_checked=files_checked,
|
|
310
|
+
rules_checked=rules_checked or [],
|
|
311
|
+
)
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
__all__ = ["ModelFileValidationResult"]
|