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,104 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Protocol definitions for omnibase_infra.
|
|
4
|
+
|
|
5
|
+
This module provides protocol definitions (duck-typed interfaces) for infrastructure
|
|
6
|
+
components in the ONEX ecosystem.
|
|
7
|
+
|
|
8
|
+
Protocols:
|
|
9
|
+
- ProtocolCapabilityProjection: Interface for capability-based projection queries
|
|
10
|
+
- ProtocolCapabilityQuery: Interface for capability-based node discovery service
|
|
11
|
+
- ProtocolDispatchEngine: Interface for message dispatch engines
|
|
12
|
+
- ProtocolEventBusLike: Interface for event bus abstraction (used by introspection)
|
|
13
|
+
- ProtocolIdempotencyStore: Interface for idempotency checking and deduplication
|
|
14
|
+
- ProtocolMessageDispatcher: Interface for message dispatchers
|
|
15
|
+
- ProtocolMessageTypeRegistry: Interface for message type registries
|
|
16
|
+
- ProtocolPluginCompute: Interface for deterministic compute plugins
|
|
17
|
+
- ProtocolRegistryMetrics: Interface for registry metrics collection (optional)
|
|
18
|
+
- ProtocolSnapshotPublisher: Interface for snapshot publishing services (F2)
|
|
19
|
+
- ProtocolSnapshotStore: Interface for snapshot storage backends
|
|
20
|
+
|
|
21
|
+
Note:
|
|
22
|
+
ProtocolCircuitBreakerAware is defined in omnibase_infra.mixins (tightly coupled
|
|
23
|
+
to MixinAsyncCircuitBreaker). Import it from there, not from this package.
|
|
24
|
+
|
|
25
|
+
Architecture:
|
|
26
|
+
Protocols enable duck typing and dependency injection without requiring
|
|
27
|
+
inheritance. Classes implementing a protocol are automatically recognized
|
|
28
|
+
through structural typing (matching method signatures).
|
|
29
|
+
|
|
30
|
+
Usage:
|
|
31
|
+
```python
|
|
32
|
+
from omnibase_infra.protocols import (
|
|
33
|
+
ProtocolCapabilityQuery,
|
|
34
|
+
ProtocolEventBusLike,
|
|
35
|
+
ProtocolIdempotencyStore,
|
|
36
|
+
ProtocolPluginCompute,
|
|
37
|
+
ProtocolRegistryMetrics,
|
|
38
|
+
ProtocolSnapshotPublisher,
|
|
39
|
+
ProtocolSnapshotStore,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
# Verify protocol compliance via duck typing (per ONEX conventions)
|
|
43
|
+
plugin = MyComputePlugin()
|
|
44
|
+
assert hasattr(plugin, 'execute') and callable(plugin.execute)
|
|
45
|
+
|
|
46
|
+
publisher = MySnapshotPublisher()
|
|
47
|
+
assert hasattr(publisher, 'publish_snapshot') and callable(publisher.publish_snapshot)
|
|
48
|
+
assert hasattr(publisher, 'delete_snapshot') and callable(publisher.delete_snapshot)
|
|
49
|
+
|
|
50
|
+
store = MyIdempotencyStore()
|
|
51
|
+
assert hasattr(store, 'check_and_record') and callable(store.check_and_record)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
See Also:
|
|
55
|
+
- omnibase_infra.plugins for base class implementations
|
|
56
|
+
- omnibase_infra.models.projection for projection models
|
|
57
|
+
- omnibase_infra.mixins for ProtocolCircuitBreakerAware
|
|
58
|
+
- ONEX 4-node architecture documentation
|
|
59
|
+
- OMN-947 (F2) for snapshot publishing design
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
from omnibase_infra.protocols.protocol_capability_projection import (
|
|
63
|
+
ProtocolCapabilityProjection,
|
|
64
|
+
)
|
|
65
|
+
from omnibase_infra.protocols.protocol_capability_query import ProtocolCapabilityQuery
|
|
66
|
+
from omnibase_infra.protocols.protocol_container_aware import ProtocolContainerAware
|
|
67
|
+
from omnibase_infra.protocols.protocol_dispatch_engine import ProtocolDispatchEngine
|
|
68
|
+
from omnibase_infra.protocols.protocol_event_bus_like import ProtocolEventBusLike
|
|
69
|
+
from omnibase_infra.protocols.protocol_event_projector import ProtocolEventProjector
|
|
70
|
+
from omnibase_infra.protocols.protocol_idempotency_store import (
|
|
71
|
+
ProtocolIdempotencyStore,
|
|
72
|
+
)
|
|
73
|
+
from omnibase_infra.protocols.protocol_message_dispatcher import (
|
|
74
|
+
ProtocolMessageDispatcher,
|
|
75
|
+
)
|
|
76
|
+
from omnibase_infra.protocols.protocol_message_type_registry import (
|
|
77
|
+
ProtocolMessageTypeRegistry,
|
|
78
|
+
)
|
|
79
|
+
from omnibase_infra.protocols.protocol_plugin_compute import ProtocolPluginCompute
|
|
80
|
+
from omnibase_infra.protocols.protocol_projector_schema_validator import (
|
|
81
|
+
ProtocolProjectorSchemaValidator,
|
|
82
|
+
)
|
|
83
|
+
from omnibase_infra.protocols.protocol_registry_metrics import ProtocolRegistryMetrics
|
|
84
|
+
from omnibase_infra.protocols.protocol_snapshot_publisher import (
|
|
85
|
+
ProtocolSnapshotPublisher,
|
|
86
|
+
)
|
|
87
|
+
from omnibase_infra.protocols.protocol_snapshot_store import ProtocolSnapshotStore
|
|
88
|
+
|
|
89
|
+
__all__: list[str] = [
|
|
90
|
+
"ProtocolCapabilityProjection",
|
|
91
|
+
"ProtocolCapabilityQuery",
|
|
92
|
+
"ProtocolEventBusLike",
|
|
93
|
+
"ProtocolEventProjector",
|
|
94
|
+
"ProtocolContainerAware",
|
|
95
|
+
"ProtocolDispatchEngine",
|
|
96
|
+
"ProtocolIdempotencyStore",
|
|
97
|
+
"ProtocolMessageDispatcher",
|
|
98
|
+
"ProtocolMessageTypeRegistry",
|
|
99
|
+
"ProtocolPluginCompute",
|
|
100
|
+
"ProtocolProjectorSchemaValidator",
|
|
101
|
+
"ProtocolRegistryMetrics",
|
|
102
|
+
"ProtocolSnapshotPublisher",
|
|
103
|
+
"ProtocolSnapshotStore",
|
|
104
|
+
]
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Protocol for Capability-Based Projection Queries.
|
|
4
|
+
|
|
5
|
+
This module defines the protocol interface for querying registration projections
|
|
6
|
+
by capability fields. Enables fast capability-based node discovery using
|
|
7
|
+
GIN-indexed array queries.
|
|
8
|
+
|
|
9
|
+
Related Tickets:
|
|
10
|
+
- OMN-1134: Registry Projection Extensions for Capabilities
|
|
11
|
+
- OMN-1135: CapabilityQueryService (consumer of this protocol)
|
|
12
|
+
|
|
13
|
+
Example:
|
|
14
|
+
>>> class CapabilityQueryService:
|
|
15
|
+
... def __init__(self, reader: ProtocolCapabilityProjection):
|
|
16
|
+
... self._reader = reader
|
|
17
|
+
...
|
|
18
|
+
... async def find_postgres_adapters(self) -> list[ModelRegistrationProjection]:
|
|
19
|
+
... return await self._reader.get_by_capability_tag("postgres.storage")
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
from typing import TYPE_CHECKING, Protocol, runtime_checkable
|
|
25
|
+
from uuid import UUID
|
|
26
|
+
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from omnibase_infra.enums import EnumRegistrationState
|
|
29
|
+
from omnibase_infra.models.projection.model_registration_projection import (
|
|
30
|
+
ContractType,
|
|
31
|
+
ModelRegistrationProjection,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@runtime_checkable
|
|
36
|
+
class ProtocolCapabilityProjection(Protocol):
|
|
37
|
+
"""Protocol for capability-based projection queries.
|
|
38
|
+
|
|
39
|
+
Defines the interface for querying registration projections by capability
|
|
40
|
+
fields. Implementations use GIN-indexed PostgreSQL array queries for
|
|
41
|
+
efficient lookups.
|
|
42
|
+
|
|
43
|
+
Canonical Implementation:
|
|
44
|
+
The reference implementation of this protocol is
|
|
45
|
+
``ProjectionReaderRegistration`` in:
|
|
46
|
+
|
|
47
|
+
``omnibase_infra/projectors/projection_reader_registration.py``
|
|
48
|
+
|
|
49
|
+
This implementation provides:
|
|
50
|
+
- asyncpg-based PostgreSQL queries with connection pooling
|
|
51
|
+
- Circuit breaker resilience (MixinAsyncCircuitBreaker)
|
|
52
|
+
- Parameterized queries for SQL injection protection
|
|
53
|
+
- Consistent error handling with InfraConnectionError/InfraTimeoutError
|
|
54
|
+
- Optional state filtering on all capability query methods
|
|
55
|
+
|
|
56
|
+
Methods:
|
|
57
|
+
get_by_capability_tag: Find nodes by capability tag (e.g., "postgres.storage").
|
|
58
|
+
Uses GIN index on capability_tags column.
|
|
59
|
+
get_by_intent_type: Find nodes by intent type they handle (e.g., "postgres.query").
|
|
60
|
+
Uses GIN index on intent_types column.
|
|
61
|
+
get_by_protocol: Find nodes implementing a specific protocol
|
|
62
|
+
(e.g., "ProtocolEventPublisher"). Uses GIN index on protocols column.
|
|
63
|
+
get_by_contract_type: Find nodes by contract type (effect, compute, reducer,
|
|
64
|
+
orchestrator). Uses B-tree index on contract_type column.
|
|
65
|
+
get_by_capability_tags_all: Find nodes with ALL specified tags.
|
|
66
|
+
Uses GIN index with @> (contains all) operator.
|
|
67
|
+
get_by_capability_tags_any: Find nodes with ANY of the specified tags.
|
|
68
|
+
Uses GIN index with && (overlaps) operator.
|
|
69
|
+
|
|
70
|
+
Query Performance:
|
|
71
|
+
All methods use GIN-indexed array queries which provide:
|
|
72
|
+
- O(log n) lookup time for single-element containment
|
|
73
|
+
- Efficient multi-tag queries using array operators
|
|
74
|
+
- Automatic index selection by PostgreSQL query planner
|
|
75
|
+
|
|
76
|
+
Example:
|
|
77
|
+
>>> import asyncpg
|
|
78
|
+
>>> from omnibase_infra.projectors import ProjectionReaderRegistration
|
|
79
|
+
>>> from omnibase_infra.enums import EnumRegistrationState
|
|
80
|
+
>>>
|
|
81
|
+
>>> # Create reader with connection pool
|
|
82
|
+
>>> pool = await asyncpg.create_pool(dsn)
|
|
83
|
+
>>> reader = ProjectionReaderRegistration(pool)
|
|
84
|
+
>>>
|
|
85
|
+
>>> # Find all active Kafka consumers
|
|
86
|
+
>>> kafka_nodes = await reader.get_by_capability_tag(
|
|
87
|
+
... "kafka.consumer",
|
|
88
|
+
... state=EnumRegistrationState.ACTIVE,
|
|
89
|
+
... )
|
|
90
|
+
>>>
|
|
91
|
+
>>> # Find nodes implementing a protocol
|
|
92
|
+
>>> publishers = await reader.get_by_protocol("ProtocolEventPublisher")
|
|
93
|
+
>>>
|
|
94
|
+
>>> # Find effect nodes
|
|
95
|
+
>>> effects = await reader.get_by_contract_type("effect")
|
|
96
|
+
|
|
97
|
+
See Also:
|
|
98
|
+
- ``ProtocolProjectionReader``: Base protocol for all projection readers
|
|
99
|
+
- ``ModelRegistrationProjection``: The projection model returned by queries
|
|
100
|
+
- ``EnumRegistrationState``: FSM states for optional state filtering
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
async def get_by_capability_tag(
|
|
104
|
+
self,
|
|
105
|
+
tag: str,
|
|
106
|
+
state: EnumRegistrationState | None = None,
|
|
107
|
+
correlation_id: UUID | None = None,
|
|
108
|
+
) -> list[ModelRegistrationProjection]:
|
|
109
|
+
"""Find all registrations with the specified capability tag.
|
|
110
|
+
|
|
111
|
+
Uses GIN index on capability_tags column for efficient lookup.
|
|
112
|
+
|
|
113
|
+
Args:
|
|
114
|
+
tag: The capability tag to search for (e.g., "postgres.storage")
|
|
115
|
+
state: Optional state filter (e.g., EnumRegistrationState.ACTIVE)
|
|
116
|
+
correlation_id: Optional correlation ID for distributed tracing
|
|
117
|
+
|
|
118
|
+
Returns:
|
|
119
|
+
List of matching registration projections
|
|
120
|
+
|
|
121
|
+
Example:
|
|
122
|
+
>>> adapters = await reader.get_by_capability_tag("kafka.consumer")
|
|
123
|
+
>>> for adapter in adapters:
|
|
124
|
+
... print(f"{adapter.entity_id}: {adapter.node_type}")
|
|
125
|
+
"""
|
|
126
|
+
...
|
|
127
|
+
|
|
128
|
+
async def get_by_intent_type(
|
|
129
|
+
self,
|
|
130
|
+
intent_type: str,
|
|
131
|
+
state: EnumRegistrationState | None = None,
|
|
132
|
+
correlation_id: UUID | None = None,
|
|
133
|
+
) -> list[ModelRegistrationProjection]:
|
|
134
|
+
"""Find all registrations that handle the specified intent type.
|
|
135
|
+
|
|
136
|
+
Uses GIN index on intent_types column for efficient lookup.
|
|
137
|
+
|
|
138
|
+
Args:
|
|
139
|
+
intent_type: The intent type to search for (e.g., "postgres.upsert")
|
|
140
|
+
state: Optional state filter (e.g., EnumRegistrationState.ACTIVE)
|
|
141
|
+
correlation_id: Optional correlation ID for distributed tracing
|
|
142
|
+
|
|
143
|
+
Returns:
|
|
144
|
+
List of matching registration projections
|
|
145
|
+
|
|
146
|
+
Example:
|
|
147
|
+
>>> handlers = await reader.get_by_intent_type("postgres.query")
|
|
148
|
+
>>> for handler in handlers:
|
|
149
|
+
... print(f"Can handle postgres.query: {handler.entity_id}")
|
|
150
|
+
"""
|
|
151
|
+
...
|
|
152
|
+
|
|
153
|
+
async def get_by_protocol(
|
|
154
|
+
self,
|
|
155
|
+
protocol_name: str,
|
|
156
|
+
state: EnumRegistrationState | None = None,
|
|
157
|
+
correlation_id: UUID | None = None,
|
|
158
|
+
) -> list[ModelRegistrationProjection]:
|
|
159
|
+
"""Find all registrations implementing the specified protocol.
|
|
160
|
+
|
|
161
|
+
Uses GIN index on protocols column for efficient lookup.
|
|
162
|
+
|
|
163
|
+
Args:
|
|
164
|
+
protocol_name: The protocol name (e.g., "ProtocolDatabaseAdapter")
|
|
165
|
+
state: Optional state filter (e.g., EnumRegistrationState.ACTIVE)
|
|
166
|
+
correlation_id: Optional correlation ID for distributed tracing
|
|
167
|
+
|
|
168
|
+
Returns:
|
|
169
|
+
List of matching registration projections
|
|
170
|
+
|
|
171
|
+
Example:
|
|
172
|
+
>>> adapters = await reader.get_by_protocol("ProtocolEventPublisher")
|
|
173
|
+
>>> print(f"Found {len(adapters)} event publishers")
|
|
174
|
+
"""
|
|
175
|
+
...
|
|
176
|
+
|
|
177
|
+
async def get_by_contract_type(
|
|
178
|
+
self,
|
|
179
|
+
contract_type: ContractType,
|
|
180
|
+
state: EnumRegistrationState | None = None,
|
|
181
|
+
correlation_id: UUID | None = None,
|
|
182
|
+
) -> list[ModelRegistrationProjection]:
|
|
183
|
+
"""Find all registrations of the specified contract type.
|
|
184
|
+
|
|
185
|
+
Uses B-tree index on contract_type column for efficient lookup.
|
|
186
|
+
|
|
187
|
+
Args:
|
|
188
|
+
contract_type: The contract type. Must be one of: "effect", "compute",
|
|
189
|
+
"reducer", or "orchestrator"
|
|
190
|
+
state: Optional state filter (e.g., EnumRegistrationState.ACTIVE)
|
|
191
|
+
correlation_id: Optional correlation ID for distributed tracing
|
|
192
|
+
|
|
193
|
+
Returns:
|
|
194
|
+
List of matching registration projections
|
|
195
|
+
|
|
196
|
+
Example:
|
|
197
|
+
>>> effects = await reader.get_by_contract_type("effect")
|
|
198
|
+
>>> print(f"Found {len(effects)} effect nodes")
|
|
199
|
+
"""
|
|
200
|
+
...
|
|
201
|
+
|
|
202
|
+
async def get_by_capability_tags_all(
|
|
203
|
+
self,
|
|
204
|
+
tags: list[str],
|
|
205
|
+
state: EnumRegistrationState | None = None,
|
|
206
|
+
correlation_id: UUID | None = None,
|
|
207
|
+
) -> list[ModelRegistrationProjection]:
|
|
208
|
+
"""Find registrations with ALL specified capability tags.
|
|
209
|
+
|
|
210
|
+
Uses GIN index with @> (contains all) operator.
|
|
211
|
+
|
|
212
|
+
Args:
|
|
213
|
+
tags: List of capability tags that must all be present
|
|
214
|
+
state: Optional state filter (e.g., EnumRegistrationState.ACTIVE)
|
|
215
|
+
correlation_id: Optional correlation ID for distributed tracing
|
|
216
|
+
|
|
217
|
+
Returns:
|
|
218
|
+
List of matching registration projections
|
|
219
|
+
|
|
220
|
+
Example:
|
|
221
|
+
>>> adapters = await reader.get_by_capability_tags_all(
|
|
222
|
+
... ["postgres.storage", "transactions"]
|
|
223
|
+
... )
|
|
224
|
+
"""
|
|
225
|
+
...
|
|
226
|
+
|
|
227
|
+
async def get_by_capability_tags_any(
|
|
228
|
+
self,
|
|
229
|
+
tags: list[str],
|
|
230
|
+
state: EnumRegistrationState | None = None,
|
|
231
|
+
correlation_id: UUID | None = None,
|
|
232
|
+
) -> list[ModelRegistrationProjection]:
|
|
233
|
+
"""Find registrations with ANY of the specified capability tags.
|
|
234
|
+
|
|
235
|
+
Uses GIN index with && (overlaps) operator.
|
|
236
|
+
|
|
237
|
+
Args:
|
|
238
|
+
tags: List of capability tags, at least one must be present
|
|
239
|
+
state: Optional state filter (e.g., EnumRegistrationState.ACTIVE)
|
|
240
|
+
correlation_id: Optional correlation ID for distributed tracing
|
|
241
|
+
|
|
242
|
+
Returns:
|
|
243
|
+
List of matching registration projections
|
|
244
|
+
|
|
245
|
+
Example:
|
|
246
|
+
>>> adapters = await reader.get_by_capability_tags_any(
|
|
247
|
+
... ["postgres.storage", "mysql.storage", "sqlite.storage"]
|
|
248
|
+
... )
|
|
249
|
+
"""
|
|
250
|
+
...
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
__all__: list[str] = ["ProtocolCapabilityProjection"]
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Protocol for Capability-Based Node Query Service.
|
|
4
|
+
|
|
5
|
+
Defines the protocol interface for querying nodes by capability rather than
|
|
6
|
+
by name. This enables capability-based auto-configuration where consumers
|
|
7
|
+
declare what they need, not who provides it.
|
|
8
|
+
|
|
9
|
+
Core Principle: "I'm interested in what you do, not what you are."
|
|
10
|
+
|
|
11
|
+
Related Tickets:
|
|
12
|
+
- OMN-1135: ServiceCapabilityQuery for capability-based discovery
|
|
13
|
+
- OMN-1134: Registry Projection Extensions for Capabilities
|
|
14
|
+
|
|
15
|
+
Example:
|
|
16
|
+
>>> class MyCapabilityQuery:
|
|
17
|
+
... async def find_nodes_by_capability(
|
|
18
|
+
... self, capability: str, ...
|
|
19
|
+
... ) -> list[ModelRegistrationProjection]:
|
|
20
|
+
... # Query registry for nodes with this capability
|
|
21
|
+
... ...
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from __future__ import annotations
|
|
25
|
+
|
|
26
|
+
from typing import TYPE_CHECKING, Protocol, runtime_checkable
|
|
27
|
+
from uuid import UUID
|
|
28
|
+
|
|
29
|
+
if TYPE_CHECKING:
|
|
30
|
+
from omnibase_infra.enums import EnumRegistrationState
|
|
31
|
+
from omnibase_infra.models.discovery.model_dependency_spec import (
|
|
32
|
+
ModelDependencySpec,
|
|
33
|
+
)
|
|
34
|
+
from omnibase_infra.models.projection.model_registration_projection import (
|
|
35
|
+
ModelRegistrationProjection,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@runtime_checkable
|
|
40
|
+
class ProtocolCapabilityQuery(Protocol):
|
|
41
|
+
"""Protocol for capability-based node queries.
|
|
42
|
+
|
|
43
|
+
Defines the interface for querying registration projections by capability
|
|
44
|
+
attributes (capability tags, intent types, protocols) rather than by name.
|
|
45
|
+
|
|
46
|
+
This protocol enables loose coupling between consumers and providers:
|
|
47
|
+
consumers declare what capabilities they need, and the system discovers
|
|
48
|
+
which nodes provide them.
|
|
49
|
+
|
|
50
|
+
Canonical Implementation:
|
|
51
|
+
The reference implementation of this protocol is
|
|
52
|
+
``ServiceCapabilityQuery`` in:
|
|
53
|
+
|
|
54
|
+
``omnibase_infra/services/service_capability_query.py``
|
|
55
|
+
|
|
56
|
+
This implementation provides:
|
|
57
|
+
- Delegation to ProjectionReaderRegistration for database queries
|
|
58
|
+
- Contract type filtering
|
|
59
|
+
- Dependency resolution from ModelDependencySpec
|
|
60
|
+
- Node selection strategies (first, random, round-robin, least-loaded)
|
|
61
|
+
|
|
62
|
+
Methods:
|
|
63
|
+
find_nodes_by_capability: Find nodes by capability tag.
|
|
64
|
+
find_nodes_by_intent_type: Find effect nodes by intent type handled.
|
|
65
|
+
find_nodes_by_protocol: Find nodes implementing a specific protocol.
|
|
66
|
+
resolve_dependency: Resolve a ModelDependencySpec to a concrete node.
|
|
67
|
+
|
|
68
|
+
Example:
|
|
69
|
+
>>> from omnibase_infra.services import ServiceCapabilityQuery
|
|
70
|
+
>>> from omnibase_infra.projectors import ProjectionReaderRegistration
|
|
71
|
+
>>>
|
|
72
|
+
>>> reader = ProjectionReaderRegistration(pool)
|
|
73
|
+
>>> query = ServiceCapabilityQuery(reader)
|
|
74
|
+
>>>
|
|
75
|
+
>>> # Find all Kafka consumers
|
|
76
|
+
>>> kafka_nodes = await query.find_nodes_by_capability("kafka.consumer")
|
|
77
|
+
>>>
|
|
78
|
+
>>> # Find nodes that handle postgres.upsert intent
|
|
79
|
+
>>> handlers = await query.find_nodes_by_intent_type("postgres.upsert")
|
|
80
|
+
>>>
|
|
81
|
+
>>> # Resolve a dependency specification
|
|
82
|
+
>>> spec = ModelDependencySpec(
|
|
83
|
+
... name="storage",
|
|
84
|
+
... type="node",
|
|
85
|
+
... capability="postgres.storage",
|
|
86
|
+
... )
|
|
87
|
+
>>> node = await query.resolve_dependency(spec)
|
|
88
|
+
|
|
89
|
+
See Also:
|
|
90
|
+
- ``ProtocolCapabilityProjection``: Lower-level projection query protocol
|
|
91
|
+
- ``ModelDependencySpec``: Dependency specification model
|
|
92
|
+
- ``ModelRegistrationProjection``: The projection model returned by queries
|
|
93
|
+
- ``EnumRegistrationState``: FSM states for optional state filtering
|
|
94
|
+
"""
|
|
95
|
+
|
|
96
|
+
async def find_nodes_by_capability(
|
|
97
|
+
self,
|
|
98
|
+
capability: str,
|
|
99
|
+
contract_type: str | None = None,
|
|
100
|
+
state: EnumRegistrationState | None = None,
|
|
101
|
+
correlation_id: UUID | None = None,
|
|
102
|
+
) -> list[ModelRegistrationProjection]:
|
|
103
|
+
"""Find nodes that provide a specific capability.
|
|
104
|
+
|
|
105
|
+
Queries the registry for nodes with the specified capability tag.
|
|
106
|
+
Optionally filters by contract type and registration state.
|
|
107
|
+
|
|
108
|
+
Args:
|
|
109
|
+
capability: Capability tag to search for (e.g., "postgres.storage",
|
|
110
|
+
"kafka.consumer", "consul.registration").
|
|
111
|
+
contract_type: Optional filter by contract type ("effect", "compute",
|
|
112
|
+
"reducer", "orchestrator").
|
|
113
|
+
state: Registration state filter. When None (default), filters to
|
|
114
|
+
EnumRegistrationState.ACTIVE to return only actively registered
|
|
115
|
+
nodes. Pass an explicit EnumRegistrationState value to query
|
|
116
|
+
nodes in other states (e.g., PENDING_REGISTRATION, LIVENESS_EXPIRED).
|
|
117
|
+
correlation_id: Optional correlation ID for distributed tracing.
|
|
118
|
+
When provided, included in all log messages for request tracking.
|
|
119
|
+
|
|
120
|
+
Returns:
|
|
121
|
+
List of matching registration projections. Empty list if no matches.
|
|
122
|
+
|
|
123
|
+
Example:
|
|
124
|
+
>>> nodes = await query.find_nodes_by_capability(
|
|
125
|
+
... "postgres.storage",
|
|
126
|
+
... contract_type="effect",
|
|
127
|
+
... state=EnumRegistrationState.ACTIVE,
|
|
128
|
+
... correlation_id=uuid4(),
|
|
129
|
+
... )
|
|
130
|
+
>>> for node in nodes:
|
|
131
|
+
... print(f"Found: {node.entity_id}")
|
|
132
|
+
"""
|
|
133
|
+
...
|
|
134
|
+
|
|
135
|
+
async def find_nodes_by_intent_type(
|
|
136
|
+
self,
|
|
137
|
+
intent_type: str,
|
|
138
|
+
contract_type: str = "effect",
|
|
139
|
+
state: EnumRegistrationState | None = None,
|
|
140
|
+
correlation_id: UUID | None = None,
|
|
141
|
+
) -> list[ModelRegistrationProjection]:
|
|
142
|
+
"""Find effect nodes that handle a specific intent type.
|
|
143
|
+
|
|
144
|
+
Queries the registry for nodes that can handle the specified intent type.
|
|
145
|
+
Typically used to find effect nodes that execute specific intents.
|
|
146
|
+
|
|
147
|
+
Args:
|
|
148
|
+
intent_type: Intent type to search for (e.g., "postgres.upsert",
|
|
149
|
+
"consul.register", "kafka.publish").
|
|
150
|
+
contract_type: Filter by contract type (default: "effect").
|
|
151
|
+
Intents are typically handled by effect nodes.
|
|
152
|
+
state: Registration state filter. When None (default), filters to
|
|
153
|
+
EnumRegistrationState.ACTIVE to return only actively registered
|
|
154
|
+
nodes. Pass an explicit EnumRegistrationState value to query
|
|
155
|
+
nodes in other states (e.g., PENDING_REGISTRATION, LIVENESS_EXPIRED).
|
|
156
|
+
correlation_id: Optional correlation ID for distributed tracing.
|
|
157
|
+
When provided, included in all log messages for request tracking.
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
List of matching registration projections. Empty list if no matches.
|
|
161
|
+
|
|
162
|
+
Example:
|
|
163
|
+
>>> handlers = await query.find_nodes_by_intent_type(
|
|
164
|
+
... "postgres.query",
|
|
165
|
+
... contract_type="effect",
|
|
166
|
+
... state=EnumRegistrationState.ACTIVE,
|
|
167
|
+
... correlation_id=uuid4(),
|
|
168
|
+
... )
|
|
169
|
+
>>> for handler in handlers:
|
|
170
|
+
... print(f"Can handle postgres.query: {handler.entity_id}")
|
|
171
|
+
"""
|
|
172
|
+
...
|
|
173
|
+
|
|
174
|
+
async def find_nodes_by_protocol(
|
|
175
|
+
self,
|
|
176
|
+
protocol: str,
|
|
177
|
+
contract_type: str | None = None,
|
|
178
|
+
state: EnumRegistrationState | None = None,
|
|
179
|
+
correlation_id: UUID | None = None,
|
|
180
|
+
) -> list[ModelRegistrationProjection]:
|
|
181
|
+
"""Find nodes implementing a specific protocol.
|
|
182
|
+
|
|
183
|
+
Queries the registry for nodes that implement the specified protocol.
|
|
184
|
+
Useful for finding nodes that satisfy interface requirements.
|
|
185
|
+
|
|
186
|
+
Args:
|
|
187
|
+
protocol: Protocol name to search for (e.g., "ProtocolEventPublisher",
|
|
188
|
+
"ProtocolReducer", "ProtocolDatabaseAdapter").
|
|
189
|
+
contract_type: Optional filter by contract type ("effect", "compute",
|
|
190
|
+
"reducer", "orchestrator").
|
|
191
|
+
state: Registration state filter. When None (default), filters to
|
|
192
|
+
EnumRegistrationState.ACTIVE to return only actively registered
|
|
193
|
+
nodes. Pass an explicit EnumRegistrationState value to query
|
|
194
|
+
nodes in other states (e.g., PENDING_REGISTRATION, LIVENESS_EXPIRED).
|
|
195
|
+
correlation_id: Optional correlation ID for distributed tracing.
|
|
196
|
+
When provided, included in all log messages for request tracking.
|
|
197
|
+
|
|
198
|
+
Returns:
|
|
199
|
+
List of matching registration projections. Empty list if no matches.
|
|
200
|
+
|
|
201
|
+
Example:
|
|
202
|
+
>>> adapters = await query.find_nodes_by_protocol(
|
|
203
|
+
... "ProtocolEventPublisher",
|
|
204
|
+
... state=EnumRegistrationState.ACTIVE,
|
|
205
|
+
... correlation_id=uuid4(),
|
|
206
|
+
... )
|
|
207
|
+
>>> print(f"Found {len(adapters)} event publishers")
|
|
208
|
+
"""
|
|
209
|
+
...
|
|
210
|
+
|
|
211
|
+
async def resolve_dependency(
|
|
212
|
+
self,
|
|
213
|
+
dependency_spec: ModelDependencySpec,
|
|
214
|
+
correlation_id: UUID | None = None,
|
|
215
|
+
) -> ModelRegistrationProjection | None:
|
|
216
|
+
"""Resolve a dependency specification to a concrete node.
|
|
217
|
+
|
|
218
|
+
Uses the dependency specification to query the registry and select
|
|
219
|
+
a node that matches the specified capability criteria.
|
|
220
|
+
|
|
221
|
+
Resolution Strategy:
|
|
222
|
+
1. If capability specified -> find by capability
|
|
223
|
+
2. If intent_types specified -> find by intent type
|
|
224
|
+
3. If protocol specified -> find by protocol
|
|
225
|
+
4. Apply selection strategy to choose among matches
|
|
226
|
+
|
|
227
|
+
Args:
|
|
228
|
+
dependency_spec: Dependency specification from contract.
|
|
229
|
+
Contains capability filters and selection strategy.
|
|
230
|
+
correlation_id: Optional correlation ID for distributed tracing.
|
|
231
|
+
When provided, included in all log messages for request tracking.
|
|
232
|
+
|
|
233
|
+
Returns:
|
|
234
|
+
Resolved node registration, or None if not found.
|
|
235
|
+
|
|
236
|
+
Example:
|
|
237
|
+
>>> spec = ModelDependencySpec(
|
|
238
|
+
... name="storage",
|
|
239
|
+
... type="node",
|
|
240
|
+
... capability="postgres.storage",
|
|
241
|
+
... contract_type="effect",
|
|
242
|
+
... selection_strategy="round_robin",
|
|
243
|
+
... )
|
|
244
|
+
>>> node = await query.resolve_dependency(spec, correlation_id=uuid4())
|
|
245
|
+
>>> if node:
|
|
246
|
+
... print(f"Resolved to: {node.entity_id}")
|
|
247
|
+
"""
|
|
248
|
+
...
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
__all__: list[str] = ["ProtocolCapabilityQuery"]
|