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,475 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
# ONEX Node Contract - Registration Orchestrator Node
|
|
4
|
+
#
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# SUBCONTRACT ARCHITECTURE NOTE (PR #79 Nitpick)
|
|
7
|
+
# =============================================================================
|
|
8
|
+
# As this contract grows in complexity, consider extracting sections into
|
|
9
|
+
# subcontracts. ONEX supports 6 subcontract types from ModelContract:
|
|
10
|
+
#
|
|
11
|
+
# 1. fsm_subcontract - FSM state machine definitions
|
|
12
|
+
# 2. event_subcontract - Event type definitions and routing
|
|
13
|
+
# 3. aggregation_subcontract - Aggregation/projection rules
|
|
14
|
+
# 4. state_subcontract - State management configuration
|
|
15
|
+
# 5. routing_subcontract - Message routing rules
|
|
16
|
+
# 6. caching_subcontract - Caching strategy definitions
|
|
17
|
+
#
|
|
18
|
+
# Current candidates for extraction:
|
|
19
|
+
# - handler_routing section (246 lines) -> routing_subcontract
|
|
20
|
+
# - consumed_events/published_events -> event_subcontract
|
|
21
|
+
# - coordination_rules -> state_subcontract
|
|
22
|
+
#
|
|
23
|
+
# Extraction pattern:
|
|
24
|
+
# 1. Create subcontracts/ directory
|
|
25
|
+
# 2. Move section to routing_subcontract.yaml
|
|
26
|
+
# 3. Reference: routing_subcontract: !include subcontracts/routing.yaml
|
|
27
|
+
#
|
|
28
|
+
# This keeps the main contract readable while enabling modular evolution.
|
|
29
|
+
# =============================================================================
|
|
30
|
+
#
|
|
31
|
+
contract_version:
|
|
32
|
+
major: 1
|
|
33
|
+
minor: 0
|
|
34
|
+
patch: 0
|
|
35
|
+
node_version: "1.0.0"
|
|
36
|
+
name: "node_registration_orchestrator"
|
|
37
|
+
node_type: "ORCHESTRATOR_GENERIC"
|
|
38
|
+
description: "Registration workflow orchestrator that coordinates node lifecycle by calling reducer for intents and effect for execution."
|
|
39
|
+
input_model:
|
|
40
|
+
name: "ModelOrchestratorInput"
|
|
41
|
+
module: "omnibase_infra.nodes.node_registration_orchestrator.models"
|
|
42
|
+
description: "Input containing introspection event and workflow configuration."
|
|
43
|
+
output_model:
|
|
44
|
+
name: "ModelOrchestratorOutput"
|
|
45
|
+
module: "omnibase_infra.nodes.node_registration_orchestrator.models"
|
|
46
|
+
description: "Output containing dual registration outcome and workflow status."
|
|
47
|
+
# OMN-973: Time injection context for timeout evaluation
|
|
48
|
+
# Implemented in omnibase_infra#66. The DispatchContextEnforcer injects `now`
|
|
49
|
+
# timestamps from RuntimeTick events into orchestrator dispatch context, enabling
|
|
50
|
+
# deterministic timeout evaluation. This contract declares the time injection
|
|
51
|
+
# configuration that the orchestrator uses for workflow step execution.
|
|
52
|
+
time_injection:
|
|
53
|
+
enabled: true
|
|
54
|
+
source: "RuntimeTick"
|
|
55
|
+
field: "now"
|
|
56
|
+
description: "Use injected timestamp from RuntimeTick for timeout evaluation"
|
|
57
|
+
# OMN-930: Projection reader integration for state decisions
|
|
58
|
+
# Implemented in omnibase_spi#44. ProtocolProjectionReader is now defined in
|
|
59
|
+
# omnibase_spi.protocols, enabling dependency injection of projection readers.
|
|
60
|
+
# The orchestrator resolves projection_reader as a dependency, and the
|
|
61
|
+
# "read_projection" workflow step can invoke ProjectionReaderRegistration
|
|
62
|
+
# to query current registration state for decision-making.
|
|
63
|
+
projection_reader:
|
|
64
|
+
protocol: "ProtocolProjectionReader"
|
|
65
|
+
module: "omnibase_spi.protocols"
|
|
66
|
+
projections:
|
|
67
|
+
- name: "node_registration_state"
|
|
68
|
+
description: "Current registration state for all nodes"
|
|
69
|
+
# Workflow Coordination Configuration
|
|
70
|
+
# ====================================
|
|
71
|
+
# Design Decision: Single Source of Truth for Coordination Settings
|
|
72
|
+
#
|
|
73
|
+
# CONSOLIDATION NOTE (PR #57 Review):
|
|
74
|
+
# Previously, coordination settings could appear at two levels:
|
|
75
|
+
# 1. Top-level workflow_coordination (parallel_execution, timeouts, etc.)
|
|
76
|
+
# 2. Nested coordination_rules within workflow_definition
|
|
77
|
+
#
|
|
78
|
+
# This created ambiguity about which settings took precedence. The resolution:
|
|
79
|
+
# ALL coordination settings are now consolidated ONLY within coordination_rules
|
|
80
|
+
# (nested under workflow_definition). This eliminates duplication and ambiguity.
|
|
81
|
+
#
|
|
82
|
+
# Configuration Hierarchy (Single Source of Truth):
|
|
83
|
+
# ┌─────────────────────────────────────────────────────────────────────────┐
|
|
84
|
+
# │ workflow_coordination │
|
|
85
|
+
# │ └── workflow_definition │
|
|
86
|
+
# │ ├── workflow_metadata → Name, version, description │
|
|
87
|
+
# │ ├── execution_graph → DAG of nodes with dependencies │
|
|
88
|
+
# │ └── coordination_rules → ALL coordination settings: │
|
|
89
|
+
# │ ├── execution_mode, parallel_execution_allowed │
|
|
90
|
+
# │ ├── max_parallel_branches │
|
|
91
|
+
# │ ├── failure_recovery_strategy, max_retries │
|
|
92
|
+
# │ ├── timeout_ms │
|
|
93
|
+
# │ ├── checkpoint_enabled, checkpoint_interval_ms │
|
|
94
|
+
# │ ├── state_persistence_enabled │
|
|
95
|
+
# │ └── rollback_enabled │
|
|
96
|
+
# └─────────────────────────────────────────────────────────────────────────┘
|
|
97
|
+
#
|
|
98
|
+
# IMPORTANT: No coordination settings exist at the workflow_coordination level
|
|
99
|
+
# itself. All such settings MUST be placed in coordination_rules to ensure
|
|
100
|
+
# a single authoritative source for all coordination behavior.
|
|
101
|
+
workflow_coordination:
|
|
102
|
+
workflow_definition:
|
|
103
|
+
workflow_metadata:
|
|
104
|
+
workflow_name: "node_registration_workflow"
|
|
105
|
+
workflow_version:
|
|
106
|
+
major: 1
|
|
107
|
+
minor: 0
|
|
108
|
+
patch: 0
|
|
109
|
+
description: "Registers nodes with Consul and PostgreSQL based on introspection events"
|
|
110
|
+
execution_graph:
|
|
111
|
+
nodes:
|
|
112
|
+
- node_id: "receive_introspection"
|
|
113
|
+
node_type: EFFECT_GENERIC
|
|
114
|
+
description: "Receive introspection, tick, or ack events"
|
|
115
|
+
step_config:
|
|
116
|
+
event_pattern: ["node-introspection.*", "registry-request-introspection.*", "runtime-tick.*", "node-registration-acked.*"]
|
|
117
|
+
# OMN-930: Reads current registration state via ProtocolProjectionReader.
|
|
118
|
+
# Uses ProjectionReaderRegistration to query node_registration_state.
|
|
119
|
+
- node_id: "read_projection"
|
|
120
|
+
node_type: EFFECT_GENERIC
|
|
121
|
+
description: "Read current registration state from projection"
|
|
122
|
+
depends_on: ["receive_introspection"]
|
|
123
|
+
step_config:
|
|
124
|
+
protocol: "ProtocolProjectionReader"
|
|
125
|
+
operation: "read_projection"
|
|
126
|
+
projection_name: "node_registration_state"
|
|
127
|
+
# OMN-973: Evaluates timeout using injected `now` from dispatch context.
|
|
128
|
+
# The DispatchContextEnforcer injects time from RuntimeTick events.
|
|
129
|
+
- node_id: "evaluate_timeout"
|
|
130
|
+
node_type: COMPUTE_GENERIC
|
|
131
|
+
description: "Evaluate timeout based on injected now from RuntimeTick"
|
|
132
|
+
depends_on: ["read_projection"]
|
|
133
|
+
step_config:
|
|
134
|
+
time_injection: true
|
|
135
|
+
timeout_evaluation: true
|
|
136
|
+
- node_id: "compute_intents"
|
|
137
|
+
node_type: REDUCER_GENERIC
|
|
138
|
+
description: "Compute registration intents from introspection event"
|
|
139
|
+
depends_on: ["evaluate_timeout"]
|
|
140
|
+
step_config:
|
|
141
|
+
reducer_protocol: "ProtocolReducer"
|
|
142
|
+
output_type: "list[ModelRegistrationIntent]"
|
|
143
|
+
- node_id: "execute_consul_registration"
|
|
144
|
+
node_type: EFFECT_GENERIC
|
|
145
|
+
description: "Execute Consul registration intent"
|
|
146
|
+
depends_on: ["compute_intents"]
|
|
147
|
+
step_config:
|
|
148
|
+
effect_node: "node_registry_effect"
|
|
149
|
+
intent_filter: "consul.*"
|
|
150
|
+
- node_id: "execute_postgres_registration"
|
|
151
|
+
node_type: EFFECT_GENERIC
|
|
152
|
+
description: "Execute PostgreSQL registration intent"
|
|
153
|
+
depends_on: ["compute_intents"]
|
|
154
|
+
step_config:
|
|
155
|
+
effect_node: "node_registry_effect"
|
|
156
|
+
intent_filter: "postgres.*"
|
|
157
|
+
- node_id: "aggregate_results"
|
|
158
|
+
node_type: COMPUTE_GENERIC
|
|
159
|
+
description: "Aggregate registration results"
|
|
160
|
+
depends_on: ["execute_consul_registration", "execute_postgres_registration"]
|
|
161
|
+
step_config:
|
|
162
|
+
aggregation_strategy: "all_or_partial"
|
|
163
|
+
- node_id: "publish_outcome"
|
|
164
|
+
node_type: EFFECT_GENERIC
|
|
165
|
+
description: "Publish registration outcome event"
|
|
166
|
+
depends_on: ["aggregate_results"]
|
|
167
|
+
step_config:
|
|
168
|
+
event_type: "NodeRegistrationResultEvent"
|
|
169
|
+
# ┌─────────────────────────────────────────────────────────────────────────┐
|
|
170
|
+
# │ COORDINATION RULES (Single Source of Truth - See header comments) │
|
|
171
|
+
# ├─────────────────────────────────────────────────────────────────────────┤
|
|
172
|
+
# │ This section contains ALL coordination settings for the workflow. │
|
|
173
|
+
# │ Per PR #57 consolidation, no coordination settings exist elsewhere. │
|
|
174
|
+
# │ Settings are grouped by concern: │
|
|
175
|
+
# │ - Execution mode (parallel vs sequential) │
|
|
176
|
+
# │ - Failure handling and recovery │
|
|
177
|
+
# │ - Timeouts │
|
|
178
|
+
# │ - Checkpointing and state persistence │
|
|
179
|
+
# │ - Rollback configuration │
|
|
180
|
+
# └─────────────────────────────────────────────────────────────────────────┘
|
|
181
|
+
#
|
|
182
|
+
# Parallel Execution Design:
|
|
183
|
+
# The workflow uses parallel mode to execute Consul and Postgres registrations
|
|
184
|
+
# concurrently. Both depend only on compute_intents, so they run in the same
|
|
185
|
+
# wave. Error handling ensures one failure doesn't block the other's cleanup.
|
|
186
|
+
# See: omnibase_core.utils.workflow_executor._execute_parallel for wave-based
|
|
187
|
+
# parallel execution with proper error aggregation.
|
|
188
|
+
coordination_rules:
|
|
189
|
+
# Execution mode configuration
|
|
190
|
+
# PARALLEL: Steps with same dependencies run concurrently (wave-based)
|
|
191
|
+
# - execute_consul_registration and execute_postgres_registration run in parallel
|
|
192
|
+
# - Both depend only on compute_intents, so they form a single wave
|
|
193
|
+
# - Reduces latency for successful registrations
|
|
194
|
+
execution_mode: parallel
|
|
195
|
+
parallel_execution_allowed: true
|
|
196
|
+
max_parallel_branches: 2
|
|
197
|
+
# ┌─────────────────────────────────────────────────────────────────────┐
|
|
198
|
+
# │ WORKFLOW STEP RETRIES (coordination_rules.max_retries) │
|
|
199
|
+
# ├─────────────────────────────────────────────────────────────────────┤
|
|
200
|
+
# │ Purpose: Retry an entire workflow step when it fails. │
|
|
201
|
+
# │ │
|
|
202
|
+
# │ Behavior: If a step (e.g., execute_consul_registration) fails, │
|
|
203
|
+
# │ the orchestrator will retry the ENTIRE step up to max_retries │
|
|
204
|
+
# │ times before marking the workflow as failed. │
|
|
205
|
+
# │ │
|
|
206
|
+
# │ Use Case: Transient failures at the workflow coordination level, │
|
|
207
|
+
# │ such as temporary network partitions or resource contention. │
|
|
208
|
+
# │ │
|
|
209
|
+
# │ DISTINCT FROM: error_handling.retry_policy.max_retries which │
|
|
210
|
+
# │ provides error-specific retries with exponential backoff. │
|
|
211
|
+
# │ │
|
|
212
|
+
# │ Cross-reference: See error_handling.retry_policy section for │
|
|
213
|
+
# │ error-level retry configuration. │
|
|
214
|
+
# └─────────────────────────────────────────────────────────────────────┘
|
|
215
|
+
failure_recovery_strategy: retry
|
|
216
|
+
max_retries: 3 # Workflow step retry count (see box above)
|
|
217
|
+
recovery_enabled: true
|
|
218
|
+
# Timeout configuration
|
|
219
|
+
timeout_ms: 30000
|
|
220
|
+
# Checkpoint and state persistence
|
|
221
|
+
checkpoint_enabled: true
|
|
222
|
+
checkpoint_interval_ms: 5000
|
|
223
|
+
# NOTE: state_persistence_enabled is defined in ModelWorkflowConfig but the
|
|
224
|
+
# workflow execution layer does NOT read or use this flag yet. Kept true for
|
|
225
|
+
# forward compatibility. Actual persistence happens via direct projector calls.
|
|
226
|
+
state_persistence_enabled: true
|
|
227
|
+
# Rollback configuration
|
|
228
|
+
rollback_enabled: true
|
|
229
|
+
consumed_events:
|
|
230
|
+
- topic: "{env}.{namespace}.onex.evt.node-introspection.v1"
|
|
231
|
+
event_type: "NodeIntrospectionEvent"
|
|
232
|
+
- topic: "{env}.{namespace}.onex.evt.registry-request-introspection.v1"
|
|
233
|
+
event_type: "RegistryRequestIntrospectionEvent"
|
|
234
|
+
- topic: "{env}.{namespace}.onex.internal.runtime-tick.v1"
|
|
235
|
+
event_type: "RuntimeTick"
|
|
236
|
+
internal: true
|
|
237
|
+
description: "Internal tick for timeout evaluation"
|
|
238
|
+
- topic: "{env}.{namespace}.onex.cmd.node-registration-acked.v1"
|
|
239
|
+
event_type: "NodeRegistrationAcked"
|
|
240
|
+
message_category: "COMMAND"
|
|
241
|
+
description: "Node acknowledges registration acceptance"
|
|
242
|
+
# OMN-1006: Node heartbeat events for liveness tracking
|
|
243
|
+
# Heartbeats update last_heartbeat_at and extend liveness_deadline in the
|
|
244
|
+
# registration projection. The HandlerNodeHeartbeat processes these events.
|
|
245
|
+
# Note: direct_handler=true indicates this event bypasses the workflow and is
|
|
246
|
+
# handled by a dedicated handler (HandlerNodeHeartbeat) via handle_heartbeat().
|
|
247
|
+
- topic: "{env}.{namespace}.onex.evt.node-heartbeat.v1"
|
|
248
|
+
event_type: "NodeHeartbeatEvent"
|
|
249
|
+
description: "Periodic heartbeat from active nodes for liveness tracking"
|
|
250
|
+
direct_handler: true
|
|
251
|
+
# Handler Routing Configuration
|
|
252
|
+
# ==============================
|
|
253
|
+
# Declarative mapping of consumed events to handler implementations.
|
|
254
|
+
# This section defines the event-to-handler routing that the orchestrator
|
|
255
|
+
# performs at runtime. Each handler is stateless and returns EVENTS only.
|
|
256
|
+
#
|
|
257
|
+
# Handler Pattern (from omnibase_infra/nodes/node_registration_orchestrator/handlers/):
|
|
258
|
+
# async def handle(event, now, correlation_id) -> list[BaseModel]
|
|
259
|
+
#
|
|
260
|
+
# All handlers:
|
|
261
|
+
# - Receive `now` parameter for deterministic time-based decisions
|
|
262
|
+
# - Query projection state via ProjectionReaderRegistration (read-only)
|
|
263
|
+
# - Return a list of event models (never intents or projections)
|
|
264
|
+
# - Are coroutine-safe for concurrent async calls with different event instances
|
|
265
|
+
handler_routing:
|
|
266
|
+
# Handler routing is keyed by the model class name of the event payload.
|
|
267
|
+
# The orchestrator extracts the payload from ModelEventEnvelope and routes
|
|
268
|
+
# based on isinstance() checks in the order specified below.
|
|
269
|
+
routing_strategy: "payload_type_match"
|
|
270
|
+
handlers:
|
|
271
|
+
# ModelNodeIntrospectionEvent -> HandlerNodeIntrospected
|
|
272
|
+
# Canonical registration trigger - node announces itself to the cluster.
|
|
273
|
+
# Queries projection state and emits NodeRegistrationInitiated if:
|
|
274
|
+
# - Node is new (no projection exists)
|
|
275
|
+
# - Node is in retriable state (LIVENESS_EXPIRED, REJECTED, ACK_TIMED_OUT)
|
|
276
|
+
- event_model:
|
|
277
|
+
name: "ModelNodeIntrospectionEvent"
|
|
278
|
+
module: "omnibase_infra.models.registration.model_node_introspection_event"
|
|
279
|
+
handler:
|
|
280
|
+
name: "HandlerNodeIntrospected"
|
|
281
|
+
module: "omnibase_infra.nodes.node_registration_orchestrator.handlers.handler_node_introspected"
|
|
282
|
+
output_events:
|
|
283
|
+
- "ModelNodeRegistrationInitiated"
|
|
284
|
+
state_decision_matrix:
|
|
285
|
+
- current_state: null
|
|
286
|
+
action: "emit_registration_initiated"
|
|
287
|
+
description: "New node - initiate registration"
|
|
288
|
+
- current_state: "LIVENESS_EXPIRED"
|
|
289
|
+
action: "emit_registration_initiated"
|
|
290
|
+
description: "Re-registration after liveness expiry"
|
|
291
|
+
- current_state: "REJECTED"
|
|
292
|
+
action: "emit_registration_initiated"
|
|
293
|
+
description: "Retry after rejection"
|
|
294
|
+
- current_state: "ACK_TIMED_OUT"
|
|
295
|
+
action: "emit_registration_initiated"
|
|
296
|
+
description: "Retry after ack timeout"
|
|
297
|
+
- current_state: "PENDING_REGISTRATION"
|
|
298
|
+
action: "no_op"
|
|
299
|
+
description: "Already processing"
|
|
300
|
+
- current_state: "ACCEPTED"
|
|
301
|
+
action: "no_op"
|
|
302
|
+
description: "Waiting for ack"
|
|
303
|
+
- current_state: "AWAITING_ACK"
|
|
304
|
+
action: "no_op"
|
|
305
|
+
description: "Waiting for ack"
|
|
306
|
+
- current_state: "ACK_RECEIVED"
|
|
307
|
+
action: "no_op"
|
|
308
|
+
description: "Transitioning to active"
|
|
309
|
+
- current_state: "ACTIVE"
|
|
310
|
+
action: "no_op"
|
|
311
|
+
description: "Already active - use heartbeat"
|
|
312
|
+
# ModelRuntimeTick -> HandlerRuntimeTick
|
|
313
|
+
# Periodic timeout detection - evaluates pending registrations for timeouts.
|
|
314
|
+
# Queries all entities in timeout-eligible states and emits:
|
|
315
|
+
# - NodeRegistrationAckTimedOut for expired ack deadlines
|
|
316
|
+
# - NodeLivenessExpired for expired liveness deadlines
|
|
317
|
+
- event_model:
|
|
318
|
+
name: "ModelRuntimeTick"
|
|
319
|
+
module: "omnibase_infra.runtime.models.model_runtime_tick"
|
|
320
|
+
handler:
|
|
321
|
+
name: "HandlerRuntimeTick"
|
|
322
|
+
module: "omnibase_infra.nodes.node_registration_orchestrator.handlers.handler_runtime_tick"
|
|
323
|
+
output_events:
|
|
324
|
+
- "ModelNodeRegistrationAckTimedOut"
|
|
325
|
+
- "ModelNodeLivenessExpired"
|
|
326
|
+
timeout_evaluation:
|
|
327
|
+
uses_injected_now: true
|
|
328
|
+
queries_pending_entities: true
|
|
329
|
+
state_filters:
|
|
330
|
+
- "AWAITING_ACK"
|
|
331
|
+
- "ACTIVE"
|
|
332
|
+
# ModelNodeRegistrationAcked -> HandlerNodeRegistrationAcked
|
|
333
|
+
# Acknowledgment processing - node confirms it received registration acceptance.
|
|
334
|
+
# Validates state transition and emits:
|
|
335
|
+
# - NodeRegistrationAckReceived for successful acknowledgment
|
|
336
|
+
# - NodeBecameActive when transitioning to active state
|
|
337
|
+
- event_model:
|
|
338
|
+
name: "ModelNodeRegistrationAcked"
|
|
339
|
+
module: "omnibase_infra.models.registration.commands.model_node_registration_acked"
|
|
340
|
+
handler:
|
|
341
|
+
name: "HandlerNodeRegistrationAcked"
|
|
342
|
+
module: "omnibase_infra.nodes.node_registration_orchestrator.handlers.handler_node_registration_acked"
|
|
343
|
+
message_category: "COMMAND"
|
|
344
|
+
output_events:
|
|
345
|
+
- "ModelNodeRegistrationAckReceived"
|
|
346
|
+
- "ModelNodeBecameActive"
|
|
347
|
+
state_transition:
|
|
348
|
+
valid_from_states:
|
|
349
|
+
- "AWAITING_ACK"
|
|
350
|
+
target_state: "ACTIVE"
|
|
351
|
+
# ModelNodeHeartbeatEvent -> HandlerNodeHeartbeat
|
|
352
|
+
# Heartbeat processing - updates liveness tracking for active nodes.
|
|
353
|
+
- event_model:
|
|
354
|
+
name: "ModelNodeHeartbeatEvent"
|
|
355
|
+
module: "omnibase_infra.models.registration.model_node_heartbeat_event"
|
|
356
|
+
handler:
|
|
357
|
+
name: "HandlerNodeHeartbeat"
|
|
358
|
+
module: "omnibase_infra.nodes.node_registration_orchestrator.handlers.handler_node_heartbeat"
|
|
359
|
+
output_events: []
|
|
360
|
+
direct_handler: true
|
|
361
|
+
description: "Updates node liveness tracking via heartbeat"
|
|
362
|
+
# Handler initialization configuration
|
|
363
|
+
# All handlers share the same projection reader dependency
|
|
364
|
+
handler_dependencies:
|
|
365
|
+
projection_reader:
|
|
366
|
+
protocol: "ProtocolProjectionReader"
|
|
367
|
+
implementation: "ProjectionReaderRegistration"
|
|
368
|
+
module: "omnibase_infra.projectors.projection_reader_registration"
|
|
369
|
+
shared: true
|
|
370
|
+
description: "Shared projection reader for all handlers"
|
|
371
|
+
published_events:
|
|
372
|
+
- topic: "{env}.{namespace}.onex.evt.node-registration-result.v1"
|
|
373
|
+
event_type: "NodeRegistrationResultEvent"
|
|
374
|
+
- topic: "{env}.{namespace}.onex.evt.node-registration-initiated.v1"
|
|
375
|
+
event_type: "NodeRegistrationInitiated"
|
|
376
|
+
- topic: "{env}.{namespace}.onex.evt.node-registration-accepted.v1"
|
|
377
|
+
event_type: "NodeRegistrationAccepted"
|
|
378
|
+
- topic: "{env}.{namespace}.onex.evt.node-registration-rejected.v1"
|
|
379
|
+
event_type: "NodeRegistrationRejected"
|
|
380
|
+
- topic: "{env}.{namespace}.onex.evt.node-registration-ack-timed-out.v1"
|
|
381
|
+
event_type: "NodeRegistrationAckTimedOut"
|
|
382
|
+
- topic: "{env}.{namespace}.onex.evt.node-registration-ack-received.v1"
|
|
383
|
+
event_type: "NodeRegistrationAckReceived"
|
|
384
|
+
- topic: "{env}.{namespace}.onex.evt.node-became-active.v1"
|
|
385
|
+
event_type: "NodeBecameActive"
|
|
386
|
+
- topic: "{env}.{namespace}.onex.evt.node-liveness-expired.v1"
|
|
387
|
+
event_type: "NodeLivenessExpired"
|
|
388
|
+
intent_consumption:
|
|
389
|
+
subscribed_intents:
|
|
390
|
+
- "consul.register"
|
|
391
|
+
- "consul.deregister"
|
|
392
|
+
- "postgres.upsert_registration"
|
|
393
|
+
intent_routing_table:
|
|
394
|
+
"consul.register": "node_registry_effect"
|
|
395
|
+
"consul.deregister": "node_registry_effect"
|
|
396
|
+
"postgres.upsert_registration": "node_registry_effect"
|
|
397
|
+
dependencies:
|
|
398
|
+
- name: "reducer_protocol"
|
|
399
|
+
type: "protocol"
|
|
400
|
+
description: "Protocol for calling reducer to get intents."
|
|
401
|
+
- name: "effect_node"
|
|
402
|
+
type: "node"
|
|
403
|
+
module: "omnibase_infra.nodes.node_registry_effect"
|
|
404
|
+
description: "Effect node for executing intents."
|
|
405
|
+
# OMN-930: ProtocolProjectionReader is defined in omnibase_spi.protocols.
|
|
406
|
+
- name: "projection_reader"
|
|
407
|
+
type: "protocol"
|
|
408
|
+
module: "omnibase_spi.protocols"
|
|
409
|
+
description: "Protocol for reading projection state."
|
|
410
|
+
# Error Handling Configuration
|
|
411
|
+
# =============================
|
|
412
|
+
# ┌─────────────────────────────────────────────────────────────────────────────┐
|
|
413
|
+
# │ ERROR-LEVEL RETRIES (error_handling.retry_policy.max_retries) │
|
|
414
|
+
# ├─────────────────────────────────────────────────────────────────────────────┤
|
|
415
|
+
# │ Purpose: Retry specific error types with exponential backoff. │
|
|
416
|
+
# │ │
|
|
417
|
+
# │ Behavior: When a specific error type occurs (e.g., ConnectionError), │
|
|
418
|
+
# │ retry the failing operation with exponential backoff delays: │
|
|
419
|
+
# │ - 1st retry: 100ms delay │
|
|
420
|
+
# │ - 2nd retry: 200ms delay │
|
|
421
|
+
# │ - 3rd retry: 400ms delay (capped at max_delay_ms) │
|
|
422
|
+
# │ │
|
|
423
|
+
# │ Use Case: Transient infrastructure errors that may resolve quickly, │
|
|
424
|
+
# │ such as database connection timeouts or temporary service unavailability. │
|
|
425
|
+
# │ │
|
|
426
|
+
# │ DISTINCT FROM: coordination_rules.max_retries which retries entire │
|
|
427
|
+
# │ workflow steps without backoff delays. │
|
|
428
|
+
# │ │
|
|
429
|
+
# │ Interaction: Both retry mechanisms can be active simultaneously: │
|
|
430
|
+
# │ 1. Error-level retry attempts the operation with backoff │
|
|
431
|
+
# │ 2. If all error-level retries fail, the step fails │
|
|
432
|
+
# │ 3. Workflow step retry then retries the entire step │
|
|
433
|
+
# │ │
|
|
434
|
+
# │ Cross-reference: See coordination_rules.max_retries for workflow step │
|
|
435
|
+
# │ retry configuration. │
|
|
436
|
+
# └─────────────────────────────────────────────────────────────────────────────┘
|
|
437
|
+
error_handling:
|
|
438
|
+
retry_policy:
|
|
439
|
+
max_retries: 3 # Error-level retry count (see box above)
|
|
440
|
+
initial_delay_ms: 100
|
|
441
|
+
max_delay_ms: 5000
|
|
442
|
+
exponential_base: 2
|
|
443
|
+
retry_on:
|
|
444
|
+
- "EffectExecutionError"
|
|
445
|
+
- "ConnectionError"
|
|
446
|
+
- "TimeoutError"
|
|
447
|
+
circuit_breaker:
|
|
448
|
+
enabled: true
|
|
449
|
+
failure_threshold: 5
|
|
450
|
+
reset_timeout_ms: 60000
|
|
451
|
+
error_types:
|
|
452
|
+
- name: "ReducerError"
|
|
453
|
+
description: "Error from reducer during intent generation"
|
|
454
|
+
recoverable: true
|
|
455
|
+
retry_strategy: "none"
|
|
456
|
+
- name: "EffectExecutionError"
|
|
457
|
+
description: "Error from effect node during intent execution"
|
|
458
|
+
recoverable: true
|
|
459
|
+
retry_strategy: "exponential_backoff"
|
|
460
|
+
- name: "AggregationError"
|
|
461
|
+
description: "Error during result aggregation"
|
|
462
|
+
recoverable: false
|
|
463
|
+
retry_strategy: "none"
|
|
464
|
+
health_check:
|
|
465
|
+
enabled: true
|
|
466
|
+
endpoint: "/health"
|
|
467
|
+
interval_seconds: 30
|
|
468
|
+
metadata:
|
|
469
|
+
author: "OmniNode Team"
|
|
470
|
+
created: "2025-12-18"
|
|
471
|
+
tags:
|
|
472
|
+
- "orchestrator"
|
|
473
|
+
- "registration"
|
|
474
|
+
- "workflow"
|
|
475
|
+
- "mvp"
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Registration dispatcher adapters for MessageDispatchEngine integration.
|
|
4
|
+
|
|
5
|
+
This module provides ProtocolMessageDispatcher adapters that wrap the
|
|
6
|
+
registration orchestrator handlers for integration with MessageDispatchEngine's
|
|
7
|
+
category-based routing.
|
|
8
|
+
|
|
9
|
+
Available Dispatchers:
|
|
10
|
+
- DispatcherNodeIntrospected: Handles ModelNodeIntrospectionEvent (EVENT)
|
|
11
|
+
- DispatcherRuntimeTick: Handles ModelRuntimeTick (EVENT)
|
|
12
|
+
- DispatcherNodeRegistrationAcked: Handles ModelNodeRegistrationAcked (COMMAND)
|
|
13
|
+
|
|
14
|
+
Usage:
|
|
15
|
+
The dispatchers are typically wired via wire_registration_dispatchers()
|
|
16
|
+
in the domain wiring module (wiring.py), but can also be created directly:
|
|
17
|
+
|
|
18
|
+
>>> from omnibase_infra.nodes.node_registration_orchestrator.dispatchers import (
|
|
19
|
+
... DispatcherNodeIntrospected,
|
|
20
|
+
... )
|
|
21
|
+
>>> dispatcher = DispatcherNodeIntrospected(handler_instance)
|
|
22
|
+
>>> engine.register_dispatcher(dispatcher)
|
|
23
|
+
|
|
24
|
+
Design:
|
|
25
|
+
Each dispatcher:
|
|
26
|
+
- Implements ProtocolMessageDispatcher protocol
|
|
27
|
+
- Wraps a registration handler (HandlerNode*, HandlerRuntimeTick)
|
|
28
|
+
- Handles deserialization from ModelEventEnvelope to typed payload
|
|
29
|
+
- Injects time via dispatch context (ORCHESTRATOR node kind)
|
|
30
|
+
- Returns ModelDispatchResult with structured success/error info
|
|
31
|
+
|
|
32
|
+
Related:
|
|
33
|
+
- OMN-888: Registration Orchestrator
|
|
34
|
+
- OMN-892: 2-way Registration E2E Integration Test
|
|
35
|
+
- OMN-934: Message Dispatch Engine
|
|
36
|
+
- OMN-1346: Registration Code Extraction
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
from omnibase_infra.nodes.node_registration_orchestrator.dispatchers.dispatcher_node_introspected import (
|
|
40
|
+
DispatcherNodeIntrospected,
|
|
41
|
+
)
|
|
42
|
+
from omnibase_infra.nodes.node_registration_orchestrator.dispatchers.dispatcher_node_registration_acked import (
|
|
43
|
+
DispatcherNodeRegistrationAcked,
|
|
44
|
+
)
|
|
45
|
+
from omnibase_infra.nodes.node_registration_orchestrator.dispatchers.dispatcher_runtime_tick import (
|
|
46
|
+
DispatcherRuntimeTick,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
__all__: list[str] = [
|
|
50
|
+
"DispatcherNodeIntrospected",
|
|
51
|
+
"DispatcherNodeRegistrationAcked",
|
|
52
|
+
"DispatcherRuntimeTick",
|
|
53
|
+
]
|