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,368 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Protocol definition for deterministic compute plugins.
|
|
4
|
+
|
|
5
|
+
This module defines the ProtocolPluginCompute interface for plugins that perform
|
|
6
|
+
pure data transformations without side effects. This protocol is designed for use
|
|
7
|
+
with ONEX Compute nodes that require deterministic, reproducible operations.
|
|
8
|
+
|
|
9
|
+
Protocol Contract:
|
|
10
|
+
Compute plugins MUST guarantee deterministic behavior:
|
|
11
|
+
- Same inputs ALWAYS produce the same outputs
|
|
12
|
+
- No dependency on external state or randomness
|
|
13
|
+
- No side effects (no I/O, no state mutation)
|
|
14
|
+
- No access to current time unless explicitly provided as input
|
|
15
|
+
|
|
16
|
+
What Plugins MUST NOT Do:
|
|
17
|
+
❌ Network operations (HTTP requests, API calls, socket connections)
|
|
18
|
+
❌ Filesystem operations (file read/write, directory access)
|
|
19
|
+
❌ Database operations (queries, transactions, connection pooling)
|
|
20
|
+
❌ Random number generation (unless deterministic with provided seed)
|
|
21
|
+
❌ Current time access (unless time is passed as input parameter)
|
|
22
|
+
❌ Mutable shared state (global variables, class-level state)
|
|
23
|
+
❌ External service calls (Kafka, Redis, Consul, Vault)
|
|
24
|
+
❌ Environment variable access (unless explicitly allowed)
|
|
25
|
+
❌ Process/thread creation or management
|
|
26
|
+
❌ Signal handling or system calls
|
|
27
|
+
|
|
28
|
+
What Plugins CAN Do:
|
|
29
|
+
✅ Pure data transformations (mapping, filtering, aggregation)
|
|
30
|
+
✅ Mathematical computations (arithmetic, statistics, algorithms)
|
|
31
|
+
✅ String processing (parsing, formatting, validation)
|
|
32
|
+
✅ Data structure operations (sorting, searching, grouping)
|
|
33
|
+
✅ Validation and schema checking (Pydantic models, type checking)
|
|
34
|
+
✅ Deterministic hashing (with consistent input ordering)
|
|
35
|
+
✅ Deterministic randomness (with seed from input_data or context)
|
|
36
|
+
|
|
37
|
+
Integration with ONEX Compute Nodes:
|
|
38
|
+
Compute nodes follow the 4-node architecture pattern:
|
|
39
|
+
- EFFECT: External I/O (database, network, filesystem)
|
|
40
|
+
- COMPUTE: Pure transformations (THIS PROTOCOL)
|
|
41
|
+
- REDUCER: State aggregation and consolidation
|
|
42
|
+
- ORCHESTRATOR: Workflow coordination
|
|
43
|
+
|
|
44
|
+
Compute plugins integrate with NodeComputeService to provide deterministic
|
|
45
|
+
processing capabilities. The node is responsible for I/O and state management,
|
|
46
|
+
while plugins focus purely on data transformation logic.
|
|
47
|
+
|
|
48
|
+
Example Usage:
|
|
49
|
+
```python
|
|
50
|
+
from omnibase_infra.protocols import ProtocolPluginCompute
|
|
51
|
+
from typing import Protocol, runtime_checkable
|
|
52
|
+
|
|
53
|
+
@runtime_checkable
|
|
54
|
+
class ProtocolPluginCompute(Protocol):
|
|
55
|
+
def execute(self, input_data: ModelPluginInputData, context: ModelPluginContext) -> ModelPluginOutputData:
|
|
56
|
+
'''Execute deterministic computation.'''
|
|
57
|
+
...
|
|
58
|
+
|
|
59
|
+
# Example plugin implementation
|
|
60
|
+
class JsonSchemaValidator:
|
|
61
|
+
def execute(self, input_data: ModelPluginInputData, context: ModelPluginContext) -> ModelPluginOutputData:
|
|
62
|
+
'''Validate JSON data against schema.'''
|
|
63
|
+
schema = context.get("schema", {})
|
|
64
|
+
data = input_data.get("data", {})
|
|
65
|
+
|
|
66
|
+
# Pure validation logic (no I/O)
|
|
67
|
+
is_valid = self._validate_schema(data, schema)
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
"valid": is_valid,
|
|
71
|
+
"data": data,
|
|
72
|
+
"errors": [] if is_valid else self._get_errors(data, schema),
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
def _validate_schema(self, data: dict[str, object], schema: dict[str, object]) -> bool:
|
|
76
|
+
# Pure computation - deterministic validation
|
|
77
|
+
...
|
|
78
|
+
|
|
79
|
+
def _get_errors(self, data: dict[str, object], schema: dict[str, object]) -> list[dict[str, object]]:
|
|
80
|
+
# Pure computation - deterministic error extraction
|
|
81
|
+
...
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Protocol Verification:
|
|
85
|
+
Per ONEX conventions, protocol compliance is verified via duck typing rather
|
|
86
|
+
than isinstance checks. Verify the required method exists and is callable:
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
plugin = JsonSchemaValidator()
|
|
90
|
+
|
|
91
|
+
# Duck typing verification (preferred)
|
|
92
|
+
assert hasattr(plugin, 'execute') and callable(plugin.execute)
|
|
93
|
+
|
|
94
|
+
# Or use hasattr with getattr for cleaner pattern
|
|
95
|
+
execute_method = getattr(plugin, 'execute', None)
|
|
96
|
+
assert execute_method is not None and callable(execute_method)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
See Also:
|
|
100
|
+
- src/omnibase_infra/plugins/plugin_compute_base.py for base implementation
|
|
101
|
+
- ONEX 4-node architecture documentation
|
|
102
|
+
- OMN-813 for complete compute plugin design
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
from __future__ import annotations
|
|
106
|
+
|
|
107
|
+
from typing import Protocol, runtime_checkable
|
|
108
|
+
|
|
109
|
+
# Import directly from submodules to avoid circular import through plugins/__init__.py
|
|
110
|
+
# (plugins/__init__.py imports plugin_compute_base which imports this module)
|
|
111
|
+
from omnibase_infra.plugins.models.model_plugin_context import ModelPluginContext
|
|
112
|
+
from omnibase_infra.plugins.models.model_plugin_input_data import ModelPluginInputData
|
|
113
|
+
from omnibase_infra.plugins.models.model_plugin_output_data import ModelPluginOutputData
|
|
114
|
+
|
|
115
|
+
__all__ = [
|
|
116
|
+
"ModelPluginContext",
|
|
117
|
+
"ModelPluginInputData",
|
|
118
|
+
"ModelPluginOutputData",
|
|
119
|
+
"ProtocolPluginCompute",
|
|
120
|
+
]
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
@runtime_checkable
|
|
124
|
+
class ProtocolPluginCompute(Protocol):
|
|
125
|
+
"""Protocol for deterministic compute plugins.
|
|
126
|
+
|
|
127
|
+
This protocol defines the interface for plugins that perform pure data
|
|
128
|
+
transformations without side effects. Implementations must guarantee
|
|
129
|
+
deterministic behavior where the same inputs always produce the same outputs.
|
|
130
|
+
|
|
131
|
+
Methods:
|
|
132
|
+
execute: Perform deterministic computation on input data.
|
|
133
|
+
|
|
134
|
+
Thread Safety:
|
|
135
|
+
Plugin implementations should be thread-safe and stateless. All required
|
|
136
|
+
state should be passed through input_data or context parameters.
|
|
137
|
+
|
|
138
|
+
Performance:
|
|
139
|
+
Plugins should be optimized for performance as they may be called
|
|
140
|
+
frequently in high-throughput data processing pipelines.
|
|
141
|
+
|
|
142
|
+
Example:
|
|
143
|
+
```python
|
|
144
|
+
class DataNormalizer:
|
|
145
|
+
def execute(self, input_data: ModelPluginInputData, context: ModelPluginContext) -> ModelPluginOutputData:
|
|
146
|
+
'''Normalize numeric data to [0, 1] range.'''
|
|
147
|
+
values: list[float] = input_data.get("values", [])
|
|
148
|
+
min_val: float = context.get("min_value", 0.0)
|
|
149
|
+
max_val: float = context.get("max_value", 1.0)
|
|
150
|
+
|
|
151
|
+
# Pure computation - deterministic normalization
|
|
152
|
+
normalized: list[float] = [
|
|
153
|
+
(v - min_val) / (max_val - min_val)
|
|
154
|
+
for v in values
|
|
155
|
+
]
|
|
156
|
+
|
|
157
|
+
return {
|
|
158
|
+
"normalized_values": normalized,
|
|
159
|
+
"min": min_val,
|
|
160
|
+
"max": max_val,
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
"""
|
|
164
|
+
|
|
165
|
+
def execute(
|
|
166
|
+
self, input_data: ModelPluginInputData, context: ModelPluginContext
|
|
167
|
+
) -> ModelPluginOutputData:
|
|
168
|
+
"""Execute deterministic computation on input data.
|
|
169
|
+
|
|
170
|
+
This method must be deterministic: given the same input_data and context,
|
|
171
|
+
it must always produce the same output. No side effects are allowed.
|
|
172
|
+
|
|
173
|
+
Args:
|
|
174
|
+
input_data: Input data dictionary containing values to process.
|
|
175
|
+
Structure depends on plugin implementation.
|
|
176
|
+
context: Context dictionary providing configuration and metadata.
|
|
177
|
+
Should contain any external parameters needed for computation.
|
|
178
|
+
|
|
179
|
+
Returns:
|
|
180
|
+
Result dictionary containing computed output values.
|
|
181
|
+
Structure depends on plugin implementation.
|
|
182
|
+
|
|
183
|
+
Raises:
|
|
184
|
+
OnexError: For all computation failures (with proper error chaining).
|
|
185
|
+
Plugin implementations must convert all exceptions to OnexError.
|
|
186
|
+
ValueError: For invalid input_data or context (should be caught and wrapped).
|
|
187
|
+
TypeError: For incorrect input types (should be caught and wrapped).
|
|
188
|
+
|
|
189
|
+
Error Handling:
|
|
190
|
+
All plugin implementations MUST follow ONEX error handling standards:
|
|
191
|
+
|
|
192
|
+
1. **OnexError Chaining**: Convert all exceptions to OnexError with proper chaining
|
|
193
|
+
using `raise OnexError(...) from original_exception`.
|
|
194
|
+
|
|
195
|
+
2. **Correlation ID Propagation**: Always include correlation_id from context
|
|
196
|
+
in error details for distributed tracing.
|
|
197
|
+
|
|
198
|
+
3. **Never Suppress Errors**: All errors must be logged, handled, or escalated.
|
|
199
|
+
Silent failures are strictly prohibited.
|
|
200
|
+
|
|
201
|
+
4. **Context Preservation**: Maintain full error context for debugging.
|
|
202
|
+
|
|
203
|
+
Example - Input Validation Error:
|
|
204
|
+
```python
|
|
205
|
+
def execute(self, input_data: ModelPluginInputData, context: ModelPluginContext) -> ModelPluginOutputData:
|
|
206
|
+
from omnibase_core.errors import OnexError
|
|
207
|
+
from omnibase_core.enums import CoreErrorCode
|
|
208
|
+
|
|
209
|
+
correlation_id = context.get("correlation_id", "unknown")
|
|
210
|
+
|
|
211
|
+
try:
|
|
212
|
+
# Validate required fields
|
|
213
|
+
if "required_field" not in input_data:
|
|
214
|
+
raise ValueError("Missing required field: required_field")
|
|
215
|
+
|
|
216
|
+
# Perform computation
|
|
217
|
+
result = self._compute(input_data)
|
|
218
|
+
return {"result": result}
|
|
219
|
+
|
|
220
|
+
except ValueError as e:
|
|
221
|
+
raise OnexError(
|
|
222
|
+
message=f"Invalid input data: {e}",
|
|
223
|
+
error_code=CoreErrorCode.INVALID_INPUT,
|
|
224
|
+
correlation_id=correlation_id,
|
|
225
|
+
plugin_name=self.__class__.__name__,
|
|
226
|
+
) from e
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Example - Computation Error with Context:
|
|
230
|
+
```python
|
|
231
|
+
def execute(self, input_data: ModelPluginInputData, context: ModelPluginContext) -> ModelPluginOutputData:
|
|
232
|
+
from omnibase_core.errors import OnexError
|
|
233
|
+
from omnibase_core.enums import CoreErrorCode
|
|
234
|
+
|
|
235
|
+
correlation_id = context.get("correlation_id", "unknown")
|
|
236
|
+
|
|
237
|
+
try:
|
|
238
|
+
# Perform complex computation
|
|
239
|
+
values: list[float] = input_data.get("values", [])
|
|
240
|
+
result: float = sum(values) / len(values) # May raise ZeroDivisionError
|
|
241
|
+
|
|
242
|
+
return {
|
|
243
|
+
"average": result,
|
|
244
|
+
"count": len(values),
|
|
245
|
+
"correlation_id": correlation_id,
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
except ZeroDivisionError as e:
|
|
249
|
+
raise OnexError(
|
|
250
|
+
message="Cannot compute average: empty values list",
|
|
251
|
+
error_code=CoreErrorCode.INVALID_INPUT,
|
|
252
|
+
correlation_id=correlation_id,
|
|
253
|
+
plugin_name=self.__class__.__name__,
|
|
254
|
+
input_size=len(input_data.get("values", [])),
|
|
255
|
+
) from e
|
|
256
|
+
|
|
257
|
+
except Exception as e:
|
|
258
|
+
# Catch-all for unexpected errors
|
|
259
|
+
raise OnexError(
|
|
260
|
+
message=f"Computation failed: {e}",
|
|
261
|
+
error_code=CoreErrorCode.INTERNAL_ERROR,
|
|
262
|
+
correlation_id=correlation_id,
|
|
263
|
+
plugin_name=self.__class__.__name__,
|
|
264
|
+
) from e
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Example - Type Validation Error:
|
|
268
|
+
```python
|
|
269
|
+
def execute(self, input_data: ModelPluginInputData, context: ModelPluginContext) -> ModelPluginOutputData:
|
|
270
|
+
from omnibase_core.errors import OnexError
|
|
271
|
+
from omnibase_core.enums import CoreErrorCode
|
|
272
|
+
|
|
273
|
+
correlation_id = context.get("correlation_id", "unknown")
|
|
274
|
+
|
|
275
|
+
try:
|
|
276
|
+
values = input_data.get("values")
|
|
277
|
+
|
|
278
|
+
# Validate type
|
|
279
|
+
if not isinstance(values, list):
|
|
280
|
+
raise TypeError(f"Expected list for 'values', got {type(values).__name__}")
|
|
281
|
+
|
|
282
|
+
# Compute result
|
|
283
|
+
return {"processed": [v * 2 for v in values]}
|
|
284
|
+
|
|
285
|
+
except TypeError as e:
|
|
286
|
+
raise OnexError(
|
|
287
|
+
message=f"Type validation failed: {e}",
|
|
288
|
+
error_code=CoreErrorCode.INVALID_INPUT,
|
|
289
|
+
correlation_id=correlation_id,
|
|
290
|
+
plugin_name=self.__class__.__name__,
|
|
291
|
+
expected_type="list",
|
|
292
|
+
actual_type=type(input_data.get("values")).__name__,
|
|
293
|
+
) from e
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
Error Recovery Patterns:
|
|
297
|
+
Plugins should implement graceful degradation where appropriate:
|
|
298
|
+
|
|
299
|
+
Example - Fallback Values:
|
|
300
|
+
```python
|
|
301
|
+
def execute(self, input_data: ModelPluginInputData, context: ModelPluginContext) -> ModelPluginOutputData:
|
|
302
|
+
from omnibase_core.errors import OnexError
|
|
303
|
+
from omnibase_core.enums import CoreErrorCode
|
|
304
|
+
|
|
305
|
+
correlation_id = context.get("correlation_id", "unknown")
|
|
306
|
+
|
|
307
|
+
try:
|
|
308
|
+
# Attempt primary computation
|
|
309
|
+
result = self._complex_computation(input_data)
|
|
310
|
+
|
|
311
|
+
return {
|
|
312
|
+
"result": result,
|
|
313
|
+
"fallback_used": False,
|
|
314
|
+
"correlation_id": correlation_id,
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
except Exception as e:
|
|
318
|
+
# Try fallback strategy
|
|
319
|
+
try:
|
|
320
|
+
fallback_result = self._simple_fallback(input_data)
|
|
321
|
+
|
|
322
|
+
return {
|
|
323
|
+
"result": fallback_result,
|
|
324
|
+
"fallback_used": True,
|
|
325
|
+
"warning": f"Primary computation failed: {e}",
|
|
326
|
+
"correlation_id": correlation_id,
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
except Exception as fallback_error:
|
|
330
|
+
# Both strategies failed - raise with full context
|
|
331
|
+
raise OnexError(
|
|
332
|
+
message="Both primary and fallback computations failed",
|
|
333
|
+
error_code=CoreErrorCode.INTERNAL_ERROR,
|
|
334
|
+
correlation_id=correlation_id,
|
|
335
|
+
plugin_name=self.__class__.__name__,
|
|
336
|
+
primary_error=str(e),
|
|
337
|
+
fallback_error=str(fallback_error),
|
|
338
|
+
) from fallback_error
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
Notes:
|
|
342
|
+
- Must be deterministic (same inputs → same outputs)
|
|
343
|
+
- Must not perform I/O operations
|
|
344
|
+
- Must not access external state
|
|
345
|
+
- Must not modify input_data or context
|
|
346
|
+
- Should validate inputs before processing
|
|
347
|
+
- Should include relevant metadata in output
|
|
348
|
+
- MUST include correlation_id in all error contexts
|
|
349
|
+
- MUST use proper OnexError chaining for all exceptions
|
|
350
|
+
|
|
351
|
+
Example:
|
|
352
|
+
```python
|
|
353
|
+
# Input
|
|
354
|
+
input_data = {"values": [1, 2, 3, 4, 5]}
|
|
355
|
+
context = {"operation": "sum"}
|
|
356
|
+
|
|
357
|
+
# Execution
|
|
358
|
+
result = plugin.execute(input_data, context)
|
|
359
|
+
|
|
360
|
+
# Output
|
|
361
|
+
{
|
|
362
|
+
"result": 15,
|
|
363
|
+
"operation": "sum",
|
|
364
|
+
"count": 5
|
|
365
|
+
}
|
|
366
|
+
```
|
|
367
|
+
"""
|
|
368
|
+
...
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Projector schema validator protocol.
|
|
4
|
+
|
|
5
|
+
Provides the protocol definition for schema validators that validate
|
|
6
|
+
projection table schemas exist and are correctly structured.
|
|
7
|
+
|
|
8
|
+
Part of OMN-1168: ProjectorPluginLoader contract discovery loading.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
from typing import TYPE_CHECKING, Protocol, runtime_checkable
|
|
14
|
+
from uuid import UUID
|
|
15
|
+
|
|
16
|
+
if TYPE_CHECKING:
|
|
17
|
+
from omnibase_infra.models.projectors import ModelProjectorSchema
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@runtime_checkable
|
|
21
|
+
class ProtocolProjectorSchemaValidator(Protocol):
|
|
22
|
+
"""Protocol for projector schema validation.
|
|
23
|
+
|
|
24
|
+
Defines the interface that schema validators must implement to validate
|
|
25
|
+
projection table schemas exist and are correctly structured.
|
|
26
|
+
|
|
27
|
+
See: tests/unit/runtime/test_projector_schema_validator.py for TDD tests.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
async def ensure_schema_exists(
|
|
31
|
+
self,
|
|
32
|
+
schema: ModelProjectorSchema,
|
|
33
|
+
correlation_id: UUID,
|
|
34
|
+
) -> None:
|
|
35
|
+
"""Ensure the schema table exists with required columns.
|
|
36
|
+
|
|
37
|
+
Verifies that the projection table exists in the database and has
|
|
38
|
+
all required columns. Does NOT auto-create missing schemas.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
schema: Projector schema to validate.
|
|
42
|
+
correlation_id: Correlation ID for distributed tracing. Required
|
|
43
|
+
to ensure proper observability across service boundaries.
|
|
44
|
+
|
|
45
|
+
Raises:
|
|
46
|
+
ProjectorSchemaError: If table does not exist or required columns
|
|
47
|
+
are missing.
|
|
48
|
+
InfraConnectionError: If database connection fails.
|
|
49
|
+
InfraTimeoutError: If validation query times out.
|
|
50
|
+
"""
|
|
51
|
+
...
|
|
52
|
+
|
|
53
|
+
async def table_exists(
|
|
54
|
+
self,
|
|
55
|
+
table_name: str,
|
|
56
|
+
correlation_id: UUID,
|
|
57
|
+
schema_name: str | None = None,
|
|
58
|
+
) -> bool:
|
|
59
|
+
"""Check if a table exists in the database.
|
|
60
|
+
|
|
61
|
+
Args:
|
|
62
|
+
table_name: Name of the table to check.
|
|
63
|
+
correlation_id: Correlation ID for distributed tracing. Required
|
|
64
|
+
to ensure proper observability across service boundaries.
|
|
65
|
+
schema_name: Optional database schema name. Defaults to 'public'.
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
True if table exists, False otherwise.
|
|
69
|
+
|
|
70
|
+
Raises:
|
|
71
|
+
InfraConnectionError: If database connection fails.
|
|
72
|
+
InfraTimeoutError: If query times out.
|
|
73
|
+
|
|
74
|
+
Note:
|
|
75
|
+
Currently defaults to 'public' schema.
|
|
76
|
+
"""
|
|
77
|
+
...
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
__all__ = [
|
|
81
|
+
"ProtocolProjectorSchemaValidator",
|
|
82
|
+
]
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Protocol for registry metrics collection.
|
|
4
|
+
|
|
5
|
+
Defines the interface for optional metrics hooks that can be plugged
|
|
6
|
+
into RegistryCompute for production monitoring.
|
|
7
|
+
|
|
8
|
+
This protocol enables observability for compute plugin registries without
|
|
9
|
+
requiring any specific metrics backend. Implementations can integrate with:
|
|
10
|
+
- Prometheus/OpenMetrics
|
|
11
|
+
- StatsD/Datadog
|
|
12
|
+
- OpenTelemetry
|
|
13
|
+
- Custom monitoring solutions
|
|
14
|
+
|
|
15
|
+
Design Philosophy:
|
|
16
|
+
All methods are optional (duck-typed). If a method is not implemented,
|
|
17
|
+
the metric simply won't be recorded. This allows for partial implementations
|
|
18
|
+
and gradual adoption of metrics collection.
|
|
19
|
+
|
|
20
|
+
Metrics Categories:
|
|
21
|
+
- Latency: Operation timing for get(), register(), unregister()
|
|
22
|
+
- Cache: Semver cache hit/miss rates for performance tuning
|
|
23
|
+
- Size: Registry growth over time for capacity planning
|
|
24
|
+
- Errors: Error frequency by type for alerting and debugging
|
|
25
|
+
|
|
26
|
+
Thread Safety:
|
|
27
|
+
Implementations must be thread-safe as metrics may be recorded from
|
|
28
|
+
concurrent registry operations.
|
|
29
|
+
|
|
30
|
+
Example Implementation:
|
|
31
|
+
```python
|
|
32
|
+
from omnibase_infra.protocols import ProtocolRegistryMetrics
|
|
33
|
+
from prometheus_client import Counter, Histogram, Gauge
|
|
34
|
+
|
|
35
|
+
class PrometheusRegistryMetrics:
|
|
36
|
+
'''Prometheus metrics collector for RegistryCompute.'''
|
|
37
|
+
|
|
38
|
+
def __init__(self) -> None:
|
|
39
|
+
self._get_latency = Histogram(
|
|
40
|
+
'registry_compute_get_latency_ms',
|
|
41
|
+
'Latency of get() operations in milliseconds',
|
|
42
|
+
['plugin_id', 'version_filter'],
|
|
43
|
+
)
|
|
44
|
+
self._cache_hits = Counter(
|
|
45
|
+
'registry_compute_cache_hits_total',
|
|
46
|
+
'Total semver cache hits',
|
|
47
|
+
)
|
|
48
|
+
self._cache_misses = Counter(
|
|
49
|
+
'registry_compute_cache_misses_total',
|
|
50
|
+
'Total semver cache misses',
|
|
51
|
+
)
|
|
52
|
+
self._registry_size = Gauge(
|
|
53
|
+
'registry_compute_size',
|
|
54
|
+
'Current number of registered plugins',
|
|
55
|
+
)
|
|
56
|
+
self._errors = Counter(
|
|
57
|
+
'registry_compute_errors_total',
|
|
58
|
+
'Total errors by type',
|
|
59
|
+
['error_type', 'plugin_id'],
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
def record_get_latency(
|
|
63
|
+
self, plugin_id: str, version: str | None, latency_ms: float
|
|
64
|
+
) -> None:
|
|
65
|
+
version_label = version if version else "latest"
|
|
66
|
+
self._get_latency.labels(
|
|
67
|
+
plugin_id=plugin_id, version_filter=version_label
|
|
68
|
+
).observe(latency_ms)
|
|
69
|
+
|
|
70
|
+
def record_cache_hit(self) -> None:
|
|
71
|
+
self._cache_hits.inc()
|
|
72
|
+
|
|
73
|
+
def record_cache_miss(self) -> None:
|
|
74
|
+
self._cache_misses.inc()
|
|
75
|
+
|
|
76
|
+
def record_registry_size(self, size: int) -> None:
|
|
77
|
+
self._registry_size.set(size)
|
|
78
|
+
|
|
79
|
+
def record_error(
|
|
80
|
+
self, error_type: str, plugin_id: str | None = None
|
|
81
|
+
) -> None:
|
|
82
|
+
self._errors.labels(
|
|
83
|
+
error_type=error_type, plugin_id=plugin_id or "unknown"
|
|
84
|
+
).inc()
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Integration with RegistryCompute:
|
|
88
|
+
```python
|
|
89
|
+
from omnibase_infra.runtime.registry_compute import RegistryCompute
|
|
90
|
+
|
|
91
|
+
# Create registry with metrics
|
|
92
|
+
metrics = PrometheusRegistryMetrics()
|
|
93
|
+
registry = RegistryCompute(metrics_collector=metrics)
|
|
94
|
+
|
|
95
|
+
# Or set after creation
|
|
96
|
+
registry = RegistryCompute()
|
|
97
|
+
registry.set_metrics_collector(metrics)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
See Also:
|
|
101
|
+
- src/omnibase_infra/runtime/registry_compute.py for integration
|
|
102
|
+
- docs/patterns/observability_patterns.md for monitoring guidelines
|
|
103
|
+
"""
|
|
104
|
+
|
|
105
|
+
from __future__ import annotations
|
|
106
|
+
|
|
107
|
+
from typing import Protocol, runtime_checkable
|
|
108
|
+
|
|
109
|
+
__all__ = [
|
|
110
|
+
"ProtocolRegistryMetrics",
|
|
111
|
+
]
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
@runtime_checkable
|
|
115
|
+
class ProtocolRegistryMetrics(Protocol):
|
|
116
|
+
"""Protocol for registry metrics collection.
|
|
117
|
+
|
|
118
|
+
Implementations can hook into registry operations to collect:
|
|
119
|
+
- Operation latency (get, register, unregister)
|
|
120
|
+
- Cache hit/miss rates
|
|
121
|
+
- Registry size over time
|
|
122
|
+
- Error frequency by type
|
|
123
|
+
|
|
124
|
+
All methods are optional (duck-typed). If a method is not implemented,
|
|
125
|
+
the metric simply won't be recorded.
|
|
126
|
+
|
|
127
|
+
Thread Safety:
|
|
128
|
+
Implementations MUST be thread-safe. Metrics may be recorded from
|
|
129
|
+
concurrent registry operations protected by the registry's lock.
|
|
130
|
+
|
|
131
|
+
Performance:
|
|
132
|
+
Metrics recording should be lightweight (<1ms) to avoid impacting
|
|
133
|
+
registry performance. Consider async or buffered recording for
|
|
134
|
+
high-throughput scenarios.
|
|
135
|
+
"""
|
|
136
|
+
|
|
137
|
+
def record_get_latency(
|
|
138
|
+
self, plugin_id: str, version: str | None, latency_ms: float
|
|
139
|
+
) -> None:
|
|
140
|
+
"""Record latency for a get() operation.
|
|
141
|
+
|
|
142
|
+
Called after each get() operation completes, regardless of success
|
|
143
|
+
or failure. The latency includes the full operation time including
|
|
144
|
+
any semver parsing and comparison.
|
|
145
|
+
|
|
146
|
+
Args:
|
|
147
|
+
plugin_id: The plugin ID that was looked up
|
|
148
|
+
version: The version filter (None if latest version requested)
|
|
149
|
+
latency_ms: Time in milliseconds for the operation
|
|
150
|
+
|
|
151
|
+
Example:
|
|
152
|
+
>>> # After a get() call taking 0.5ms
|
|
153
|
+
>>> metrics.record_get_latency("json_normalizer", "1.0.0", 0.5)
|
|
154
|
+
>>> # After a latest version lookup taking 1.2ms
|
|
155
|
+
>>> metrics.record_get_latency("json_normalizer", None, 1.2)
|
|
156
|
+
"""
|
|
157
|
+
...
|
|
158
|
+
|
|
159
|
+
def record_cache_hit(self) -> None:
|
|
160
|
+
"""Record a semver cache hit.
|
|
161
|
+
|
|
162
|
+
Called when the semver parser finds a version string in the LRU cache.
|
|
163
|
+
Useful for tuning cache size (SEMVER_CACHE_SIZE).
|
|
164
|
+
|
|
165
|
+
High cache hit rates (>95%) indicate good cache sizing.
|
|
166
|
+
Low hit rates may indicate cache is too small for the workload.
|
|
167
|
+
"""
|
|
168
|
+
...
|
|
169
|
+
|
|
170
|
+
def record_cache_miss(self) -> None:
|
|
171
|
+
"""Record a semver cache miss.
|
|
172
|
+
|
|
173
|
+
Called when the semver parser must parse a new version string
|
|
174
|
+
not found in the LRU cache.
|
|
175
|
+
"""
|
|
176
|
+
...
|
|
177
|
+
|
|
178
|
+
def record_registry_size(self, size: int) -> None:
|
|
179
|
+
"""Record current registry size.
|
|
180
|
+
|
|
181
|
+
Called after registration and unregistration operations to track
|
|
182
|
+
registry growth over time. Useful for capacity planning.
|
|
183
|
+
|
|
184
|
+
Args:
|
|
185
|
+
size: Number of registered plugins (plugin_id, version pairs)
|
|
186
|
+
|
|
187
|
+
Example:
|
|
188
|
+
>>> # After registering a new plugin
|
|
189
|
+
>>> metrics.record_registry_size(42)
|
|
190
|
+
"""
|
|
191
|
+
...
|
|
192
|
+
|
|
193
|
+
def record_error(self, error_type: str, plugin_id: str | None = None) -> None:
|
|
194
|
+
"""Record an error occurrence.
|
|
195
|
+
|
|
196
|
+
Called when registry operations fail. Error types are standardized
|
|
197
|
+
strings that can be used for alerting and debugging.
|
|
198
|
+
|
|
199
|
+
Standard Error Types:
|
|
200
|
+
- "not_found": Plugin ID not found in registry
|
|
201
|
+
- "version_not_found": Specific version not found
|
|
202
|
+
- "invalid_version": Invalid semver format during registration
|
|
203
|
+
- "async_not_flagged": Async plugin without deterministic_async=True
|
|
204
|
+
|
|
205
|
+
Args:
|
|
206
|
+
error_type: Type of error (standardized string)
|
|
207
|
+
plugin_id: Optional plugin ID associated with error
|
|
208
|
+
|
|
209
|
+
Example:
|
|
210
|
+
>>> # Plugin not found
|
|
211
|
+
>>> metrics.record_error("not_found", "unknown_plugin")
|
|
212
|
+
>>> # Invalid version format
|
|
213
|
+
>>> metrics.record_error("invalid_version", "json_normalizer")
|
|
214
|
+
"""
|
|
215
|
+
...
|