omnibase_infra 0.2.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- omnibase_infra/__init__.py +101 -0
- omnibase_infra/adapters/adapter_onex_tool_execution.py +451 -0
- omnibase_infra/capabilities/__init__.py +15 -0
- omnibase_infra/capabilities/capability_inference_rules.py +211 -0
- omnibase_infra/capabilities/contract_capability_extractor.py +221 -0
- omnibase_infra/capabilities/intent_type_extractor.py +160 -0
- omnibase_infra/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/configs/widget_mapping.yaml +176 -0
- omnibase_infra/constants_topic_patterns.py +26 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +264 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +141 -0
- omnibase_infra/decorators/__init__.py +29 -0
- omnibase_infra/decorators/allow_any.py +109 -0
- omnibase_infra/dlq/__init__.py +90 -0
- omnibase_infra/dlq/constants_dlq.py +57 -0
- omnibase_infra/dlq/models/__init__.py +26 -0
- omnibase_infra/dlq/models/enum_replay_status.py +37 -0
- omnibase_infra/dlq/models/model_dlq_replay_record.py +135 -0
- omnibase_infra/dlq/models/model_dlq_tracking_config.py +184 -0
- omnibase_infra/dlq/service_dlq_tracking.py +611 -0
- omnibase_infra/enums/__init__.py +132 -0
- omnibase_infra/enums/enum_any_type_violation.py +104 -0
- omnibase_infra/enums/enum_backend_type.py +27 -0
- omnibase_infra/enums/enum_capture_outcome.py +42 -0
- omnibase_infra/enums/enum_capture_state.py +88 -0
- omnibase_infra/enums/enum_chain_violation_type.py +119 -0
- omnibase_infra/enums/enum_circuit_state.py +51 -0
- omnibase_infra/enums/enum_confirmation_event_type.py +27 -0
- omnibase_infra/enums/enum_consumer_group_purpose.py +92 -0
- omnibase_infra/enums/enum_contract_type.py +84 -0
- omnibase_infra/enums/enum_dedupe_strategy.py +46 -0
- omnibase_infra/enums/enum_dispatch_status.py +191 -0
- omnibase_infra/enums/enum_environment.py +46 -0
- omnibase_infra/enums/enum_execution_shape_violation.py +103 -0
- omnibase_infra/enums/enum_handler_error_type.py +111 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -0
- omnibase_infra/enums/enum_handler_source_mode.py +86 -0
- omnibase_infra/enums/enum_handler_source_type.py +87 -0
- omnibase_infra/enums/enum_handler_type.py +77 -0
- omnibase_infra/enums/enum_handler_type_category.py +61 -0
- omnibase_infra/enums/enum_infra_transport_type.py +73 -0
- omnibase_infra/enums/enum_introspection_reason.py +154 -0
- omnibase_infra/enums/enum_kafka_acks.py +99 -0
- omnibase_infra/enums/enum_message_category.py +213 -0
- omnibase_infra/enums/enum_node_archetype.py +74 -0
- omnibase_infra/enums/enum_node_output_type.py +185 -0
- omnibase_infra/enums/enum_non_retryable_error_category.py +224 -0
- omnibase_infra/enums/enum_policy_type.py +32 -0
- omnibase_infra/enums/enum_registration_state.py +261 -0
- omnibase_infra/enums/enum_registration_status.py +33 -0
- omnibase_infra/enums/enum_registry_response_status.py +28 -0
- omnibase_infra/enums/enum_response_status.py +26 -0
- omnibase_infra/enums/enum_retry_error_category.py +98 -0
- omnibase_infra/enums/enum_security_rule_id.py +103 -0
- omnibase_infra/enums/enum_selection_strategy.py +91 -0
- omnibase_infra/enums/enum_topic_standard.py +42 -0
- omnibase_infra/enums/enum_validation_severity.py +78 -0
- omnibase_infra/errors/__init__.py +160 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_binding_resolution.py +128 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +95 -0
- omnibase_infra/errors/error_consul.py +132 -0
- omnibase_infra/errors/error_container_wiring.py +243 -0
- omnibase_infra/errors/error_event_bus_registry.py +105 -0
- omnibase_infra/errors/error_infra.py +610 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +115 -0
- omnibase_infra/errors/error_vault.py +123 -0
- omnibase_infra/event_bus/__init__.py +72 -0
- omnibase_infra/event_bus/configs/kafka_event_bus_config.yaml +84 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +797 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1716 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +180 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +771 -0
- omnibase_infra/event_bus/models/__init__.py +29 -0
- omnibase_infra/event_bus/models/config/__init__.py +20 -0
- omnibase_infra/event_bus/models/config/model_kafka_event_bus_config.py +693 -0
- omnibase_infra/event_bus/models/model_dlq_event.py +206 -0
- omnibase_infra/event_bus/models/model_dlq_metrics.py +304 -0
- omnibase_infra/event_bus/models/model_event_headers.py +115 -0
- omnibase_infra/event_bus/models/model_event_message.py +60 -0
- omnibase_infra/event_bus/testing/__init__.py +26 -0
- omnibase_infra/event_bus/testing/adapter_protocol_event_publisher_inmemory.py +418 -0
- omnibase_infra/event_bus/testing/model_publisher_metrics.py +64 -0
- omnibase_infra/event_bus/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +82 -0
- omnibase_infra/handlers/filesystem/__init__.py +48 -0
- omnibase_infra/handlers/filesystem/enum_file_system_operation.py +35 -0
- omnibase_infra/handlers/filesystem/model_file_system_request.py +298 -0
- omnibase_infra/handlers/filesystem/model_file_system_result.py +166 -0
- omnibase_infra/handlers/handler_consul.py +795 -0
- omnibase_infra/handlers/handler_db.py +1046 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +2015 -0
- omnibase_infra/handlers/handler_http.py +926 -0
- omnibase_infra/handlers/handler_intent.py +387 -0
- omnibase_infra/handlers/handler_manifest_persistence.contract.yaml +184 -0
- omnibase_infra/handlers/handler_manifest_persistence.py +1539 -0
- omnibase_infra/handlers/handler_mcp.py +1430 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +428 -0
- omnibase_infra/handlers/mcp/__init__.py +19 -0
- omnibase_infra/handlers/mcp/adapter_onex_to_mcp.py +446 -0
- omnibase_infra/handlers/mcp/protocols.py +178 -0
- omnibase_infra/handlers/mcp/transport_streamable_http.py +352 -0
- omnibase_infra/handlers/mixins/__init__.py +47 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +338 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +542 -0
- omnibase_infra/handlers/mixins/mixin_consul_topic_index.py +585 -0
- omnibase_infra/handlers/mixins/mixin_vault_initialization.py +338 -0
- omnibase_infra/handlers/mixins/mixin_vault_retry.py +412 -0
- omnibase_infra/handlers/mixins/mixin_vault_secrets.py +450 -0
- omnibase_infra/handlers/mixins/mixin_vault_token.py +365 -0
- omnibase_infra/handlers/models/__init__.py +286 -0
- omnibase_infra/handlers/models/consul/__init__.py +81 -0
- omnibase_infra/handlers/models/consul/enum_consul_operation_type.py +57 -0
- omnibase_infra/handlers/models/consul/model_consul_deregister_payload.py +51 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_config.py +153 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_payload.py +89 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_found_payload.py +55 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_not_found_payload.py +49 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_recurse_payload.py +50 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_item.py +33 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_put_payload.py +41 -0
- omnibase_infra/handlers/models/consul/model_consul_register_payload.py +53 -0
- omnibase_infra/handlers/models/consul/model_consul_retry_config.py +66 -0
- omnibase_infra/handlers/models/consul/model_payload_consul.py +66 -0
- omnibase_infra/handlers/models/consul/registry_payload_consul.py +214 -0
- omnibase_infra/handlers/models/graph/__init__.py +35 -0
- omnibase_infra/handlers/models/graph/enum_graph_operation_type.py +20 -0
- omnibase_infra/handlers/models/graph/model_graph_execute_payload.py +38 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_config.py +54 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_payload.py +44 -0
- omnibase_infra/handlers/models/graph/model_graph_query_payload.py +40 -0
- omnibase_infra/handlers/models/graph/model_graph_record.py +22 -0
- omnibase_infra/handlers/models/http/__init__.py +50 -0
- omnibase_infra/handlers/models/http/enum_http_operation_type.py +29 -0
- omnibase_infra/handlers/models/http/model_http_body_content.py +45 -0
- omnibase_infra/handlers/models/http/model_http_get_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_http_handler_payload.py +90 -0
- omnibase_infra/handlers/models/http/model_http_post_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_payload_http.py +66 -0
- omnibase_infra/handlers/models/http/registry_payload_http.py +212 -0
- omnibase_infra/handlers/models/mcp/__init__.py +23 -0
- omnibase_infra/handlers/models/mcp/enum_mcp_operation_type.py +24 -0
- omnibase_infra/handlers/models/mcp/model_mcp_handler_config.py +40 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_call.py +32 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_result.py +45 -0
- omnibase_infra/handlers/models/model_consul_handler_response.py +96 -0
- omnibase_infra/handlers/models/model_db_describe_response.py +83 -0
- omnibase_infra/handlers/models/model_db_query_payload.py +95 -0
- omnibase_infra/handlers/models/model_db_query_response.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_config.py +98 -0
- omnibase_infra/handlers/models/model_filesystem_delete_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_delete_result.py +77 -0
- omnibase_infra/handlers/models/model_filesystem_directory_entry.py +75 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_result.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_payload.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_result.py +68 -0
- omnibase_infra/handlers/models/model_filesystem_read_payload.py +62 -0
- omnibase_infra/handlers/models/model_filesystem_read_result.py +61 -0
- omnibase_infra/handlers/models/model_filesystem_write_payload.py +70 -0
- omnibase_infra/handlers/models/model_filesystem_write_result.py +55 -0
- omnibase_infra/handlers/models/model_graph_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_handler_response.py +103 -0
- omnibase_infra/handlers/models/model_http_handler_response.py +101 -0
- omnibase_infra/handlers/models/model_manifest_metadata.py +75 -0
- omnibase_infra/handlers/models/model_manifest_persistence_config.py +62 -0
- omnibase_infra/handlers/models/model_manifest_query_payload.py +90 -0
- omnibase_infra/handlers/models/model_manifest_query_result.py +97 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_payload.py +44 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_result.py +98 -0
- omnibase_infra/handlers/models/model_manifest_store_payload.py +47 -0
- omnibase_infra/handlers/models/model_manifest_store_result.py +67 -0
- omnibase_infra/handlers/models/model_operation_context.py +187 -0
- omnibase_infra/handlers/models/model_qdrant_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_retry_state.py +162 -0
- omnibase_infra/handlers/models/model_vault_handler_response.py +98 -0
- omnibase_infra/handlers/models/qdrant/__init__.py +44 -0
- omnibase_infra/handlers/models/qdrant/enum_qdrant_operation_type.py +26 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_collection_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_delete_payload.py +36 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_config.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_payload.py +54 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_result.py +30 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_upsert_payload.py +36 -0
- omnibase_infra/handlers/models/vault/__init__.py +69 -0
- omnibase_infra/handlers/models/vault/enum_vault_operation_type.py +35 -0
- omnibase_infra/handlers/models/vault/model_payload_vault.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_delete_payload.py +57 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_config.py +148 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_payload.py +101 -0
- omnibase_infra/handlers/models/vault/model_vault_list_payload.py +58 -0
- omnibase_infra/handlers/models/vault/model_vault_renew_token_payload.py +67 -0
- omnibase_infra/handlers/models/vault/model_vault_retry_config.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_secret_payload.py +106 -0
- omnibase_infra/handlers/models/vault/model_vault_write_payload.py +66 -0
- omnibase_infra/handlers/models/vault/registry_payload_vault.py +213 -0
- omnibase_infra/handlers/registration_storage/__init__.py +43 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_mock.py +392 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_postgres.py +922 -0
- omnibase_infra/handlers/registration_storage/models/__init__.py +23 -0
- omnibase_infra/handlers/registration_storage/models/model_delete_registration_request.py +58 -0
- omnibase_infra/handlers/registration_storage/models/model_update_registration_request.py +73 -0
- omnibase_infra/handlers/registration_storage/protocol_registration_persistence.py +191 -0
- omnibase_infra/handlers/service_discovery/__init__.py +43 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_consul.py +1051 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_mock.py +258 -0
- omnibase_infra/handlers/service_discovery/models/__init__.py +22 -0
- omnibase_infra/handlers/service_discovery/models/model_discovery_result.py +64 -0
- omnibase_infra/handlers/service_discovery/models/model_registration_result.py +138 -0
- omnibase_infra/handlers/service_discovery/models/model_service_info.py +109 -0
- omnibase_infra/handlers/service_discovery/protocol_discovery_operations.py +170 -0
- omnibase_infra/idempotency/__init__.py +94 -0
- omnibase_infra/idempotency/models/__init__.py +43 -0
- omnibase_infra/idempotency/models/model_idempotency_check_result.py +85 -0
- omnibase_infra/idempotency/models/model_idempotency_guard_config.py +130 -0
- omnibase_infra/idempotency/models/model_idempotency_record.py +86 -0
- omnibase_infra/idempotency/models/model_idempotency_store_health_check_result.py +81 -0
- omnibase_infra/idempotency/models/model_idempotency_store_metrics.py +140 -0
- omnibase_infra/idempotency/models/model_postgres_idempotency_store_config.py +299 -0
- omnibase_infra/idempotency/protocol_idempotency_store.py +184 -0
- omnibase_infra/idempotency/store_inmemory.py +265 -0
- omnibase_infra/idempotency/store_postgres.py +923 -0
- omnibase_infra/infrastructure/__init__.py +0 -0
- omnibase_infra/migrations/001_create_event_ledger.sql +166 -0
- omnibase_infra/migrations/001_drop_event_ledger.sql +18 -0
- omnibase_infra/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +656 -0
- omnibase_infra/mixins/mixin_dict_like_accessors.py +146 -0
- omnibase_infra/mixins/mixin_envelope_extraction.py +119 -0
- omnibase_infra/mixins/mixin_node_introspection.py +2670 -0
- omnibase_infra/mixins/mixin_retry_execution.py +386 -0
- omnibase_infra/mixins/protocol_circuit_breaker_aware.py +133 -0
- omnibase_infra/models/__init__.py +144 -0
- omnibase_infra/models/bindings/__init__.py +59 -0
- omnibase_infra/models/bindings/constants.py +144 -0
- omnibase_infra/models/bindings/model_binding_resolution_result.py +103 -0
- omnibase_infra/models/bindings/model_operation_binding.py +44 -0
- omnibase_infra/models/bindings/model_operation_bindings_subcontract.py +152 -0
- omnibase_infra/models/bindings/model_parsed_binding.py +52 -0
- omnibase_infra/models/corpus/__init__.py +17 -0
- omnibase_infra/models/corpus/model_capture_config.py +133 -0
- omnibase_infra/models/corpus/model_capture_result.py +86 -0
- omnibase_infra/models/discovery/__init__.py +42 -0
- omnibase_infra/models/discovery/model_dependency_spec.py +319 -0
- omnibase_infra/models/discovery/model_discovered_capabilities.py +50 -0
- omnibase_infra/models/discovery/model_introspection_config.py +330 -0
- omnibase_infra/models/discovery/model_introspection_performance_metrics.py +169 -0
- omnibase_infra/models/discovery/model_introspection_task_config.py +116 -0
- omnibase_infra/models/dispatch/__init__.py +155 -0
- omnibase_infra/models/dispatch/model_debug_trace_snapshot.py +114 -0
- omnibase_infra/models/dispatch/model_dispatch_context.py +439 -0
- omnibase_infra/models/dispatch/model_dispatch_error.py +336 -0
- omnibase_infra/models/dispatch/model_dispatch_log_context.py +400 -0
- omnibase_infra/models/dispatch/model_dispatch_metadata.py +228 -0
- omnibase_infra/models/dispatch/model_dispatch_metrics.py +496 -0
- omnibase_infra/models/dispatch/model_dispatch_outcome.py +317 -0
- omnibase_infra/models/dispatch/model_dispatch_outputs.py +231 -0
- omnibase_infra/models/dispatch/model_dispatch_result.py +436 -0
- omnibase_infra/models/dispatch/model_dispatch_route.py +279 -0
- omnibase_infra/models/dispatch/model_dispatcher_metrics.py +275 -0
- omnibase_infra/models/dispatch/model_dispatcher_registration.py +352 -0
- omnibase_infra/models/dispatch/model_materialized_dispatch.py +141 -0
- omnibase_infra/models/dispatch/model_parsed_topic.py +135 -0
- omnibase_infra/models/dispatch/model_topic_parser.py +725 -0
- omnibase_infra/models/dispatch/model_tracing_context.py +285 -0
- omnibase_infra/models/errors/__init__.py +45 -0
- omnibase_infra/models/errors/model_handler_validation_error.py +594 -0
- omnibase_infra/models/errors/model_infra_error_context.py +99 -0
- omnibase_infra/models/errors/model_message_type_registry_error_context.py +71 -0
- omnibase_infra/models/errors/model_timeout_error_context.py +110 -0
- omnibase_infra/models/handlers/__init__.py +80 -0
- omnibase_infra/models/handlers/model_bootstrap_handler_descriptor.py +162 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +82 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +200 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -0
- omnibase_infra/models/handlers/model_handler_source_config.py +220 -0
- omnibase_infra/models/health/__init__.py +9 -0
- omnibase_infra/models/health/model_health_check_result.py +40 -0
- omnibase_infra/models/lifecycle/__init__.py +39 -0
- omnibase_infra/models/logging/__init__.py +51 -0
- omnibase_infra/models/logging/model_log_context.py +756 -0
- omnibase_infra/models/mcp/__init__.py +15 -0
- omnibase_infra/models/mcp/model_mcp_contract_config.py +80 -0
- omnibase_infra/models/mcp/model_mcp_server_config.py +67 -0
- omnibase_infra/models/mcp/model_mcp_tool_definition.py +73 -0
- omnibase_infra/models/mcp/model_mcp_tool_parameter.py +35 -0
- omnibase_infra/models/model_node_identity.py +126 -0
- omnibase_infra/models/model_retry_error_classification.py +78 -0
- omnibase_infra/models/projection/__init__.py +43 -0
- omnibase_infra/models/projection/model_capability_fields.py +112 -0
- omnibase_infra/models/projection/model_registration_projection.py +434 -0
- omnibase_infra/models/projection/model_registration_snapshot.py +322 -0
- omnibase_infra/models/projection/model_sequence_info.py +182 -0
- omnibase_infra/models/projection/model_snapshot_topic_config.py +591 -0
- omnibase_infra/models/projectors/__init__.py +41 -0
- omnibase_infra/models/projectors/model_projector_column.py +289 -0
- omnibase_infra/models/projectors/model_projector_discovery_result.py +65 -0
- omnibase_infra/models/projectors/model_projector_index.py +270 -0
- omnibase_infra/models/projectors/model_projector_schema.py +415 -0
- omnibase_infra/models/projectors/model_projector_validation_error.py +63 -0
- omnibase_infra/models/projectors/util_sql_identifiers.py +115 -0
- omnibase_infra/models/registration/__init__.py +68 -0
- omnibase_infra/models/registration/commands/__init__.py +15 -0
- omnibase_infra/models/registration/commands/model_node_registration_acked.py +108 -0
- omnibase_infra/models/registration/events/__init__.py +56 -0
- omnibase_infra/models/registration/events/model_node_became_active.py +103 -0
- omnibase_infra/models/registration/events/model_node_liveness_expired.py +103 -0
- omnibase_infra/models/registration/events/model_node_registration_accepted.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_received.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_timed_out.py +112 -0
- omnibase_infra/models/registration/events/model_node_registration_initiated.py +107 -0
- omnibase_infra/models/registration/events/model_node_registration_rejected.py +104 -0
- omnibase_infra/models/registration/model_event_bus_topic_entry.py +59 -0
- omnibase_infra/models/registration/model_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +190 -0
- omnibase_infra/models/registration/model_node_event_bus_config.py +99 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +195 -0
- omnibase_infra/models/registration/model_node_metadata.py +79 -0
- omnibase_infra/models/registration/model_node_registration.py +162 -0
- omnibase_infra/models/registration/model_node_registration_record.py +162 -0
- omnibase_infra/models/registry/__init__.py +29 -0
- omnibase_infra/models/registry/model_domain_constraint.py +202 -0
- omnibase_infra/models/registry/model_message_type_entry.py +271 -0
- omnibase_infra/models/resilience/__init__.py +9 -0
- omnibase_infra/models/resilience/model_circuit_breaker_config.py +227 -0
- omnibase_infra/models/routing/__init__.py +25 -0
- omnibase_infra/models/routing/model_routing_entry.py +52 -0
- omnibase_infra/models/routing/model_routing_subcontract.py +70 -0
- omnibase_infra/models/runtime/__init__.py +49 -0
- omnibase_infra/models/runtime/model_contract_security_config.py +41 -0
- omnibase_infra/models/runtime/model_discovery_error.py +81 -0
- omnibase_infra/models/runtime/model_discovery_result.py +162 -0
- omnibase_infra/models/runtime/model_discovery_warning.py +74 -0
- omnibase_infra/models/runtime/model_failed_plugin_load.py +63 -0
- omnibase_infra/models/runtime/model_handler_contract.py +296 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +129 -0
- omnibase_infra/models/runtime/model_plugin_load_context.py +93 -0
- omnibase_infra/models/runtime/model_plugin_load_summary.py +124 -0
- omnibase_infra/models/security/__init__.py +50 -0
- omnibase_infra/models/security/classification_levels.py +99 -0
- omnibase_infra/models/security/model_environment_policy.py +145 -0
- omnibase_infra/models/security/model_handler_security_policy.py +107 -0
- omnibase_infra/models/security/model_security_error.py +81 -0
- omnibase_infra/models/security/model_security_validation_result.py +328 -0
- omnibase_infra/models/security/model_security_warning.py +67 -0
- omnibase_infra/models/snapshot/__init__.py +27 -0
- omnibase_infra/models/snapshot/model_field_change.py +65 -0
- omnibase_infra/models/snapshot/model_snapshot.py +270 -0
- omnibase_infra/models/snapshot/model_snapshot_diff.py +203 -0
- omnibase_infra/models/snapshot/model_subject_ref.py +81 -0
- omnibase_infra/models/types/__init__.py +71 -0
- omnibase_infra/models/validation/__init__.py +89 -0
- omnibase_infra/models/validation/model_any_type_validation_result.py +118 -0
- omnibase_infra/models/validation/model_any_type_violation.py +141 -0
- omnibase_infra/models/validation/model_category_match_result.py +345 -0
- omnibase_infra/models/validation/model_chain_violation.py +166 -0
- omnibase_infra/models/validation/model_coverage_metrics.py +316 -0
- omnibase_infra/models/validation/model_execution_shape_rule.py +159 -0
- omnibase_infra/models/validation/model_execution_shape_validation.py +208 -0
- omnibase_infra/models/validation/model_execution_shape_validation_result.py +294 -0
- omnibase_infra/models/validation/model_execution_shape_violation.py +122 -0
- omnibase_infra/models/validation/model_localhandler_validation_result.py +139 -0
- omnibase_infra/models/validation/model_localhandler_violation.py +100 -0
- omnibase_infra/models/validation/model_output_validation_params.py +74 -0
- omnibase_infra/models/validation/model_validate_and_raise_params.py +84 -0
- omnibase_infra/models/validation/model_validation_error_params.py +84 -0
- omnibase_infra/models/validation/model_validation_outcome.py +287 -0
- omnibase_infra/nodes/__init__.py +57 -0
- omnibase_infra/nodes/architecture_validator/__init__.py +79 -0
- omnibase_infra/nodes/architecture_validator/contract.yaml +252 -0
- omnibase_infra/nodes/architecture_validator/contract_architecture_validator.yaml +203 -0
- omnibase_infra/nodes/architecture_validator/mixins/__init__.py +16 -0
- omnibase_infra/nodes/architecture_validator/mixins/mixin_file_path_rule.py +92 -0
- omnibase_infra/nodes/architecture_validator/models/__init__.py +36 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_request.py +56 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_result.py +311 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_violation.py +163 -0
- omnibase_infra/nodes/architecture_validator/models/model_rule_check_result.py +265 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_request.py +105 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_result.py +314 -0
- omnibase_infra/nodes/architecture_validator/node.py +262 -0
- omnibase_infra/nodes/architecture_validator/node_architecture_validator.py +383 -0
- omnibase_infra/nodes/architecture_validator/protocols/__init__.py +9 -0
- omnibase_infra/nodes/architecture_validator/protocols/protocol_architecture_rule.py +225 -0
- omnibase_infra/nodes/architecture_validator/registry/__init__.py +28 -0
- omnibase_infra/nodes/architecture_validator/registry/registry_infra_architecture_validator.py +106 -0
- omnibase_infra/nodes/architecture_validator/validators/__init__.py +104 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_direct_dispatch.py +422 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_handler_publishing.py +481 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_orchestrator_fsm.py +491 -0
- omnibase_infra/nodes/contract_registry_reducer/__init__.py +29 -0
- omnibase_infra/nodes/contract_registry_reducer/contract.yaml +255 -0
- omnibase_infra/nodes/contract_registry_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_contract_registry_state.py +266 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_cleanup_topic_references.py +55 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_deactivate_contract.py +58 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_mark_stale.py +49 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_heartbeat.py +71 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_topic.py +66 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_upsert_contract.py +92 -0
- omnibase_infra/nodes/contract_registry_reducer/node.py +121 -0
- omnibase_infra/nodes/contract_registry_reducer/reducer.py +784 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/registry_infra_contract_registry_reducer.py +101 -0
- omnibase_infra/nodes/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +167 -0
- omnibase_infra/nodes/effects/models/__init__.py +32 -0
- omnibase_infra/nodes/effects/models/model_backend_result.py +190 -0
- omnibase_infra/nodes/effects/models/model_effect_idempotency_config.py +92 -0
- omnibase_infra/nodes/effects/models/model_registry_request.py +132 -0
- omnibase_infra/nodes/effects/models/model_registry_response.py +263 -0
- omnibase_infra/nodes/effects/protocol_consul_client.py +89 -0
- omnibase_infra/nodes/effects/protocol_effect_idempotency_store.py +143 -0
- omnibase_infra/nodes/effects/protocol_postgres_adapter.py +96 -0
- omnibase_infra/nodes/effects/registry_effect.py +525 -0
- omnibase_infra/nodes/effects/store_effect_idempotency_inmemory.py +425 -0
- omnibase_infra/nodes/handlers/consul/contract.yaml +85 -0
- omnibase_infra/nodes/handlers/db/contract.yaml +72 -0
- omnibase_infra/nodes/handlers/graph/contract.yaml +127 -0
- omnibase_infra/nodes/handlers/http/contract.yaml +74 -0
- omnibase_infra/nodes/handlers/intent/contract.yaml +66 -0
- omnibase_infra/nodes/handlers/mcp/contract.yaml +69 -0
- omnibase_infra/nodes/handlers/vault/contract.yaml +91 -0
- omnibase_infra/nodes/node_intent_storage_effect/__init__.py +50 -0
- omnibase_infra/nodes/node_intent_storage_effect/contract.yaml +194 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/__init__.py +24 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/model_intent_storage_input.py +141 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/model_intent_storage_output.py +130 -0
- omnibase_infra/nodes/node_intent_storage_effect/node.py +94 -0
- omnibase_infra/nodes/node_intent_storage_effect/registry/__init__.py +35 -0
- omnibase_infra/nodes/node_intent_storage_effect/registry/registry_infra_intent_storage.py +294 -0
- omnibase_infra/nodes/node_ledger_projection_compute/__init__.py +50 -0
- omnibase_infra/nodes/node_ledger_projection_compute/contract.yaml +104 -0
- omnibase_infra/nodes/node_ledger_projection_compute/node.py +284 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/__init__.py +29 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/registry_infra_ledger_projection.py +118 -0
- omnibase_infra/nodes/node_ledger_write_effect/__init__.py +82 -0
- omnibase_infra/nodes/node_ledger_write_effect/contract.yaml +200 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/__init__.py +22 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_append.py +372 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_query.py +597 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/__init__.py +31 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_append_result.py +54 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_entry.py +92 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query.py +53 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query_result.py +41 -0
- omnibase_infra/nodes/node_ledger_write_effect/node.py +89 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/__init__.py +13 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/protocol_ledger_persistence.py +127 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/registry_infra_ledger_write.py +121 -0
- omnibase_infra/nodes/node_registration_orchestrator/README.md +542 -0
- omnibase_infra/nodes/node_registration_orchestrator/__init__.py +120 -0
- omnibase_infra/nodes/node_registration_orchestrator/contract.yaml +482 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/__init__.py +53 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_introspected.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_registration_acked.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_runtime_tick.py +373 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/__init__.py +62 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_heartbeat.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_introspected.py +694 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_registration_acked.py +458 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_runtime_tick.py +364 -0
- omnibase_infra/nodes/node_registration_orchestrator/introspection_event_router.py +544 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/__init__.py +75 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_intent_payload.py +194 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_registration_intent.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_intent_execution_result.py +50 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_node_liveness_expired.py +107 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_config.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_input.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_output.py +166 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_intent_payload.py +235 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_upsert_intent.py +68 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_execution_result.py +384 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_state.py +60 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registration_intent.py +177 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registry_intent.py +247 -0
- omnibase_infra/nodes/node_registration_orchestrator/node.py +195 -0
- omnibase_infra/nodes/node_registration_orchestrator/plugin.py +909 -0
- omnibase_infra/nodes/node_registration_orchestrator/protocols.py +439 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/registry_infra_node_registration_orchestrator.py +528 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +393 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +743 -0
- omnibase_infra/nodes/node_registration_reducer/__init__.py +15 -0
- omnibase_infra/nodes/node_registration_reducer/contract.yaml +301 -0
- omnibase_infra/nodes/node_registration_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/node_registration_reducer/models/model_validation_result.py +113 -0
- omnibase_infra/nodes/node_registration_reducer/node.py +139 -0
- omnibase_infra/nodes/node_registration_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_registration_reducer/registry/registry_infra_node_registration_reducer.py +79 -0
- omnibase_infra/nodes/node_registration_storage_effect/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_storage_effect/contract.yaml +220 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/__init__.py +44 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_delete_result.py +132 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_record.py +199 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_update.py +155 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_details.py +123 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_result.py +117 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_query.py +100 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_result.py +136 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_upsert_result.py +127 -0
- omnibase_infra/nodes/node_registration_storage_effect/node.py +112 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/__init__.py +22 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/protocol_registration_persistence.py +333 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/__init__.py +23 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/registry_infra_registration_storage.py +215 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +677 -0
- omnibase_infra/nodes/node_registry_effect/handlers/__init__.py +70 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_deregister.py +211 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_register.py +212 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_partial_retry.py +417 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_deactivate.py +215 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_upsert.py +208 -0
- omnibase_infra/nodes/node_registry_effect/models/__init__.py +43 -0
- omnibase_infra/nodes/node_registry_effect/models/model_partial_retry_request.py +92 -0
- omnibase_infra/nodes/node_registry_effect/node.py +165 -0
- omnibase_infra/nodes/node_registry_effect/registry/__init__.py +27 -0
- omnibase_infra/nodes/node_registry_effect/registry/registry_infra_registry_effect.py +196 -0
- omnibase_infra/nodes/node_service_discovery_effect/__init__.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/contract.yaml +246 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/__init__.py +67 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_health_status.py +72 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_service_discovery_operation.py +58 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_query.py +99 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_result.py +98 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_health_check_config.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_query_metadata.py +63 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_registration_result.py +130 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_details.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_result.py +119 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_info.py +106 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_registration.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/node.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/__init__.py +14 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/protocol_discovery_operations.py +279 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/__init__.py +13 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/registry_infra_service_discovery.py +222 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +37 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +87 -0
- omnibase_infra/nodes/reducers/models/model_payload_ledger_append.py +133 -0
- omnibase_infra/nodes/reducers/models/model_payload_postgres_upsert_registration.py +60 -0
- omnibase_infra/nodes/reducers/models/model_registration_confirmation.py +166 -0
- omnibase_infra/nodes/reducers/models/model_registration_state.py +433 -0
- omnibase_infra/nodes/reducers/registration_reducer.py +1138 -0
- omnibase_infra/observability/__init__.py +143 -0
- omnibase_infra/observability/constants_metrics.py +91 -0
- omnibase_infra/observability/factory_observability_sink.py +525 -0
- omnibase_infra/observability/handlers/__init__.py +118 -0
- omnibase_infra/observability/handlers/handler_logging_structured.py +967 -0
- omnibase_infra/observability/handlers/handler_metrics_prometheus.py +1120 -0
- omnibase_infra/observability/handlers/model_logging_handler_config.py +71 -0
- omnibase_infra/observability/handlers/model_logging_handler_response.py +77 -0
- omnibase_infra/observability/handlers/model_metrics_handler_config.py +172 -0
- omnibase_infra/observability/handlers/model_metrics_handler_payload.py +135 -0
- omnibase_infra/observability/handlers/model_metrics_handler_response.py +101 -0
- omnibase_infra/observability/hooks/__init__.py +74 -0
- omnibase_infra/observability/hooks/hook_observability.py +1223 -0
- omnibase_infra/observability/models/__init__.py +30 -0
- omnibase_infra/observability/models/enum_required_log_context_key.py +77 -0
- omnibase_infra/observability/models/model_buffered_log_entry.py +117 -0
- omnibase_infra/observability/models/model_logging_sink_config.py +73 -0
- omnibase_infra/observability/models/model_metrics_sink_config.py +156 -0
- omnibase_infra/observability/sinks/__init__.py +69 -0
- omnibase_infra/observability/sinks/sink_logging_structured.py +809 -0
- omnibase_infra/observability/sinks/sink_metrics_prometheus.py +710 -0
- omnibase_infra/plugins/__init__.py +27 -0
- omnibase_infra/plugins/examples/__init__.py +28 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer.py +271 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer_error_handling.py +210 -0
- omnibase_infra/plugins/models/__init__.py +21 -0
- omnibase_infra/plugins/models/model_plugin_context.py +76 -0
- omnibase_infra/plugins/models/model_plugin_input_data.py +58 -0
- omnibase_infra/plugins/models/model_plugin_output_data.py +62 -0
- omnibase_infra/plugins/plugin_compute_base.py +449 -0
- omnibase_infra/projectors/__init__.py +30 -0
- omnibase_infra/projectors/contracts/__init__.py +63 -0
- omnibase_infra/projectors/contracts/registration_projector.yaml +370 -0
- omnibase_infra/projectors/projection_reader_registration.py +1559 -0
- omnibase_infra/projectors/snapshot_publisher_registration.py +1329 -0
- omnibase_infra/protocols/__init__.py +104 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -0
- omnibase_infra/protocols/protocol_container_aware.py +200 -0
- omnibase_infra/protocols/protocol_dispatch_engine.py +152 -0
- omnibase_infra/protocols/protocol_event_bus_like.py +127 -0
- omnibase_infra/protocols/protocol_event_projector.py +96 -0
- omnibase_infra/protocols/protocol_idempotency_store.py +142 -0
- omnibase_infra/protocols/protocol_message_dispatcher.py +247 -0
- omnibase_infra/protocols/protocol_message_type_registry.py +306 -0
- omnibase_infra/protocols/protocol_plugin_compute.py +368 -0
- omnibase_infra/protocols/protocol_projector_schema_validator.py +82 -0
- omnibase_infra/protocols/protocol_registry_metrics.py +215 -0
- omnibase_infra/protocols/protocol_snapshot_publisher.py +396 -0
- omnibase_infra/protocols/protocol_snapshot_store.py +567 -0
- omnibase_infra/runtime/__init__.py +445 -0
- omnibase_infra/runtime/binding_config_resolver.py +2771 -0
- omnibase_infra/runtime/binding_resolver.py +753 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/constants_notification.py +75 -0
- omnibase_infra/runtime/constants_security.py +70 -0
- omnibase_infra/runtime/contract_handler_discovery.py +587 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +51 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/contract_loaders/operation_bindings_loader.py +789 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -0
- omnibase_infra/runtime/emit_daemon/__init__.py +97 -0
- omnibase_infra/runtime/emit_daemon/cli.py +844 -0
- omnibase_infra/runtime/emit_daemon/client.py +811 -0
- omnibase_infra/runtime/emit_daemon/config.py +535 -0
- omnibase_infra/runtime/emit_daemon/daemon.py +812 -0
- omnibase_infra/runtime/emit_daemon/event_registry.py +477 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_request.py +139 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_response.py +191 -0
- omnibase_infra/runtime/emit_daemon/queue.py +618 -0
- omnibase_infra/runtime/enums/__init__.py +18 -0
- omnibase_infra/runtime/enums/enum_config_ref_scheme.py +33 -0
- omnibase_infra/runtime/enums/enum_scheduler_status.py +170 -0
- omnibase_infra/runtime/envelope_validator.py +179 -0
- omnibase_infra/runtime/event_bus_subcontract_wiring.py +466 -0
- omnibase_infra/runtime/handler_bootstrap_source.py +507 -0
- omnibase_infra/runtime/handler_contract_config_loader.py +603 -0
- omnibase_infra/runtime/handler_contract_source.py +750 -0
- omnibase_infra/runtime/handler_identity.py +81 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2046 -0
- omnibase_infra/runtime/handler_registry.py +329 -0
- omnibase_infra/runtime/handler_source_resolver.py +367 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kafka_contract_source.py +984 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +402 -0
- omnibase_infra/runtime/mixins/__init__.py +24 -0
- omnibase_infra/runtime/mixins/mixin_projector_notification_publishing.py +566 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +778 -0
- omnibase_infra/runtime/models/__init__.py +229 -0
- omnibase_infra/runtime/models/model_batch_lifecycle_result.py +217 -0
- omnibase_infra/runtime/models/model_binding_config.py +168 -0
- omnibase_infra/runtime/models/model_binding_config_cache_stats.py +135 -0
- omnibase_infra/runtime/models/model_binding_config_resolver_config.py +329 -0
- omnibase_infra/runtime/models/model_cached_secret.py +138 -0
- omnibase_infra/runtime/models/model_compute_key.py +138 -0
- omnibase_infra/runtime/models/model_compute_registration.py +97 -0
- omnibase_infra/runtime/models/model_config_cache_entry.py +61 -0
- omnibase_infra/runtime/models/model_config_ref.py +331 -0
- omnibase_infra/runtime/models/model_config_ref_parse_result.py +125 -0
- omnibase_infra/runtime/models/model_contract_load_result.py +224 -0
- omnibase_infra/runtime/models/model_domain_plugin_config.py +92 -0
- omnibase_infra/runtime/models/model_domain_plugin_result.py +270 -0
- omnibase_infra/runtime/models/model_duplicate_response.py +54 -0
- omnibase_infra/runtime/models/model_enabled_protocols_config.py +61 -0
- omnibase_infra/runtime/models/model_event_bus_config.py +54 -0
- omnibase_infra/runtime/models/model_failed_component.py +55 -0
- omnibase_infra/runtime/models/model_health_check_response.py +168 -0
- omnibase_infra/runtime/models/model_health_check_result.py +229 -0
- omnibase_infra/runtime/models/model_lifecycle_result.py +245 -0
- omnibase_infra/runtime/models/model_logging_config.py +42 -0
- omnibase_infra/runtime/models/model_optional_correlation_id.py +167 -0
- omnibase_infra/runtime/models/model_optional_string.py +94 -0
- omnibase_infra/runtime/models/model_optional_uuid.py +110 -0
- omnibase_infra/runtime/models/model_policy_context.py +100 -0
- omnibase_infra/runtime/models/model_policy_key.py +138 -0
- omnibase_infra/runtime/models/model_policy_registration.py +139 -0
- omnibase_infra/runtime/models/model_policy_result.py +103 -0
- omnibase_infra/runtime/models/model_policy_type_filter.py +157 -0
- omnibase_infra/runtime/models/model_projector_notification_config.py +171 -0
- omnibase_infra/runtime/models/model_projector_plugin_loader_config.py +47 -0
- omnibase_infra/runtime/models/model_protocol_registration_config.py +65 -0
- omnibase_infra/runtime/models/model_retry_policy.py +105 -0
- omnibase_infra/runtime/models/model_runtime_config.py +150 -0
- omnibase_infra/runtime/models/model_runtime_contract_config.py +268 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_config.py +625 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_metrics.py +233 -0
- omnibase_infra/runtime/models/model_runtime_tick.py +193 -0
- omnibase_infra/runtime/models/model_secret_cache_stats.py +82 -0
- omnibase_infra/runtime/models/model_secret_mapping.py +63 -0
- omnibase_infra/runtime/models/model_secret_resolver_config.py +107 -0
- omnibase_infra/runtime/models/model_secret_resolver_metrics.py +111 -0
- omnibase_infra/runtime/models/model_secret_source_info.py +72 -0
- omnibase_infra/runtime/models/model_secret_source_spec.py +66 -0
- omnibase_infra/runtime/models/model_security_config.py +109 -0
- omnibase_infra/runtime/models/model_shutdown_batch_result.py +75 -0
- omnibase_infra/runtime/models/model_shutdown_config.py +94 -0
- omnibase_infra/runtime/models/model_transition_notification_outbox_config.py +112 -0
- omnibase_infra/runtime/models/model_transition_notification_outbox_metrics.py +140 -0
- omnibase_infra/runtime/models/model_transition_notification_publisher_metrics.py +357 -0
- omnibase_infra/runtime/projector_plugin_loader.py +1462 -0
- omnibase_infra/runtime/projector_schema_manager.py +565 -0
- omnibase_infra/runtime/projector_shell.py +1330 -0
- omnibase_infra/runtime/protocol_contract_descriptor.py +92 -0
- omnibase_infra/runtime/protocol_contract_source.py +92 -0
- omnibase_infra/runtime/protocol_domain_plugin.py +474 -0
- omnibase_infra/runtime/protocol_handler_discovery.py +221 -0
- omnibase_infra/runtime/protocol_handler_plugin_loader.py +327 -0
- omnibase_infra/runtime/protocol_lifecycle_executor.py +435 -0
- omnibase_infra/runtime/protocol_policy.py +366 -0
- omnibase_infra/runtime/protocols/__init__.py +37 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -0
- omnibase_infra/runtime/publisher_topic_scoped.py +294 -0
- omnibase_infra/runtime/registry/__init__.py +93 -0
- omnibase_infra/runtime/registry/mixin_message_type_query.py +326 -0
- omnibase_infra/runtime/registry/mixin_message_type_registration.py +354 -0
- omnibase_infra/runtime/registry/registry_event_bus_binding.py +268 -0
- omnibase_infra/runtime/registry/registry_message_type.py +542 -0
- omnibase_infra/runtime/registry/registry_protocol_binding.py +445 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_contract_source.py +693 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1185 -0
- omnibase_infra/runtime/runtime_contract_config_loader.py +406 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2112 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1651 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +2350 -0
- omnibase_infra/runtime/service_runtime_host_process.py +3493 -0
- omnibase_infra/runtime/transition_notification_outbox.py +1190 -0
- omnibase_infra/runtime/transition_notification_publisher.py +765 -0
- omnibase_infra/runtime/util_container_wiring.py +1124 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +723 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/schemas/schema_transition_notification_outbox.sql +245 -0
- omnibase_infra/services/__init__.py +89 -0
- omnibase_infra/services/corpus_capture.py +684 -0
- omnibase_infra/services/mcp/__init__.py +31 -0
- omnibase_infra/services/mcp/mcp_server_lifecycle.py +449 -0
- omnibase_infra/services/mcp/service_mcp_tool_discovery.py +411 -0
- omnibase_infra/services/mcp/service_mcp_tool_registry.py +329 -0
- omnibase_infra/services/mcp/service_mcp_tool_sync.py +565 -0
- omnibase_infra/services/registry_api/__init__.py +40 -0
- omnibase_infra/services/registry_api/main.py +261 -0
- omnibase_infra/services/registry_api/models/__init__.py +66 -0
- omnibase_infra/services/registry_api/models/model_capability_widget_mapping.py +38 -0
- omnibase_infra/services/registry_api/models/model_pagination_info.py +48 -0
- omnibase_infra/services/registry_api/models/model_registry_discovery_response.py +73 -0
- omnibase_infra/services/registry_api/models/model_registry_health_response.py +49 -0
- omnibase_infra/services/registry_api/models/model_registry_instance_view.py +88 -0
- omnibase_infra/services/registry_api/models/model_registry_node_view.py +88 -0
- omnibase_infra/services/registry_api/models/model_registry_summary.py +60 -0
- omnibase_infra/services/registry_api/models/model_response_list_instances.py +43 -0
- omnibase_infra/services/registry_api/models/model_response_list_nodes.py +51 -0
- omnibase_infra/services/registry_api/models/model_warning.py +49 -0
- omnibase_infra/services/registry_api/models/model_widget_defaults.py +28 -0
- omnibase_infra/services/registry_api/models/model_widget_mapping.py +51 -0
- omnibase_infra/services/registry_api/routes.py +371 -0
- omnibase_infra/services/registry_api/service.py +837 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +898 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +699 -0
- omnibase_infra/services/service_timeout_scanner.py +394 -0
- omnibase_infra/services/session/__init__.py +56 -0
- omnibase_infra/services/session/config_consumer.py +137 -0
- omnibase_infra/services/session/config_store.py +139 -0
- omnibase_infra/services/session/consumer.py +1007 -0
- omnibase_infra/services/session/protocol_session_aggregator.py +117 -0
- omnibase_infra/services/session/store.py +997 -0
- omnibase_infra/services/snapshot/__init__.py +31 -0
- omnibase_infra/services/snapshot/service_snapshot.py +647 -0
- omnibase_infra/services/snapshot/store_inmemory.py +637 -0
- omnibase_infra/services/snapshot/store_postgres.py +1279 -0
- omnibase_infra/shared/__init__.py +8 -0
- omnibase_infra/testing/__init__.py +10 -0
- omnibase_infra/testing/utils.py +23 -0
- omnibase_infra/topics/__init__.py +45 -0
- omnibase_infra/topics/platform_topic_suffixes.py +140 -0
- omnibase_infra/topics/util_topic_composition.py +95 -0
- omnibase_infra/types/__init__.py +48 -0
- omnibase_infra/types/type_cache_info.py +49 -0
- omnibase_infra/types/type_dsn.py +173 -0
- omnibase_infra/types/type_infra_aliases.py +60 -0
- omnibase_infra/types/typed_dict/__init__.py +29 -0
- omnibase_infra/types/typed_dict/typed_dict_envelope_build_params.py +115 -0
- omnibase_infra/types/typed_dict/typed_dict_introspection_cache.py +128 -0
- omnibase_infra/types/typed_dict/typed_dict_performance_metrics_cache.py +140 -0
- omnibase_infra/types/typed_dict_capabilities.py +64 -0
- omnibase_infra/utils/__init__.py +117 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_atomic_file.py +261 -0
- omnibase_infra/utils/util_consumer_group.py +232 -0
- omnibase_infra/utils/util_datetime.py +372 -0
- omnibase_infra/utils/util_db_transaction.py +239 -0
- omnibase_infra/utils/util_dsn_validation.py +333 -0
- omnibase_infra/utils/util_env_parsing.py +264 -0
- omnibase_infra/utils/util_error_sanitization.py +457 -0
- omnibase_infra/utils/util_pydantic_validators.py +477 -0
- omnibase_infra/utils/util_retry_optimistic.py +281 -0
- omnibase_infra/utils/util_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -0
- omnibase_infra/validation/contracts/security.validation.yaml +114 -0
- omnibase_infra/validation/enums/__init__.py +11 -0
- omnibase_infra/validation/enums/enum_contract_violation_severity.py +13 -0
- omnibase_infra/validation/infra_validators.py +1514 -0
- omnibase_infra/validation/linter_contract.py +907 -0
- omnibase_infra/validation/mixin_any_type_classification.py +120 -0
- omnibase_infra/validation/mixin_any_type_exemption.py +580 -0
- omnibase_infra/validation/mixin_any_type_reporting.py +106 -0
- omnibase_infra/validation/mixin_execution_shape_violation_checks.py +596 -0
- omnibase_infra/validation/mixin_node_archetype_detection.py +254 -0
- omnibase_infra/validation/models/__init__.py +15 -0
- omnibase_infra/validation/models/model_contract_lint_result.py +101 -0
- omnibase_infra/validation/models/model_contract_violation.py +41 -0
- omnibase_infra/validation/service_validation_aggregator.py +395 -0
- omnibase_infra/validation/validation_exemptions.yaml +2033 -0
- omnibase_infra/validation/validator_any_type.py +715 -0
- omnibase_infra/validation/validator_chain_propagation.py +839 -0
- omnibase_infra/validation/validator_execution_shape.py +465 -0
- omnibase_infra/validation/validator_localhandler.py +261 -0
- omnibase_infra/validation/validator_registration_security.py +410 -0
- omnibase_infra/validation/validator_routing_coverage.py +1020 -0
- omnibase_infra/validation/validator_runtime_shape.py +915 -0
- omnibase_infra/validation/validator_security.py +513 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.6.dist-info/METADATA +197 -0
- omnibase_infra-0.2.6.dist-info/RECORD +833 -0
- omnibase_infra-0.2.6.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.6.dist-info/entry_points.txt +5 -0
- omnibase_infra-0.2.6.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""
|
|
4
|
+
Registration State Enumeration.
|
|
5
|
+
|
|
6
|
+
Defines FSM state values for the ONEX two-way node registration workflow.
|
|
7
|
+
Used to track the registration lifecycle from initial introspection through
|
|
8
|
+
active operation and eventual expiry.
|
|
9
|
+
|
|
10
|
+
Thread Safety:
|
|
11
|
+
All enums in this module are immutable and thread-safe.
|
|
12
|
+
Enum values can be safely shared across threads without synchronization.
|
|
13
|
+
|
|
14
|
+
Related Tickets:
|
|
15
|
+
- OMN-944 (F1): Implement Registration Projection Schema
|
|
16
|
+
- OMN-888 (C1): Registration Orchestrator
|
|
17
|
+
- OMN-889 (D1): Registration Reducer
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from enum import StrEnum, unique
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@unique
|
|
24
|
+
class EnumRegistrationState(StrEnum):
|
|
25
|
+
"""
|
|
26
|
+
FSM state values for the node registration workflow.
|
|
27
|
+
|
|
28
|
+
Represents the operational state of a node's registration at any moment.
|
|
29
|
+
The registration transitions through these states during its lifecycle:
|
|
30
|
+
|
|
31
|
+
Typical Flow:
|
|
32
|
+
PENDING_REGISTRATION -> ACCEPTED -> AWAITING_ACK -> ACK_RECEIVED -> ACTIVE
|
|
33
|
+
ACTIVE -> LIVENESS_EXPIRED (terminal)
|
|
34
|
+
|
|
35
|
+
Alternative Flows:
|
|
36
|
+
PENDING_REGISTRATION -> REJECTED (terminal)
|
|
37
|
+
AWAITING_ACK -> ACK_TIMED_OUT -> PENDING_REGISTRATION (retry)
|
|
38
|
+
|
|
39
|
+
Values:
|
|
40
|
+
PENDING_REGISTRATION: Initial state after NodeRegistrationInitiated
|
|
41
|
+
ACCEPTED: Registration accepted by orchestrator
|
|
42
|
+
AWAITING_ACK: Waiting for node to acknowledge registration
|
|
43
|
+
REJECTED: Registration rejected by orchestrator (terminal)
|
|
44
|
+
ACK_TIMED_OUT: Ack deadline passed (retriable)
|
|
45
|
+
ACK_RECEIVED: Node acknowledged registration
|
|
46
|
+
ACTIVE: Node is fully active and healthy
|
|
47
|
+
LIVENESS_EXPIRED: Liveness check failed (terminal)
|
|
48
|
+
|
|
49
|
+
Example:
|
|
50
|
+
>>> state = EnumRegistrationState.ACTIVE
|
|
51
|
+
>>> state.is_active()
|
|
52
|
+
True
|
|
53
|
+
>>> EnumRegistrationState.REJECTED.is_terminal()
|
|
54
|
+
True
|
|
55
|
+
>>> str(EnumRegistrationState.PENDING_REGISTRATION)
|
|
56
|
+
'pending_registration'
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
PENDING_REGISTRATION = "pending_registration"
|
|
60
|
+
"""Initial state after NodeRegistrationInitiated event."""
|
|
61
|
+
|
|
62
|
+
ACCEPTED = "accepted"
|
|
63
|
+
"""Registration accepted by orchestrator, awaiting node acknowledgment."""
|
|
64
|
+
|
|
65
|
+
AWAITING_ACK = "awaiting_ack"
|
|
66
|
+
"""Waiting for node to acknowledge its registration."""
|
|
67
|
+
|
|
68
|
+
REJECTED = "rejected"
|
|
69
|
+
"""Registration rejected by orchestrator (terminal state)."""
|
|
70
|
+
|
|
71
|
+
ACK_TIMED_OUT = "ack_timed_out"
|
|
72
|
+
"""Acknowledgment deadline passed without response (retriable)."""
|
|
73
|
+
|
|
74
|
+
ACK_RECEIVED = "ack_received"
|
|
75
|
+
"""Node acknowledged its registration, transitioning to active."""
|
|
76
|
+
|
|
77
|
+
ACTIVE = "active"
|
|
78
|
+
"""Node is fully active and healthy."""
|
|
79
|
+
|
|
80
|
+
LIVENESS_EXPIRED = "liveness_expired"
|
|
81
|
+
"""Liveness check failed - node is considered dead (terminal)."""
|
|
82
|
+
|
|
83
|
+
def __str__(self) -> str:
|
|
84
|
+
"""Return the string value for serialization."""
|
|
85
|
+
return self.value
|
|
86
|
+
|
|
87
|
+
def is_terminal(self) -> bool:
|
|
88
|
+
"""
|
|
89
|
+
Check if this is a terminal state (no further transitions expected).
|
|
90
|
+
|
|
91
|
+
Terminal states represent registration endpoints where the workflow
|
|
92
|
+
cannot continue without external intervention (re-registration).
|
|
93
|
+
|
|
94
|
+
Returns:
|
|
95
|
+
True if the state is terminal, False otherwise
|
|
96
|
+
|
|
97
|
+
Example:
|
|
98
|
+
>>> EnumRegistrationState.REJECTED.is_terminal()
|
|
99
|
+
True
|
|
100
|
+
>>> EnumRegistrationState.ACTIVE.is_terminal()
|
|
101
|
+
False
|
|
102
|
+
"""
|
|
103
|
+
return self in {
|
|
104
|
+
EnumRegistrationState.REJECTED,
|
|
105
|
+
EnumRegistrationState.LIVENESS_EXPIRED,
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
def is_active(self) -> bool:
|
|
109
|
+
"""
|
|
110
|
+
Check if node is considered operationally active.
|
|
111
|
+
|
|
112
|
+
Active state means the node is fully registered and healthy,
|
|
113
|
+
ready to receive work assignments.
|
|
114
|
+
|
|
115
|
+
Returns:
|
|
116
|
+
True if the node is active, False otherwise
|
|
117
|
+
|
|
118
|
+
Example:
|
|
119
|
+
>>> EnumRegistrationState.ACTIVE.is_active()
|
|
120
|
+
True
|
|
121
|
+
>>> EnumRegistrationState.AWAITING_ACK.is_active()
|
|
122
|
+
False
|
|
123
|
+
"""
|
|
124
|
+
return self == EnumRegistrationState.ACTIVE
|
|
125
|
+
|
|
126
|
+
def requires_ack(self) -> bool:
|
|
127
|
+
"""
|
|
128
|
+
Check if state is waiting for node acknowledgment.
|
|
129
|
+
|
|
130
|
+
These states have an ack_deadline that must be monitored
|
|
131
|
+
for timeout handling (per C2 durable timeout).
|
|
132
|
+
|
|
133
|
+
Returns:
|
|
134
|
+
True if waiting for ack, False otherwise
|
|
135
|
+
|
|
136
|
+
Example:
|
|
137
|
+
>>> EnumRegistrationState.AWAITING_ACK.requires_ack()
|
|
138
|
+
True
|
|
139
|
+
>>> EnumRegistrationState.ACTIVE.requires_ack()
|
|
140
|
+
False
|
|
141
|
+
"""
|
|
142
|
+
return self in {
|
|
143
|
+
EnumRegistrationState.ACCEPTED,
|
|
144
|
+
EnumRegistrationState.AWAITING_ACK,
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
def requires_liveness(self) -> bool:
|
|
148
|
+
"""
|
|
149
|
+
Check if state requires liveness monitoring.
|
|
150
|
+
|
|
151
|
+
Active nodes must maintain liveness through heartbeats.
|
|
152
|
+
The liveness_deadline must be monitored for expiry.
|
|
153
|
+
|
|
154
|
+
Returns:
|
|
155
|
+
True if liveness monitoring required, False otherwise
|
|
156
|
+
|
|
157
|
+
Example:
|
|
158
|
+
>>> EnumRegistrationState.ACTIVE.requires_liveness()
|
|
159
|
+
True
|
|
160
|
+
>>> EnumRegistrationState.PENDING_REGISTRATION.requires_liveness()
|
|
161
|
+
False
|
|
162
|
+
"""
|
|
163
|
+
return self == EnumRegistrationState.ACTIVE
|
|
164
|
+
|
|
165
|
+
def can_retry(self) -> bool:
|
|
166
|
+
"""
|
|
167
|
+
Check if this state allows retry of registration.
|
|
168
|
+
|
|
169
|
+
Some non-terminal states allow the registration process
|
|
170
|
+
to be retried by transitioning back to PENDING_REGISTRATION.
|
|
171
|
+
|
|
172
|
+
Returns:
|
|
173
|
+
True if retry is allowed, False otherwise
|
|
174
|
+
|
|
175
|
+
Example:
|
|
176
|
+
>>> EnumRegistrationState.ACK_TIMED_OUT.can_retry()
|
|
177
|
+
True
|
|
178
|
+
>>> EnumRegistrationState.REJECTED.can_retry()
|
|
179
|
+
False
|
|
180
|
+
"""
|
|
181
|
+
return self == EnumRegistrationState.ACK_TIMED_OUT
|
|
182
|
+
|
|
183
|
+
def can_transition_to(self, target: "EnumRegistrationState") -> bool:
|
|
184
|
+
"""
|
|
185
|
+
Check if transition to target state is valid per FSM contract.
|
|
186
|
+
|
|
187
|
+
Validates that the requested state transition follows the
|
|
188
|
+
defined workflow rules.
|
|
189
|
+
|
|
190
|
+
Args:
|
|
191
|
+
target: The target state to transition to
|
|
192
|
+
|
|
193
|
+
Returns:
|
|
194
|
+
True if the transition is valid, False otherwise
|
|
195
|
+
|
|
196
|
+
Example:
|
|
197
|
+
>>> EnumRegistrationState.PENDING_REGISTRATION.can_transition_to(
|
|
198
|
+
... EnumRegistrationState.ACCEPTED
|
|
199
|
+
... )
|
|
200
|
+
True
|
|
201
|
+
>>> EnumRegistrationState.ACTIVE.can_transition_to(
|
|
202
|
+
... EnumRegistrationState.PENDING_REGISTRATION
|
|
203
|
+
... )
|
|
204
|
+
False
|
|
205
|
+
"""
|
|
206
|
+
valid_transitions: dict[EnumRegistrationState, set[EnumRegistrationState]] = {
|
|
207
|
+
EnumRegistrationState.PENDING_REGISTRATION: {
|
|
208
|
+
EnumRegistrationState.ACCEPTED,
|
|
209
|
+
EnumRegistrationState.REJECTED,
|
|
210
|
+
},
|
|
211
|
+
EnumRegistrationState.ACCEPTED: {
|
|
212
|
+
EnumRegistrationState.AWAITING_ACK,
|
|
213
|
+
},
|
|
214
|
+
EnumRegistrationState.AWAITING_ACK: {
|
|
215
|
+
EnumRegistrationState.ACK_RECEIVED,
|
|
216
|
+
EnumRegistrationState.ACK_TIMED_OUT,
|
|
217
|
+
},
|
|
218
|
+
EnumRegistrationState.ACK_RECEIVED: {
|
|
219
|
+
EnumRegistrationState.ACTIVE,
|
|
220
|
+
},
|
|
221
|
+
EnumRegistrationState.ACTIVE: {
|
|
222
|
+
EnumRegistrationState.LIVENESS_EXPIRED,
|
|
223
|
+
},
|
|
224
|
+
EnumRegistrationState.ACK_TIMED_OUT: {
|
|
225
|
+
EnumRegistrationState.PENDING_REGISTRATION, # Retry
|
|
226
|
+
},
|
|
227
|
+
# Terminal states have no valid transitions
|
|
228
|
+
EnumRegistrationState.REJECTED: set(),
|
|
229
|
+
EnumRegistrationState.LIVENESS_EXPIRED: set(),
|
|
230
|
+
}
|
|
231
|
+
return target in valid_transitions.get(self, set())
|
|
232
|
+
|
|
233
|
+
@classmethod
|
|
234
|
+
def get_description(cls, state: "EnumRegistrationState") -> str:
|
|
235
|
+
"""
|
|
236
|
+
Get a human-readable description of the registration state.
|
|
237
|
+
|
|
238
|
+
Args:
|
|
239
|
+
state: The registration state to describe
|
|
240
|
+
|
|
241
|
+
Returns:
|
|
242
|
+
A human-readable description of the state
|
|
243
|
+
|
|
244
|
+
Example:
|
|
245
|
+
>>> EnumRegistrationState.get_description(EnumRegistrationState.ACTIVE)
|
|
246
|
+
'Node is fully active and healthy'
|
|
247
|
+
"""
|
|
248
|
+
descriptions = {
|
|
249
|
+
cls.PENDING_REGISTRATION: "Initial state after registration initiated",
|
|
250
|
+
cls.ACCEPTED: "Registration accepted, awaiting node acknowledgment",
|
|
251
|
+
cls.AWAITING_ACK: "Waiting for node to acknowledge registration",
|
|
252
|
+
cls.REJECTED: "Registration rejected by orchestrator",
|
|
253
|
+
cls.ACK_TIMED_OUT: "Acknowledgment deadline passed without response",
|
|
254
|
+
cls.ACK_RECEIVED: "Node acknowledged registration",
|
|
255
|
+
cls.ACTIVE: "Node is fully active and healthy",
|
|
256
|
+
cls.LIVENESS_EXPIRED: "Liveness check failed - node is considered dead",
|
|
257
|
+
}
|
|
258
|
+
return descriptions.get(state, "Unknown registration state")
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
__all__: list[str] = ["EnumRegistrationState"]
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Registration status enumeration.
|
|
4
|
+
|
|
5
|
+
This module defines the status enumeration for registration operations,
|
|
6
|
+
tracking the overall progress of multi-backend registration workflows.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from enum import Enum
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class EnumRegistrationStatus(str, Enum):
|
|
13
|
+
"""Registration workflow status.
|
|
14
|
+
|
|
15
|
+
Tracks the overall status of a registration operation that may involve
|
|
16
|
+
multiple backends (e.g., Consul and PostgreSQL).
|
|
17
|
+
|
|
18
|
+
Attributes:
|
|
19
|
+
IDLE: Registration not started
|
|
20
|
+
PENDING: Registration in progress, awaiting backend confirmations
|
|
21
|
+
PARTIAL: Some backends confirmed, others pending or failed
|
|
22
|
+
COMPLETE: All backends confirmed successfully
|
|
23
|
+
FAILED: Registration failed across all backends
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
IDLE = "idle"
|
|
27
|
+
PENDING = "pending"
|
|
28
|
+
PARTIAL = "partial"
|
|
29
|
+
COMPLETE = "complete"
|
|
30
|
+
FAILED = "failed"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
__all__: list[str] = ["EnumRegistrationStatus"]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Registry response status enumeration.
|
|
4
|
+
|
|
5
|
+
This module defines the status enumeration for registry operation responses,
|
|
6
|
+
indicating the outcome of registry queries and mutations.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from enum import Enum
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class EnumRegistryResponseStatus(str, Enum):
|
|
13
|
+
"""Registry operation response status.
|
|
14
|
+
|
|
15
|
+
Indicates the outcome of a registry operation.
|
|
16
|
+
|
|
17
|
+
Attributes:
|
|
18
|
+
SUCCESS: Registry operation completed successfully
|
|
19
|
+
PARTIAL: Operation partially succeeded (some items processed)
|
|
20
|
+
FAILED: Registry operation failed
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
SUCCESS = "success"
|
|
24
|
+
PARTIAL = "partial"
|
|
25
|
+
FAILED = "failed"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
__all__: list[str] = ["EnumRegistryResponseStatus"]
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Handler response status enumeration.
|
|
4
|
+
|
|
5
|
+
This module defines the status enumeration for handler responses,
|
|
6
|
+
indicating whether the handler operation completed successfully or with an error.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from enum import Enum
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class EnumResponseStatus(str, Enum):
|
|
13
|
+
"""Handler response status for operation results.
|
|
14
|
+
|
|
15
|
+
Indicates the outcome of a handler operation.
|
|
16
|
+
|
|
17
|
+
Attributes:
|
|
18
|
+
SUCCESS: Handler operation completed successfully
|
|
19
|
+
ERROR: Handler operation failed with an error
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
SUCCESS = "success"
|
|
23
|
+
ERROR = "error"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
__all__: list[str] = ["EnumResponseStatus"]
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Retry Error Category Enumeration.
|
|
4
|
+
|
|
5
|
+
Defines classification categories for errors during retry handling in
|
|
6
|
+
infrastructure handlers. Used to determine retry eligibility and circuit
|
|
7
|
+
breaker behavior.
|
|
8
|
+
|
|
9
|
+
Thread Safety:
|
|
10
|
+
All enums in this module are immutable and thread-safe.
|
|
11
|
+
Enum values can be safely shared across threads without synchronization.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from enum import Enum, unique
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@unique
|
|
18
|
+
class EnumRetryErrorCategory(str, Enum):
|
|
19
|
+
"""Classification of errors for retry decision making.
|
|
20
|
+
|
|
21
|
+
Error categories determine:
|
|
22
|
+
- Whether to retry the operation
|
|
23
|
+
- Whether to record circuit breaker failure
|
|
24
|
+
- Which error type to raise after retries exhausted
|
|
25
|
+
|
|
26
|
+
Values:
|
|
27
|
+
TIMEOUT: Operation timed out - retry eligible, circuit breaker failure on exhaustion.
|
|
28
|
+
AUTHENTICATION: Authentication/permission error - no retry, immediate circuit breaker failure.
|
|
29
|
+
CONNECTION: Connection/network error - retry eligible, circuit breaker failure on exhaustion.
|
|
30
|
+
NOT_FOUND: Resource not found - no retry, no circuit breaker failure (user error).
|
|
31
|
+
UNKNOWN: Unknown/unexpected error - retry eligible, circuit breaker failure on exhaustion.
|
|
32
|
+
|
|
33
|
+
Example:
|
|
34
|
+
>>> category = EnumRetryErrorCategory.TIMEOUT
|
|
35
|
+
>>> category.is_retry_eligible()
|
|
36
|
+
True
|
|
37
|
+
>>> EnumRetryErrorCategory.AUTHENTICATION.is_retry_eligible()
|
|
38
|
+
False
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
TIMEOUT = "timeout"
|
|
42
|
+
"""Operation timed out - retry eligible, circuit breaker failure on exhaustion."""
|
|
43
|
+
|
|
44
|
+
AUTHENTICATION = "authentication"
|
|
45
|
+
"""Authentication/permission error - no retry, immediate circuit breaker failure."""
|
|
46
|
+
|
|
47
|
+
CONNECTION = "connection"
|
|
48
|
+
"""Connection/network error - retry eligible, circuit breaker failure on exhaustion."""
|
|
49
|
+
|
|
50
|
+
NOT_FOUND = "not_found"
|
|
51
|
+
"""Resource not found - no retry, no circuit breaker failure (user error)."""
|
|
52
|
+
|
|
53
|
+
UNKNOWN = "unknown"
|
|
54
|
+
"""Unknown/unexpected error - retry eligible, circuit breaker failure on exhaustion."""
|
|
55
|
+
|
|
56
|
+
def __str__(self) -> str:
|
|
57
|
+
"""Return the string value for serialization."""
|
|
58
|
+
return self.value
|
|
59
|
+
|
|
60
|
+
def is_retry_eligible(self) -> bool:
|
|
61
|
+
"""Check if this error category is eligible for retry.
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
True if the error category allows retry, False otherwise.
|
|
65
|
+
|
|
66
|
+
Example:
|
|
67
|
+
>>> EnumRetryErrorCategory.CONNECTION.is_retry_eligible()
|
|
68
|
+
True
|
|
69
|
+
>>> EnumRetryErrorCategory.NOT_FOUND.is_retry_eligible()
|
|
70
|
+
False
|
|
71
|
+
"""
|
|
72
|
+
return self in {
|
|
73
|
+
EnumRetryErrorCategory.TIMEOUT,
|
|
74
|
+
EnumRetryErrorCategory.CONNECTION,
|
|
75
|
+
EnumRetryErrorCategory.UNKNOWN,
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
def records_circuit_failure(self) -> bool:
|
|
79
|
+
"""Check if this error category should record circuit breaker failure.
|
|
80
|
+
|
|
81
|
+
Returns:
|
|
82
|
+
True if the error should be recorded as a circuit breaker failure.
|
|
83
|
+
|
|
84
|
+
Example:
|
|
85
|
+
>>> EnumRetryErrorCategory.AUTHENTICATION.records_circuit_failure()
|
|
86
|
+
True
|
|
87
|
+
>>> EnumRetryErrorCategory.NOT_FOUND.records_circuit_failure()
|
|
88
|
+
False
|
|
89
|
+
"""
|
|
90
|
+
return self in {
|
|
91
|
+
EnumRetryErrorCategory.TIMEOUT,
|
|
92
|
+
EnumRetryErrorCategory.AUTHENTICATION,
|
|
93
|
+
EnumRetryErrorCategory.CONNECTION,
|
|
94
|
+
EnumRetryErrorCategory.UNKNOWN,
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
__all__: list[str] = ["EnumRetryErrorCategory"]
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Security validation rule IDs for OMN-1098.
|
|
4
|
+
|
|
5
|
+
This module defines the security rule identifiers used in validation errors
|
|
6
|
+
for handler security policy enforcement. These IDs provide structured error
|
|
7
|
+
codes for both registration-time and invocation-time security violations.
|
|
8
|
+
|
|
9
|
+
Rule ID Structure:
|
|
10
|
+
- SECURITY-3xx: Security-related violations
|
|
11
|
+
- 300-309: Registration-time violations (policy declaration errors)
|
|
12
|
+
- 310-319: Invocation-time violations (runtime enforcement errors)
|
|
13
|
+
|
|
14
|
+
Usage:
|
|
15
|
+
These rule IDs are used in validation error models to provide
|
|
16
|
+
machine-readable error codes for security violations.
|
|
17
|
+
|
|
18
|
+
See Also:
|
|
19
|
+
- ModelHandlerSecurityPolicy: Handler-declared security requirements
|
|
20
|
+
- ModelEnvironmentPolicy: Environment-level security constraints
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
from enum import StrEnum
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class EnumSecurityRuleId(StrEnum):
|
|
27
|
+
"""Security rule identifiers for validation errors.
|
|
28
|
+
|
|
29
|
+
Provides structured error codes for handler security policy violations.
|
|
30
|
+
Used to categorize and identify specific security constraint failures
|
|
31
|
+
during handler registration and invocation.
|
|
32
|
+
|
|
33
|
+
Two-Layer Security Validation Architecture:
|
|
34
|
+
The security system validates handlers at two distinct points:
|
|
35
|
+
|
|
36
|
+
1. Registration-Time Violations (300-309):
|
|
37
|
+
Validated by: RegistrationSecurityValidator
|
|
38
|
+
Location: omnibase_infra.validation.registration_security_validator
|
|
39
|
+
When: Handler attempts to register with the system
|
|
40
|
+
Purpose: Prevents misconfigured handlers from registering
|
|
41
|
+
|
|
42
|
+
2. Invocation-Time Violations (310-319):
|
|
43
|
+
Enforced by: InvocationSecurityEnforcer
|
|
44
|
+
Location: omnibase_infra.runtime.invocation_security_enforcer
|
|
45
|
+
When: Handler attempts to access resources at runtime
|
|
46
|
+
Purpose: Enforces declared policy during handler execution
|
|
47
|
+
|
|
48
|
+
Attributes:
|
|
49
|
+
SECRET_SCOPE_NOT_PERMITTED: Handler requests secret scope not permitted
|
|
50
|
+
in the current environment. (Registration-time, SECURITY-300)
|
|
51
|
+
CLASSIFICATION_EXCEEDS_MAX: Handler's data classification exceeds the
|
|
52
|
+
maximum allowed for the environment. (Registration-time, SECURITY-301)
|
|
53
|
+
ADAPTER_REQUESTING_SECRETS: Adapter handler attempting to request secrets
|
|
54
|
+
(adapters should not access secrets directly). (Registration-time, SECURITY-302)
|
|
55
|
+
ADAPTER_NON_EFFECT_CATEGORY: Adapter handler has non-EFFECT category
|
|
56
|
+
(adapters must be EFFECT handlers). (Registration-time, SECURITY-303)
|
|
57
|
+
ADAPTER_MISSING_DOMAIN_ALLOWLIST: Adapter handler missing required
|
|
58
|
+
domain allowlist in environment requiring explicit allowlists.
|
|
59
|
+
(Registration-time, SECURITY-304)
|
|
60
|
+
EFFECT_MISSING_SECURITY_METADATA: EFFECT handler missing required
|
|
61
|
+
security metadata (must have secret_scopes, allowed_domains, or
|
|
62
|
+
data_classification). (Handler-type validation, SECURITY-305)
|
|
63
|
+
COMPUTE_HAS_SECURITY_METADATA: COMPUTE handler has security metadata
|
|
64
|
+
(COMPUTE handlers must not have security metadata).
|
|
65
|
+
(Handler-type validation, SECURITY-306)
|
|
66
|
+
INVALID_SECRET_SCOPE: Secret scope is invalid (empty or whitespace-only).
|
|
67
|
+
(Handler-type validation, SECURITY-307)
|
|
68
|
+
INVALID_DOMAIN_PATTERN: Domain pattern in allowlist is invalid.
|
|
69
|
+
(Handler-type validation, SECURITY-308)
|
|
70
|
+
DOMAIN_ACCESS_DENIED: Handler attempted to access domain not in its
|
|
71
|
+
declared allowlist. (Invocation-time, SECURITY-310)
|
|
72
|
+
SECRET_SCOPE_ACCESS_DENIED: Handler attempted to access secret scope
|
|
73
|
+
not in its declared scopes. (Invocation-time, SECURITY-311)
|
|
74
|
+
CLASSIFICATION_CONSTRAINT_VIOLATION: Data processed exceeds handler's
|
|
75
|
+
declared classification level. (Invocation-time, SECURITY-312)
|
|
76
|
+
|
|
77
|
+
See Also:
|
|
78
|
+
- RegistrationSecurityValidator: Registration-time validation
|
|
79
|
+
- InvocationSecurityEnforcer: Invocation-time enforcement
|
|
80
|
+
- ModelHandlerSecurityPolicy: Handler-declared security requirements
|
|
81
|
+
- ModelEnvironmentPolicy: Environment-level security constraints
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
# Registration-time violations (300-309)
|
|
85
|
+
SECRET_SCOPE_NOT_PERMITTED = "SECURITY-300"
|
|
86
|
+
CLASSIFICATION_EXCEEDS_MAX = "SECURITY-301"
|
|
87
|
+
ADAPTER_REQUESTING_SECRETS = "SECURITY-302"
|
|
88
|
+
ADAPTER_NON_EFFECT_CATEGORY = "SECURITY-303"
|
|
89
|
+
ADAPTER_MISSING_DOMAIN_ALLOWLIST = "SECURITY-304"
|
|
90
|
+
|
|
91
|
+
# Handler type security violations (305-309) - OMN-1137
|
|
92
|
+
EFFECT_MISSING_SECURITY_METADATA = "SECURITY-305"
|
|
93
|
+
COMPUTE_HAS_SECURITY_METADATA = "SECURITY-306"
|
|
94
|
+
INVALID_SECRET_SCOPE = "SECURITY-307"
|
|
95
|
+
INVALID_DOMAIN_PATTERN = "SECURITY-308"
|
|
96
|
+
|
|
97
|
+
# Invocation-time violations (310-319)
|
|
98
|
+
DOMAIN_ACCESS_DENIED = "SECURITY-310"
|
|
99
|
+
SECRET_SCOPE_ACCESS_DENIED = "SECURITY-311"
|
|
100
|
+
CLASSIFICATION_CONSTRAINT_VIOLATION = "SECURITY-312"
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
__all__ = ["EnumSecurityRuleId"]
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Selection Strategy Enumeration.
|
|
4
|
+
|
|
5
|
+
Defines strategies for selecting a node from multiple candidates that match
|
|
6
|
+
capability-based discovery criteria.
|
|
7
|
+
|
|
8
|
+
Related Tickets:
|
|
9
|
+
- OMN-1135: ServiceCapabilityQuery for capability-based discovery
|
|
10
|
+
|
|
11
|
+
Example:
|
|
12
|
+
>>> from omnibase_infra.enums import EnumSelectionStrategy
|
|
13
|
+
>>> strategy = EnumSelectionStrategy.ROUND_ROBIN
|
|
14
|
+
>>> print(strategy.value)
|
|
15
|
+
'round_robin'
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from enum import Enum, unique
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@unique
|
|
22
|
+
class EnumSelectionStrategy(str, Enum):
|
|
23
|
+
"""Selection strategies for choosing among multiple capability matches.
|
|
24
|
+
|
|
25
|
+
When capability-based discovery finds multiple nodes that match the
|
|
26
|
+
requested criteria, this strategy determines which node is selected.
|
|
27
|
+
|
|
28
|
+
Values:
|
|
29
|
+
FIRST: Return the first candidate (deterministic, fast).
|
|
30
|
+
Best for: Development, testing, or when order matters.
|
|
31
|
+
RANDOM: Randomly select from candidates.
|
|
32
|
+
Best for: Simple load distribution without state.
|
|
33
|
+
ROUND_ROBIN: Cycle through candidates sequentially.
|
|
34
|
+
Best for: Even distribution with state tracking.
|
|
35
|
+
LEAST_LOADED: Select based on current load metrics.
|
|
36
|
+
Best for: Production load balancing (requires metrics).
|
|
37
|
+
|
|
38
|
+
Example:
|
|
39
|
+
>>> strategy = EnumSelectionStrategy.FIRST
|
|
40
|
+
>>> strategy.value
|
|
41
|
+
'first'
|
|
42
|
+
>>> str(EnumSelectionStrategy.ROUND_ROBIN)
|
|
43
|
+
'round_robin'
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
FIRST = "first"
|
|
47
|
+
"""Return the first candidate (deterministic, fast)."""
|
|
48
|
+
|
|
49
|
+
RANDOM = "random"
|
|
50
|
+
"""Randomly select from candidates."""
|
|
51
|
+
|
|
52
|
+
ROUND_ROBIN = "round_robin"
|
|
53
|
+
"""Cycle through candidates sequentially."""
|
|
54
|
+
|
|
55
|
+
LEAST_LOADED = "least_loaded"
|
|
56
|
+
"""Select based on current load metrics (future implementation)."""
|
|
57
|
+
|
|
58
|
+
def __str__(self) -> str:
|
|
59
|
+
"""Return the string value for serialization."""
|
|
60
|
+
return self.value
|
|
61
|
+
|
|
62
|
+
def requires_state(self) -> bool:
|
|
63
|
+
"""Check if this strategy requires state tracking.
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
True if the strategy needs persistent state (e.g., round-robin index).
|
|
67
|
+
|
|
68
|
+
Example:
|
|
69
|
+
>>> EnumSelectionStrategy.ROUND_ROBIN.requires_state()
|
|
70
|
+
True
|
|
71
|
+
>>> EnumSelectionStrategy.FIRST.requires_state()
|
|
72
|
+
False
|
|
73
|
+
"""
|
|
74
|
+
return self in {EnumSelectionStrategy.ROUND_ROBIN}
|
|
75
|
+
|
|
76
|
+
def requires_metrics(self) -> bool:
|
|
77
|
+
"""Check if this strategy requires load metrics.
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
True if the strategy needs external metrics (e.g., least-loaded).
|
|
81
|
+
|
|
82
|
+
Example:
|
|
83
|
+
>>> EnumSelectionStrategy.LEAST_LOADED.requires_metrics()
|
|
84
|
+
True
|
|
85
|
+
>>> EnumSelectionStrategy.RANDOM.requires_metrics()
|
|
86
|
+
False
|
|
87
|
+
"""
|
|
88
|
+
return self == EnumSelectionStrategy.LEAST_LOADED
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
__all__: list[str] = ["EnumSelectionStrategy"]
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""
|
|
4
|
+
Topic Standard Enumeration.
|
|
5
|
+
|
|
6
|
+
Defines the recognized topic naming standards for ONEX message routing.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from enum import Enum, unique
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@unique
|
|
13
|
+
class EnumTopicStandard(str, Enum):
|
|
14
|
+
"""
|
|
15
|
+
Enumeration of recognized topic naming standards.
|
|
16
|
+
|
|
17
|
+
ONEX supports multiple topic naming conventions depending on the context
|
|
18
|
+
and deployment environment:
|
|
19
|
+
|
|
20
|
+
- ONEX_KAFKA: The canonical ONEX Kafka format: onex.<domain>.<type>
|
|
21
|
+
- ENVIRONMENT_AWARE: Environment-prefixed format: <env>.<domain>.<category>.<version>
|
|
22
|
+
- UNKNOWN: Topic format could not be determined
|
|
23
|
+
|
|
24
|
+
Example:
|
|
25
|
+
>>> EnumTopicStandard.ONEX_KAFKA.value
|
|
26
|
+
'onex_kafka'
|
|
27
|
+
>>> str(EnumTopicStandard.ENVIRONMENT_AWARE)
|
|
28
|
+
'environment_aware'
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
ONEX_KAFKA = "onex_kafka"
|
|
32
|
+
"""ONEX Kafka standard: onex.<domain>.<type>"""
|
|
33
|
+
|
|
34
|
+
ENVIRONMENT_AWARE = "environment_aware"
|
|
35
|
+
"""Environment-aware format: <env>.<domain>.<category>.<version>"""
|
|
36
|
+
|
|
37
|
+
UNKNOWN = "unknown"
|
|
38
|
+
"""Topic format could not be determined"""
|
|
39
|
+
|
|
40
|
+
def __str__(self) -> str:
|
|
41
|
+
"""Return the string value for serialization."""
|
|
42
|
+
return self.value
|