omnibase_infra 0.2.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- omnibase_infra/__init__.py +101 -0
- omnibase_infra/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +261 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +138 -0
- omnibase_infra/decorators/__init__.py +29 -0
- omnibase_infra/decorators/allow_any.py +109 -0
- omnibase_infra/dlq/__init__.py +90 -0
- omnibase_infra/dlq/constants_dlq.py +57 -0
- omnibase_infra/dlq/models/__init__.py +26 -0
- omnibase_infra/dlq/models/enum_replay_status.py +37 -0
- omnibase_infra/dlq/models/model_dlq_replay_record.py +135 -0
- omnibase_infra/dlq/models/model_dlq_tracking_config.py +184 -0
- omnibase_infra/dlq/service_dlq_tracking.py +611 -0
- omnibase_infra/enums/__init__.py +123 -0
- omnibase_infra/enums/enum_any_type_violation.py +104 -0
- omnibase_infra/enums/enum_backend_type.py +27 -0
- omnibase_infra/enums/enum_capture_outcome.py +42 -0
- omnibase_infra/enums/enum_capture_state.py +88 -0
- omnibase_infra/enums/enum_chain_violation_type.py +119 -0
- omnibase_infra/enums/enum_circuit_state.py +51 -0
- omnibase_infra/enums/enum_confirmation_event_type.py +27 -0
- omnibase_infra/enums/enum_contract_type.py +84 -0
- omnibase_infra/enums/enum_dedupe_strategy.py +46 -0
- omnibase_infra/enums/enum_dispatch_status.py +191 -0
- omnibase_infra/enums/enum_environment.py +46 -0
- omnibase_infra/enums/enum_execution_shape_violation.py +103 -0
- omnibase_infra/enums/enum_handler_error_type.py +101 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -0
- omnibase_infra/enums/enum_handler_source_type.py +87 -0
- omnibase_infra/enums/enum_handler_type.py +77 -0
- omnibase_infra/enums/enum_handler_type_category.py +61 -0
- omnibase_infra/enums/enum_infra_transport_type.py +73 -0
- omnibase_infra/enums/enum_introspection_reason.py +154 -0
- omnibase_infra/enums/enum_message_category.py +213 -0
- omnibase_infra/enums/enum_node_archetype.py +74 -0
- omnibase_infra/enums/enum_node_output_type.py +185 -0
- omnibase_infra/enums/enum_non_retryable_error_category.py +224 -0
- omnibase_infra/enums/enum_policy_type.py +32 -0
- omnibase_infra/enums/enum_registration_state.py +261 -0
- omnibase_infra/enums/enum_registration_status.py +33 -0
- omnibase_infra/enums/enum_registry_response_status.py +28 -0
- omnibase_infra/enums/enum_response_status.py +26 -0
- omnibase_infra/enums/enum_retry_error_category.py +98 -0
- omnibase_infra/enums/enum_security_rule_id.py +103 -0
- omnibase_infra/enums/enum_selection_strategy.py +91 -0
- omnibase_infra/enums/enum_topic_standard.py +42 -0
- omnibase_infra/enums/enum_validation_severity.py +78 -0
- omnibase_infra/errors/__init__.py +156 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +92 -0
- omnibase_infra/errors/error_consul.py +132 -0
- omnibase_infra/errors/error_container_wiring.py +243 -0
- omnibase_infra/errors/error_event_bus_registry.py +102 -0
- omnibase_infra/errors/error_infra.py +608 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +112 -0
- omnibase_infra/errors/error_vault.py +123 -0
- omnibase_infra/event_bus/__init__.py +72 -0
- omnibase_infra/event_bus/configs/kafka_event_bus_config.yaml +86 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +743 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1658 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +184 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +765 -0
- omnibase_infra/event_bus/models/__init__.py +29 -0
- omnibase_infra/event_bus/models/config/__init__.py +20 -0
- omnibase_infra/event_bus/models/config/model_kafka_event_bus_config.py +725 -0
- omnibase_infra/event_bus/models/model_dlq_event.py +206 -0
- omnibase_infra/event_bus/models/model_dlq_metrics.py +304 -0
- omnibase_infra/event_bus/models/model_event_headers.py +115 -0
- omnibase_infra/event_bus/models/model_event_message.py +60 -0
- omnibase_infra/event_bus/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +75 -0
- omnibase_infra/handlers/filesystem/__init__.py +48 -0
- omnibase_infra/handlers/filesystem/enum_file_system_operation.py +35 -0
- omnibase_infra/handlers/filesystem/model_file_system_request.py +298 -0
- omnibase_infra/handlers/filesystem/model_file_system_result.py +166 -0
- omnibase_infra/handlers/handler_consul.py +787 -0
- omnibase_infra/handlers/handler_db.py +1039 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +1154 -0
- omnibase_infra/handlers/handler_http.py +920 -0
- omnibase_infra/handlers/handler_manifest_persistence.contract.yaml +184 -0
- omnibase_infra/handlers/handler_manifest_persistence.py +1539 -0
- omnibase_infra/handlers/handler_mcp.py +748 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +422 -0
- omnibase_infra/handlers/mcp/__init__.py +19 -0
- omnibase_infra/handlers/mcp/adapter_onex_to_mcp.py +446 -0
- omnibase_infra/handlers/mcp/protocols.py +178 -0
- omnibase_infra/handlers/mcp/transport_streamable_http.py +352 -0
- omnibase_infra/handlers/mixins/__init__.py +42 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +337 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +277 -0
- omnibase_infra/handlers/mixins/mixin_vault_initialization.py +338 -0
- omnibase_infra/handlers/mixins/mixin_vault_retry.py +412 -0
- omnibase_infra/handlers/mixins/mixin_vault_secrets.py +450 -0
- omnibase_infra/handlers/mixins/mixin_vault_token.py +365 -0
- omnibase_infra/handlers/models/__init__.py +286 -0
- omnibase_infra/handlers/models/consul/__init__.py +81 -0
- omnibase_infra/handlers/models/consul/enum_consul_operation_type.py +57 -0
- omnibase_infra/handlers/models/consul/model_consul_deregister_payload.py +51 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_config.py +153 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_payload.py +89 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_found_payload.py +55 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_not_found_payload.py +49 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_recurse_payload.py +50 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_item.py +33 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_put_payload.py +41 -0
- omnibase_infra/handlers/models/consul/model_consul_register_payload.py +53 -0
- omnibase_infra/handlers/models/consul/model_consul_retry_config.py +66 -0
- omnibase_infra/handlers/models/consul/model_payload_consul.py +66 -0
- omnibase_infra/handlers/models/consul/registry_payload_consul.py +214 -0
- omnibase_infra/handlers/models/graph/__init__.py +35 -0
- omnibase_infra/handlers/models/graph/enum_graph_operation_type.py +20 -0
- omnibase_infra/handlers/models/graph/model_graph_execute_payload.py +38 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_config.py +54 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_payload.py +44 -0
- omnibase_infra/handlers/models/graph/model_graph_query_payload.py +40 -0
- omnibase_infra/handlers/models/graph/model_graph_record.py +22 -0
- omnibase_infra/handlers/models/http/__init__.py +50 -0
- omnibase_infra/handlers/models/http/enum_http_operation_type.py +29 -0
- omnibase_infra/handlers/models/http/model_http_body_content.py +45 -0
- omnibase_infra/handlers/models/http/model_http_get_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_http_handler_payload.py +90 -0
- omnibase_infra/handlers/models/http/model_http_post_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_payload_http.py +66 -0
- omnibase_infra/handlers/models/http/registry_payload_http.py +212 -0
- omnibase_infra/handlers/models/mcp/__init__.py +23 -0
- omnibase_infra/handlers/models/mcp/enum_mcp_operation_type.py +24 -0
- omnibase_infra/handlers/models/mcp/model_mcp_handler_config.py +40 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_call.py +32 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_result.py +45 -0
- omnibase_infra/handlers/models/model_consul_handler_response.py +96 -0
- omnibase_infra/handlers/models/model_db_describe_response.py +83 -0
- omnibase_infra/handlers/models/model_db_query_payload.py +95 -0
- omnibase_infra/handlers/models/model_db_query_response.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_config.py +98 -0
- omnibase_infra/handlers/models/model_filesystem_delete_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_delete_result.py +77 -0
- omnibase_infra/handlers/models/model_filesystem_directory_entry.py +75 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_result.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_payload.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_result.py +68 -0
- omnibase_infra/handlers/models/model_filesystem_read_payload.py +62 -0
- omnibase_infra/handlers/models/model_filesystem_read_result.py +61 -0
- omnibase_infra/handlers/models/model_filesystem_write_payload.py +70 -0
- omnibase_infra/handlers/models/model_filesystem_write_result.py +55 -0
- omnibase_infra/handlers/models/model_graph_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_handler_response.py +103 -0
- omnibase_infra/handlers/models/model_http_handler_response.py +101 -0
- omnibase_infra/handlers/models/model_manifest_metadata.py +75 -0
- omnibase_infra/handlers/models/model_manifest_persistence_config.py +62 -0
- omnibase_infra/handlers/models/model_manifest_query_payload.py +90 -0
- omnibase_infra/handlers/models/model_manifest_query_result.py +97 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_payload.py +44 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_result.py +98 -0
- omnibase_infra/handlers/models/model_manifest_store_payload.py +47 -0
- omnibase_infra/handlers/models/model_manifest_store_result.py +67 -0
- omnibase_infra/handlers/models/model_operation_context.py +187 -0
- omnibase_infra/handlers/models/model_qdrant_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_retry_state.py +162 -0
- omnibase_infra/handlers/models/model_vault_handler_response.py +98 -0
- omnibase_infra/handlers/models/qdrant/__init__.py +44 -0
- omnibase_infra/handlers/models/qdrant/enum_qdrant_operation_type.py +26 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_collection_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_delete_payload.py +36 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_config.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_payload.py +54 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_result.py +30 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_upsert_payload.py +36 -0
- omnibase_infra/handlers/models/vault/__init__.py +69 -0
- omnibase_infra/handlers/models/vault/enum_vault_operation_type.py +35 -0
- omnibase_infra/handlers/models/vault/model_payload_vault.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_delete_payload.py +57 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_config.py +148 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_payload.py +101 -0
- omnibase_infra/handlers/models/vault/model_vault_list_payload.py +58 -0
- omnibase_infra/handlers/models/vault/model_vault_renew_token_payload.py +67 -0
- omnibase_infra/handlers/models/vault/model_vault_retry_config.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_secret_payload.py +106 -0
- omnibase_infra/handlers/models/vault/model_vault_write_payload.py +66 -0
- omnibase_infra/handlers/models/vault/registry_payload_vault.py +213 -0
- omnibase_infra/handlers/registration_storage/__init__.py +43 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_mock.py +392 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_postgres.py +915 -0
- omnibase_infra/handlers/registration_storage/models/__init__.py +23 -0
- omnibase_infra/handlers/registration_storage/models/model_delete_registration_request.py +58 -0
- omnibase_infra/handlers/registration_storage/models/model_update_registration_request.py +73 -0
- omnibase_infra/handlers/registration_storage/protocol_registration_persistence.py +191 -0
- omnibase_infra/handlers/service_discovery/__init__.py +43 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_consul.py +747 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_mock.py +258 -0
- omnibase_infra/handlers/service_discovery/models/__init__.py +22 -0
- omnibase_infra/handlers/service_discovery/models/model_discovery_result.py +64 -0
- omnibase_infra/handlers/service_discovery/models/model_registration_result.py +138 -0
- omnibase_infra/handlers/service_discovery/models/model_service_info.py +99 -0
- omnibase_infra/handlers/service_discovery/protocol_discovery_operations.py +170 -0
- omnibase_infra/idempotency/__init__.py +94 -0
- omnibase_infra/idempotency/models/__init__.py +43 -0
- omnibase_infra/idempotency/models/model_idempotency_check_result.py +85 -0
- omnibase_infra/idempotency/models/model_idempotency_guard_config.py +130 -0
- omnibase_infra/idempotency/models/model_idempotency_record.py +86 -0
- omnibase_infra/idempotency/models/model_idempotency_store_health_check_result.py +81 -0
- omnibase_infra/idempotency/models/model_idempotency_store_metrics.py +140 -0
- omnibase_infra/idempotency/models/model_postgres_idempotency_store_config.py +299 -0
- omnibase_infra/idempotency/protocol_idempotency_store.py +184 -0
- omnibase_infra/idempotency/store_inmemory.py +265 -0
- omnibase_infra/idempotency/store_postgres.py +923 -0
- omnibase_infra/infrastructure/__init__.py +0 -0
- omnibase_infra/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +655 -0
- omnibase_infra/mixins/mixin_dict_like_accessors.py +146 -0
- omnibase_infra/mixins/mixin_envelope_extraction.py +119 -0
- omnibase_infra/mixins/mixin_node_introspection.py +2465 -0
- omnibase_infra/mixins/mixin_retry_execution.py +386 -0
- omnibase_infra/mixins/protocol_circuit_breaker_aware.py +133 -0
- omnibase_infra/models/__init__.py +136 -0
- omnibase_infra/models/corpus/__init__.py +17 -0
- omnibase_infra/models/corpus/model_capture_config.py +133 -0
- omnibase_infra/models/corpus/model_capture_result.py +86 -0
- omnibase_infra/models/discovery/__init__.py +42 -0
- omnibase_infra/models/discovery/model_dependency_spec.py +319 -0
- omnibase_infra/models/discovery/model_discovered_capabilities.py +50 -0
- omnibase_infra/models/discovery/model_introspection_config.py +311 -0
- omnibase_infra/models/discovery/model_introspection_performance_metrics.py +169 -0
- omnibase_infra/models/discovery/model_introspection_task_config.py +116 -0
- omnibase_infra/models/dispatch/__init__.py +147 -0
- omnibase_infra/models/dispatch/model_dispatch_context.py +439 -0
- omnibase_infra/models/dispatch/model_dispatch_error.py +336 -0
- omnibase_infra/models/dispatch/model_dispatch_log_context.py +400 -0
- omnibase_infra/models/dispatch/model_dispatch_metadata.py +228 -0
- omnibase_infra/models/dispatch/model_dispatch_metrics.py +496 -0
- omnibase_infra/models/dispatch/model_dispatch_outcome.py +317 -0
- omnibase_infra/models/dispatch/model_dispatch_outputs.py +231 -0
- omnibase_infra/models/dispatch/model_dispatch_result.py +436 -0
- omnibase_infra/models/dispatch/model_dispatch_route.py +279 -0
- omnibase_infra/models/dispatch/model_dispatcher_metrics.py +275 -0
- omnibase_infra/models/dispatch/model_dispatcher_registration.py +352 -0
- omnibase_infra/models/dispatch/model_parsed_topic.py +135 -0
- omnibase_infra/models/dispatch/model_topic_parser.py +725 -0
- omnibase_infra/models/dispatch/model_tracing_context.py +285 -0
- omnibase_infra/models/errors/__init__.py +45 -0
- omnibase_infra/models/errors/model_handler_validation_error.py +594 -0
- omnibase_infra/models/errors/model_infra_error_context.py +99 -0
- omnibase_infra/models/errors/model_message_type_registry_error_context.py +71 -0
- omnibase_infra/models/errors/model_timeout_error_context.py +110 -0
- omnibase_infra/models/handlers/__init__.py +37 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +80 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +185 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -0
- omnibase_infra/models/health/__init__.py +9 -0
- omnibase_infra/models/health/model_health_check_result.py +40 -0
- omnibase_infra/models/lifecycle/__init__.py +39 -0
- omnibase_infra/models/logging/__init__.py +51 -0
- omnibase_infra/models/logging/model_log_context.py +756 -0
- omnibase_infra/models/model_retry_error_classification.py +78 -0
- omnibase_infra/models/projection/__init__.py +43 -0
- omnibase_infra/models/projection/model_capability_fields.py +112 -0
- omnibase_infra/models/projection/model_registration_projection.py +434 -0
- omnibase_infra/models/projection/model_registration_snapshot.py +322 -0
- omnibase_infra/models/projection/model_sequence_info.py +182 -0
- omnibase_infra/models/projection/model_snapshot_topic_config.py +590 -0
- omnibase_infra/models/projectors/__init__.py +41 -0
- omnibase_infra/models/projectors/model_projector_column.py +289 -0
- omnibase_infra/models/projectors/model_projector_discovery_result.py +65 -0
- omnibase_infra/models/projectors/model_projector_index.py +270 -0
- omnibase_infra/models/projectors/model_projector_schema.py +415 -0
- omnibase_infra/models/projectors/model_projector_validation_error.py +63 -0
- omnibase_infra/models/projectors/util_sql_identifiers.py +115 -0
- omnibase_infra/models/registration/__init__.py +59 -0
- omnibase_infra/models/registration/commands/__init__.py +15 -0
- omnibase_infra/models/registration/commands/model_node_registration_acked.py +108 -0
- omnibase_infra/models/registration/events/__init__.py +56 -0
- omnibase_infra/models/registration/events/model_node_became_active.py +103 -0
- omnibase_infra/models/registration/events/model_node_liveness_expired.py +103 -0
- omnibase_infra/models/registration/events/model_node_registration_accepted.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_received.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_timed_out.py +112 -0
- omnibase_infra/models/registration/events/model_node_registration_initiated.py +107 -0
- omnibase_infra/models/registration/events/model_node_registration_rejected.py +104 -0
- omnibase_infra/models/registration/model_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +179 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +175 -0
- omnibase_infra/models/registration/model_node_metadata.py +79 -0
- omnibase_infra/models/registration/model_node_registration.py +162 -0
- omnibase_infra/models/registration/model_node_registration_record.py +162 -0
- omnibase_infra/models/registry/__init__.py +29 -0
- omnibase_infra/models/registry/model_domain_constraint.py +202 -0
- omnibase_infra/models/registry/model_message_type_entry.py +271 -0
- omnibase_infra/models/resilience/__init__.py +9 -0
- omnibase_infra/models/resilience/model_circuit_breaker_config.py +227 -0
- omnibase_infra/models/routing/__init__.py +25 -0
- omnibase_infra/models/routing/model_routing_entry.py +52 -0
- omnibase_infra/models/routing/model_routing_subcontract.py +70 -0
- omnibase_infra/models/runtime/__init__.py +40 -0
- omnibase_infra/models/runtime/model_contract_security_config.py +41 -0
- omnibase_infra/models/runtime/model_discovery_error.py +81 -0
- omnibase_infra/models/runtime/model_discovery_result.py +162 -0
- omnibase_infra/models/runtime/model_discovery_warning.py +74 -0
- omnibase_infra/models/runtime/model_failed_plugin_load.py +63 -0
- omnibase_infra/models/runtime/model_handler_contract.py +280 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +120 -0
- omnibase_infra/models/runtime/model_plugin_load_context.py +93 -0
- omnibase_infra/models/runtime/model_plugin_load_summary.py +124 -0
- omnibase_infra/models/security/__init__.py +50 -0
- omnibase_infra/models/security/classification_levels.py +99 -0
- omnibase_infra/models/security/model_environment_policy.py +145 -0
- omnibase_infra/models/security/model_handler_security_policy.py +107 -0
- omnibase_infra/models/security/model_security_error.py +81 -0
- omnibase_infra/models/security/model_security_validation_result.py +328 -0
- omnibase_infra/models/security/model_security_warning.py +67 -0
- omnibase_infra/models/snapshot/__init__.py +27 -0
- omnibase_infra/models/snapshot/model_field_change.py +65 -0
- omnibase_infra/models/snapshot/model_snapshot.py +270 -0
- omnibase_infra/models/snapshot/model_snapshot_diff.py +203 -0
- omnibase_infra/models/snapshot/model_subject_ref.py +81 -0
- omnibase_infra/models/types/__init__.py +71 -0
- omnibase_infra/models/validation/__init__.py +89 -0
- omnibase_infra/models/validation/model_any_type_validation_result.py +118 -0
- omnibase_infra/models/validation/model_any_type_violation.py +141 -0
- omnibase_infra/models/validation/model_category_match_result.py +345 -0
- omnibase_infra/models/validation/model_chain_violation.py +166 -0
- omnibase_infra/models/validation/model_coverage_metrics.py +316 -0
- omnibase_infra/models/validation/model_execution_shape_rule.py +159 -0
- omnibase_infra/models/validation/model_execution_shape_validation.py +208 -0
- omnibase_infra/models/validation/model_execution_shape_validation_result.py +294 -0
- omnibase_infra/models/validation/model_execution_shape_violation.py +122 -0
- omnibase_infra/models/validation/model_localhandler_validation_result.py +139 -0
- omnibase_infra/models/validation/model_localhandler_violation.py +100 -0
- omnibase_infra/models/validation/model_output_validation_params.py +74 -0
- omnibase_infra/models/validation/model_validate_and_raise_params.py +84 -0
- omnibase_infra/models/validation/model_validation_error_params.py +84 -0
- omnibase_infra/models/validation/model_validation_outcome.py +287 -0
- omnibase_infra/nodes/__init__.py +48 -0
- omnibase_infra/nodes/architecture_validator/__init__.py +79 -0
- omnibase_infra/nodes/architecture_validator/contract.yaml +252 -0
- omnibase_infra/nodes/architecture_validator/contract_architecture_validator.yaml +208 -0
- omnibase_infra/nodes/architecture_validator/mixins/__init__.py +16 -0
- omnibase_infra/nodes/architecture_validator/mixins/mixin_file_path_rule.py +92 -0
- omnibase_infra/nodes/architecture_validator/models/__init__.py +36 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_request.py +56 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_result.py +311 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_violation.py +163 -0
- omnibase_infra/nodes/architecture_validator/models/model_rule_check_result.py +265 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_request.py +105 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_result.py +314 -0
- omnibase_infra/nodes/architecture_validator/node.py +262 -0
- omnibase_infra/nodes/architecture_validator/node_architecture_validator.py +383 -0
- omnibase_infra/nodes/architecture_validator/protocols/__init__.py +9 -0
- omnibase_infra/nodes/architecture_validator/protocols/protocol_architecture_rule.py +225 -0
- omnibase_infra/nodes/architecture_validator/registry/__init__.py +28 -0
- omnibase_infra/nodes/architecture_validator/registry/registry_infra_architecture_validator.py +99 -0
- omnibase_infra/nodes/architecture_validator/validators/__init__.py +104 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_direct_dispatch.py +422 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_handler_publishing.py +481 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_orchestrator_fsm.py +491 -0
- omnibase_infra/nodes/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +172 -0
- omnibase_infra/nodes/effects/models/__init__.py +32 -0
- omnibase_infra/nodes/effects/models/model_backend_result.py +190 -0
- omnibase_infra/nodes/effects/models/model_effect_idempotency_config.py +92 -0
- omnibase_infra/nodes/effects/models/model_registry_request.py +132 -0
- omnibase_infra/nodes/effects/models/model_registry_response.py +263 -0
- omnibase_infra/nodes/effects/protocol_consul_client.py +89 -0
- omnibase_infra/nodes/effects/protocol_effect_idempotency_store.py +143 -0
- omnibase_infra/nodes/effects/protocol_postgres_adapter.py +96 -0
- omnibase_infra/nodes/effects/registry_effect.py +525 -0
- omnibase_infra/nodes/effects/store_effect_idempotency_inmemory.py +425 -0
- omnibase_infra/nodes/node_registration_orchestrator/README.md +542 -0
- omnibase_infra/nodes/node_registration_orchestrator/__init__.py +120 -0
- omnibase_infra/nodes/node_registration_orchestrator/contract.yaml +475 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/__init__.py +53 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_introspected.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_registration_acked.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_runtime_tick.py +373 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/__init__.py +62 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_heartbeat.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_introspected.py +609 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_registration_acked.py +458 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_runtime_tick.py +364 -0
- omnibase_infra/nodes/node_registration_orchestrator/introspection_event_router.py +544 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/__init__.py +75 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_intent_payload.py +194 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_registration_intent.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_intent_execution_result.py +50 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_node_liveness_expired.py +107 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_config.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_input.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_output.py +166 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_intent_payload.py +235 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_upsert_intent.py +68 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_execution_result.py +384 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_state.py +60 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registration_intent.py +177 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registry_intent.py +247 -0
- omnibase_infra/nodes/node_registration_orchestrator/node.py +195 -0
- omnibase_infra/nodes/node_registration_orchestrator/plugin.py +909 -0
- omnibase_infra/nodes/node_registration_orchestrator/protocols.py +439 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/registry_infra_node_registration_orchestrator.py +525 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +392 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +742 -0
- omnibase_infra/nodes/node_registration_reducer/__init__.py +15 -0
- omnibase_infra/nodes/node_registration_reducer/contract.yaml +301 -0
- omnibase_infra/nodes/node_registration_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/node_registration_reducer/models/model_validation_result.py +113 -0
- omnibase_infra/nodes/node_registration_reducer/node.py +139 -0
- omnibase_infra/nodes/node_registration_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_registration_reducer/registry/registry_infra_node_registration_reducer.py +79 -0
- omnibase_infra/nodes/node_registration_storage_effect/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_storage_effect/contract.yaml +225 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/__init__.py +44 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_delete_result.py +132 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_record.py +199 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_update.py +155 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_details.py +123 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_result.py +117 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_query.py +100 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_result.py +136 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_upsert_result.py +127 -0
- omnibase_infra/nodes/node_registration_storage_effect/node.py +109 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/__init__.py +22 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/protocol_registration_persistence.py +333 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/__init__.py +23 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/registry_infra_registration_storage.py +194 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +682 -0
- omnibase_infra/nodes/node_registry_effect/handlers/__init__.py +70 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_deregister.py +211 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_register.py +212 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_partial_retry.py +416 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_deactivate.py +215 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_upsert.py +208 -0
- omnibase_infra/nodes/node_registry_effect/models/__init__.py +43 -0
- omnibase_infra/nodes/node_registry_effect/models/model_partial_retry_request.py +92 -0
- omnibase_infra/nodes/node_registry_effect/node.py +165 -0
- omnibase_infra/nodes/node_registry_effect/registry/__init__.py +27 -0
- omnibase_infra/nodes/node_registry_effect/registry/registry_infra_registry_effect.py +196 -0
- omnibase_infra/nodes/node_service_discovery_effect/__init__.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/contract.yaml +246 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/__init__.py +67 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_health_status.py +72 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_service_discovery_operation.py +58 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_query.py +99 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_result.py +98 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_health_check_config.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_query_metadata.py +63 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_registration_result.py +130 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_details.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_result.py +119 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_info.py +106 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_registration.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/node.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/__init__.py +14 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/protocol_discovery_operations.py +279 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/__init__.py +13 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/registry_infra_service_discovery.py +214 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +32 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +76 -0
- omnibase_infra/nodes/reducers/models/model_payload_postgres_upsert_registration.py +60 -0
- omnibase_infra/nodes/reducers/models/model_registration_confirmation.py +166 -0
- omnibase_infra/nodes/reducers/models/model_registration_state.py +433 -0
- omnibase_infra/nodes/reducers/registration_reducer.py +1137 -0
- omnibase_infra/observability/__init__.py +143 -0
- omnibase_infra/observability/constants_metrics.py +91 -0
- omnibase_infra/observability/factory_observability_sink.py +525 -0
- omnibase_infra/observability/handlers/__init__.py +118 -0
- omnibase_infra/observability/handlers/handler_logging_structured.py +967 -0
- omnibase_infra/observability/handlers/handler_metrics_prometheus.py +1120 -0
- omnibase_infra/observability/handlers/model_logging_handler_config.py +71 -0
- omnibase_infra/observability/handlers/model_logging_handler_response.py +77 -0
- omnibase_infra/observability/handlers/model_metrics_handler_config.py +172 -0
- omnibase_infra/observability/handlers/model_metrics_handler_payload.py +135 -0
- omnibase_infra/observability/handlers/model_metrics_handler_response.py +101 -0
- omnibase_infra/observability/hooks/__init__.py +74 -0
- omnibase_infra/observability/hooks/hook_observability.py +1223 -0
- omnibase_infra/observability/models/__init__.py +30 -0
- omnibase_infra/observability/models/enum_required_log_context_key.py +77 -0
- omnibase_infra/observability/models/model_buffered_log_entry.py +117 -0
- omnibase_infra/observability/models/model_logging_sink_config.py +73 -0
- omnibase_infra/observability/models/model_metrics_sink_config.py +156 -0
- omnibase_infra/observability/sinks/__init__.py +69 -0
- omnibase_infra/observability/sinks/sink_logging_structured.py +809 -0
- omnibase_infra/observability/sinks/sink_metrics_prometheus.py +710 -0
- omnibase_infra/plugins/__init__.py +27 -0
- omnibase_infra/plugins/examples/__init__.py +28 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer.py +271 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer_error_handling.py +210 -0
- omnibase_infra/plugins/models/__init__.py +21 -0
- omnibase_infra/plugins/models/model_plugin_context.py +76 -0
- omnibase_infra/plugins/models/model_plugin_input_data.py +58 -0
- omnibase_infra/plugins/models/model_plugin_output_data.py +62 -0
- omnibase_infra/plugins/plugin_compute_base.py +435 -0
- omnibase_infra/projectors/__init__.py +30 -0
- omnibase_infra/projectors/contracts/__init__.py +63 -0
- omnibase_infra/projectors/contracts/registration_projector.yaml +370 -0
- omnibase_infra/projectors/projection_reader_registration.py +1559 -0
- omnibase_infra/projectors/snapshot_publisher_registration.py +1329 -0
- omnibase_infra/protocols/__init__.py +99 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -0
- omnibase_infra/protocols/protocol_event_bus_like.py +127 -0
- omnibase_infra/protocols/protocol_event_projector.py +96 -0
- omnibase_infra/protocols/protocol_idempotency_store.py +142 -0
- omnibase_infra/protocols/protocol_message_dispatcher.py +247 -0
- omnibase_infra/protocols/protocol_message_type_registry.py +306 -0
- omnibase_infra/protocols/protocol_plugin_compute.py +368 -0
- omnibase_infra/protocols/protocol_projector_schema_validator.py +82 -0
- omnibase_infra/protocols/protocol_registry_metrics.py +215 -0
- omnibase_infra/protocols/protocol_snapshot_publisher.py +396 -0
- omnibase_infra/protocols/protocol_snapshot_store.py +567 -0
- omnibase_infra/runtime/__init__.py +296 -0
- omnibase_infra/runtime/binding_config_resolver.py +2706 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/contract_handler_discovery.py +582 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +42 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -0
- omnibase_infra/runtime/enums/__init__.py +18 -0
- omnibase_infra/runtime/enums/enum_config_ref_scheme.py +33 -0
- omnibase_infra/runtime/enums/enum_scheduler_status.py +170 -0
- omnibase_infra/runtime/envelope_validator.py +179 -0
- omnibase_infra/runtime/handler_contract_source.py +669 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2029 -0
- omnibase_infra/runtime/handler_registry.py +321 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +378 -0
- omnibase_infra/runtime/mixins/__init__.py +17 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +757 -0
- omnibase_infra/runtime/models/__init__.py +192 -0
- omnibase_infra/runtime/models/model_batch_lifecycle_result.py +217 -0
- omnibase_infra/runtime/models/model_binding_config.py +168 -0
- omnibase_infra/runtime/models/model_binding_config_cache_stats.py +135 -0
- omnibase_infra/runtime/models/model_binding_config_resolver_config.py +329 -0
- omnibase_infra/runtime/models/model_cached_secret.py +138 -0
- omnibase_infra/runtime/models/model_compute_key.py +138 -0
- omnibase_infra/runtime/models/model_compute_registration.py +97 -0
- omnibase_infra/runtime/models/model_config_cache_entry.py +61 -0
- omnibase_infra/runtime/models/model_config_ref.py +331 -0
- omnibase_infra/runtime/models/model_config_ref_parse_result.py +125 -0
- omnibase_infra/runtime/models/model_domain_plugin_config.py +92 -0
- omnibase_infra/runtime/models/model_domain_plugin_result.py +270 -0
- omnibase_infra/runtime/models/model_duplicate_response.py +54 -0
- omnibase_infra/runtime/models/model_enabled_protocols_config.py +61 -0
- omnibase_infra/runtime/models/model_event_bus_config.py +54 -0
- omnibase_infra/runtime/models/model_failed_component.py +55 -0
- omnibase_infra/runtime/models/model_health_check_response.py +168 -0
- omnibase_infra/runtime/models/model_health_check_result.py +228 -0
- omnibase_infra/runtime/models/model_lifecycle_result.py +245 -0
- omnibase_infra/runtime/models/model_logging_config.py +42 -0
- omnibase_infra/runtime/models/model_optional_correlation_id.py +167 -0
- omnibase_infra/runtime/models/model_optional_string.py +94 -0
- omnibase_infra/runtime/models/model_optional_uuid.py +110 -0
- omnibase_infra/runtime/models/model_policy_context.py +100 -0
- omnibase_infra/runtime/models/model_policy_key.py +138 -0
- omnibase_infra/runtime/models/model_policy_registration.py +139 -0
- omnibase_infra/runtime/models/model_policy_result.py +103 -0
- omnibase_infra/runtime/models/model_policy_type_filter.py +157 -0
- omnibase_infra/runtime/models/model_projector_plugin_loader_config.py +47 -0
- omnibase_infra/runtime/models/model_protocol_registration_config.py +65 -0
- omnibase_infra/runtime/models/model_retry_policy.py +105 -0
- omnibase_infra/runtime/models/model_runtime_config.py +150 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_config.py +624 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_metrics.py +233 -0
- omnibase_infra/runtime/models/model_runtime_tick.py +193 -0
- omnibase_infra/runtime/models/model_secret_cache_stats.py +82 -0
- omnibase_infra/runtime/models/model_secret_mapping.py +63 -0
- omnibase_infra/runtime/models/model_secret_resolver_config.py +107 -0
- omnibase_infra/runtime/models/model_secret_resolver_metrics.py +111 -0
- omnibase_infra/runtime/models/model_secret_source_info.py +72 -0
- omnibase_infra/runtime/models/model_secret_source_spec.py +66 -0
- omnibase_infra/runtime/models/model_shutdown_batch_result.py +75 -0
- omnibase_infra/runtime/models/model_shutdown_config.py +94 -0
- omnibase_infra/runtime/projector_plugin_loader.py +1462 -0
- omnibase_infra/runtime/projector_schema_manager.py +565 -0
- omnibase_infra/runtime/projector_shell.py +1102 -0
- omnibase_infra/runtime/protocol_contract_descriptor.py +92 -0
- omnibase_infra/runtime/protocol_contract_source.py +92 -0
- omnibase_infra/runtime/protocol_domain_plugin.py +474 -0
- omnibase_infra/runtime/protocol_handler_discovery.py +221 -0
- omnibase_infra/runtime/protocol_handler_plugin_loader.py +327 -0
- omnibase_infra/runtime/protocol_lifecycle_executor.py +435 -0
- omnibase_infra/runtime/protocol_policy.py +366 -0
- omnibase_infra/runtime/protocols/__init__.py +27 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -0
- omnibase_infra/runtime/registry/__init__.py +93 -0
- omnibase_infra/runtime/registry/mixin_message_type_query.py +326 -0
- omnibase_infra/runtime/registry/mixin_message_type_registration.py +354 -0
- omnibase_infra/runtime/registry/registry_event_bus_binding.py +268 -0
- omnibase_infra/runtime/registry/registry_message_type.py +542 -0
- omnibase_infra/runtime/registry/registry_protocol_binding.py +444 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1502 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2110 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1573 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +1805 -0
- omnibase_infra/runtime/service_runtime_host_process.py +2260 -0
- omnibase_infra/runtime/util_container_wiring.py +1123 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +566 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/services/__init__.py +68 -0
- omnibase_infra/services/corpus_capture.py +678 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +897 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +682 -0
- omnibase_infra/services/service_timeout_scanner.py +390 -0
- omnibase_infra/services/snapshot/__init__.py +31 -0
- omnibase_infra/services/snapshot/service_snapshot.py +647 -0
- omnibase_infra/services/snapshot/store_inmemory.py +637 -0
- omnibase_infra/services/snapshot/store_postgres.py +1279 -0
- omnibase_infra/shared/__init__.py +8 -0
- omnibase_infra/testing/__init__.py +10 -0
- omnibase_infra/testing/utils.py +23 -0
- omnibase_infra/types/__init__.py +48 -0
- omnibase_infra/types/type_cache_info.py +49 -0
- omnibase_infra/types/type_dsn.py +173 -0
- omnibase_infra/types/type_infra_aliases.py +60 -0
- omnibase_infra/types/typed_dict/__init__.py +21 -0
- omnibase_infra/types/typed_dict/typed_dict_introspection_cache.py +128 -0
- omnibase_infra/types/typed_dict/typed_dict_performance_metrics_cache.py +140 -0
- omnibase_infra/types/typed_dict_capabilities.py +64 -0
- omnibase_infra/utils/__init__.py +89 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_datetime.py +372 -0
- omnibase_infra/utils/util_dsn_validation.py +333 -0
- omnibase_infra/utils/util_env_parsing.py +264 -0
- omnibase_infra/utils/util_error_sanitization.py +457 -0
- omnibase_infra/utils/util_pydantic_validators.py +477 -0
- omnibase_infra/utils/util_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -0
- omnibase_infra/validation/enums/__init__.py +11 -0
- omnibase_infra/validation/enums/enum_contract_violation_severity.py +13 -0
- omnibase_infra/validation/infra_validators.py +1486 -0
- omnibase_infra/validation/linter_contract.py +907 -0
- omnibase_infra/validation/mixin_any_type_classification.py +120 -0
- omnibase_infra/validation/mixin_any_type_exemption.py +580 -0
- omnibase_infra/validation/mixin_any_type_reporting.py +106 -0
- omnibase_infra/validation/mixin_execution_shape_violation_checks.py +596 -0
- omnibase_infra/validation/mixin_node_archetype_detection.py +254 -0
- omnibase_infra/validation/models/__init__.py +15 -0
- omnibase_infra/validation/models/model_contract_lint_result.py +101 -0
- omnibase_infra/validation/models/model_contract_violation.py +41 -0
- omnibase_infra/validation/service_validation_aggregator.py +395 -0
- omnibase_infra/validation/validation_exemptions.yaml +1710 -0
- omnibase_infra/validation/validator_any_type.py +715 -0
- omnibase_infra/validation/validator_chain_propagation.py +839 -0
- omnibase_infra/validation/validator_execution_shape.py +465 -0
- omnibase_infra/validation/validator_localhandler.py +261 -0
- omnibase_infra/validation/validator_registration_security.py +410 -0
- omnibase_infra/validation/validator_routing_coverage.py +1020 -0
- omnibase_infra/validation/validator_runtime_shape.py +915 -0
- omnibase_infra/validation/validator_security.py +410 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.1.dist-info/METADATA +197 -0
- omnibase_infra-0.2.1.dist-info/RECORD +675 -0
- omnibase_infra-0.2.1.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.1.dist-info/entry_points.txt +4 -0
- omnibase_infra-0.2.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""
|
|
4
|
+
Protocol definition for the Message Type Registry.
|
|
5
|
+
|
|
6
|
+
Defines the interface contract for message type registry implementations.
|
|
7
|
+
Enables duck typing and test mocking while ensuring consistent API.
|
|
8
|
+
|
|
9
|
+
Design Principles:
|
|
10
|
+
- Protocol-based interface for flexibility and testability
|
|
11
|
+
- Runtime-checkable for isinstance() validation
|
|
12
|
+
- Comprehensive API covering registration, query, and validation
|
|
13
|
+
- Thread-safety documented in implementation requirements
|
|
14
|
+
|
|
15
|
+
Related:
|
|
16
|
+
- OMN-937: Central Message Type Registry implementation
|
|
17
|
+
- RegistryMessageType: Primary implementation of this protocol
|
|
18
|
+
|
|
19
|
+
.. versionadded:: 0.5.0
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from typing import Protocol, runtime_checkable
|
|
23
|
+
|
|
24
|
+
from omnibase_infra.enums import EnumMessageCategory
|
|
25
|
+
from omnibase_infra.models.registry.model_message_type_entry import (
|
|
26
|
+
ModelMessageTypeEntry,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@runtime_checkable
|
|
31
|
+
class ProtocolMessageTypeRegistry(Protocol):
|
|
32
|
+
"""
|
|
33
|
+
Protocol for message type registry implementations.
|
|
34
|
+
|
|
35
|
+
Defines the interface contract for registries that map message types
|
|
36
|
+
to handler implementations with category and domain constraints.
|
|
37
|
+
|
|
38
|
+
Implementations must follow the freeze-after-init pattern:
|
|
39
|
+
1. Registration phase: All register_* methods available
|
|
40
|
+
2. Freeze: Call freeze() to lock the registry
|
|
41
|
+
3. Query phase: Only lookup methods available
|
|
42
|
+
|
|
43
|
+
Thread Safety Requirements:
|
|
44
|
+
- Registration methods must be thread-safe during registration phase
|
|
45
|
+
- After freeze(), all query methods must be safe for concurrent access
|
|
46
|
+
- Implementations should use appropriate locking strategies
|
|
47
|
+
|
|
48
|
+
Example Implementation:
|
|
49
|
+
.. code-block:: python
|
|
50
|
+
|
|
51
|
+
class MyRegistry:
|
|
52
|
+
'''Custom registry implementation.'''
|
|
53
|
+
|
|
54
|
+
def register_message_type(
|
|
55
|
+
self,
|
|
56
|
+
entry: ModelMessageTypeEntry,
|
|
57
|
+
) -> None:
|
|
58
|
+
...
|
|
59
|
+
|
|
60
|
+
def get_handlers(
|
|
61
|
+
self,
|
|
62
|
+
message_type: str,
|
|
63
|
+
topic_category: EnumMessageCategory,
|
|
64
|
+
topic_domain: str,
|
|
65
|
+
) -> list[str]:
|
|
66
|
+
...
|
|
67
|
+
|
|
68
|
+
# ... implement all protocol methods
|
|
69
|
+
|
|
70
|
+
# Verify protocol compliance
|
|
71
|
+
registry: ProtocolMessageTypeRegistry = MyRegistry()
|
|
72
|
+
|
|
73
|
+
See Also:
|
|
74
|
+
- :class:`RegistryMessageType`: Primary implementation
|
|
75
|
+
|
|
76
|
+
.. versionadded:: 0.5.0
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
# =========================================================================
|
|
80
|
+
# Registration Methods (available before freeze)
|
|
81
|
+
# =========================================================================
|
|
82
|
+
|
|
83
|
+
def register_message_type(
|
|
84
|
+
self,
|
|
85
|
+
entry: ModelMessageTypeEntry,
|
|
86
|
+
) -> None:
|
|
87
|
+
"""
|
|
88
|
+
Register a message type with its handler mappings.
|
|
89
|
+
|
|
90
|
+
Associates a message type with handler(s) and defines constraints
|
|
91
|
+
for valid usage. Supports fan-out by registering multiple handlers
|
|
92
|
+
for the same message type.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
entry: The message type entry containing handler mappings
|
|
96
|
+
and constraints.
|
|
97
|
+
|
|
98
|
+
Raises:
|
|
99
|
+
ModelOnexError: If registry is frozen (INVALID_STATE)
|
|
100
|
+
ModelOnexError: If entry validation fails (VALIDATION_ERROR)
|
|
101
|
+
|
|
102
|
+
Thread Safety:
|
|
103
|
+
Must be thread-safe during registration phase.
|
|
104
|
+
|
|
105
|
+
.. versionadded:: 0.5.0
|
|
106
|
+
"""
|
|
107
|
+
...
|
|
108
|
+
|
|
109
|
+
def freeze(self) -> None:
|
|
110
|
+
"""
|
|
111
|
+
Freeze the registry to prevent further modifications.
|
|
112
|
+
|
|
113
|
+
Once frozen, registration methods will raise ModelOnexError.
|
|
114
|
+
This enables thread-safe concurrent access during query phase.
|
|
115
|
+
|
|
116
|
+
Idempotent: Calling freeze() multiple times has no additional effect.
|
|
117
|
+
|
|
118
|
+
Raises:
|
|
119
|
+
ModelOnexError: If validation fails during freeze (e.g., missing
|
|
120
|
+
handler references)
|
|
121
|
+
|
|
122
|
+
Thread Safety:
|
|
123
|
+
Must be thread-safe.
|
|
124
|
+
|
|
125
|
+
.. versionadded:: 0.5.0
|
|
126
|
+
"""
|
|
127
|
+
...
|
|
128
|
+
|
|
129
|
+
# =========================================================================
|
|
130
|
+
# Query Methods (available after freeze)
|
|
131
|
+
# =========================================================================
|
|
132
|
+
|
|
133
|
+
def get_handlers(
|
|
134
|
+
self,
|
|
135
|
+
message_type: str,
|
|
136
|
+
topic_category: EnumMessageCategory,
|
|
137
|
+
topic_domain: str,
|
|
138
|
+
) -> list[str]:
|
|
139
|
+
"""
|
|
140
|
+
Get handler IDs for a message type with validation.
|
|
141
|
+
|
|
142
|
+
Validates that the message type is allowed in the given category
|
|
143
|
+
and that the topic domain matches domain constraints.
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
message_type: The message type to look up.
|
|
147
|
+
topic_category: The category inferred from the topic.
|
|
148
|
+
topic_domain: The domain extracted from the topic.
|
|
149
|
+
|
|
150
|
+
Returns:
|
|
151
|
+
List of handler IDs that can process this message type.
|
|
152
|
+
Empty list if no handlers registered.
|
|
153
|
+
|
|
154
|
+
Raises:
|
|
155
|
+
ModelOnexError: If registry is not frozen (INVALID_STATE)
|
|
156
|
+
ModelOnexError: If category constraint violated (VALIDATION_ERROR)
|
|
157
|
+
ModelOnexError: If domain constraint violated (VALIDATION_ERROR)
|
|
158
|
+
|
|
159
|
+
Thread Safety:
|
|
160
|
+
Must be safe for concurrent access after freeze().
|
|
161
|
+
|
|
162
|
+
.. versionadded:: 0.5.0
|
|
163
|
+
"""
|
|
164
|
+
...
|
|
165
|
+
|
|
166
|
+
def get_entry(self, message_type: str) -> ModelMessageTypeEntry | None:
|
|
167
|
+
"""
|
|
168
|
+
Get the registry entry for a message type.
|
|
169
|
+
|
|
170
|
+
Args:
|
|
171
|
+
message_type: The message type to look up.
|
|
172
|
+
|
|
173
|
+
Returns:
|
|
174
|
+
The registry entry if found, None otherwise.
|
|
175
|
+
|
|
176
|
+
Raises:
|
|
177
|
+
ModelOnexError: If registry is not frozen (INVALID_STATE)
|
|
178
|
+
|
|
179
|
+
Thread Safety:
|
|
180
|
+
Must be safe for concurrent access after freeze().
|
|
181
|
+
|
|
182
|
+
.. versionadded:: 0.5.0
|
|
183
|
+
"""
|
|
184
|
+
...
|
|
185
|
+
|
|
186
|
+
def has_message_type(self, message_type: str) -> bool:
|
|
187
|
+
"""
|
|
188
|
+
Check if a message type is registered.
|
|
189
|
+
|
|
190
|
+
Args:
|
|
191
|
+
message_type: The message type to check.
|
|
192
|
+
|
|
193
|
+
Returns:
|
|
194
|
+
True if registered, False otherwise.
|
|
195
|
+
|
|
196
|
+
Raises:
|
|
197
|
+
ModelOnexError: If registry is not frozen (INVALID_STATE)
|
|
198
|
+
|
|
199
|
+
Thread Safety:
|
|
200
|
+
Must be safe for concurrent access after freeze().
|
|
201
|
+
|
|
202
|
+
.. versionadded:: 0.5.0
|
|
203
|
+
"""
|
|
204
|
+
...
|
|
205
|
+
|
|
206
|
+
def list_message_types(
|
|
207
|
+
self,
|
|
208
|
+
category: EnumMessageCategory | None = None,
|
|
209
|
+
domain: str | None = None,
|
|
210
|
+
) -> list[str]:
|
|
211
|
+
"""
|
|
212
|
+
List registered message types with optional filtering.
|
|
213
|
+
|
|
214
|
+
Args:
|
|
215
|
+
category: Optional filter by allowed category.
|
|
216
|
+
domain: Optional filter by owning domain.
|
|
217
|
+
|
|
218
|
+
Returns:
|
|
219
|
+
List of message type names matching the filters.
|
|
220
|
+
|
|
221
|
+
Raises:
|
|
222
|
+
ModelOnexError: If registry is not frozen (INVALID_STATE)
|
|
223
|
+
|
|
224
|
+
Thread Safety:
|
|
225
|
+
Must be safe for concurrent access after freeze().
|
|
226
|
+
|
|
227
|
+
.. versionadded:: 0.5.0
|
|
228
|
+
"""
|
|
229
|
+
...
|
|
230
|
+
|
|
231
|
+
def list_domains(self) -> list[str]:
|
|
232
|
+
"""
|
|
233
|
+
List all domains that have registered message types.
|
|
234
|
+
|
|
235
|
+
Returns:
|
|
236
|
+
List of unique domain names, sorted alphabetically.
|
|
237
|
+
|
|
238
|
+
Raises:
|
|
239
|
+
ModelOnexError: If registry is not frozen (INVALID_STATE)
|
|
240
|
+
|
|
241
|
+
Thread Safety:
|
|
242
|
+
Must be safe for concurrent access after freeze().
|
|
243
|
+
|
|
244
|
+
.. versionadded:: 0.5.0
|
|
245
|
+
"""
|
|
246
|
+
...
|
|
247
|
+
|
|
248
|
+
# =========================================================================
|
|
249
|
+
# Validation Methods
|
|
250
|
+
# =========================================================================
|
|
251
|
+
|
|
252
|
+
def validate_startup(self) -> list[str]:
|
|
253
|
+
"""
|
|
254
|
+
Perform startup-time validation and return any errors.
|
|
255
|
+
|
|
256
|
+
Validates registry consistency:
|
|
257
|
+
- All handler references are valid
|
|
258
|
+
- No conflicting category constraints
|
|
259
|
+
- Domain constraints are properly configured
|
|
260
|
+
|
|
261
|
+
This method should be called after freeze() to ensure fail-fast
|
|
262
|
+
behavior before consumers start processing messages.
|
|
263
|
+
|
|
264
|
+
Returns:
|
|
265
|
+
List of validation error messages. Empty list if valid.
|
|
266
|
+
|
|
267
|
+
Raises:
|
|
268
|
+
ModelOnexError: If registry is not frozen (INVALID_STATE)
|
|
269
|
+
|
|
270
|
+
Thread Safety:
|
|
271
|
+
Must be safe for concurrent access after freeze().
|
|
272
|
+
|
|
273
|
+
.. versionadded:: 0.5.0
|
|
274
|
+
"""
|
|
275
|
+
...
|
|
276
|
+
|
|
277
|
+
# =========================================================================
|
|
278
|
+
# Properties
|
|
279
|
+
# =========================================================================
|
|
280
|
+
|
|
281
|
+
@property
|
|
282
|
+
def is_frozen(self) -> bool:
|
|
283
|
+
"""
|
|
284
|
+
Check if the registry is frozen.
|
|
285
|
+
|
|
286
|
+
Returns:
|
|
287
|
+
True if frozen and registration is disabled.
|
|
288
|
+
|
|
289
|
+
.. versionadded:: 0.5.0
|
|
290
|
+
"""
|
|
291
|
+
...
|
|
292
|
+
|
|
293
|
+
@property
|
|
294
|
+
def entry_count(self) -> int:
|
|
295
|
+
"""
|
|
296
|
+
Get the number of registered message type entries.
|
|
297
|
+
|
|
298
|
+
Returns:
|
|
299
|
+
Number of registered message types.
|
|
300
|
+
|
|
301
|
+
.. versionadded:: 0.5.0
|
|
302
|
+
"""
|
|
303
|
+
...
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
__all__ = ["ProtocolMessageTypeRegistry"]
|
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Protocol definition for deterministic compute plugins.
|
|
4
|
+
|
|
5
|
+
This module defines the ProtocolPluginCompute interface for plugins that perform
|
|
6
|
+
pure data transformations without side effects. This protocol is designed for use
|
|
7
|
+
with ONEX Compute nodes that require deterministic, reproducible operations.
|
|
8
|
+
|
|
9
|
+
Protocol Contract:
|
|
10
|
+
Compute plugins MUST guarantee deterministic behavior:
|
|
11
|
+
- Same inputs ALWAYS produce the same outputs
|
|
12
|
+
- No dependency on external state or randomness
|
|
13
|
+
- No side effects (no I/O, no state mutation)
|
|
14
|
+
- No access to current time unless explicitly provided as input
|
|
15
|
+
|
|
16
|
+
What Plugins MUST NOT Do:
|
|
17
|
+
❌ Network operations (HTTP requests, API calls, socket connections)
|
|
18
|
+
❌ Filesystem operations (file read/write, directory access)
|
|
19
|
+
❌ Database operations (queries, transactions, connection pooling)
|
|
20
|
+
❌ Random number generation (unless deterministic with provided seed)
|
|
21
|
+
❌ Current time access (unless time is passed as input parameter)
|
|
22
|
+
❌ Mutable shared state (global variables, class-level state)
|
|
23
|
+
❌ External service calls (Kafka, Redis, Consul, Vault)
|
|
24
|
+
❌ Environment variable access (unless explicitly allowed)
|
|
25
|
+
❌ Process/thread creation or management
|
|
26
|
+
❌ Signal handling or system calls
|
|
27
|
+
|
|
28
|
+
What Plugins CAN Do:
|
|
29
|
+
✅ Pure data transformations (mapping, filtering, aggregation)
|
|
30
|
+
✅ Mathematical computations (arithmetic, statistics, algorithms)
|
|
31
|
+
✅ String processing (parsing, formatting, validation)
|
|
32
|
+
✅ Data structure operations (sorting, searching, grouping)
|
|
33
|
+
✅ Validation and schema checking (Pydantic models, type checking)
|
|
34
|
+
✅ Deterministic hashing (with consistent input ordering)
|
|
35
|
+
✅ Deterministic randomness (with seed from input_data or context)
|
|
36
|
+
|
|
37
|
+
Integration with ONEX Compute Nodes:
|
|
38
|
+
Compute nodes follow the 4-node architecture pattern:
|
|
39
|
+
- EFFECT: External I/O (database, network, filesystem)
|
|
40
|
+
- COMPUTE: Pure transformations (THIS PROTOCOL)
|
|
41
|
+
- REDUCER: State aggregation and consolidation
|
|
42
|
+
- ORCHESTRATOR: Workflow coordination
|
|
43
|
+
|
|
44
|
+
Compute plugins integrate with NodeComputeService to provide deterministic
|
|
45
|
+
processing capabilities. The node is responsible for I/O and state management,
|
|
46
|
+
while plugins focus purely on data transformation logic.
|
|
47
|
+
|
|
48
|
+
Example Usage:
|
|
49
|
+
```python
|
|
50
|
+
from omnibase_infra.protocols import ProtocolPluginCompute
|
|
51
|
+
from typing import Protocol, runtime_checkable
|
|
52
|
+
|
|
53
|
+
@runtime_checkable
|
|
54
|
+
class ProtocolPluginCompute(Protocol):
|
|
55
|
+
def execute(self, input_data: ModelPluginInputData, context: ModelPluginContext) -> ModelPluginOutputData:
|
|
56
|
+
'''Execute deterministic computation.'''
|
|
57
|
+
...
|
|
58
|
+
|
|
59
|
+
# Example plugin implementation
|
|
60
|
+
class JsonSchemaValidator:
|
|
61
|
+
def execute(self, input_data: ModelPluginInputData, context: ModelPluginContext) -> ModelPluginOutputData:
|
|
62
|
+
'''Validate JSON data against schema.'''
|
|
63
|
+
schema = context.get("schema", {})
|
|
64
|
+
data = input_data.get("data", {})
|
|
65
|
+
|
|
66
|
+
# Pure validation logic (no I/O)
|
|
67
|
+
is_valid = self._validate_schema(data, schema)
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
"valid": is_valid,
|
|
71
|
+
"data": data,
|
|
72
|
+
"errors": [] if is_valid else self._get_errors(data, schema),
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
def _validate_schema(self, data: dict[str, object], schema: dict[str, object]) -> bool:
|
|
76
|
+
# Pure computation - deterministic validation
|
|
77
|
+
...
|
|
78
|
+
|
|
79
|
+
def _get_errors(self, data: dict[str, object], schema: dict[str, object]) -> list[dict[str, object]]:
|
|
80
|
+
# Pure computation - deterministic error extraction
|
|
81
|
+
...
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Protocol Verification:
|
|
85
|
+
Per ONEX conventions, protocol compliance is verified via duck typing rather
|
|
86
|
+
than isinstance checks. Verify the required method exists and is callable:
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
plugin = JsonSchemaValidator()
|
|
90
|
+
|
|
91
|
+
# Duck typing verification (preferred)
|
|
92
|
+
assert hasattr(plugin, 'execute') and callable(plugin.execute)
|
|
93
|
+
|
|
94
|
+
# Or use hasattr with getattr for cleaner pattern
|
|
95
|
+
execute_method = getattr(plugin, 'execute', None)
|
|
96
|
+
assert execute_method is not None and callable(execute_method)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
See Also:
|
|
100
|
+
- src/omnibase_infra/plugins/plugin_compute_base.py for base implementation
|
|
101
|
+
- ONEX 4-node architecture documentation
|
|
102
|
+
- OMN-813 for complete compute plugin design
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
from __future__ import annotations
|
|
106
|
+
|
|
107
|
+
from typing import Protocol, runtime_checkable
|
|
108
|
+
|
|
109
|
+
# Import directly from submodules to avoid circular import through plugins/__init__.py
|
|
110
|
+
# (plugins/__init__.py imports plugin_compute_base which imports this module)
|
|
111
|
+
from omnibase_infra.plugins.models.model_plugin_context import ModelPluginContext
|
|
112
|
+
from omnibase_infra.plugins.models.model_plugin_input_data import ModelPluginInputData
|
|
113
|
+
from omnibase_infra.plugins.models.model_plugin_output_data import ModelPluginOutputData
|
|
114
|
+
|
|
115
|
+
__all__ = [
|
|
116
|
+
"ModelPluginContext",
|
|
117
|
+
"ModelPluginInputData",
|
|
118
|
+
"ModelPluginOutputData",
|
|
119
|
+
"ProtocolPluginCompute",
|
|
120
|
+
]
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
@runtime_checkable
|
|
124
|
+
class ProtocolPluginCompute(Protocol):
|
|
125
|
+
"""Protocol for deterministic compute plugins.
|
|
126
|
+
|
|
127
|
+
This protocol defines the interface for plugins that perform pure data
|
|
128
|
+
transformations without side effects. Implementations must guarantee
|
|
129
|
+
deterministic behavior where the same inputs always produce the same outputs.
|
|
130
|
+
|
|
131
|
+
Methods:
|
|
132
|
+
execute: Perform deterministic computation on input data.
|
|
133
|
+
|
|
134
|
+
Thread Safety:
|
|
135
|
+
Plugin implementations should be thread-safe and stateless. All required
|
|
136
|
+
state should be passed through input_data or context parameters.
|
|
137
|
+
|
|
138
|
+
Performance:
|
|
139
|
+
Plugins should be optimized for performance as they may be called
|
|
140
|
+
frequently in high-throughput data processing pipelines.
|
|
141
|
+
|
|
142
|
+
Example:
|
|
143
|
+
```python
|
|
144
|
+
class DataNormalizer:
|
|
145
|
+
def execute(self, input_data: ModelPluginInputData, context: ModelPluginContext) -> ModelPluginOutputData:
|
|
146
|
+
'''Normalize numeric data to [0, 1] range.'''
|
|
147
|
+
values: list[float] = input_data.get("values", [])
|
|
148
|
+
min_val: float = context.get("min_value", 0.0)
|
|
149
|
+
max_val: float = context.get("max_value", 1.0)
|
|
150
|
+
|
|
151
|
+
# Pure computation - deterministic normalization
|
|
152
|
+
normalized: list[float] = [
|
|
153
|
+
(v - min_val) / (max_val - min_val)
|
|
154
|
+
for v in values
|
|
155
|
+
]
|
|
156
|
+
|
|
157
|
+
return {
|
|
158
|
+
"normalized_values": normalized,
|
|
159
|
+
"min": min_val,
|
|
160
|
+
"max": max_val,
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
"""
|
|
164
|
+
|
|
165
|
+
def execute(
|
|
166
|
+
self, input_data: ModelPluginInputData, context: ModelPluginContext
|
|
167
|
+
) -> ModelPluginOutputData:
|
|
168
|
+
"""Execute deterministic computation on input data.
|
|
169
|
+
|
|
170
|
+
This method must be deterministic: given the same input_data and context,
|
|
171
|
+
it must always produce the same output. No side effects are allowed.
|
|
172
|
+
|
|
173
|
+
Args:
|
|
174
|
+
input_data: Input data dictionary containing values to process.
|
|
175
|
+
Structure depends on plugin implementation.
|
|
176
|
+
context: Context dictionary providing configuration and metadata.
|
|
177
|
+
Should contain any external parameters needed for computation.
|
|
178
|
+
|
|
179
|
+
Returns:
|
|
180
|
+
Result dictionary containing computed output values.
|
|
181
|
+
Structure depends on plugin implementation.
|
|
182
|
+
|
|
183
|
+
Raises:
|
|
184
|
+
OnexError: For all computation failures (with proper error chaining).
|
|
185
|
+
Plugin implementations must convert all exceptions to OnexError.
|
|
186
|
+
ValueError: For invalid input_data or context (should be caught and wrapped).
|
|
187
|
+
TypeError: For incorrect input types (should be caught and wrapped).
|
|
188
|
+
|
|
189
|
+
Error Handling:
|
|
190
|
+
All plugin implementations MUST follow ONEX error handling standards:
|
|
191
|
+
|
|
192
|
+
1. **OnexError Chaining**: Convert all exceptions to OnexError with proper chaining
|
|
193
|
+
using `raise OnexError(...) from original_exception`.
|
|
194
|
+
|
|
195
|
+
2. **Correlation ID Propagation**: Always include correlation_id from context
|
|
196
|
+
in error details for distributed tracing.
|
|
197
|
+
|
|
198
|
+
3. **Never Suppress Errors**: All errors must be logged, handled, or escalated.
|
|
199
|
+
Silent failures are strictly prohibited.
|
|
200
|
+
|
|
201
|
+
4. **Context Preservation**: Maintain full error context for debugging.
|
|
202
|
+
|
|
203
|
+
Example - Input Validation Error:
|
|
204
|
+
```python
|
|
205
|
+
def execute(self, input_data: ModelPluginInputData, context: ModelPluginContext) -> ModelPluginOutputData:
|
|
206
|
+
from omnibase_core.errors import OnexError
|
|
207
|
+
from omnibase_core.enums import CoreErrorCode
|
|
208
|
+
|
|
209
|
+
correlation_id = context.get("correlation_id", "unknown")
|
|
210
|
+
|
|
211
|
+
try:
|
|
212
|
+
# Validate required fields
|
|
213
|
+
if "required_field" not in input_data:
|
|
214
|
+
raise ValueError("Missing required field: required_field")
|
|
215
|
+
|
|
216
|
+
# Perform computation
|
|
217
|
+
result = self._compute(input_data)
|
|
218
|
+
return {"result": result}
|
|
219
|
+
|
|
220
|
+
except ValueError as e:
|
|
221
|
+
raise OnexError(
|
|
222
|
+
message=f"Invalid input data: {e}",
|
|
223
|
+
error_code=CoreErrorCode.INVALID_INPUT,
|
|
224
|
+
correlation_id=correlation_id,
|
|
225
|
+
plugin_name=self.__class__.__name__,
|
|
226
|
+
) from e
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Example - Computation Error with Context:
|
|
230
|
+
```python
|
|
231
|
+
def execute(self, input_data: ModelPluginInputData, context: ModelPluginContext) -> ModelPluginOutputData:
|
|
232
|
+
from omnibase_core.errors import OnexError
|
|
233
|
+
from omnibase_core.enums import CoreErrorCode
|
|
234
|
+
|
|
235
|
+
correlation_id = context.get("correlation_id", "unknown")
|
|
236
|
+
|
|
237
|
+
try:
|
|
238
|
+
# Perform complex computation
|
|
239
|
+
values: list[float] = input_data.get("values", [])
|
|
240
|
+
result: float = sum(values) / len(values) # May raise ZeroDivisionError
|
|
241
|
+
|
|
242
|
+
return {
|
|
243
|
+
"average": result,
|
|
244
|
+
"count": len(values),
|
|
245
|
+
"correlation_id": correlation_id,
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
except ZeroDivisionError as e:
|
|
249
|
+
raise OnexError(
|
|
250
|
+
message="Cannot compute average: empty values list",
|
|
251
|
+
error_code=CoreErrorCode.INVALID_INPUT,
|
|
252
|
+
correlation_id=correlation_id,
|
|
253
|
+
plugin_name=self.__class__.__name__,
|
|
254
|
+
input_size=len(input_data.get("values", [])),
|
|
255
|
+
) from e
|
|
256
|
+
|
|
257
|
+
except Exception as e:
|
|
258
|
+
# Catch-all for unexpected errors
|
|
259
|
+
raise OnexError(
|
|
260
|
+
message=f"Computation failed: {e}",
|
|
261
|
+
error_code=CoreErrorCode.INTERNAL_ERROR,
|
|
262
|
+
correlation_id=correlation_id,
|
|
263
|
+
plugin_name=self.__class__.__name__,
|
|
264
|
+
) from e
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Example - Type Validation Error:
|
|
268
|
+
```python
|
|
269
|
+
def execute(self, input_data: ModelPluginInputData, context: ModelPluginContext) -> ModelPluginOutputData:
|
|
270
|
+
from omnibase_core.errors import OnexError
|
|
271
|
+
from omnibase_core.enums import CoreErrorCode
|
|
272
|
+
|
|
273
|
+
correlation_id = context.get("correlation_id", "unknown")
|
|
274
|
+
|
|
275
|
+
try:
|
|
276
|
+
values = input_data.get("values")
|
|
277
|
+
|
|
278
|
+
# Validate type
|
|
279
|
+
if not isinstance(values, list):
|
|
280
|
+
raise TypeError(f"Expected list for 'values', got {type(values).__name__}")
|
|
281
|
+
|
|
282
|
+
# Compute result
|
|
283
|
+
return {"processed": [v * 2 for v in values]}
|
|
284
|
+
|
|
285
|
+
except TypeError as e:
|
|
286
|
+
raise OnexError(
|
|
287
|
+
message=f"Type validation failed: {e}",
|
|
288
|
+
error_code=CoreErrorCode.INVALID_INPUT,
|
|
289
|
+
correlation_id=correlation_id,
|
|
290
|
+
plugin_name=self.__class__.__name__,
|
|
291
|
+
expected_type="list",
|
|
292
|
+
actual_type=type(input_data.get("values")).__name__,
|
|
293
|
+
) from e
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
Error Recovery Patterns:
|
|
297
|
+
Plugins should implement graceful degradation where appropriate:
|
|
298
|
+
|
|
299
|
+
Example - Fallback Values:
|
|
300
|
+
```python
|
|
301
|
+
def execute(self, input_data: ModelPluginInputData, context: ModelPluginContext) -> ModelPluginOutputData:
|
|
302
|
+
from omnibase_core.errors import OnexError
|
|
303
|
+
from omnibase_core.enums import CoreErrorCode
|
|
304
|
+
|
|
305
|
+
correlation_id = context.get("correlation_id", "unknown")
|
|
306
|
+
|
|
307
|
+
try:
|
|
308
|
+
# Attempt primary computation
|
|
309
|
+
result = self._complex_computation(input_data)
|
|
310
|
+
|
|
311
|
+
return {
|
|
312
|
+
"result": result,
|
|
313
|
+
"fallback_used": False,
|
|
314
|
+
"correlation_id": correlation_id,
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
except Exception as e:
|
|
318
|
+
# Try fallback strategy
|
|
319
|
+
try:
|
|
320
|
+
fallback_result = self._simple_fallback(input_data)
|
|
321
|
+
|
|
322
|
+
return {
|
|
323
|
+
"result": fallback_result,
|
|
324
|
+
"fallback_used": True,
|
|
325
|
+
"warning": f"Primary computation failed: {e}",
|
|
326
|
+
"correlation_id": correlation_id,
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
except Exception as fallback_error:
|
|
330
|
+
# Both strategies failed - raise with full context
|
|
331
|
+
raise OnexError(
|
|
332
|
+
message="Both primary and fallback computations failed",
|
|
333
|
+
error_code=CoreErrorCode.INTERNAL_ERROR,
|
|
334
|
+
correlation_id=correlation_id,
|
|
335
|
+
plugin_name=self.__class__.__name__,
|
|
336
|
+
primary_error=str(e),
|
|
337
|
+
fallback_error=str(fallback_error),
|
|
338
|
+
) from fallback_error
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
Notes:
|
|
342
|
+
- Must be deterministic (same inputs → same outputs)
|
|
343
|
+
- Must not perform I/O operations
|
|
344
|
+
- Must not access external state
|
|
345
|
+
- Must not modify input_data or context
|
|
346
|
+
- Should validate inputs before processing
|
|
347
|
+
- Should include relevant metadata in output
|
|
348
|
+
- MUST include correlation_id in all error contexts
|
|
349
|
+
- MUST use proper OnexError chaining for all exceptions
|
|
350
|
+
|
|
351
|
+
Example:
|
|
352
|
+
```python
|
|
353
|
+
# Input
|
|
354
|
+
input_data = {"values": [1, 2, 3, 4, 5]}
|
|
355
|
+
context = {"operation": "sum"}
|
|
356
|
+
|
|
357
|
+
# Execution
|
|
358
|
+
result = plugin.execute(input_data, context)
|
|
359
|
+
|
|
360
|
+
# Output
|
|
361
|
+
{
|
|
362
|
+
"result": 15,
|
|
363
|
+
"operation": "sum",
|
|
364
|
+
"count": 5
|
|
365
|
+
}
|
|
366
|
+
```
|
|
367
|
+
"""
|
|
368
|
+
...
|