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,358 @@
|
|
|
1
|
+
# Registry Effect Node
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
`NodeRegistryEffect` is an ONEX Effect node responsible for dual-backend node registration. It executes I/O operations against both Consul (service discovery) and PostgreSQL (registration persistence), with support for partial failure handling.
|
|
6
|
+
|
|
7
|
+
> **Important**: Effect nodes are **single-shot operations** - they do NOT implement retries.
|
|
8
|
+
> Retry logic is the exclusive responsibility of the orchestrator layer.
|
|
9
|
+
> See [Retry Strategy: Orchestrator-Owned Retries](../../../../docs/patterns/retry_backoff_compensation_strategy.md#architectural-responsibility-orchestrator-owned-retries) for details.
|
|
10
|
+
|
|
11
|
+
### Architecture
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
+-------------------+
|
|
15
|
+
| RegistryReducer |
|
|
16
|
+
| (emits intents) |
|
|
17
|
+
+---------+---------+
|
|
18
|
+
|
|
|
19
|
+
v
|
|
20
|
+
+-----------------------------+ +-------------------+
|
|
21
|
+
| IdempotencyStore |<--->| NodeRegistryEffect|
|
|
22
|
+
| (tracks completed backends) | +--------+----------+
|
|
23
|
+
+-----------------------------+ |
|
|
24
|
+
+--------+--------+
|
|
25
|
+
| |
|
|
26
|
+
+-----v-----+ +-----v-----+
|
|
27
|
+
| Consul | | PostgreSQL|
|
|
28
|
+
| Client | | Adapter |
|
|
29
|
+
+-----------+ +-----------+
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The Effect node:
|
|
33
|
+
- Receives registration requests from the Reducer
|
|
34
|
+
- Checks idempotency store for already-completed backends
|
|
35
|
+
- Executes I/O operations against external backends
|
|
36
|
+
- Returns structured responses with per-backend results
|
|
37
|
+
- Supports partial failure handling and targeted retries (via idempotency tracking)
|
|
38
|
+
|
|
39
|
+
> **Note**: "Targeted retries" refers to the idempotency store tracking which backends have completed,
|
|
40
|
+
> allowing the orchestrator to retry only failed backends. The effect itself is single-shot - the
|
|
41
|
+
> orchestrator initiates each retry attempt.
|
|
42
|
+
|
|
43
|
+
## Memory Characteristics
|
|
44
|
+
|
|
45
|
+
### Idempotency Store Memory Usage
|
|
46
|
+
|
|
47
|
+
The default `InMemoryEffectIdempotencyStore` uses bounded memory with LRU eviction.
|
|
48
|
+
|
|
49
|
+
| Configuration | Entries | Memory Usage (Estimated) |
|
|
50
|
+
|---------------|---------|--------------------------|
|
|
51
|
+
| Default | 10,000 | ~1 MB |
|
|
52
|
+
| Low memory | 1,000 | ~100 KB |
|
|
53
|
+
| High volume | 100,000 | ~10 MB |
|
|
54
|
+
| Maximum | 1,000,000 | ~100 MB |
|
|
55
|
+
|
|
56
|
+
### Per-Entry Memory Breakdown
|
|
57
|
+
|
|
58
|
+
Each cache entry consists of:
|
|
59
|
+
|
|
60
|
+
| Component | Size | Description |
|
|
61
|
+
|-----------|------|-------------|
|
|
62
|
+
| UUID key (correlation_id) | 16 bytes | Unique operation identifier |
|
|
63
|
+
| Backend set | ~40 bytes | Set of completed backend strings ("consul", "postgres") |
|
|
64
|
+
| Timestamp (created_at) | 8 bytes | Monotonic timestamp for TTL |
|
|
65
|
+
| Timestamp (accessed_at) | 8 bytes | Monotonic timestamp for LRU |
|
|
66
|
+
| Python overhead | ~28 bytes | Object header, slots overhead |
|
|
67
|
+
| **Total** | **~100 bytes** | Per correlation_id entry |
|
|
68
|
+
|
|
69
|
+
### Memory Formula
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
Total Memory = max_cache_size * 100 bytes + OrderedDict overhead (~50KB base)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
For practical planning:
|
|
76
|
+
- **10K entries**: 10,000 * 100B + 50KB = ~1.05 MB
|
|
77
|
+
- **100K entries**: 100,000 * 100B + 50KB = ~10.05 MB
|
|
78
|
+
|
|
79
|
+
## Performance Characteristics
|
|
80
|
+
|
|
81
|
+
### Time Complexity
|
|
82
|
+
|
|
83
|
+
| Operation | Time Complexity | Notes |
|
|
84
|
+
|-----------|-----------------|-------|
|
|
85
|
+
| `mark_completed()` | O(1) amortized | Hash lookup + set add + OrderedDict move_to_end |
|
|
86
|
+
| `is_completed()` | O(1) | Hash lookup + set contains |
|
|
87
|
+
| `get_completed_backends()` | O(k) | Where k = number of backends (typically 2) |
|
|
88
|
+
| `clear()` | O(1) | Hash delete |
|
|
89
|
+
| LRU eviction | O(1) | OrderedDict popitem(last=False) |
|
|
90
|
+
| TTL cleanup | O(n) | Full scan, but runs lazily on interval |
|
|
91
|
+
|
|
92
|
+
### Throughput Benchmarks
|
|
93
|
+
|
|
94
|
+
Based on performance tests (with mock backends):
|
|
95
|
+
|
|
96
|
+
| Scenario | Operations | Duration | Throughput |
|
|
97
|
+
|----------|------------|----------|------------|
|
|
98
|
+
| Sequential writes | 1,000 | < 2s | > 500 ops/sec |
|
|
99
|
+
| Concurrent writes (100 workers) | 100 | < 1s | > 100 ops/sec |
|
|
100
|
+
| Concurrent writes (500 workers) | 500 | < 3s | > 166 ops/sec |
|
|
101
|
+
| Sustained throughput | N/A | 1 second | > 5,000 ops/sec |
|
|
102
|
+
| Concurrent throughput (10 workers) | 10,000 | N/A | > 10,000 ops/sec |
|
|
103
|
+
|
|
104
|
+
### Latency Expectations
|
|
105
|
+
|
|
106
|
+
| Percentile | Target (with mocks) | Notes |
|
|
107
|
+
|------------|---------------------|-------|
|
|
108
|
+
| p50 | < 10ms | Median operation |
|
|
109
|
+
| p95 | < 50ms | 95th percentile |
|
|
110
|
+
| p99 | < 100ms | 99th percentile, outliers |
|
|
111
|
+
|
|
112
|
+
**Note**: Actual latency depends heavily on backend performance (Consul, PostgreSQL network latency). Mock benchmarks isolate store overhead.
|
|
113
|
+
|
|
114
|
+
## Configuration Guide
|
|
115
|
+
|
|
116
|
+
### ModelEffectIdempotencyConfig
|
|
117
|
+
|
|
118
|
+
```python
|
|
119
|
+
from omnibase_infra.nodes.effects.models import ModelEffectIdempotencyConfig
|
|
120
|
+
|
|
121
|
+
config = ModelEffectIdempotencyConfig(
|
|
122
|
+
max_cache_size=10000, # Default: 10,000 entries
|
|
123
|
+
cache_ttl_seconds=3600.0, # Default: 1 hour
|
|
124
|
+
cleanup_interval_seconds=300.0, # Default: 5 minutes
|
|
125
|
+
)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Configuration Parameters
|
|
129
|
+
|
|
130
|
+
| Parameter | Default | Range | Description |
|
|
131
|
+
|-----------|---------|-------|-------------|
|
|
132
|
+
| `max_cache_size` | 10,000 | 1 - 1,000,000 | Maximum entries before LRU eviction |
|
|
133
|
+
| `cache_ttl_seconds` | 3600.0 (1 hour) | 1 - 86,400 | Entry time-to-live |
|
|
134
|
+
| `cleanup_interval_seconds` | 300.0 (5 min) | 1 - 3,600 | Minimum interval between TTL cleanup passes |
|
|
135
|
+
|
|
136
|
+
### Recommended Values by Deployment Size
|
|
137
|
+
|
|
138
|
+
| Deployment | max_cache_size | cache_ttl_seconds | Memory |
|
|
139
|
+
|------------|----------------|-------------------|--------|
|
|
140
|
+
| Development/Testing | 1,000 | 300 (5 min) | ~100 KB |
|
|
141
|
+
| Small (< 100 nodes) | 5,000 | 1,800 (30 min) | ~500 KB |
|
|
142
|
+
| Medium (100-1000 nodes) | 10,000 | 3,600 (1 hour) | ~1 MB |
|
|
143
|
+
| Large (1000+ nodes) | 50,000 | 3,600 (1 hour) | ~5 MB |
|
|
144
|
+
|
|
145
|
+
### Selecting TTL
|
|
146
|
+
|
|
147
|
+
Choose TTL based on:
|
|
148
|
+
1. **Expected retry window**: TTL should exceed the maximum time a registration retry might occur
|
|
149
|
+
2. **Backend failure recovery time**: If backends take 10 minutes to recover, TTL should be > 10 minutes
|
|
150
|
+
3. **Memory constraints**: Shorter TTL = faster eviction = lower memory
|
|
151
|
+
|
|
152
|
+
## Production Considerations
|
|
153
|
+
|
|
154
|
+
### In-Memory Store Limitations
|
|
155
|
+
|
|
156
|
+
The default `InMemoryEffectIdempotencyStore` has critical limitations:
|
|
157
|
+
|
|
158
|
+
| Limitation | Impact | Mitigation |
|
|
159
|
+
|------------|--------|------------|
|
|
160
|
+
| **Not persistent** | Data lost on restart | Use persistent backend in production |
|
|
161
|
+
| **Not distributed** | Multi-instance deployments will have inconsistent state | Use shared backend (Redis, PostgreSQL) |
|
|
162
|
+
| **Single-process only** | Cannot share across processes | Use IPC or shared backend |
|
|
163
|
+
|
|
164
|
+
### Multi-Instance Deployment Warning
|
|
165
|
+
|
|
166
|
+
**The in-memory store does NOT work correctly in multi-instance deployments:**
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
Instance A: mark_completed(uuid1, "consul") -> SUCCESS
|
|
170
|
+
Instance B: is_completed(uuid1, "consul") -> FALSE (!) # Different memory space
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Each instance maintains its own cache, leading to:
|
|
174
|
+
- Duplicate backend calls
|
|
175
|
+
- Inconsistent idempotency behavior
|
|
176
|
+
- Potential data corruption in backends
|
|
177
|
+
|
|
178
|
+
### Recommended Persistent Backends
|
|
179
|
+
|
|
180
|
+
For production distributed deployments, implement `ProtocolEffectIdempotencyStore` with:
|
|
181
|
+
|
|
182
|
+
| Backend | Pros | Cons | Use Case |
|
|
183
|
+
|---------|------|------|----------|
|
|
184
|
+
| **Redis/Valkey** | Fast, native TTL, distributed | Requires infrastructure | High-volume, low-latency |
|
|
185
|
+
| **PostgreSQL** | Durable, existing infrastructure | Higher latency | Consistency-critical |
|
|
186
|
+
| **Consul KV** | Already in stack | Limited querying | Simple deployments |
|
|
187
|
+
|
|
188
|
+
### Implementing a Persistent Store
|
|
189
|
+
|
|
190
|
+
```python
|
|
191
|
+
from omnibase_infra.nodes.effects.protocol_effect_idempotency_store import (
|
|
192
|
+
ProtocolEffectIdempotencyStore,
|
|
193
|
+
)
|
|
194
|
+
from uuid import UUID
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
class RedisEffectIdempotencyStore(ProtocolEffectIdempotencyStore):
|
|
198
|
+
"""Redis-backed idempotency store for production use."""
|
|
199
|
+
|
|
200
|
+
async def mark_completed(self, correlation_id: UUID, backend: str) -> None:
|
|
201
|
+
key = f"idempotency:{correlation_id}"
|
|
202
|
+
await self._redis.sadd(key, backend)
|
|
203
|
+
await self._redis.expire(key, self._ttl_seconds)
|
|
204
|
+
|
|
205
|
+
async def is_completed(self, correlation_id: UUID, backend: str) -> bool:
|
|
206
|
+
key = f"idempotency:{correlation_id}"
|
|
207
|
+
return await self._redis.sismember(key, backend)
|
|
208
|
+
|
|
209
|
+
async def get_completed_backends(self, correlation_id: UUID) -> set[str]:
|
|
210
|
+
key = f"idempotency:{correlation_id}"
|
|
211
|
+
members = await self._redis.smembers(key)
|
|
212
|
+
return {m.decode() for m in members}
|
|
213
|
+
|
|
214
|
+
async def clear(self, correlation_id: UUID) -> None:
|
|
215
|
+
key = f"idempotency:{correlation_id}"
|
|
216
|
+
await self._redis.delete(key)
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Usage Examples
|
|
220
|
+
|
|
221
|
+
### Basic Usage
|
|
222
|
+
|
|
223
|
+
```python
|
|
224
|
+
from unittest.mock import AsyncMock
|
|
225
|
+
|
|
226
|
+
from omnibase_infra.nodes.effects import NodeRegistryEffect
|
|
227
|
+
from omnibase_infra.nodes.effects.models import ModelRegistryRequest
|
|
228
|
+
|
|
229
|
+
# Create mock clients
|
|
230
|
+
consul_client = AsyncMock()
|
|
231
|
+
consul_client.register_service.return_value = {"success": True}
|
|
232
|
+
|
|
233
|
+
postgres_adapter = AsyncMock()
|
|
234
|
+
postgres_adapter.upsert.return_value = {"success": True}
|
|
235
|
+
|
|
236
|
+
# Create effect node with default config
|
|
237
|
+
effect = NodeRegistryEffect(
|
|
238
|
+
consul_client=consul_client,
|
|
239
|
+
postgres_adapter=postgres_adapter,
|
|
240
|
+
)
|
|
241
|
+
|
|
242
|
+
# Execute registration
|
|
243
|
+
request = ModelRegistryRequest(
|
|
244
|
+
node_id="my-node-001",
|
|
245
|
+
node_type="effect",
|
|
246
|
+
node_version="1.0.0",
|
|
247
|
+
correlation_id=uuid4(),
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
response = await effect.register_node(request)
|
|
251
|
+
print(f"Status: {response.status}") # "success" or "partial" or "failure"
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Custom Configuration (Smaller Cache)
|
|
255
|
+
|
|
256
|
+
```python
|
|
257
|
+
from omnibase_infra.nodes.effects.models import ModelEffectIdempotencyConfig
|
|
258
|
+
|
|
259
|
+
# For development/testing - smaller cache, shorter TTL
|
|
260
|
+
config = ModelEffectIdempotencyConfig(
|
|
261
|
+
max_cache_size=1000,
|
|
262
|
+
cache_ttl_seconds=300.0, # 5 minutes
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
effect = NodeRegistryEffect(
|
|
266
|
+
consul_client=consul_client,
|
|
267
|
+
postgres_adapter=postgres_adapter,
|
|
268
|
+
idempotency_config=config,
|
|
269
|
+
)
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
### Production Configuration (Persistent Store)
|
|
273
|
+
|
|
274
|
+
```python
|
|
275
|
+
# Use a persistent store for production
|
|
276
|
+
redis_store = RedisEffectIdempotencyStore(
|
|
277
|
+
redis_client=redis_client,
|
|
278
|
+
ttl_seconds=3600,
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
effect = NodeRegistryEffect(
|
|
282
|
+
consul_client=consul_client,
|
|
283
|
+
postgres_adapter=postgres_adapter,
|
|
284
|
+
idempotency_store=redis_store, # Custom store takes precedence
|
|
285
|
+
)
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Retry After Partial Failure
|
|
289
|
+
|
|
290
|
+
```python
|
|
291
|
+
# First attempt - Consul succeeds, PostgreSQL fails
|
|
292
|
+
response = await effect.register_node(request)
|
|
293
|
+
# response.status == "partial"
|
|
294
|
+
# response.consul.success == True
|
|
295
|
+
# response.postgres.success == False
|
|
296
|
+
|
|
297
|
+
# Retry only PostgreSQL (Consul already completed, stored in idempotency cache)
|
|
298
|
+
response = await effect.register_node(request)
|
|
299
|
+
# response.status == "success"
|
|
300
|
+
# Both backends now completed
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
## Thread Safety
|
|
304
|
+
|
|
305
|
+
### Async Safety Guarantees
|
|
306
|
+
|
|
307
|
+
The `InMemoryEffectIdempotencyStore` provides the following guarantees:
|
|
308
|
+
|
|
309
|
+
1. **All operations are atomic**: Protected by `asyncio.Lock`
|
|
310
|
+
2. **No race conditions**: LRU updates and evictions are synchronized
|
|
311
|
+
3. **Safe for concurrent access**: Multiple coroutines can call store methods safely
|
|
312
|
+
|
|
313
|
+
### Lock Scope
|
|
314
|
+
|
|
315
|
+
```python
|
|
316
|
+
async def mark_completed(self, correlation_id: UUID, backend: str) -> None:
|
|
317
|
+
async with self._lock: # Lock held for entire operation
|
|
318
|
+
await self._maybe_cleanup_expired()
|
|
319
|
+
# ... rest of operation
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Performance Under Contention
|
|
323
|
+
|
|
324
|
+
With 10+ concurrent writers:
|
|
325
|
+
- Lock contention increases latency slightly
|
|
326
|
+
- Throughput remains > 10,000 ops/sec
|
|
327
|
+
- No deadlocks or data corruption
|
|
328
|
+
|
|
329
|
+
## Related Components
|
|
330
|
+
|
|
331
|
+
| Component | Description |
|
|
332
|
+
|-----------|-------------|
|
|
333
|
+
| `ProtocolEffectIdempotencyStore` | Protocol interface for pluggable backends |
|
|
334
|
+
| `ModelEffectIdempotencyConfig` | Configuration model for in-memory store |
|
|
335
|
+
| `ModelRegistryRequest` | Input request model |
|
|
336
|
+
| `ModelRegistryResponse` | Output response model |
|
|
337
|
+
| `ModelBackendResult` | Per-backend result model |
|
|
338
|
+
| `RegistrationReducer` | Emits intents consumed by this Effect |
|
|
339
|
+
|
|
340
|
+
## Related Tickets
|
|
341
|
+
|
|
342
|
+
- **OMN-954**: Registry Effect Node idempotency and retry behavior testing
|
|
343
|
+
- **OMN-944**: Registration projection schema
|
|
344
|
+
|
|
345
|
+
## Testing
|
|
346
|
+
|
|
347
|
+
Run effect tests:
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
# Unit tests
|
|
351
|
+
poetry run pytest tests/unit/registration/effect/ -v
|
|
352
|
+
|
|
353
|
+
# Performance tests
|
|
354
|
+
poetry run pytest tests/performance/registration/effect/ -v -m performance
|
|
355
|
+
|
|
356
|
+
# Skip performance tests in CI
|
|
357
|
+
poetry run pytest tests/ -m "not performance"
|
|
358
|
+
```
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Effect nodes for ONEX infrastructure.
|
|
4
|
+
|
|
5
|
+
This module exports Effect layer nodes responsible for external I/O operations
|
|
6
|
+
such as Consul registration and PostgreSQL persistence.
|
|
7
|
+
|
|
8
|
+
Available:
|
|
9
|
+
- NodeRegistryEffect: Dual-backend registration effect node
|
|
10
|
+
- ModelRegistryResponse: Response model for registry operations
|
|
11
|
+
- ModelBackendResult: Individual backend result model
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from omnibase_infra.nodes.effects.models import (
|
|
15
|
+
ModelBackendResult,
|
|
16
|
+
ModelRegistryRequest,
|
|
17
|
+
ModelRegistryResponse,
|
|
18
|
+
)
|
|
19
|
+
from omnibase_infra.nodes.effects.registry_effect import NodeRegistryEffect
|
|
20
|
+
|
|
21
|
+
__all__ = [
|
|
22
|
+
"ModelBackendResult",
|
|
23
|
+
"ModelRegistryRequest",
|
|
24
|
+
"ModelRegistryResponse",
|
|
25
|
+
"NodeRegistryEffect",
|
|
26
|
+
]
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
#
|
|
4
|
+
# ONEX Node Contract
|
|
5
|
+
# Node: NodeRegistryEffect
|
|
6
|
+
#
|
|
7
|
+
# This contract defines the interface for the Registry Effect node,
|
|
8
|
+
# which handles dual-backend node registration against Consul and PostgreSQL.
|
|
9
|
+
# Contract identifiers
|
|
10
|
+
name: "registry_effect"
|
|
11
|
+
contract_name: "registry_effect"
|
|
12
|
+
node_name: "registry_effect"
|
|
13
|
+
# Version (semantic versioning)
|
|
14
|
+
version:
|
|
15
|
+
major: 1
|
|
16
|
+
minor: 0
|
|
17
|
+
patch: 0
|
|
18
|
+
contract_version:
|
|
19
|
+
major: 1
|
|
20
|
+
minor: 0
|
|
21
|
+
patch: 0
|
|
22
|
+
node_version:
|
|
23
|
+
major: 1
|
|
24
|
+
minor: 0
|
|
25
|
+
patch: 0
|
|
26
|
+
# Node type
|
|
27
|
+
node_type: "EFFECT_GENERIC"
|
|
28
|
+
# Description
|
|
29
|
+
description: >
|
|
30
|
+
Effect node for dual-backend node registration. Executes registration operations against both Consul (service discovery) and PostgreSQL (registration record persistence), with support for partial failure handling and targeted retries.
|
|
31
|
+
|
|
32
|
+
# Strongly typed I/O models
|
|
33
|
+
input_model:
|
|
34
|
+
name: "ModelRegistryRequest"
|
|
35
|
+
module: "omnibase_infra.nodes.effects.models"
|
|
36
|
+
output_model:
|
|
37
|
+
name: "ModelRegistryResponse"
|
|
38
|
+
module: "omnibase_infra.nodes.effects.models"
|
|
39
|
+
# IO operations (EFFECT node specific)
|
|
40
|
+
io_operations:
|
|
41
|
+
- operation: "register_node"
|
|
42
|
+
description: "Register a node with both Consul and PostgreSQL backends"
|
|
43
|
+
input_fields:
|
|
44
|
+
- node_id
|
|
45
|
+
- service_name
|
|
46
|
+
- health_endpoint
|
|
47
|
+
- metadata
|
|
48
|
+
output_fields:
|
|
49
|
+
- consul_registered
|
|
50
|
+
- postgres_registered
|
|
51
|
+
- registration_id
|
|
52
|
+
- operation: "deregister_node"
|
|
53
|
+
description: "Deregister a node from both backends"
|
|
54
|
+
input_fields:
|
|
55
|
+
- node_id
|
|
56
|
+
- service_name
|
|
57
|
+
output_fields:
|
|
58
|
+
- consul_deregistered
|
|
59
|
+
- postgres_deregistered
|
|
60
|
+
- operation: "retry_partial_failure"
|
|
61
|
+
description: "Retry registration for a specific backend after partial failure"
|
|
62
|
+
input_fields:
|
|
63
|
+
- node_id
|
|
64
|
+
- target_backend
|
|
65
|
+
- idempotency_key
|
|
66
|
+
output_fields:
|
|
67
|
+
- success
|
|
68
|
+
- backend_status
|
|
69
|
+
# Dependencies (protocols this node requires)
|
|
70
|
+
dependencies:
|
|
71
|
+
- name: "protocol_consul_client"
|
|
72
|
+
type: "protocol"
|
|
73
|
+
class_name: "ProtocolConsulClient"
|
|
74
|
+
module: "omnibase_spi.protocols.consul"
|
|
75
|
+
description: "Consul service discovery operations"
|
|
76
|
+
- name: "protocol_postgres_adapter"
|
|
77
|
+
type: "protocol"
|
|
78
|
+
class_name: "ProtocolPostgresAdapter"
|
|
79
|
+
module: "omnibase_spi.protocols.postgres"
|
|
80
|
+
description: "PostgreSQL registration persistence"
|
|
81
|
+
- name: "protocol_effect_idempotency_store"
|
|
82
|
+
type: "protocol"
|
|
83
|
+
class_name: "ProtocolEffectIdempotencyStore"
|
|
84
|
+
module: "omnibase_spi.protocols.idempotency"
|
|
85
|
+
description: "Idempotency tracking for retry safety"
|
|
86
|
+
# Capabilities provided by this node
|
|
87
|
+
capabilities:
|
|
88
|
+
- name: "dual_backend_registration"
|
|
89
|
+
description: "Register nodes with both Consul and PostgreSQL simultaneously"
|
|
90
|
+
- name: "partial_failure_handling"
|
|
91
|
+
description: "Handle and recover from partial registration failures"
|
|
92
|
+
- name: "targeted_retry"
|
|
93
|
+
description: "Retry specific backend operations independently"
|
|
94
|
+
- name: "idempotent_operations"
|
|
95
|
+
description: "Ensure operations are idempotent via idempotency store"
|
|
96
|
+
# Model definitions
|
|
97
|
+
definitions:
|
|
98
|
+
ModelRegistryRequest:
|
|
99
|
+
type: object
|
|
100
|
+
description: "Input model for registry effect operations"
|
|
101
|
+
properties:
|
|
102
|
+
operation:
|
|
103
|
+
type: string
|
|
104
|
+
description: "Operation to perform (register_node, deregister_node, retry_partial_failure)"
|
|
105
|
+
node_id:
|
|
106
|
+
type: string
|
|
107
|
+
description: "Unique identifier for the node"
|
|
108
|
+
service_name:
|
|
109
|
+
type: string
|
|
110
|
+
description: "Service name for registration"
|
|
111
|
+
health_endpoint:
|
|
112
|
+
type: string
|
|
113
|
+
description: "Health check endpoint URL"
|
|
114
|
+
metadata:
|
|
115
|
+
type: object
|
|
116
|
+
description: "Additional metadata for registration"
|
|
117
|
+
target_backend:
|
|
118
|
+
type: string
|
|
119
|
+
description: "Target backend for retry operations (consul, postgres)"
|
|
120
|
+
idempotency_key:
|
|
121
|
+
type: string
|
|
122
|
+
description: "Idempotency key for operation deduplication"
|
|
123
|
+
correlation_id:
|
|
124
|
+
type: string
|
|
125
|
+
description: "Request correlation ID for tracing"
|
|
126
|
+
required:
|
|
127
|
+
- operation
|
|
128
|
+
- node_id
|
|
129
|
+
- correlation_id
|
|
130
|
+
ModelRegistryResponse:
|
|
131
|
+
type: object
|
|
132
|
+
description: "Output model for registry effect operations"
|
|
133
|
+
properties:
|
|
134
|
+
success:
|
|
135
|
+
type: boolean
|
|
136
|
+
description: "Whether the operation succeeded"
|
|
137
|
+
consul_registered:
|
|
138
|
+
type: boolean
|
|
139
|
+
description: "Whether Consul registration succeeded"
|
|
140
|
+
postgres_registered:
|
|
141
|
+
type: boolean
|
|
142
|
+
description: "Whether PostgreSQL registration succeeded"
|
|
143
|
+
registration_id:
|
|
144
|
+
type: string
|
|
145
|
+
description: "Registration record ID"
|
|
146
|
+
partial_failure:
|
|
147
|
+
type: boolean
|
|
148
|
+
description: "Whether a partial failure occurred"
|
|
149
|
+
failed_backend:
|
|
150
|
+
type: string
|
|
151
|
+
description: "Which backend failed (if partial failure)"
|
|
152
|
+
error_message:
|
|
153
|
+
type: string
|
|
154
|
+
description: "Error message if operation failed"
|
|
155
|
+
correlation_id:
|
|
156
|
+
type: string
|
|
157
|
+
description: "Request correlation ID for tracing"
|
|
158
|
+
required:
|
|
159
|
+
- success
|
|
160
|
+
- correlation_id
|
|
161
|
+
# Metadata
|
|
162
|
+
metadata:
|
|
163
|
+
author: "OmniNode Team"
|
|
164
|
+
license: "MIT"
|
|
165
|
+
created: "2025-01-01"
|
|
166
|
+
tags:
|
|
167
|
+
- effect
|
|
168
|
+
- registration
|
|
169
|
+
- consul
|
|
170
|
+
- postgresql
|
|
171
|
+
- dual-backend
|
|
172
|
+
- idempotency
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Models for Effect nodes.
|
|
4
|
+
|
|
5
|
+
This module exports models used by Effect layer nodes for external I/O operations.
|
|
6
|
+
|
|
7
|
+
Available Models:
|
|
8
|
+
- ModelBackendResult: Individual backend operation result
|
|
9
|
+
- ModelEffectIdempotencyConfig: Configuration for effect idempotency store
|
|
10
|
+
- ModelRegistryRequest: Registry effect input request
|
|
11
|
+
- ModelRegistryResponse: Dual-backend registry operation response
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from omnibase_infra.nodes.effects.models.model_backend_result import (
|
|
15
|
+
ModelBackendResult,
|
|
16
|
+
)
|
|
17
|
+
from omnibase_infra.nodes.effects.models.model_effect_idempotency_config import (
|
|
18
|
+
ModelEffectIdempotencyConfig,
|
|
19
|
+
)
|
|
20
|
+
from omnibase_infra.nodes.effects.models.model_registry_request import (
|
|
21
|
+
ModelRegistryRequest,
|
|
22
|
+
)
|
|
23
|
+
from omnibase_infra.nodes.effects.models.model_registry_response import (
|
|
24
|
+
ModelRegistryResponse,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
__all__ = [
|
|
28
|
+
"ModelBackendResult",
|
|
29
|
+
"ModelEffectIdempotencyConfig",
|
|
30
|
+
"ModelRegistryRequest",
|
|
31
|
+
"ModelRegistryResponse",
|
|
32
|
+
]
|