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,211 @@
|
|
|
1
|
+
"""Capability inference rules for deriving tags from contract structure.
|
|
2
|
+
|
|
3
|
+
This module provides deterministic pattern matching to infer capability tags
|
|
4
|
+
from contract fields like intent_types and protocols. Rules are injectable
|
|
5
|
+
via constructor for extensibility while providing sensible defaults.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class CapabilityInferenceRules:
|
|
12
|
+
"""Code-driven capability inference rules with injectable patterns.
|
|
13
|
+
|
|
14
|
+
Deterministic pattern matching for inferring capability_tags from
|
|
15
|
+
contract structure. All rule mappings are injectable via constructor
|
|
16
|
+
while providing sensible defaults.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
intent_patterns: Custom/additional intent patterns (merged with defaults).
|
|
20
|
+
protocol_tags: Custom/additional protocol tags (merged with defaults).
|
|
21
|
+
node_type_tags: Custom/additional node type tags (merged with defaults).
|
|
22
|
+
|
|
23
|
+
Example:
|
|
24
|
+
# Use defaults
|
|
25
|
+
rules = CapabilityInferenceRules()
|
|
26
|
+
|
|
27
|
+
# Override specific pattern
|
|
28
|
+
rules = CapabilityInferenceRules(
|
|
29
|
+
intent_patterns={"redis.": "redis.caching"}
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
# Override existing pattern
|
|
33
|
+
rules = CapabilityInferenceRules(
|
|
34
|
+
intent_patterns={"postgres.": "custom.database"}
|
|
35
|
+
)
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
# Default intent pattern -> capability tag mappings
|
|
39
|
+
DEFAULT_INTENT_PATTERNS: dict[str, str] = {
|
|
40
|
+
"postgres.": "postgres.storage",
|
|
41
|
+
"consul.": "consul.registration",
|
|
42
|
+
"kafka.": "kafka.messaging",
|
|
43
|
+
"vault.": "vault.secrets",
|
|
44
|
+
"valkey.": "valkey.caching",
|
|
45
|
+
"http.": "http.transport",
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
# Default protocol -> capability tag mappings
|
|
49
|
+
DEFAULT_PROTOCOL_TAGS: dict[str, str] = {
|
|
50
|
+
"ProtocolReducer": "state.reducer",
|
|
51
|
+
"ProtocolDatabaseAdapter": "database.adapter",
|
|
52
|
+
"ProtocolEventBus": "event.bus",
|
|
53
|
+
"ProtocolCacheAdapter": "cache.adapter",
|
|
54
|
+
"ProtocolServiceDiscovery": "service.discovery",
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
# Default node type -> base capability tag
|
|
58
|
+
DEFAULT_NODE_TYPE_TAGS: dict[str, str] = {
|
|
59
|
+
"effect": "node.effect",
|
|
60
|
+
"compute": "node.compute",
|
|
61
|
+
"reducer": "node.reducer",
|
|
62
|
+
"orchestrator": "node.orchestrator",
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
def __init__(
|
|
66
|
+
self,
|
|
67
|
+
intent_patterns: dict[str, str] | None = None,
|
|
68
|
+
protocol_tags: dict[str, str] | None = None,
|
|
69
|
+
node_type_tags: dict[str, str] | None = None,
|
|
70
|
+
) -> None:
|
|
71
|
+
"""Initialize with optional custom rules.
|
|
72
|
+
|
|
73
|
+
Custom rules are merged with defaults. If a custom rule has the same
|
|
74
|
+
key as a default rule, the custom rule takes precedence (override).
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
intent_patterns: Custom/additional intent patterns (merged with defaults).
|
|
78
|
+
protocol_tags: Custom/additional protocol tags (merged with defaults).
|
|
79
|
+
node_type_tags: Custom/additional node type tags (merged with defaults).
|
|
80
|
+
"""
|
|
81
|
+
self._intent_patterns = {
|
|
82
|
+
**self.DEFAULT_INTENT_PATTERNS,
|
|
83
|
+
**(intent_patterns or {}),
|
|
84
|
+
}
|
|
85
|
+
self._protocol_tags = {
|
|
86
|
+
**self.DEFAULT_PROTOCOL_TAGS,
|
|
87
|
+
**(protocol_tags or {}),
|
|
88
|
+
}
|
|
89
|
+
self._node_type_tags = {
|
|
90
|
+
**self.DEFAULT_NODE_TYPE_TAGS,
|
|
91
|
+
**(node_type_tags or {}),
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
def infer_from_intent_types(self, intent_types: list[str]) -> list[str]:
|
|
95
|
+
"""Infer capability tags from intent type patterns.
|
|
96
|
+
|
|
97
|
+
Pattern matching uses first-match-wins semantics: each intent is matched
|
|
98
|
+
against patterns in iteration order, and only the FIRST matching pattern
|
|
99
|
+
is used (early exit via break). This is intentional because intents should
|
|
100
|
+
belong to a single capability category.
|
|
101
|
+
|
|
102
|
+
Example:
|
|
103
|
+
- "postgres.upsert" matches "postgres." -> "postgres.storage"
|
|
104
|
+
- "postgres.kafka.hybrid" matches "postgres." only (NOT both postgres and kafka)
|
|
105
|
+
|
|
106
|
+
Args:
|
|
107
|
+
intent_types: List of intent type strings (e.g., ["postgres.upsert", "consul.register"])
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
Sorted list of inferred capability tags (deduplicated)
|
|
111
|
+
"""
|
|
112
|
+
tags: set[str] = set()
|
|
113
|
+
for intent in intent_types:
|
|
114
|
+
if intent is None: # Skip None values
|
|
115
|
+
continue
|
|
116
|
+
for pattern, tag in self._intent_patterns.items():
|
|
117
|
+
if intent.startswith(pattern):
|
|
118
|
+
tags.add(tag)
|
|
119
|
+
break
|
|
120
|
+
return sorted(tags)
|
|
121
|
+
|
|
122
|
+
def infer_from_protocols(self, protocols: list[str]) -> list[str]:
|
|
123
|
+
"""Infer capability tags from protocol names.
|
|
124
|
+
|
|
125
|
+
Matching behavior:
|
|
126
|
+
- Exact match: "ProtocolReducer" matches DEFAULT_PROTOCOL_TAGS["ProtocolReducer"]
|
|
127
|
+
- Suffix match: "MyCustomProtocolReducer" also matches because it ends with "ProtocolReducer"
|
|
128
|
+
- No match: "ProtocolReducerExtended" does NOT match (doesn't end with known protocol)
|
|
129
|
+
|
|
130
|
+
This allows custom-prefixed protocol implementations to inherit base capability tags.
|
|
131
|
+
|
|
132
|
+
Warning:
|
|
133
|
+
Suffix matching can cause unexpected over-matching if your protocol name
|
|
134
|
+
accidentally ends with a known protocol name. The matching is strict:
|
|
135
|
+
the protocol name must END with the exact known protocol string.
|
|
136
|
+
|
|
137
|
+
Examples:
|
|
138
|
+
Protocols that MATCH (suffix ends with known protocol)::
|
|
139
|
+
|
|
140
|
+
"ProtocolReducer" -> matches "ProtocolReducer" (exact match)
|
|
141
|
+
"MyCustomProtocolReducer" -> matches "ProtocolReducer" (suffix match)
|
|
142
|
+
"InfraProtocolDatabaseAdapter" -> matches "ProtocolDatabaseAdapter"
|
|
143
|
+
"V2ProtocolEventBus" -> matches "ProtocolEventBus"
|
|
144
|
+
|
|
145
|
+
Protocols that DO NOT MATCH (suffix has additional characters)::
|
|
146
|
+
|
|
147
|
+
"ProtocolReducerV2" -> NO match (ends with "V2", not "ProtocolReducer")
|
|
148
|
+
"ProtocolReducerExtended" -> NO match (ends with "Extended")
|
|
149
|
+
"ProtocolReducerExtendedVersion" -> NO match (ends with "Version")
|
|
150
|
+
"MyReducer" -> NO match (must end with full "ProtocolReducer")
|
|
151
|
+
"ProtocolReducerImpl" -> NO match (ends with "Impl")
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
protocols: List of protocol class names
|
|
155
|
+
|
|
156
|
+
Returns:
|
|
157
|
+
Sorted list of inferred capability tags (deduplicated)
|
|
158
|
+
"""
|
|
159
|
+
tags: set[str] = set()
|
|
160
|
+
for protocol in protocols:
|
|
161
|
+
if protocol is None: # Skip None values
|
|
162
|
+
continue
|
|
163
|
+
# Check exact match
|
|
164
|
+
if protocol in self._protocol_tags:
|
|
165
|
+
tags.add(self._protocol_tags[protocol])
|
|
166
|
+
# Also check if protocol name ends with known suffix
|
|
167
|
+
for known_protocol, tag in self._protocol_tags.items():
|
|
168
|
+
if protocol.endswith(known_protocol):
|
|
169
|
+
tags.add(tag)
|
|
170
|
+
return sorted(tags)
|
|
171
|
+
|
|
172
|
+
def infer_from_node_type(self, node_type: str) -> list[str]:
|
|
173
|
+
"""Infer base capability tag from node type.
|
|
174
|
+
|
|
175
|
+
Args:
|
|
176
|
+
node_type: Node type string (effect, compute, reducer, orchestrator)
|
|
177
|
+
|
|
178
|
+
Returns:
|
|
179
|
+
List with single node type capability tag, or empty if unknown
|
|
180
|
+
"""
|
|
181
|
+
normalized = node_type.lower().replace("_generic", "")
|
|
182
|
+
if normalized in self._node_type_tags:
|
|
183
|
+
return [self._node_type_tags[normalized]]
|
|
184
|
+
return []
|
|
185
|
+
|
|
186
|
+
def infer_all(
|
|
187
|
+
self,
|
|
188
|
+
intent_types: list[str] | None = None,
|
|
189
|
+
protocols: list[str] | None = None,
|
|
190
|
+
node_type: str | None = None,
|
|
191
|
+
) -> list[str]:
|
|
192
|
+
"""Infer all capability tags from available contract data.
|
|
193
|
+
|
|
194
|
+
Args:
|
|
195
|
+
intent_types: Optional list of intent types
|
|
196
|
+
protocols: Optional list of protocol names
|
|
197
|
+
node_type: Optional node type string
|
|
198
|
+
|
|
199
|
+
Returns:
|
|
200
|
+
Sorted, deduplicated list of all inferred capability tags
|
|
201
|
+
"""
|
|
202
|
+
tags: set[str] = set()
|
|
203
|
+
|
|
204
|
+
if intent_types:
|
|
205
|
+
tags.update(self.infer_from_intent_types(intent_types))
|
|
206
|
+
if protocols:
|
|
207
|
+
tags.update(self.infer_from_protocols(protocols))
|
|
208
|
+
if node_type:
|
|
209
|
+
tags.update(self.infer_from_node_type(node_type))
|
|
210
|
+
|
|
211
|
+
return sorted(tags)
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"""Contract capability extractor for ONEX nodes.
|
|
2
|
+
|
|
3
|
+
Extracts ModelContractCapabilities from typed contract models.
|
|
4
|
+
No side effects, deterministic output.
|
|
5
|
+
|
|
6
|
+
OMN-1136: ContractCapabilityExtractor - Main extractor implementation.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import TYPE_CHECKING
|
|
12
|
+
|
|
13
|
+
from omnibase_core.models.capabilities import ModelContractCapabilities
|
|
14
|
+
from omnibase_core.models.primitives.model_semver import ModelSemVer
|
|
15
|
+
from omnibase_infra.capabilities.capability_inference_rules import (
|
|
16
|
+
CapabilityInferenceRules,
|
|
17
|
+
)
|
|
18
|
+
from omnibase_infra.capabilities.intent_type_extractor import IntentTypeExtractor
|
|
19
|
+
|
|
20
|
+
if TYPE_CHECKING:
|
|
21
|
+
from omnibase_core.models.contracts import (
|
|
22
|
+
ModelContractBase,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ContractCapabilityExtractor:
|
|
27
|
+
"""Extracts capabilities from typed contract models.
|
|
28
|
+
|
|
29
|
+
Responsibilities:
|
|
30
|
+
- Read capability-related fields from contract
|
|
31
|
+
- Apply inference rules to derive additional tags
|
|
32
|
+
- Union explicit + inferred capabilities
|
|
33
|
+
- Return deterministic, sorted output
|
|
34
|
+
|
|
35
|
+
This extractor is stateless and produces deterministic output
|
|
36
|
+
for the same contract input.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
rules: Optional custom CapabilityInferenceRules instance. If not provided,
|
|
40
|
+
uses a default instance with standard rule mappings.
|
|
41
|
+
|
|
42
|
+
Example:
|
|
43
|
+
# Use default rules
|
|
44
|
+
extractor = ContractCapabilityExtractor()
|
|
45
|
+
|
|
46
|
+
# Use custom rules
|
|
47
|
+
custom_rules = CapabilityInferenceRules(
|
|
48
|
+
intent_patterns={"redis.": "redis.caching"}
|
|
49
|
+
)
|
|
50
|
+
extractor = ContractCapabilityExtractor(rules=custom_rules)
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
def __init__(self, rules: CapabilityInferenceRules | None = None) -> None:
|
|
54
|
+
"""Initialize with optional custom inference rules.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
rules: Custom CapabilityInferenceRules instance. If None, creates
|
|
58
|
+
a default instance with standard rule mappings.
|
|
59
|
+
"""
|
|
60
|
+
self._rules = rules if rules is not None else CapabilityInferenceRules()
|
|
61
|
+
self._intent_extractor = IntentTypeExtractor()
|
|
62
|
+
|
|
63
|
+
def extract(self, contract: ModelContractBase) -> ModelContractCapabilities | None:
|
|
64
|
+
"""Extract capabilities from a contract model.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
contract: Typed contract model (Effect, Compute, Reducer, or Orchestrator)
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
ModelContractCapabilities with extracted data, or None if contract is None
|
|
71
|
+
|
|
72
|
+
Raises:
|
|
73
|
+
Any exceptions from extraction propagate (fail-fast behavior).
|
|
74
|
+
"""
|
|
75
|
+
if contract is None:
|
|
76
|
+
return None
|
|
77
|
+
|
|
78
|
+
# Extract contract type from node_type
|
|
79
|
+
contract_type = self._extract_contract_type(contract)
|
|
80
|
+
|
|
81
|
+
# Extract version
|
|
82
|
+
contract_version = self._extract_version(contract)
|
|
83
|
+
|
|
84
|
+
# Extract intent types (varies by node type)
|
|
85
|
+
intent_types = self._extract_intent_types(contract)
|
|
86
|
+
|
|
87
|
+
# Extract protocols from dependencies
|
|
88
|
+
protocols = self._extract_protocols(contract)
|
|
89
|
+
|
|
90
|
+
# Extract explicit capability tags from contract
|
|
91
|
+
explicit_tags = self._extract_explicit_tags(contract)
|
|
92
|
+
|
|
93
|
+
# Infer additional tags using rules
|
|
94
|
+
inferred_tags = self._rules.infer_all(
|
|
95
|
+
intent_types=intent_types,
|
|
96
|
+
protocols=protocols,
|
|
97
|
+
node_type=contract_type,
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
# Union explicit + inferred (deterministic), filtering out invalid tags
|
|
101
|
+
combined_tags = set(explicit_tags) | set(inferred_tags)
|
|
102
|
+
all_tags = sorted(tag for tag in combined_tags if self._validate_tag(tag))
|
|
103
|
+
|
|
104
|
+
return ModelContractCapabilities(
|
|
105
|
+
contract_type=contract_type,
|
|
106
|
+
contract_version=contract_version,
|
|
107
|
+
intent_types=sorted(set(intent_types)),
|
|
108
|
+
protocols=sorted(set(protocols)),
|
|
109
|
+
capability_tags=all_tags,
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
def _extract_contract_type(self, contract: ModelContractBase) -> str:
|
|
113
|
+
"""Extract normalized contract type string.
|
|
114
|
+
|
|
115
|
+
Raises:
|
|
116
|
+
ValueError: If contract does not have node_type field.
|
|
117
|
+
"""
|
|
118
|
+
node_type = getattr(contract, "node_type", None)
|
|
119
|
+
if node_type is None:
|
|
120
|
+
raise ValueError("Contract must have node_type field")
|
|
121
|
+
|
|
122
|
+
# Handle both enum and string, normalize to lowercase without _GENERIC suffix
|
|
123
|
+
type_str = node_type.value if hasattr(node_type, "value") else str(node_type)
|
|
124
|
+
return type_str.lower().replace("_generic", "")
|
|
125
|
+
|
|
126
|
+
def _extract_version(self, contract: ModelContractBase) -> ModelSemVer:
|
|
127
|
+
"""Extract contract version.
|
|
128
|
+
|
|
129
|
+
Raises:
|
|
130
|
+
ValueError: If contract_version is missing or not a ModelSemVer instance.
|
|
131
|
+
"""
|
|
132
|
+
version = getattr(contract, "contract_version", None)
|
|
133
|
+
if isinstance(version, ModelSemVer):
|
|
134
|
+
return version
|
|
135
|
+
raise ValueError(
|
|
136
|
+
f"Contract must have contract_version as ModelSemVer, "
|
|
137
|
+
f"got {type(version).__name__ if version is not None else 'None'}"
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
def _extract_intent_types(self, contract: ModelContractBase) -> list[str]:
|
|
141
|
+
"""Extract intent types based on node type.
|
|
142
|
+
|
|
143
|
+
Delegates to IntentTypeExtractor which handles extraction from
|
|
144
|
+
multiple sources based on node type.
|
|
145
|
+
|
|
146
|
+
Args:
|
|
147
|
+
contract: The contract model to extract intent types from.
|
|
148
|
+
|
|
149
|
+
Returns:
|
|
150
|
+
Combined list of intent types from all applicable sources.
|
|
151
|
+
"""
|
|
152
|
+
return self._intent_extractor.extract_all(contract)
|
|
153
|
+
|
|
154
|
+
def _extract_protocols(self, contract: ModelContractBase) -> list[str]:
|
|
155
|
+
"""Extract protocol names from dependencies and interfaces."""
|
|
156
|
+
protocols: list[str] = []
|
|
157
|
+
|
|
158
|
+
# From protocol_interfaces field
|
|
159
|
+
if hasattr(contract, "protocol_interfaces"):
|
|
160
|
+
protocol_interfaces = contract.protocol_interfaces
|
|
161
|
+
if protocol_interfaces:
|
|
162
|
+
for proto in protocol_interfaces:
|
|
163
|
+
if proto is not None: # Skip None values
|
|
164
|
+
protocols.append(proto)
|
|
165
|
+
|
|
166
|
+
# From dependencies where type is protocol
|
|
167
|
+
if hasattr(contract, "dependencies"):
|
|
168
|
+
dependencies = contract.dependencies
|
|
169
|
+
if dependencies:
|
|
170
|
+
for dep in dependencies:
|
|
171
|
+
# Check if it's a protocol dependency using is_protocol() method
|
|
172
|
+
if hasattr(dep, "is_protocol") and dep.is_protocol():
|
|
173
|
+
if hasattr(dep, "name") and dep.name:
|
|
174
|
+
protocols.append(dep.name)
|
|
175
|
+
# Fallback: check dependency_type directly
|
|
176
|
+
elif hasattr(dep, "dependency_type"):
|
|
177
|
+
dep_type = dep.dependency_type
|
|
178
|
+
type_str = (
|
|
179
|
+
dep_type.value
|
|
180
|
+
if hasattr(dep_type, "value")
|
|
181
|
+
else str(dep_type)
|
|
182
|
+
)
|
|
183
|
+
if type_str.upper() == "PROTOCOL":
|
|
184
|
+
if hasattr(dep, "name") and dep.name:
|
|
185
|
+
protocols.append(dep.name)
|
|
186
|
+
|
|
187
|
+
return protocols
|
|
188
|
+
|
|
189
|
+
def _validate_tag(self, tag: str | None) -> bool:
|
|
190
|
+
"""Validate a tag string.
|
|
191
|
+
|
|
192
|
+
Args:
|
|
193
|
+
tag: Tag string to validate.
|
|
194
|
+
|
|
195
|
+
Returns:
|
|
196
|
+
True if the tag is valid, False otherwise.
|
|
197
|
+
Invalid tags include: None, empty strings, whitespace-only strings.
|
|
198
|
+
"""
|
|
199
|
+
if tag is None:
|
|
200
|
+
return False
|
|
201
|
+
if not isinstance(tag, str):
|
|
202
|
+
return False
|
|
203
|
+
if tag == "":
|
|
204
|
+
return False
|
|
205
|
+
if tag.strip() == "":
|
|
206
|
+
return False
|
|
207
|
+
return True
|
|
208
|
+
|
|
209
|
+
def _extract_explicit_tags(self, contract: ModelContractBase) -> list[str]:
|
|
210
|
+
"""Extract explicitly declared capability tags from contract."""
|
|
211
|
+
tags: list[str] = []
|
|
212
|
+
|
|
213
|
+
# From top-level tags field (all contracts have this)
|
|
214
|
+
if hasattr(contract, "tags"):
|
|
215
|
+
contract_tags = contract.tags
|
|
216
|
+
if contract_tags:
|
|
217
|
+
for tag in contract_tags:
|
|
218
|
+
if self._validate_tag(tag):
|
|
219
|
+
tags.append(tag)
|
|
220
|
+
|
|
221
|
+
return tags
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"""Intent type extraction from ONEX contracts.
|
|
2
|
+
|
|
3
|
+
Extracts intent types from various contract structures including
|
|
4
|
+
event_type, consumed_events, published_events, and aggregation fields.
|
|
5
|
+
|
|
6
|
+
OMN-1136: Intent type extraction helper for ContractCapabilityExtractor.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import TYPE_CHECKING
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from omnibase_core.models.contracts import ModelContractBase
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class IntentTypeExtractor:
|
|
18
|
+
"""Extracts intent types from contract models.
|
|
19
|
+
|
|
20
|
+
This class handles extraction of intent types from various contract
|
|
21
|
+
structures. Different node types expose intent information in different
|
|
22
|
+
locations:
|
|
23
|
+
- Effect nodes: event_type.primary_events
|
|
24
|
+
- Orchestrator nodes: consumed_events[].event_pattern, published_events[].event_name
|
|
25
|
+
- Reducer nodes: aggregation.aggregation_functions
|
|
26
|
+
|
|
27
|
+
This extractor is stateless and produces deterministic output.
|
|
28
|
+
|
|
29
|
+
Example:
|
|
30
|
+
extractor = IntentTypeExtractor()
|
|
31
|
+
intent_types = extractor.extract_all(contract)
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
def extract_all(self, contract: ModelContractBase) -> list[str]:
|
|
35
|
+
"""Extract intent types from all applicable sources.
|
|
36
|
+
|
|
37
|
+
Combines intent types from event_type, consumed_events,
|
|
38
|
+
published_events, and aggregation fields.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
contract: The contract model to extract intent types from.
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
Combined list of intent types from all applicable sources.
|
|
45
|
+
"""
|
|
46
|
+
intent_types: list[str] = []
|
|
47
|
+
|
|
48
|
+
intent_types.extend(self._extract_from_event_type(contract))
|
|
49
|
+
intent_types.extend(self._extract_from_consumed_events(contract))
|
|
50
|
+
intent_types.extend(self._extract_from_published_events(contract))
|
|
51
|
+
intent_types.extend(self._extract_from_aggregation(contract))
|
|
52
|
+
|
|
53
|
+
return intent_types
|
|
54
|
+
|
|
55
|
+
def _extract_from_event_type(self, contract: ModelContractBase) -> list[str]:
|
|
56
|
+
"""Extract intent types from event_type.primary_events.
|
|
57
|
+
|
|
58
|
+
Used primarily by Effect nodes to declare the events they handle.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
contract: The contract model to extract from.
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
List of primary event types, or empty list if not present.
|
|
65
|
+
"""
|
|
66
|
+
if not hasattr(contract, "event_type"):
|
|
67
|
+
return []
|
|
68
|
+
|
|
69
|
+
event_type = contract.event_type
|
|
70
|
+
if event_type is None or not hasattr(event_type, "primary_events"):
|
|
71
|
+
return []
|
|
72
|
+
|
|
73
|
+
primary_events = event_type.primary_events
|
|
74
|
+
if not primary_events:
|
|
75
|
+
return []
|
|
76
|
+
|
|
77
|
+
return list(primary_events)
|
|
78
|
+
|
|
79
|
+
def _extract_from_consumed_events(self, contract: ModelContractBase) -> list[str]:
|
|
80
|
+
"""Extract intent types from consumed_events[].event_pattern.
|
|
81
|
+
|
|
82
|
+
Used by Orchestrator nodes to declare which events they subscribe to.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
contract: The contract model to extract from.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
List of event patterns from consumed events, or empty list if not present.
|
|
89
|
+
"""
|
|
90
|
+
if not hasattr(contract, "consumed_events"):
|
|
91
|
+
return []
|
|
92
|
+
|
|
93
|
+
consumed_events = contract.consumed_events
|
|
94
|
+
if not consumed_events:
|
|
95
|
+
return []
|
|
96
|
+
|
|
97
|
+
intent_types: list[str] = []
|
|
98
|
+
for event in consumed_events:
|
|
99
|
+
# ModelEventSubscription has event_pattern field
|
|
100
|
+
if hasattr(event, "event_pattern") and event.event_pattern:
|
|
101
|
+
intent_types.append(event.event_pattern)
|
|
102
|
+
|
|
103
|
+
return intent_types
|
|
104
|
+
|
|
105
|
+
def _extract_from_published_events(self, contract: ModelContractBase) -> list[str]:
|
|
106
|
+
"""Extract intent types from published_events[].event_name.
|
|
107
|
+
|
|
108
|
+
Used by Orchestrator nodes to declare which events they publish.
|
|
109
|
+
|
|
110
|
+
Args:
|
|
111
|
+
contract: The contract model to extract from.
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
List of event names from published events, or empty list if not present.
|
|
115
|
+
"""
|
|
116
|
+
if not hasattr(contract, "published_events"):
|
|
117
|
+
return []
|
|
118
|
+
|
|
119
|
+
published_events = contract.published_events
|
|
120
|
+
if not published_events:
|
|
121
|
+
return []
|
|
122
|
+
|
|
123
|
+
intent_types: list[str] = []
|
|
124
|
+
for event in published_events:
|
|
125
|
+
# ModelEventDescriptor has event_name field
|
|
126
|
+
if hasattr(event, "event_name") and event.event_name:
|
|
127
|
+
intent_types.append(event.event_name)
|
|
128
|
+
|
|
129
|
+
return intent_types
|
|
130
|
+
|
|
131
|
+
def _extract_from_aggregation(self, contract: ModelContractBase) -> list[str]:
|
|
132
|
+
"""Extract intent types from aggregation.aggregation_functions.
|
|
133
|
+
|
|
134
|
+
Used by Reducer nodes to declare aggregation patterns based on
|
|
135
|
+
the output fields of their aggregation functions.
|
|
136
|
+
|
|
137
|
+
Args:
|
|
138
|
+
contract: The contract model to extract from.
|
|
139
|
+
|
|
140
|
+
Returns:
|
|
141
|
+
List of aggregation intent types (prefixed with 'aggregate.'),
|
|
142
|
+
or empty list if not present.
|
|
143
|
+
"""
|
|
144
|
+
if not hasattr(contract, "aggregation"):
|
|
145
|
+
return []
|
|
146
|
+
|
|
147
|
+
aggregation = contract.aggregation
|
|
148
|
+
if aggregation is None or not hasattr(aggregation, "aggregation_functions"):
|
|
149
|
+
return []
|
|
150
|
+
|
|
151
|
+
agg_funcs = aggregation.aggregation_functions
|
|
152
|
+
if not agg_funcs:
|
|
153
|
+
return []
|
|
154
|
+
|
|
155
|
+
intent_types: list[str] = []
|
|
156
|
+
for func in agg_funcs:
|
|
157
|
+
if hasattr(func, "output_field") and func.output_field:
|
|
158
|
+
intent_types.append(f"aggregate.{func.output_field}")
|
|
159
|
+
|
|
160
|
+
return intent_types
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""ONEX Infrastructure CLI."""
|