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,58 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Pydantic model for plugin input data.
|
|
4
|
+
|
|
5
|
+
This module provides the ModelPluginInputData Pydantic BaseModel that replaces
|
|
6
|
+
the former PluginInputData TypedDict definition.
|
|
7
|
+
|
|
8
|
+
Design Notes:
|
|
9
|
+
- Uses ConfigDict(extra="allow") to support arbitrary fields
|
|
10
|
+
- Supports dict-like access via __getitem__ for flexible API usage
|
|
11
|
+
- Can be instantiated from dicts using model_validate()
|
|
12
|
+
- Follows ONEX naming convention: Model<Name>
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from pydantic import BaseModel, ConfigDict
|
|
18
|
+
|
|
19
|
+
from omnibase_infra.mixins import MixinDictLikeAccessors
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ModelPluginInputData(MixinDictLikeAccessors, BaseModel):
|
|
23
|
+
"""Base Pydantic model for plugin input data.
|
|
24
|
+
|
|
25
|
+
This model replaces PluginInputData TypedDict and allows arbitrary fields
|
|
26
|
+
to support flexible plugin input structures.
|
|
27
|
+
|
|
28
|
+
Attributes:
|
|
29
|
+
All fields are optional. Concrete plugins should document their
|
|
30
|
+
required fields and use validate_input() for runtime validation.
|
|
31
|
+
|
|
32
|
+
Configuration:
|
|
33
|
+
- extra="allow": Accepts arbitrary additional fields
|
|
34
|
+
- frozen=False: Allows mutation (though plugins should not mutate)
|
|
35
|
+
- populate_by_name=True: Allows field access by alias
|
|
36
|
+
|
|
37
|
+
Example:
|
|
38
|
+
```python
|
|
39
|
+
# Create from dict
|
|
40
|
+
input_data = ModelPluginInputData.model_validate({"values": [1, 2, 3]})
|
|
41
|
+
|
|
42
|
+
# Access with get (dict-like)
|
|
43
|
+
values = input_data.get("values", [])
|
|
44
|
+
|
|
45
|
+
# Access as attribute (if field exists)
|
|
46
|
+
values = getattr(input_data, "values", [])
|
|
47
|
+
```
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
model_config = ConfigDict(
|
|
51
|
+
extra="allow",
|
|
52
|
+
frozen=False,
|
|
53
|
+
populate_by_name=True,
|
|
54
|
+
from_attributes=True, # pytest-xdist compatibility
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
__all__: list[str] = ["ModelPluginInputData"]
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Pydantic model for plugin output data.
|
|
4
|
+
|
|
5
|
+
This module provides the ModelPluginOutputData Pydantic BaseModel that replaces
|
|
6
|
+
the former PluginOutputData TypedDict definition.
|
|
7
|
+
|
|
8
|
+
Design Notes:
|
|
9
|
+
- Uses ConfigDict(extra="allow") to support arbitrary fields
|
|
10
|
+
- Supports dict-like access via __getitem__ for flexible API usage
|
|
11
|
+
- Can be instantiated from dicts using model_validate()
|
|
12
|
+
- Follows ONEX naming convention: Model<Name>
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from pydantic import BaseModel, ConfigDict
|
|
18
|
+
|
|
19
|
+
from omnibase_infra.mixins import MixinDictLikeAccessors
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ModelPluginOutputData(MixinDictLikeAccessors, BaseModel):
|
|
23
|
+
"""Base Pydantic model for plugin output data.
|
|
24
|
+
|
|
25
|
+
This model replaces PluginOutputData TypedDict and allows arbitrary
|
|
26
|
+
fields to support flexible plugin output structures.
|
|
27
|
+
|
|
28
|
+
Common Fields:
|
|
29
|
+
result: Primary computation result
|
|
30
|
+
metadata: Output metadata (execution time, version, etc.)
|
|
31
|
+
errors: List of validation or computation errors
|
|
32
|
+
warnings: List of non-fatal warnings
|
|
33
|
+
|
|
34
|
+
Configuration:
|
|
35
|
+
- extra="allow": Accepts arbitrary additional fields
|
|
36
|
+
- frozen=False: Allows mutation
|
|
37
|
+
- populate_by_name=True: Allows field access by alias
|
|
38
|
+
|
|
39
|
+
Example:
|
|
40
|
+
```python
|
|
41
|
+
output = ModelPluginOutputData(
|
|
42
|
+
result={"normalized": [0.1, 0.5, 1.0]},
|
|
43
|
+
metadata={"execution_time_ms": 15},
|
|
44
|
+
errors=[],
|
|
45
|
+
warnings=[],
|
|
46
|
+
)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Note:
|
|
50
|
+
This is a base type hint. Concrete plugins should define their
|
|
51
|
+
own output structure for stronger type safety.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
model_config = ConfigDict(
|
|
55
|
+
extra="allow",
|
|
56
|
+
frozen=False,
|
|
57
|
+
populate_by_name=True,
|
|
58
|
+
from_attributes=True, # pytest-xdist compatibility
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
__all__: list[str] = ["ModelPluginOutputData"]
|
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Base class for deterministic compute plugins.
|
|
4
|
+
|
|
5
|
+
This module provides PluginComputeBase, an abstract base class for implementing
|
|
6
|
+
deterministic compute plugins that integrate with ONEX Compute nodes. It provides
|
|
7
|
+
validation hooks and enforces the deterministic computation contract.
|
|
8
|
+
|
|
9
|
+
Architecture:
|
|
10
|
+
PluginComputeBase implements ProtocolPluginCompute and provides:
|
|
11
|
+
- Abstract execute() method for plugin-specific logic
|
|
12
|
+
- Optional validation hooks for input/output verification
|
|
13
|
+
- Documentation and examples for plugin developers
|
|
14
|
+
- Integration with ONEX 4-node architecture
|
|
15
|
+
|
|
16
|
+
Determinism Guarantees:
|
|
17
|
+
All compute plugins extending this base class MUST guarantee:
|
|
18
|
+
1. Same inputs → Same outputs (reproducibility)
|
|
19
|
+
2. No external state dependencies
|
|
20
|
+
3. No side effects (no I/O, no mutation)
|
|
21
|
+
4. No randomness (unless seeded via input)
|
|
22
|
+
5. No time dependencies (unless time provided as input)
|
|
23
|
+
|
|
24
|
+
What Plugins MUST NOT Do:
|
|
25
|
+
❌ Network operations (HTTP, gRPC, WebSocket)
|
|
26
|
+
❌ Filesystem operations (read, write, delete)
|
|
27
|
+
❌ Database operations (queries, transactions)
|
|
28
|
+
❌ Random number generation (non-deterministic)
|
|
29
|
+
❌ Current time access (non-deterministic)
|
|
30
|
+
❌ Mutable shared state (class variables, globals)
|
|
31
|
+
❌ External service calls (message buses, caches)
|
|
32
|
+
❌ Environment variable access (unless explicitly allowed)
|
|
33
|
+
❌ Process/thread management
|
|
34
|
+
❌ Signal handling or system calls
|
|
35
|
+
|
|
36
|
+
What Plugins CAN Do:
|
|
37
|
+
✅ Pure data transformations
|
|
38
|
+
✅ Mathematical computations
|
|
39
|
+
✅ String processing
|
|
40
|
+
✅ Data structure operations
|
|
41
|
+
✅ Validation and schema checking
|
|
42
|
+
✅ Deterministic hashing
|
|
43
|
+
✅ Deterministic randomness (with seed from input)
|
|
44
|
+
|
|
45
|
+
ONEX 4-Node Architecture Integration:
|
|
46
|
+
Compute plugins belong exclusively to the COMPUTE layer of ONEX architecture.
|
|
47
|
+
This separation ensures clear responsibilities and maintainable code.
|
|
48
|
+
|
|
49
|
+
Architecture Overview:
|
|
50
|
+
- EFFECT (NodeEffectService):
|
|
51
|
+
* External I/O (database, network, filesystem, message bus)
|
|
52
|
+
* Service integrations (Kafka, Consul, Vault, Redis, PostgreSQL)
|
|
53
|
+
* Connection pooling and circuit breaker patterns
|
|
54
|
+
* Examples: postgres_adapter, consul_adapter, kafka_adapter
|
|
55
|
+
|
|
56
|
+
- COMPUTE (NodeComputeService):
|
|
57
|
+
* Pure data transformations (THIS IS WHERE PLUGINS LIVE)
|
|
58
|
+
* Deterministic algorithms and business logic
|
|
59
|
+
* Stateless computation without side effects
|
|
60
|
+
* Examples: data validation, JSON normalization, aggregation
|
|
61
|
+
|
|
62
|
+
- REDUCER (NodeReducerService):
|
|
63
|
+
* State aggregation from multiple sources
|
|
64
|
+
* Event sourcing and state reconstruction
|
|
65
|
+
* Multi-source data consolidation
|
|
66
|
+
* Examples: infrastructure_reducer, state_aggregator
|
|
67
|
+
|
|
68
|
+
- ORCHESTRATOR (NodeOrchestratorService):
|
|
69
|
+
* Workflow coordination across multiple nodes
|
|
70
|
+
* Multi-step process management
|
|
71
|
+
* Service orchestration patterns
|
|
72
|
+
* Examples: infrastructure_orchestrator, workflow_coordinator
|
|
73
|
+
|
|
74
|
+
Why Plugins Belong in COMPUTE:
|
|
75
|
+
1. Determinism: COMPUTE layer requires reproducible outputs
|
|
76
|
+
2. No Side Effects: EFFECT layer handles all I/O operations
|
|
77
|
+
3. Testability: Pure functions are trivially testable
|
|
78
|
+
4. Composability: Plugins combine without coordination complexity
|
|
79
|
+
5. Scalability: Stateless computation enables horizontal scaling
|
|
80
|
+
|
|
81
|
+
Integration with NodeComputeService:
|
|
82
|
+
```python
|
|
83
|
+
from omnibase_infra.plugins import PluginComputeBase
|
|
84
|
+
from omnibase_infra.protocols.protocol_plugin_compute import (
|
|
85
|
+
ModelPluginInputData,
|
|
86
|
+
ModelPluginContext,
|
|
87
|
+
ModelPluginOutputData,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
# Step 1: Implement plugin (pure computation)
|
|
91
|
+
class DataValidatorPlugin(PluginComputeBase):
|
|
92
|
+
def execute(
|
|
93
|
+
self, input_data: ModelPluginInputData, context: ModelPluginContext
|
|
94
|
+
) -> ModelPluginOutputData:
|
|
95
|
+
# Pure validation logic (no I/O)
|
|
96
|
+
is_valid = self._validate_schema(input_data)
|
|
97
|
+
return {
|
|
98
|
+
"valid": is_valid,
|
|
99
|
+
"errors": [] if is_valid else self._get_errors(input_data),
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
def validate_input(self, input_data: ModelPluginInputData) -> None:
|
|
103
|
+
if "schema" not in input_data:
|
|
104
|
+
raise ValueError("schema field required")
|
|
105
|
+
|
|
106
|
+
# Step 2: Integrate with NodeComputeService (I/O wrapper)
|
|
107
|
+
class ValidationNode(NodeComputeService):
|
|
108
|
+
def __init__(self, container: ONEXContainer):
|
|
109
|
+
super().__init__(container)
|
|
110
|
+
self.plugin = container.resolve(ProtocolPluginCompute)
|
|
111
|
+
|
|
112
|
+
async def execute(self, input_model: ModelInput) -> ModelOutput:
|
|
113
|
+
# Node handles I/O and state management
|
|
114
|
+
input_data = input_model.model_dump()
|
|
115
|
+
context = {"correlation_id": input_model.correlation_id}
|
|
116
|
+
|
|
117
|
+
# Plugin performs pure computation
|
|
118
|
+
result = self.plugin.execute(input_data, context)
|
|
119
|
+
|
|
120
|
+
# Node handles output persistence (if needed)
|
|
121
|
+
return ModelOutput(**result)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
When to Use Plugin vs Direct Node Implementation:
|
|
125
|
+
Use PluginComputeBase (COMPUTE layer):
|
|
126
|
+
✅ Pure data transformations (JSON normalization, data validation)
|
|
127
|
+
✅ Deterministic algorithms (sorting, filtering, aggregation)
|
|
128
|
+
✅ Business logic without external dependencies
|
|
129
|
+
✅ Reusable computation across multiple nodes
|
|
130
|
+
✅ Pluggable behavior that may vary by deployment
|
|
131
|
+
|
|
132
|
+
Use Direct Node Implementation:
|
|
133
|
+
❌ EFFECT: Operations requiring I/O or external service calls
|
|
134
|
+
❌ REDUCER: State aggregation requiring multiple data sources
|
|
135
|
+
❌ ORCHESTRATOR: Workflow coordination across multiple nodes
|
|
136
|
+
❌ Complex lifecycle (connection pooling, circuit breakers)
|
|
137
|
+
❌ Infrastructure service integration (Kafka, Consul, Vault)
|
|
138
|
+
|
|
139
|
+
Architectural Benefits:
|
|
140
|
+
- Clear separation of concerns (I/O vs computation)
|
|
141
|
+
- Simplified testing (mock I/O, test computation independently)
|
|
142
|
+
- Enhanced reusability (plugins shared across nodes)
|
|
143
|
+
- Improved scalability (stateless plugins scale horizontally)
|
|
144
|
+
- Better maintainability (computation changes don't affect I/O layer)
|
|
145
|
+
|
|
146
|
+
Thread Safety:
|
|
147
|
+
Plugin implementations should be stateless and thread-safe:
|
|
148
|
+
- No instance variables modified during execute()
|
|
149
|
+
- All state passed through input_data or context
|
|
150
|
+
- Immutable configuration in __init__() is acceptable
|
|
151
|
+
|
|
152
|
+
See Also:
|
|
153
|
+
- src/omnibase_infra/protocols/protocol_plugin_compute.py for protocol definition
|
|
154
|
+
- ONEX 4-node architecture documentation
|
|
155
|
+
- OMN-813 for compute plugin design specification
|
|
156
|
+
"""
|
|
157
|
+
|
|
158
|
+
from __future__ import annotations
|
|
159
|
+
|
|
160
|
+
from abc import ABC, abstractmethod
|
|
161
|
+
|
|
162
|
+
# Import directly from model submodules to avoid circular import
|
|
163
|
+
# (protocol_plugin_compute imports these same models, creating a cycle)
|
|
164
|
+
from omnibase_infra.plugins.models.model_plugin_context import ModelPluginContext
|
|
165
|
+
from omnibase_infra.plugins.models.model_plugin_input_data import ModelPluginInputData
|
|
166
|
+
from omnibase_infra.plugins.models.model_plugin_output_data import ModelPluginOutputData
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
class PluginComputeBase(ABC):
|
|
170
|
+
"""Abstract base class for compute plugins.
|
|
171
|
+
|
|
172
|
+
Provides optional validation hooks and enforces the execute() contract.
|
|
173
|
+
All compute plugins should inherit from this class to ensure consistency.
|
|
174
|
+
|
|
175
|
+
Subclasses must implement execute() to perform deterministic computation.
|
|
176
|
+
|
|
177
|
+
Thread Safety:
|
|
178
|
+
The base class does NOT enforce thread safety. Plugins MUST be designed
|
|
179
|
+
to be stateless or use immutable state only.
|
|
180
|
+
|
|
181
|
+
Safe Patterns:
|
|
182
|
+
- ✅ No instance variables modified during execute()
|
|
183
|
+
- ✅ Configuration set in __init__() and never modified
|
|
184
|
+
- ✅ All state passed through input_data or context
|
|
185
|
+
- ✅ Use function-local variables only
|
|
186
|
+
|
|
187
|
+
Unsafe Patterns:
|
|
188
|
+
- ❌ self.counter += 1
|
|
189
|
+
- ❌ self.results.append(item)
|
|
190
|
+
- ❌ self.cache[key] = value
|
|
191
|
+
|
|
192
|
+
Edge Cases to Handle:
|
|
193
|
+
Plugins extending this base class should handle these scenarios:
|
|
194
|
+
|
|
195
|
+
1. **Empty Inputs**: Handle {} and [] gracefully
|
|
196
|
+
2. **None Values**: Treat None as empty/default or validate and raise error
|
|
197
|
+
3. **Missing Keys**: Use .get() with defaults or validate required fields
|
|
198
|
+
4. **Type Validation**: Check types before processing
|
|
199
|
+
5. **Large Inputs**: Consider memory limits for inputs >10MB
|
|
200
|
+
6. **Deep Nesting**: Limit recursion depth to prevent stack overflow
|
|
201
|
+
7. **Special Float Values**: Handle NaN and Infinity explicitly
|
|
202
|
+
8. **Unicode**: Handle UTF-8 strings and control characters
|
|
203
|
+
9. **Circular References**: Track visited objects in recursive algorithms
|
|
204
|
+
10. **Locale Independence**: Do not rely on system locale
|
|
205
|
+
|
|
206
|
+
Common Pitfalls:
|
|
207
|
+
- Using mutable default arguments: `def foo(x=[])`
|
|
208
|
+
- Assuming dict key ordering (Python <3.7)
|
|
209
|
+
- Not handling division by zero
|
|
210
|
+
- Not validating input types before processing
|
|
211
|
+
- Modifying input_data or context dictionaries
|
|
212
|
+
- Using non-deterministic operations (time.time(), random())
|
|
213
|
+
|
|
214
|
+
Memory Considerations:
|
|
215
|
+
For inputs >10MB:
|
|
216
|
+
- Use streaming/iterators instead of loading all data
|
|
217
|
+
- Release intermediate results promptly
|
|
218
|
+
- Consider using generators for large outputs
|
|
219
|
+
- Monitor memory growth in production
|
|
220
|
+
|
|
221
|
+
Example:
|
|
222
|
+
```python
|
|
223
|
+
from omnibase_infra.protocols.protocol_plugin_compute import (
|
|
224
|
+
ModelPluginInputData,
|
|
225
|
+
ModelPluginContext,
|
|
226
|
+
ModelPluginOutputData,
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
class MyComputePlugin(PluginComputeBase):
|
|
230
|
+
def execute(
|
|
231
|
+
self, input_data: ModelPluginInputData, context: ModelPluginContext
|
|
232
|
+
) -> ModelPluginOutputData:
|
|
233
|
+
# Handle edge cases
|
|
234
|
+
if not input_data:
|
|
235
|
+
return {"result": None, "warning": "Empty input"}
|
|
236
|
+
|
|
237
|
+
# Validate required fields
|
|
238
|
+
if "required_field" not in input_data:
|
|
239
|
+
raise ValueError("Missing required_field")
|
|
240
|
+
|
|
241
|
+
# Validate types
|
|
242
|
+
value = input_data.get("required_field")
|
|
243
|
+
if not isinstance(value, (int, float)):
|
|
244
|
+
raise TypeError(f"Expected numeric value, got {type(value).__name__}")
|
|
245
|
+
|
|
246
|
+
# Deterministic computation
|
|
247
|
+
result = self._process(input_data)
|
|
248
|
+
return {"result": result}
|
|
249
|
+
|
|
250
|
+
def validate_input(self, input_data: ModelPluginInputData) -> None:
|
|
251
|
+
# Optional: Validate required fields upfront
|
|
252
|
+
if "required_field" not in input_data:
|
|
253
|
+
raise ValueError("Missing required_field")
|
|
254
|
+
|
|
255
|
+
# Validate types
|
|
256
|
+
if not isinstance(input_data["required_field"], (int, float)):
|
|
257
|
+
raise TypeError("required_field must be numeric")
|
|
258
|
+
```
|
|
259
|
+
"""
|
|
260
|
+
|
|
261
|
+
__slots__ = () # Enforce statelessness - no instance attributes
|
|
262
|
+
|
|
263
|
+
@abstractmethod
|
|
264
|
+
def execute(
|
|
265
|
+
self, input_data: ModelPluginInputData, context: ModelPluginContext
|
|
266
|
+
) -> ModelPluginOutputData:
|
|
267
|
+
"""Execute computation. MUST be deterministic.
|
|
268
|
+
|
|
269
|
+
Given the same input_data and context, this method MUST return
|
|
270
|
+
the same result every time it is called.
|
|
271
|
+
|
|
272
|
+
Args:
|
|
273
|
+
input_data: The input data to process
|
|
274
|
+
context: Execution context (correlation_id, timestamps, etc.)
|
|
275
|
+
|
|
276
|
+
Returns:
|
|
277
|
+
Computation result as dictionary
|
|
278
|
+
|
|
279
|
+
Raises:
|
|
280
|
+
OnexError: For all computation failures (with proper error chaining)
|
|
281
|
+
ValueError: If input validation fails (should be wrapped in OnexError)
|
|
282
|
+
TypeError: If input types are incorrect (should be wrapped in OnexError)
|
|
283
|
+
|
|
284
|
+
Error Handling Requirements:
|
|
285
|
+
All implementations MUST follow ONEX error handling standards:
|
|
286
|
+
|
|
287
|
+
1. **OnexError Chaining**: Convert all exceptions to OnexError
|
|
288
|
+
```python
|
|
289
|
+
from omnibase_core.errors import OnexError
|
|
290
|
+
from omnibase_core.enums import CoreErrorCode
|
|
291
|
+
|
|
292
|
+
try:
|
|
293
|
+
result = self._compute(input_data)
|
|
294
|
+
except Exception as e:
|
|
295
|
+
raise OnexError(
|
|
296
|
+
message=f"Computation failed: {e}",
|
|
297
|
+
error_code=CoreErrorCode.INTERNAL_ERROR,
|
|
298
|
+
correlation_id=context.get("correlation_id", "unknown"),
|
|
299
|
+
plugin_name=self.__class__.__name__,
|
|
300
|
+
) from e
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
2. **Correlation ID Propagation**: Always extract and propagate correlation_id
|
|
304
|
+
```python
|
|
305
|
+
correlation_id = context.get("correlation_id", "unknown")
|
|
306
|
+
# Include in all OnexError instances and output
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
3. **Never Suppress Errors**: All exceptions must be converted to OnexError
|
|
310
|
+
```python
|
|
311
|
+
# NEVER do this:
|
|
312
|
+
except Exception:
|
|
313
|
+
pass # ❌ Silent failure prohibited
|
|
314
|
+
|
|
315
|
+
# ALWAYS do this:
|
|
316
|
+
except Exception as e:
|
|
317
|
+
raise OnexError(...) from e # ✅ Proper error chaining
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
4. **Context Preservation**: Include debugging context in OnexError
|
|
321
|
+
```python
|
|
322
|
+
raise OnexError(
|
|
323
|
+
message="Validation failed",
|
|
324
|
+
error_code=CoreErrorCode.INVALID_INPUT,
|
|
325
|
+
correlation_id=correlation_id,
|
|
326
|
+
plugin_name=self.__class__.__name__,
|
|
327
|
+
input_keys=list(input_data.keys()), # Additional context
|
|
328
|
+
expected_type="list",
|
|
329
|
+
actual_type=type(value).__name__,
|
|
330
|
+
) from e
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
Common Error Patterns:
|
|
334
|
+
See ProtocolPluginCompute.execute() documentation for detailed examples:
|
|
335
|
+
- Input validation errors (missing fields, invalid types)
|
|
336
|
+
- Computation errors (ZeroDivisionError, overflow, underflow)
|
|
337
|
+
- Type validation errors (expected vs actual types)
|
|
338
|
+
- Fallback strategies with graceful degradation
|
|
339
|
+
|
|
340
|
+
Edge Cases to Handle:
|
|
341
|
+
1. **Empty inputs**: `input_data == {}` or `input_data.get("key") == []`
|
|
342
|
+
2. **None values**: `input_data is None` or `context is None`
|
|
343
|
+
3. **Missing keys**: Use `.get()` with defaults or validate upfront
|
|
344
|
+
4. **Type mismatches**: Validate types before processing
|
|
345
|
+
5. **Division by zero**: Check denominators before division
|
|
346
|
+
6. **NaN/Infinity**: Use `math.isnan()` and `math.isinf()` checks
|
|
347
|
+
7. **Deep nesting**: Limit recursion depth (e.g., max_depth=100)
|
|
348
|
+
8. **Large inputs**: Monitor memory for inputs >10MB
|
|
349
|
+
9. **Unicode strings**: Handle UTF-8 and control characters
|
|
350
|
+
10. **Circular references**: Track visited objects with `set()`
|
|
351
|
+
|
|
352
|
+
What NOT to Do:
|
|
353
|
+
Implementations MUST NOT:
|
|
354
|
+
- ❌ Access network (HTTP, gRPC, WebSocket)
|
|
355
|
+
- ❌ Access file system (read, write, delete)
|
|
356
|
+
- ❌ Query databases (SQL, NoSQL)
|
|
357
|
+
- ❌ Use random numbers (unless seeded from context)
|
|
358
|
+
- ❌ Use current time (unless passed in context)
|
|
359
|
+
- ❌ Maintain mutable state between calls
|
|
360
|
+
- ❌ Modify input_data or context dictionaries
|
|
361
|
+
- ❌ Use global variables or class-level mutable state
|
|
362
|
+
|
|
363
|
+
Example - Handling Edge Cases:
|
|
364
|
+
```python
|
|
365
|
+
from omnibase_infra.protocols.protocol_plugin_compute import (
|
|
366
|
+
ModelPluginInputData,
|
|
367
|
+
ModelPluginContext,
|
|
368
|
+
ModelPluginOutputData,
|
|
369
|
+
)
|
|
370
|
+
|
|
371
|
+
def execute(
|
|
372
|
+
self, input_data: ModelPluginInputData, context: ModelPluginContext
|
|
373
|
+
) -> ModelPluginOutputData:
|
|
374
|
+
# Edge Case 1 & 2: Handle None/empty inputs
|
|
375
|
+
if not input_data:
|
|
376
|
+
return {"result": None, "warning": "Empty input"}
|
|
377
|
+
|
|
378
|
+
# Edge Case 3: Handle missing keys
|
|
379
|
+
values = input_data.get("values", [])
|
|
380
|
+
if not values:
|
|
381
|
+
return {"result": 0, "count": 0}
|
|
382
|
+
|
|
383
|
+
# Edge Case 4: Validate types
|
|
384
|
+
if not all(isinstance(v, (int, float)) for v in values):
|
|
385
|
+
raise TypeError("All values must be numeric")
|
|
386
|
+
|
|
387
|
+
# Edge Case 6: Handle NaN/Infinity
|
|
388
|
+
import math
|
|
389
|
+
clean_values = [v for v in values if not math.isnan(v) and not math.isinf(v)]
|
|
390
|
+
|
|
391
|
+
# Edge Case 5: Division by zero check
|
|
392
|
+
count = len(clean_values)
|
|
393
|
+
if count == 0:
|
|
394
|
+
return {"result": 0, "warning": "All values were NaN/Inf"}
|
|
395
|
+
|
|
396
|
+
# Safe computation
|
|
397
|
+
total = sum(clean_values)
|
|
398
|
+
average = total / count # Safe: count > 0
|
|
399
|
+
|
|
400
|
+
return {
|
|
401
|
+
"result": average,
|
|
402
|
+
"count": count,
|
|
403
|
+
"filtered": len(values) - count,
|
|
404
|
+
}
|
|
405
|
+
```
|
|
406
|
+
"""
|
|
407
|
+
...
|
|
408
|
+
|
|
409
|
+
def validate_input(self, input_data: ModelPluginInputData) -> None:
|
|
410
|
+
"""Optional input validation hook.
|
|
411
|
+
|
|
412
|
+
Override this method to validate input_data before execution.
|
|
413
|
+
This is called automatically by the registry/executor before execute().
|
|
414
|
+
|
|
415
|
+
Args:
|
|
416
|
+
input_data: The input data to validate
|
|
417
|
+
|
|
418
|
+
Raises:
|
|
419
|
+
ValueError: If validation fails
|
|
420
|
+
"""
|
|
421
|
+
return # Default: no validation
|
|
422
|
+
|
|
423
|
+
def validate_output(self, output: ModelPluginOutputData) -> None:
|
|
424
|
+
"""Optional output validation hook.
|
|
425
|
+
|
|
426
|
+
Override this method to validate computation results after execution.
|
|
427
|
+
This is called automatically by the registry/executor after execute().
|
|
428
|
+
|
|
429
|
+
Args:
|
|
430
|
+
output: The output data to validate
|
|
431
|
+
|
|
432
|
+
Raises:
|
|
433
|
+
ValueError: If validation fails
|
|
434
|
+
"""
|
|
435
|
+
return # Default: no validation
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""ONEX Projector Implementations Module.
|
|
4
|
+
|
|
5
|
+
Provides projector implementations for persisting, reading, and publishing
|
|
6
|
+
projections. Projectors are used by the runtime to materialize handler
|
|
7
|
+
outputs to storage (PostgreSQL) and by orchestrators to query current
|
|
8
|
+
entity state.
|
|
9
|
+
|
|
10
|
+
Exports:
|
|
11
|
+
ProjectionReaderRegistration: Registration projection reader implementation
|
|
12
|
+
SnapshotPublisherRegistration: Registration snapshot publisher for Kafka
|
|
13
|
+
|
|
14
|
+
Related Tickets:
|
|
15
|
+
- OMN-947 (F2): Snapshot Publishing
|
|
16
|
+
- OMN-944 (F1): Implement Registration Projection Schema
|
|
17
|
+
- OMN-940 (F0): Define Projector Execution Model
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from omnibase_infra.projectors.projection_reader_registration import (
|
|
21
|
+
ProjectionReaderRegistration,
|
|
22
|
+
)
|
|
23
|
+
from omnibase_infra.projectors.snapshot_publisher_registration import (
|
|
24
|
+
SnapshotPublisherRegistration,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
__all__ = [
|
|
28
|
+
"ProjectionReaderRegistration",
|
|
29
|
+
"SnapshotPublisherRegistration",
|
|
30
|
+
]
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 OmniNode Team <info@omninode.ai>
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
"""
|
|
5
|
+
Projector Contract Definitions.
|
|
6
|
+
|
|
7
|
+
This package contains declarative YAML contracts for projectors in the
|
|
8
|
+
omnibase_infra layer. Each contract defines the complete specification
|
|
9
|
+
for a projector including schema, behavior, and event mappings.
|
|
10
|
+
|
|
11
|
+
Available Contracts:
|
|
12
|
+
- registration_projector.yaml: Registration domain projector contract
|
|
13
|
+
(matches legacy ProjectorRegistration implementation)
|
|
14
|
+
|
|
15
|
+
Contract Structure:
|
|
16
|
+
Contracts follow the ModelProjectorContract schema from omnibase_core
|
|
17
|
+
with optional extensions for partial update definitions.
|
|
18
|
+
|
|
19
|
+
Core fields (validated by ModelProjectorContract):
|
|
20
|
+
- projector_kind: Type of projector (materialized_view)
|
|
21
|
+
- projector_id: Unique identifier
|
|
22
|
+
- name: Human-readable name
|
|
23
|
+
- version: Contract version string
|
|
24
|
+
- aggregate_type: Domain aggregate type
|
|
25
|
+
- consumed_events: List of event names to consume
|
|
26
|
+
- projection_schema: Database schema definition
|
|
27
|
+
- behavior: Projection behavior configuration
|
|
28
|
+
|
|
29
|
+
Extension fields (for runtime implementations):
|
|
30
|
+
- partial_updates: Specialized update operations for subsets of columns
|
|
31
|
+
|
|
32
|
+
Example:
|
|
33
|
+
Load and validate a projector contract::
|
|
34
|
+
|
|
35
|
+
from pathlib import Path
|
|
36
|
+
import yaml
|
|
37
|
+
from omnibase_core.models.projectors import ModelProjectorContract
|
|
38
|
+
|
|
39
|
+
contract_path = Path(__file__).parent / "registration_projector.yaml"
|
|
40
|
+
with open(contract_path) as f:
|
|
41
|
+
data = yaml.safe_load(f)
|
|
42
|
+
|
|
43
|
+
# Core fields validate against ModelProjectorContract
|
|
44
|
+
# partial_updates is an extension handled by runtime
|
|
45
|
+
|
|
46
|
+
Related Tickets:
|
|
47
|
+
- OMN-1170: Create registration_projector.yaml contract
|
|
48
|
+
- OMN-1166: Projector contract models
|
|
49
|
+
|
|
50
|
+
.. versionadded:: 0.5.0
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
from pathlib import Path
|
|
54
|
+
|
|
55
|
+
# Contract file paths for programmatic access
|
|
56
|
+
CONTRACTS_DIR = Path(__file__).parent
|
|
57
|
+
|
|
58
|
+
REGISTRATION_PROJECTOR_CONTRACT = CONTRACTS_DIR / "registration_projector.yaml"
|
|
59
|
+
|
|
60
|
+
__all__ = [
|
|
61
|
+
"CONTRACTS_DIR",
|
|
62
|
+
"REGISTRATION_PROJECTOR_CONTRACT",
|
|
63
|
+
]
|