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,296 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Handler Contract Model for Contract-Driven Discovery.
|
|
4
|
+
|
|
5
|
+
This module provides ModelHandlerContract, a Pydantic model that represents the
|
|
6
|
+
schema for handler contract YAML files. It replaces manual field extraction in
|
|
7
|
+
HandlerPluginLoader with automatic validation and type coercion.
|
|
8
|
+
|
|
9
|
+
The model supports dual field names for flexibility:
|
|
10
|
+
- handler_name / name
|
|
11
|
+
- capability_tags / tags
|
|
12
|
+
|
|
13
|
+
See Also:
|
|
14
|
+
- HandlerPluginLoader: Uses this model to validate contracts
|
|
15
|
+
- ModelLoadedHandler: Output model after successful loading
|
|
16
|
+
- EnumHandlerTypeCategory: Handler behavioral classification
|
|
17
|
+
|
|
18
|
+
.. versionadded:: 0.7.0
|
|
19
|
+
Created as part of OMN-1132 Handler Plugin Loader implementation.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
import logging
|
|
25
|
+
|
|
26
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
|
|
27
|
+
|
|
28
|
+
logger = logging.getLogger(__name__)
|
|
29
|
+
|
|
30
|
+
from omnibase_core.models.primitives import ModelSemVer
|
|
31
|
+
from omnibase_infra.enums.enum_handler_type_category import EnumHandlerTypeCategory
|
|
32
|
+
from omnibase_infra.errors import ProtocolConfigurationError
|
|
33
|
+
from omnibase_infra.models.runtime.model_contract_security_config import (
|
|
34
|
+
ModelContractSecurityConfig,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
# Handler type category mapping from contract strings to enum
|
|
38
|
+
_HANDLER_TYPE_CATEGORY_MAP: dict[str, EnumHandlerTypeCategory] = {
|
|
39
|
+
"compute": EnumHandlerTypeCategory.COMPUTE,
|
|
40
|
+
"effect": EnumHandlerTypeCategory.EFFECT,
|
|
41
|
+
"nondeterministic_compute": EnumHandlerTypeCategory.NONDETERMINISTIC_COMPUTE,
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class ModelHandlerContract(BaseModel):
|
|
46
|
+
"""Pydantic model for handler contract YAML schema.
|
|
47
|
+
|
|
48
|
+
Validates and parses handler contract YAML files with automatic type
|
|
49
|
+
coercion and field aliasing. Supports dual field names for flexibility
|
|
50
|
+
in contract authoring.
|
|
51
|
+
|
|
52
|
+
Field Aliases:
|
|
53
|
+
- handler_name: Also accepts 'name'
|
|
54
|
+
- capability_tags: Also accepts 'tags'
|
|
55
|
+
|
|
56
|
+
Handler Type Conversion:
|
|
57
|
+
The handler_type field accepts string values (e.g., 'compute', 'effect',
|
|
58
|
+
'nondeterministic_compute') and converts them to EnumHandlerTypeCategory
|
|
59
|
+
enum values. Case-insensitive matching is supported.
|
|
60
|
+
|
|
61
|
+
Attributes:
|
|
62
|
+
handler_name: Unique identifier for the handler. Required field
|
|
63
|
+
that accepts both 'handler_name' and 'name' keys in YAML.
|
|
64
|
+
handler_class: Fully qualified class path for the handler
|
|
65
|
+
(e.g., 'myapp.handlers.AuthHandler'). Required field.
|
|
66
|
+
handler_type: Behavioral classification of the handler. Required field
|
|
67
|
+
that accepts string values and converts to EnumHandlerTypeCategory.
|
|
68
|
+
capability_tags: List of tags for handler discovery and filtering.
|
|
69
|
+
Optional field that accepts both 'capability_tags' and 'tags' keys.
|
|
70
|
+
|
|
71
|
+
Example:
|
|
72
|
+
>>> from omnibase_infra.models.runtime import ModelHandlerContract
|
|
73
|
+
>>> # Parse from YAML dict with 'name' alias
|
|
74
|
+
>>> contract = ModelHandlerContract.model_validate({
|
|
75
|
+
... "name": "auth.handler",
|
|
76
|
+
... "handler_class": "myapp.handlers.AuthHandler",
|
|
77
|
+
... "handler_type": "compute",
|
|
78
|
+
... "tags": ["auth", "validation"],
|
|
79
|
+
... })
|
|
80
|
+
>>> contract.handler_name
|
|
81
|
+
'auth.handler'
|
|
82
|
+
>>> contract.handler_type
|
|
83
|
+
<EnumHandlerTypeCategory.COMPUTE: 'compute'>
|
|
84
|
+
|
|
85
|
+
>>> # Parse with canonical field names
|
|
86
|
+
>>> contract = ModelHandlerContract.model_validate({
|
|
87
|
+
... "handler_name": "db.handler",
|
|
88
|
+
... "handler_class": "myapp.handlers.DbHandler",
|
|
89
|
+
... "handler_type": "effect",
|
|
90
|
+
... "capability_tags": ["database", "postgres"],
|
|
91
|
+
... })
|
|
92
|
+
|
|
93
|
+
See Also:
|
|
94
|
+
- :class:`HandlerPluginLoader`: Uses this model for contract validation.
|
|
95
|
+
- :class:`ModelLoadedHandler`: Output model after successful loading.
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
model_config = ConfigDict(
|
|
99
|
+
extra="forbid",
|
|
100
|
+
populate_by_name=True,
|
|
101
|
+
str_strip_whitespace=True,
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
handler_name: str = Field(
|
|
105
|
+
...,
|
|
106
|
+
min_length=1,
|
|
107
|
+
validation_alias="name",
|
|
108
|
+
description="Unique identifier for the handler (also accepts 'name')",
|
|
109
|
+
)
|
|
110
|
+
handler_class: str = Field(
|
|
111
|
+
...,
|
|
112
|
+
min_length=1,
|
|
113
|
+
description="Fully qualified handler class path (e.g., 'myapp.handlers.AuthHandler')",
|
|
114
|
+
)
|
|
115
|
+
handler_type: EnumHandlerTypeCategory = Field(
|
|
116
|
+
...,
|
|
117
|
+
description="Behavioral classification (compute, effect, nondeterministic_compute)",
|
|
118
|
+
)
|
|
119
|
+
capability_tags: list[str] = Field(
|
|
120
|
+
default_factory=list,
|
|
121
|
+
validation_alias="tags",
|
|
122
|
+
description="Tags for handler discovery and filtering (also accepts 'tags')",
|
|
123
|
+
)
|
|
124
|
+
protocol_type: str | None = Field(
|
|
125
|
+
default=None,
|
|
126
|
+
description=(
|
|
127
|
+
"Protocol type identifier for registry (e.g., 'db', 'http', 'consul'). "
|
|
128
|
+
"If not provided, defaults to handler_name with 'handler-' prefix stripped."
|
|
129
|
+
),
|
|
130
|
+
)
|
|
131
|
+
security: ModelContractSecurityConfig | None = Field(
|
|
132
|
+
default=None,
|
|
133
|
+
description="Optional security configuration for the handler",
|
|
134
|
+
)
|
|
135
|
+
handler_version: ModelSemVer | None = Field(
|
|
136
|
+
default=None,
|
|
137
|
+
description="Handler version in semantic versioning format. If not provided, defaults to 1.0.0",
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
@field_validator("handler_type", mode="before")
|
|
141
|
+
@classmethod
|
|
142
|
+
def convert_handler_type(cls, value: object) -> EnumHandlerTypeCategory:
|
|
143
|
+
"""Convert string handler_type to EnumHandlerTypeCategory.
|
|
144
|
+
|
|
145
|
+
Accepts case-insensitive string values and converts them to the
|
|
146
|
+
appropriate enum value. Also accepts EnumHandlerTypeCategory directly.
|
|
147
|
+
|
|
148
|
+
Args:
|
|
149
|
+
value: String handler type name or EnumHandlerTypeCategory.
|
|
150
|
+
|
|
151
|
+
Returns:
|
|
152
|
+
EnumHandlerTypeCategory enum value.
|
|
153
|
+
|
|
154
|
+
Raises:
|
|
155
|
+
ValueError: If the value is not a valid handler type.
|
|
156
|
+
"""
|
|
157
|
+
# Already an enum
|
|
158
|
+
if isinstance(value, EnumHandlerTypeCategory):
|
|
159
|
+
return value
|
|
160
|
+
|
|
161
|
+
# Convert string to enum
|
|
162
|
+
if isinstance(value, str):
|
|
163
|
+
normalized = value.lower().strip()
|
|
164
|
+
if normalized in _HANDLER_TYPE_CATEGORY_MAP:
|
|
165
|
+
return _HANDLER_TYPE_CATEGORY_MAP[normalized]
|
|
166
|
+
|
|
167
|
+
valid_types = ", ".join(_HANDLER_TYPE_CATEGORY_MAP.keys())
|
|
168
|
+
raise ValueError(
|
|
169
|
+
f"Invalid handler_type '{value}'. Valid types: {valid_types}"
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
raise ValueError(
|
|
173
|
+
f"handler_type must be a string or EnumHandlerTypeCategory, got {type(value).__name__}"
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
@field_validator("capability_tags", mode="before")
|
|
177
|
+
@classmethod
|
|
178
|
+
def normalize_capability_tags(cls, value: object) -> list[str]:
|
|
179
|
+
"""Normalize capability_tags to a list of strings.
|
|
180
|
+
|
|
181
|
+
Handles various input formats:
|
|
182
|
+
- None -> empty list
|
|
183
|
+
- Single string -> list with one element
|
|
184
|
+
- List with mixed types -> filter to strings only
|
|
185
|
+
|
|
186
|
+
Args:
|
|
187
|
+
value: Raw value from YAML (None, str, or list).
|
|
188
|
+
|
|
189
|
+
Returns:
|
|
190
|
+
List of string capability tags.
|
|
191
|
+
"""
|
|
192
|
+
if value is None:
|
|
193
|
+
return []
|
|
194
|
+
|
|
195
|
+
if isinstance(value, str):
|
|
196
|
+
return [value]
|
|
197
|
+
|
|
198
|
+
if isinstance(value, list):
|
|
199
|
+
# Filter to only string tags, warn about invalid types
|
|
200
|
+
valid_tags: list[str] = []
|
|
201
|
+
for tag in value:
|
|
202
|
+
if isinstance(tag, str):
|
|
203
|
+
valid_tags.append(tag)
|
|
204
|
+
else:
|
|
205
|
+
logger.warning(
|
|
206
|
+
"Non-string capability tag filtered out: value=%r, type=%s",
|
|
207
|
+
tag,
|
|
208
|
+
type(tag).__name__,
|
|
209
|
+
)
|
|
210
|
+
return valid_tags
|
|
211
|
+
|
|
212
|
+
return []
|
|
213
|
+
|
|
214
|
+
@model_validator(mode="after")
|
|
215
|
+
def set_defaults(self) -> ModelHandlerContract:
|
|
216
|
+
"""Set default values for protocol_type and handler_version.
|
|
217
|
+
|
|
218
|
+
Protocol Type:
|
|
219
|
+
If protocol_type is None, derives it from handler_name by stripping
|
|
220
|
+
the 'handler-' prefix. If handler_name doesn't have that prefix,
|
|
221
|
+
uses the full handler_name as protocol_type.
|
|
222
|
+
|
|
223
|
+
Guards against empty derived protocol_type which would produce
|
|
224
|
+
invalid registry keys.
|
|
225
|
+
|
|
226
|
+
Handler Version:
|
|
227
|
+
If handler_version is None, sets it to the default version 1.0.0.
|
|
228
|
+
|
|
229
|
+
Returns:
|
|
230
|
+
Self with protocol_type and handler_version populated.
|
|
231
|
+
|
|
232
|
+
Raises:
|
|
233
|
+
ValueError: If derived protocol_type would be empty (e.g., handler_name
|
|
234
|
+
is exactly "handler-" with nothing after the prefix).
|
|
235
|
+
|
|
236
|
+
Example:
|
|
237
|
+
>>> contract = ModelHandlerContract(
|
|
238
|
+
... handler_name="handler-db",
|
|
239
|
+
... handler_class="myapp.handlers.DbHandler",
|
|
240
|
+
... handler_type="effect",
|
|
241
|
+
... )
|
|
242
|
+
>>> contract.protocol_type
|
|
243
|
+
'db'
|
|
244
|
+
>>> contract.handler_version
|
|
245
|
+
ModelSemVer(major=1, minor=0, patch=0)
|
|
246
|
+
|
|
247
|
+
>>> contract = ModelHandlerContract(
|
|
248
|
+
... handler_name="custom-handler",
|
|
249
|
+
... handler_class="myapp.handlers.Custom",
|
|
250
|
+
... handler_type="compute",
|
|
251
|
+
... )
|
|
252
|
+
>>> contract.protocol_type
|
|
253
|
+
'custom-handler'
|
|
254
|
+
"""
|
|
255
|
+
# Set default handler_version if not provided
|
|
256
|
+
if self.handler_version is None:
|
|
257
|
+
self.handler_version = ModelSemVer(major=1, minor=0, patch=0)
|
|
258
|
+
|
|
259
|
+
if self.protocol_type is None:
|
|
260
|
+
prefix = "handler-"
|
|
261
|
+
if self.handler_name.startswith(prefix):
|
|
262
|
+
derived = self.handler_name[len(prefix) :]
|
|
263
|
+
if not derived:
|
|
264
|
+
raise ProtocolConfigurationError(
|
|
265
|
+
f"Cannot derive protocol_type from handler_name '{self.handler_name}': "
|
|
266
|
+
f"result would be empty. Either provide an explicit protocol_type "
|
|
267
|
+
f"or use a handler_name with content after the 'handler-' prefix."
|
|
268
|
+
)
|
|
269
|
+
self.protocol_type = derived
|
|
270
|
+
else:
|
|
271
|
+
self.protocol_type = self.handler_name
|
|
272
|
+
|
|
273
|
+
# Final guard: ensure protocol_type is never empty
|
|
274
|
+
if not self.protocol_type:
|
|
275
|
+
raise ProtocolConfigurationError(
|
|
276
|
+
f"protocol_type cannot be empty. handler_name='{self.handler_name}', "
|
|
277
|
+
f"derived protocol_type='{self.protocol_type}'. "
|
|
278
|
+
f"Provide a non-empty protocol_type or handler_name."
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
# Log successful contract validation for debugging
|
|
282
|
+
logger.debug(
|
|
283
|
+
"Handler contract validated successfully",
|
|
284
|
+
extra={
|
|
285
|
+
"handler_name": self.handler_name,
|
|
286
|
+
"handler_class": self.handler_class,
|
|
287
|
+
"protocol_type": self.protocol_type,
|
|
288
|
+
"handler_type": self.handler_type.value,
|
|
289
|
+
"handler_version": str(self.handler_version),
|
|
290
|
+
},
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
return self
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
__all__ = ["ModelHandlerContract"]
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Loaded Handler Model for Handler Plugin Loader.
|
|
4
|
+
|
|
5
|
+
This module provides ModelLoadedHandler, which represents a handler that has been
|
|
6
|
+
successfully discovered, validated, and registered by the HandlerPluginLoader.
|
|
7
|
+
|
|
8
|
+
The model captures essential metadata about loaded handlers for runtime tracking,
|
|
9
|
+
discovery filtering, and diagnostic purposes.
|
|
10
|
+
|
|
11
|
+
See Also:
|
|
12
|
+
- HandlerPluginLoader: Loader that creates these descriptors
|
|
13
|
+
- ModelHandlerDescriptor: Contract-level handler descriptor
|
|
14
|
+
- EnumHandlerTypeCategory: Handler behavioral classification
|
|
15
|
+
|
|
16
|
+
.. versionadded:: 0.7.0
|
|
17
|
+
Created as part of OMN-1132 Handler Plugin Loader implementation.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
from datetime import datetime
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
|
|
25
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
26
|
+
|
|
27
|
+
from omnibase_core.models.primitives import ModelSemVer
|
|
28
|
+
from omnibase_infra.enums.enum_handler_type_category import EnumHandlerTypeCategory
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class ModelLoadedHandler(BaseModel):
|
|
32
|
+
"""Represents a handler loaded from a contract.
|
|
33
|
+
|
|
34
|
+
Tracks metadata about handlers that have been successfully discovered,
|
|
35
|
+
validated, and registered by the HandlerPluginLoader.
|
|
36
|
+
|
|
37
|
+
This model is used for:
|
|
38
|
+
- Runtime handler registry tracking
|
|
39
|
+
- Handler discovery and filtering by capability tags
|
|
40
|
+
- Diagnostics and introspection of loaded handlers
|
|
41
|
+
- Audit logging of handler loading events
|
|
42
|
+
|
|
43
|
+
Attributes:
|
|
44
|
+
handler_name: Unique identifier for the handler. Used as the primary
|
|
45
|
+
key for handler registry lookups.
|
|
46
|
+
handler_type: Behavioral classification of the handler (COMPUTE, EFFECT,
|
|
47
|
+
or NONDETERMINISTIC_COMPUTE). Determines policy envelope and runtime
|
|
48
|
+
behavior.
|
|
49
|
+
handler_class: Fully qualified class name of the handler implementation
|
|
50
|
+
(e.g., 'myapp.handlers.AuthHandler'). Used for dynamic instantiation.
|
|
51
|
+
contract_path: Absolute path to the contract YAML file from which this
|
|
52
|
+
handler was loaded. Used for reloading and validation.
|
|
53
|
+
capability_tags: List of tags for handler discovery and filtering.
|
|
54
|
+
Examples: ['auth', 'validation', 'http-client'].
|
|
55
|
+
loaded_at: Timestamp when the handler was successfully loaded.
|
|
56
|
+
Used for diagnostics and cache invalidation.
|
|
57
|
+
handler_version: Semantic version of the handler from the contract.
|
|
58
|
+
Used for version tracking and compatibility checks.
|
|
59
|
+
|
|
60
|
+
Example:
|
|
61
|
+
>>> from datetime import datetime, UTC
|
|
62
|
+
>>> from pathlib import Path
|
|
63
|
+
>>> from omnibase_core.models.primitives import ModelSemVer
|
|
64
|
+
>>> from omnibase_infra.enums import EnumHandlerTypeCategory
|
|
65
|
+
>>> handler = ModelLoadedHandler(
|
|
66
|
+
... handler_name="auth.validate_token",
|
|
67
|
+
... handler_type=EnumHandlerTypeCategory.COMPUTE,
|
|
68
|
+
... handler_class="myapp.handlers.TokenValidator",
|
|
69
|
+
... contract_path=Path("/app/handlers/auth/handler_contract.yaml"),
|
|
70
|
+
... capability_tags=["auth", "validation", "jwt"],
|
|
71
|
+
... loaded_at=datetime.now(UTC),
|
|
72
|
+
... handler_version=ModelSemVer(major=1, minor=0, patch=0),
|
|
73
|
+
... )
|
|
74
|
+
>>> handler.handler_name
|
|
75
|
+
'auth.validate_token'
|
|
76
|
+
|
|
77
|
+
See Also:
|
|
78
|
+
- :class:`ModelHandlerDescriptor`: Contract-level handler metadata.
|
|
79
|
+
- :class:`EnumHandlerTypeCategory`: Handler behavioral classification.
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
model_config = ConfigDict(
|
|
83
|
+
frozen=True,
|
|
84
|
+
extra="forbid",
|
|
85
|
+
strict=True,
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
handler_name: str = Field(
|
|
89
|
+
...,
|
|
90
|
+
min_length=1,
|
|
91
|
+
description="Unique identifier for the handler",
|
|
92
|
+
)
|
|
93
|
+
protocol_type: str = Field(
|
|
94
|
+
...,
|
|
95
|
+
min_length=1,
|
|
96
|
+
description=(
|
|
97
|
+
"Protocol type identifier for registry lookup (e.g., 'db', 'http'). "
|
|
98
|
+
"Used as the key for handler registry registration."
|
|
99
|
+
),
|
|
100
|
+
)
|
|
101
|
+
handler_type: EnumHandlerTypeCategory = Field(
|
|
102
|
+
...,
|
|
103
|
+
description="Behavioral classification (COMPUTE, EFFECT, NONDETERMINISTIC_COMPUTE)",
|
|
104
|
+
)
|
|
105
|
+
handler_class: str = Field(
|
|
106
|
+
...,
|
|
107
|
+
min_length=3,
|
|
108
|
+
pattern=r"^[a-zA-Z_][a-zA-Z0-9_]*(\.[a-zA-Z_][a-zA-Z0-9_]*)+$",
|
|
109
|
+
description="Fully qualified handler class name (e.g., 'myapp.handlers.AuthHandler')",
|
|
110
|
+
)
|
|
111
|
+
contract_path: Path = Field(
|
|
112
|
+
...,
|
|
113
|
+
description="Absolute path to the source contract YAML file",
|
|
114
|
+
)
|
|
115
|
+
capability_tags: list[str] = Field(
|
|
116
|
+
default_factory=list,
|
|
117
|
+
description="Tags for handler discovery and filtering",
|
|
118
|
+
)
|
|
119
|
+
loaded_at: datetime = Field(
|
|
120
|
+
...,
|
|
121
|
+
description="Timestamp when the handler was successfully loaded",
|
|
122
|
+
)
|
|
123
|
+
handler_version: ModelSemVer = Field(
|
|
124
|
+
...,
|
|
125
|
+
description="Handler semantic version from contract",
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
__all__ = ["ModelLoadedHandler"]
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Plugin Load Context Model for Summary Logging.
|
|
4
|
+
|
|
5
|
+
This module provides ModelPluginLoadContext which groups the parameters needed
|
|
6
|
+
for logging a plugin load summary.
|
|
7
|
+
|
|
8
|
+
See Also:
|
|
9
|
+
- PluginLoader: Uses this model to pass context to _log_load_summary
|
|
10
|
+
- ModelPluginLoadSummary: The summary model created from this context
|
|
11
|
+
|
|
12
|
+
.. versionadded:: 0.7.0
|
|
13
|
+
Created as part of OMN-1132 Plugin Loader observability logging.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
from uuid import UUID
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
21
|
+
|
|
22
|
+
from omnibase_infra.models.runtime.model_failed_plugin_load import (
|
|
23
|
+
ModelFailedPluginLoad,
|
|
24
|
+
)
|
|
25
|
+
from omnibase_infra.models.runtime.model_loaded_handler import ModelLoadedHandler
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class ModelPluginLoadContext(BaseModel):
|
|
29
|
+
"""Context for logging a plugin load summary.
|
|
30
|
+
|
|
31
|
+
Groups related parameters needed to create a load summary, reducing
|
|
32
|
+
the number of function parameters.
|
|
33
|
+
|
|
34
|
+
Attributes:
|
|
35
|
+
operation: The type of load operation (e.g., 'load_from_directory').
|
|
36
|
+
source: The source path or patterns used for discovery.
|
|
37
|
+
total_discovered: Total number of contract files discovered.
|
|
38
|
+
handlers: List of successfully loaded handlers.
|
|
39
|
+
failed_plugins: List of plugins that failed to load.
|
|
40
|
+
duration_seconds: Total operation time in seconds.
|
|
41
|
+
correlation_id: Correlation ID for distributed tracing (UUID for models).
|
|
42
|
+
original_correlation_id: Original correlation ID string for logging.
|
|
43
|
+
Preserves the exact string passed by the caller, even if it's not
|
|
44
|
+
a valid UUID format. Used in log extra fields for traceability.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
model_config = ConfigDict(
|
|
48
|
+
extra="forbid",
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
operation: str = Field(
|
|
52
|
+
...,
|
|
53
|
+
min_length=1,
|
|
54
|
+
description="Type of load operation performed",
|
|
55
|
+
)
|
|
56
|
+
source: str = Field(
|
|
57
|
+
...,
|
|
58
|
+
description="Source path or patterns used for discovery",
|
|
59
|
+
)
|
|
60
|
+
total_discovered: int = Field(
|
|
61
|
+
...,
|
|
62
|
+
ge=0,
|
|
63
|
+
description="Total number of contract files discovered",
|
|
64
|
+
)
|
|
65
|
+
handlers: list[ModelLoadedHandler] = Field(
|
|
66
|
+
default_factory=list,
|
|
67
|
+
description="List of successfully loaded handlers",
|
|
68
|
+
)
|
|
69
|
+
failed_plugins: list[ModelFailedPluginLoad] = Field(
|
|
70
|
+
default_factory=list,
|
|
71
|
+
description="List of plugins that failed to load",
|
|
72
|
+
)
|
|
73
|
+
duration_seconds: float = Field(
|
|
74
|
+
...,
|
|
75
|
+
ge=0.0,
|
|
76
|
+
description="Total operation time in seconds",
|
|
77
|
+
)
|
|
78
|
+
correlation_id: UUID = Field(
|
|
79
|
+
...,
|
|
80
|
+
description="Correlation ID for distributed tracing (UUID for models)",
|
|
81
|
+
)
|
|
82
|
+
# NOTE: This field intentionally uses str (not UUID) to preserve the exact
|
|
83
|
+
# caller-provided value for logging. The caller may provide a non-UUID format
|
|
84
|
+
# correlation ID (e.g., 'test-correlation-12345' or OpenTelemetry trace IDs).
|
|
85
|
+
# The UUID-typed 'correlation_id' field is used for model validation.
|
|
86
|
+
caller_correlation_string: str = Field(
|
|
87
|
+
...,
|
|
88
|
+
min_length=1,
|
|
89
|
+
description="Original correlation string from caller for logging (may be non-UUID)",
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
__all__ = ["ModelPluginLoadContext"]
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Plugin Load Summary Model for Observability Logging.
|
|
4
|
+
|
|
5
|
+
This module provides ModelPluginLoadSummary which tracks the results of batch
|
|
6
|
+
plugin loading operations for observability purposes.
|
|
7
|
+
|
|
8
|
+
The summary captures:
|
|
9
|
+
- Total plugins discovered and loaded
|
|
10
|
+
- Details of any failed loads
|
|
11
|
+
- Load duration for performance monitoring
|
|
12
|
+
- Correlation ID for distributed tracing
|
|
13
|
+
|
|
14
|
+
See Also:
|
|
15
|
+
- PluginLoader: Uses this model for summary logging
|
|
16
|
+
- ModelLoadedHandler: Individual plugin metadata
|
|
17
|
+
|
|
18
|
+
.. versionadded:: 0.7.0
|
|
19
|
+
Created as part of OMN-1132 Plugin Loader observability logging.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
from datetime import datetime
|
|
25
|
+
from uuid import UUID
|
|
26
|
+
|
|
27
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
28
|
+
|
|
29
|
+
from omnibase_infra.models.runtime.model_failed_plugin_load import (
|
|
30
|
+
ModelFailedPluginLoad,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class ModelPluginLoadSummary(BaseModel):
|
|
35
|
+
"""Summary of a batch plugin loading operation.
|
|
36
|
+
|
|
37
|
+
Captures comprehensive metrics about a batch loading operation for
|
|
38
|
+
observability, debugging, and performance monitoring.
|
|
39
|
+
|
|
40
|
+
Attributes:
|
|
41
|
+
operation: The type of load operation (e.g., 'load_from_directory',
|
|
42
|
+
'discover_and_load').
|
|
43
|
+
source: The source path or patterns used for discovery.
|
|
44
|
+
total_discovered: Total number of contract files discovered.
|
|
45
|
+
total_loaded: Number of plugins successfully loaded.
|
|
46
|
+
total_failed: Number of plugins that failed to load.
|
|
47
|
+
loaded_plugins: List of successfully loaded plugin details (name, class, module).
|
|
48
|
+
failed_plugins: List of failed plugin details with error information.
|
|
49
|
+
duration_seconds: Total time taken for the operation in seconds.
|
|
50
|
+
correlation_id: Correlation ID for distributed tracing.
|
|
51
|
+
completed_at: Timestamp when the operation completed.
|
|
52
|
+
|
|
53
|
+
Example:
|
|
54
|
+
>>> from uuid import uuid4
|
|
55
|
+
>>> summary = ModelPluginLoadSummary(
|
|
56
|
+
... operation="load_from_directory",
|
|
57
|
+
... source="/app/plugins",
|
|
58
|
+
... total_discovered=5,
|
|
59
|
+
... total_loaded=4,
|
|
60
|
+
... total_failed=1,
|
|
61
|
+
... loaded_plugins=[
|
|
62
|
+
... {"name": "auth.plugin", "class": "AuthPlugin", "module": "app.plugins.auth"},
|
|
63
|
+
... ],
|
|
64
|
+
... failed_plugins=[ModelFailedPluginLoad(...)],
|
|
65
|
+
... duration_seconds=0.23,
|
|
66
|
+
... correlation_id=uuid4(),
|
|
67
|
+
... completed_at=datetime.now(UTC),
|
|
68
|
+
... )
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
model_config = ConfigDict(
|
|
72
|
+
frozen=True,
|
|
73
|
+
extra="forbid",
|
|
74
|
+
strict=True,
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
operation: str = Field(
|
|
78
|
+
...,
|
|
79
|
+
min_length=1,
|
|
80
|
+
description="Type of load operation performed",
|
|
81
|
+
)
|
|
82
|
+
source: str = Field(
|
|
83
|
+
...,
|
|
84
|
+
description="Source path or patterns used for discovery",
|
|
85
|
+
)
|
|
86
|
+
total_discovered: int = Field(
|
|
87
|
+
...,
|
|
88
|
+
ge=0,
|
|
89
|
+
description="Total number of contract files discovered",
|
|
90
|
+
)
|
|
91
|
+
total_loaded: int = Field(
|
|
92
|
+
...,
|
|
93
|
+
ge=0,
|
|
94
|
+
description="Number of plugins successfully loaded",
|
|
95
|
+
)
|
|
96
|
+
total_failed: int = Field(
|
|
97
|
+
...,
|
|
98
|
+
ge=0,
|
|
99
|
+
description="Number of plugins that failed to load",
|
|
100
|
+
)
|
|
101
|
+
loaded_plugins: list[dict[str, str]] = Field(
|
|
102
|
+
default_factory=list,
|
|
103
|
+
description="List of loaded plugin details (name, class, module)",
|
|
104
|
+
)
|
|
105
|
+
failed_plugins: list[ModelFailedPluginLoad] = Field(
|
|
106
|
+
default_factory=list,
|
|
107
|
+
description="List of failed plugin details with error information",
|
|
108
|
+
)
|
|
109
|
+
duration_seconds: float = Field(
|
|
110
|
+
...,
|
|
111
|
+
ge=0.0,
|
|
112
|
+
description="Total operation time in seconds",
|
|
113
|
+
)
|
|
114
|
+
correlation_id: UUID = Field(
|
|
115
|
+
...,
|
|
116
|
+
description="Correlation ID for distributed tracing",
|
|
117
|
+
)
|
|
118
|
+
completed_at: datetime = Field(
|
|
119
|
+
...,
|
|
120
|
+
description="Timestamp when the operation completed",
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
__all__ = ["ModelPluginLoadSummary"]
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Security models for handler policy validation.
|
|
4
|
+
|
|
5
|
+
This module exports security-related models for the two-layer handler
|
|
6
|
+
security validation system (OMN-1098). These models define:
|
|
7
|
+
|
|
8
|
+
1. Handler-declared security policies (what a handler needs)
|
|
9
|
+
2. Environment-level constraints (what an environment permits)
|
|
10
|
+
3. Validation results with errors and warnings (OMN-1137)
|
|
11
|
+
|
|
12
|
+
The security validation system uses these models to:
|
|
13
|
+
- Validate handler security requirements at registration time
|
|
14
|
+
- Enforce security constraints at invocation time
|
|
15
|
+
- Provide structured error reporting for violations
|
|
16
|
+
|
|
17
|
+
See Also:
|
|
18
|
+
- EnumSecurityRuleId: Security validation rule identifiers
|
|
19
|
+
- docs/design/HANDLER_SECURITY_VALIDATION.md: Full design documentation
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from omnibase_infra.models.security.classification_levels import (
|
|
23
|
+
CLASSIFICATION_SECURITY_LEVELS,
|
|
24
|
+
get_security_level,
|
|
25
|
+
)
|
|
26
|
+
from omnibase_infra.models.security.model_environment_policy import (
|
|
27
|
+
ModelEnvironmentPolicy,
|
|
28
|
+
)
|
|
29
|
+
from omnibase_infra.models.security.model_handler_security_policy import (
|
|
30
|
+
ModelHandlerSecurityPolicy,
|
|
31
|
+
)
|
|
32
|
+
from omnibase_infra.models.security.model_security_error import (
|
|
33
|
+
ModelSecurityError,
|
|
34
|
+
)
|
|
35
|
+
from omnibase_infra.models.security.model_security_validation_result import (
|
|
36
|
+
ModelSecurityValidationResult,
|
|
37
|
+
)
|
|
38
|
+
from omnibase_infra.models.security.model_security_warning import (
|
|
39
|
+
ModelSecurityWarning,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
__all__ = [
|
|
43
|
+
"CLASSIFICATION_SECURITY_LEVELS",
|
|
44
|
+
"ModelEnvironmentPolicy",
|
|
45
|
+
"ModelHandlerSecurityPolicy",
|
|
46
|
+
"ModelSecurityError",
|
|
47
|
+
"ModelSecurityValidationResult",
|
|
48
|
+
"ModelSecurityWarning",
|
|
49
|
+
"get_security_level",
|
|
50
|
+
]
|