omnibase_infra 0.2.1__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/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +261 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +138 -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 +123 -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_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 +101 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -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_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 +156 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +92 -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 +102 -0
- omnibase_infra/errors/error_infra.py +608 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +112 -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 +86 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +743 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1658 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +184 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +765 -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 +725 -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/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +75 -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 +787 -0
- omnibase_infra/handlers/handler_db.py +1039 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +1154 -0
- omnibase_infra/handlers/handler_http.py +920 -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 +748 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +422 -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 +42 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +337 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +277 -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 +915 -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 +747 -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 +99 -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/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +655 -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 +2465 -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 +136 -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 +311 -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 +147 -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_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 +37 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +80 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +185 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -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/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 +590 -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 +59 -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_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +179 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +175 -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 +40 -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 +280 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +120 -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 +48 -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 +208 -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 +99 -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/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +172 -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/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 +475 -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 +609 -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 +525 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +392 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +742 -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 +225 -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 +109 -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 +194 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +682 -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 +416 -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 +214 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +32 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +76 -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 +1137 -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 +435 -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 +99 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -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 +296 -0
- omnibase_infra/runtime/binding_config_resolver.py +2706 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/contract_handler_discovery.py +582 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +42 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -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/handler_contract_source.py +669 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2029 -0
- omnibase_infra/runtime/handler_registry.py +321 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +378 -0
- omnibase_infra/runtime/mixins/__init__.py +17 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +757 -0
- omnibase_infra/runtime/models/__init__.py +192 -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_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 +228 -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_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_scheduler_config.py +624 -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_shutdown_batch_result.py +75 -0
- omnibase_infra/runtime/models/model_shutdown_config.py +94 -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 +1102 -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 +27 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -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 +444 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1502 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2110 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1573 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +1805 -0
- omnibase_infra/runtime/service_runtime_host_process.py +2260 -0
- omnibase_infra/runtime/util_container_wiring.py +1123 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +566 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/services/__init__.py +68 -0
- omnibase_infra/services/corpus_capture.py +678 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +897 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +682 -0
- omnibase_infra/services/service_timeout_scanner.py +390 -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/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 +21 -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 +89 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_datetime.py +372 -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_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -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 +1486 -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 +1710 -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 +410 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.1.dist-info/METADATA +197 -0
- omnibase_infra-0.2.1.dist-info/RECORD +675 -0
- omnibase_infra-0.2.1.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.1.dist-info/entry_points.txt +4 -0
- omnibase_infra-0.2.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Invocation-time security enforcement for handlers.
|
|
4
|
+
|
|
5
|
+
Enforces handler security policies at invocation time. Part of the
|
|
6
|
+
two-layer security validation system (OMN-1098).
|
|
7
|
+
|
|
8
|
+
Security Rules Enforced:
|
|
9
|
+
SECURITY-310: Outbound domain access denied
|
|
10
|
+
SECURITY-311: Secret scope access denied
|
|
11
|
+
SECURITY-312: Data classification constraint violation
|
|
12
|
+
|
|
13
|
+
Usage:
|
|
14
|
+
The enforcer is created with a handler's security policy and optionally
|
|
15
|
+
a correlation ID for tracing. All check methods are stateless after
|
|
16
|
+
initialization.
|
|
17
|
+
|
|
18
|
+
Example:
|
|
19
|
+
>>> from omnibase_infra.runtime.invocation_security_enforcer import (
|
|
20
|
+
... InvocationSecurityEnforcer,
|
|
21
|
+
... SecurityViolationError,
|
|
22
|
+
... )
|
|
23
|
+
>>> from omnibase_infra.models.security import ModelHandlerSecurityPolicy
|
|
24
|
+
>>> from omnibase_core.enums import EnumDataClassification
|
|
25
|
+
>>>
|
|
26
|
+
>>> policy = ModelHandlerSecurityPolicy(
|
|
27
|
+
... secret_scopes=frozenset({"api-keys"}),
|
|
28
|
+
... allowed_domains=["api.example.com"],
|
|
29
|
+
... data_classification=EnumDataClassification.INTERNAL,
|
|
30
|
+
... )
|
|
31
|
+
>>> enforcer = InvocationSecurityEnforcer(policy)
|
|
32
|
+
>>> enforcer.check_domain_access("api.example.com") # OK
|
|
33
|
+
>>> enforcer.check_domain_access("api.other.com") # Raises SecurityViolationError
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
from __future__ import annotations
|
|
37
|
+
|
|
38
|
+
import re
|
|
39
|
+
from uuid import UUID, uuid4
|
|
40
|
+
|
|
41
|
+
from omnibase_core.enums import EnumDataClassification
|
|
42
|
+
from omnibase_core.enums.enum_core_error_code import EnumCoreErrorCode
|
|
43
|
+
from omnibase_infra.enums import EnumSecurityRuleId
|
|
44
|
+
from omnibase_infra.errors import ProtocolConfigurationError, RuntimeHostError
|
|
45
|
+
from omnibase_infra.models.errors.model_infra_error_context import (
|
|
46
|
+
ModelInfraErrorContext,
|
|
47
|
+
)
|
|
48
|
+
from omnibase_infra.models.security import (
|
|
49
|
+
ModelHandlerSecurityPolicy,
|
|
50
|
+
get_security_level,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class SecurityViolationError(RuntimeHostError):
|
|
55
|
+
"""Raised when a security constraint is violated at invocation time.
|
|
56
|
+
|
|
57
|
+
This exception is raised when a handler attempts to access resources
|
|
58
|
+
or process data that violates its declared security policy.
|
|
59
|
+
|
|
60
|
+
Inherits from RuntimeHostError to integrate with the ONEX error hierarchy.
|
|
61
|
+
|
|
62
|
+
Attributes:
|
|
63
|
+
rule_id: Security rule that was violated (EnumSecurityRuleId).
|
|
64
|
+
message: Human-readable error message describing the violation.
|
|
65
|
+
correlation_id: Tracing correlation ID for observability.
|
|
66
|
+
|
|
67
|
+
Security Rules:
|
|
68
|
+
SECURITY-310: Domain access denied - handler tried to access
|
|
69
|
+
a domain not in its allowlist.
|
|
70
|
+
SECURITY-311: Secret scope access denied - handler tried to
|
|
71
|
+
access a secret scope not declared in its policy.
|
|
72
|
+
SECURITY-312: Classification constraint violation - handler
|
|
73
|
+
tried to process data above its classification level.
|
|
74
|
+
|
|
75
|
+
Example:
|
|
76
|
+
>>> try:
|
|
77
|
+
... enforcer.check_domain_access("forbidden.com")
|
|
78
|
+
... except SecurityViolationError as e:
|
|
79
|
+
... print(f"Rule: {e.rule_id}, Message: {e.message}")
|
|
80
|
+
... print(f"Correlation ID: {e.correlation_id}")
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
def __init__(
|
|
84
|
+
self,
|
|
85
|
+
rule_id: EnumSecurityRuleId,
|
|
86
|
+
message: str,
|
|
87
|
+
correlation_id: UUID | None = None,
|
|
88
|
+
) -> None:
|
|
89
|
+
"""Initialize a security violation error.
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
rule_id: The security rule that was violated.
|
|
93
|
+
message: Human-readable description of the violation.
|
|
94
|
+
correlation_id: Optional tracing ID for observability.
|
|
95
|
+
If not provided, a correlation ID is auto-generated.
|
|
96
|
+
"""
|
|
97
|
+
self.rule_id = rule_id
|
|
98
|
+
# Build context for RuntimeHostError
|
|
99
|
+
context = ModelInfraErrorContext(
|
|
100
|
+
operation="security_check",
|
|
101
|
+
correlation_id=correlation_id,
|
|
102
|
+
)
|
|
103
|
+
super().__init__(
|
|
104
|
+
message=message,
|
|
105
|
+
error_code=EnumCoreErrorCode.SECURITY_VIOLATION,
|
|
106
|
+
context=context,
|
|
107
|
+
rule_id=rule_id.value,
|
|
108
|
+
)
|
|
109
|
+
# Note: message and correlation_id are accessed via parent's properties
|
|
110
|
+
# - self.message -> self.model.message
|
|
111
|
+
# - self.correlation_id -> self.model.correlation_id (auto-generated if None)
|
|
112
|
+
|
|
113
|
+
def __str__(self) -> str:
|
|
114
|
+
"""Return formatted error string including rule ID."""
|
|
115
|
+
return f"[{self.rule_id}] {self.message}"
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
class InvocationSecurityEnforcer:
|
|
119
|
+
"""Enforces handler security policies at invocation time.
|
|
120
|
+
|
|
121
|
+
This class is stateless after initialization. It validates that
|
|
122
|
+
runtime operations comply with the handler's declared security policy.
|
|
123
|
+
|
|
124
|
+
The enforcer performs three types of security checks:
|
|
125
|
+
1. Domain access control - validates outbound network access
|
|
126
|
+
2. Secret scope access control - validates secret access requests
|
|
127
|
+
3. Data classification enforcement - validates data sensitivity levels
|
|
128
|
+
|
|
129
|
+
Thread Safety:
|
|
130
|
+
This class is thread-safe. All instance attributes are immutable
|
|
131
|
+
after initialization, and all methods are read-only operations.
|
|
132
|
+
|
|
133
|
+
Attributes:
|
|
134
|
+
_policy: The handler's immutable security policy.
|
|
135
|
+
_correlation_id: Correlation ID for error tracing.
|
|
136
|
+
_domain_patterns: Pre-compiled regex patterns for domain matching.
|
|
137
|
+
|
|
138
|
+
Example:
|
|
139
|
+
>>> policy = ModelHandlerSecurityPolicy(
|
|
140
|
+
... secret_scopes=frozenset({"api-keys"}),
|
|
141
|
+
... allowed_domains=["*.example.com"],
|
|
142
|
+
... data_classification=EnumDataClassification.INTERNAL,
|
|
143
|
+
... )
|
|
144
|
+
>>> enforcer = InvocationSecurityEnforcer(policy)
|
|
145
|
+
>>> enforcer.check_domain_access("api.example.com") # OK
|
|
146
|
+
>>> enforcer.check_secret_scope_access("api-keys") # OK
|
|
147
|
+
>>> enforcer.check_classification_constraint(EnumDataClassification.PUBLIC) # OK
|
|
148
|
+
"""
|
|
149
|
+
|
|
150
|
+
def __init__(
|
|
151
|
+
self,
|
|
152
|
+
handler_policy: ModelHandlerSecurityPolicy,
|
|
153
|
+
correlation_id: UUID | None = None,
|
|
154
|
+
) -> None:
|
|
155
|
+
"""Initialize enforcer with handler's security policy.
|
|
156
|
+
|
|
157
|
+
Creates an immutable enforcer instance. Domain patterns are
|
|
158
|
+
pre-compiled at initialization time for efficient matching.
|
|
159
|
+
|
|
160
|
+
Args:
|
|
161
|
+
handler_policy: Handler's declared security policy. This is
|
|
162
|
+
stored as an immutable reference.
|
|
163
|
+
correlation_id: Optional tracing ID for error reporting. If not
|
|
164
|
+
provided, a new UUID4 will be auto-generated.
|
|
165
|
+
"""
|
|
166
|
+
self._policy = handler_policy
|
|
167
|
+
# Auto-generate correlation ID if not provided
|
|
168
|
+
self._correlation_id = correlation_id if correlation_id is not None else uuid4()
|
|
169
|
+
# Pre-compile domain patterns for efficiency
|
|
170
|
+
# Make a defensive copy of allowed_domains to ensure immutability
|
|
171
|
+
self._domain_patterns = self._compile_domain_patterns(
|
|
172
|
+
list(handler_policy.allowed_domains)
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
def _validate_domain_pattern(self, pattern: str) -> None:
|
|
176
|
+
"""Validate a domain pattern for security compliance.
|
|
177
|
+
|
|
178
|
+
Ensures domain patterns are well-formed and don't contain
|
|
179
|
+
potentially misleading or insecure constructs.
|
|
180
|
+
|
|
181
|
+
Args:
|
|
182
|
+
pattern: Domain pattern to validate.
|
|
183
|
+
|
|
184
|
+
Raises:
|
|
185
|
+
ProtocolConfigurationError: If the pattern is invalid.
|
|
186
|
+
|
|
187
|
+
Valid patterns:
|
|
188
|
+
- "example.com" (exact match)
|
|
189
|
+
- "*.example.com" (single-level wildcard)
|
|
190
|
+
|
|
191
|
+
Invalid patterns:
|
|
192
|
+
- "**.example.com" (double wildcard - misleading)
|
|
193
|
+
- "*.*.example.com" (nested wildcards)
|
|
194
|
+
- "*example.com" (wildcard without dot separator)
|
|
195
|
+
- "" (empty string)
|
|
196
|
+
"""
|
|
197
|
+
if not pattern:
|
|
198
|
+
context = ModelInfraErrorContext(
|
|
199
|
+
operation="validate_domain_pattern",
|
|
200
|
+
correlation_id=self._correlation_id,
|
|
201
|
+
)
|
|
202
|
+
raise ProtocolConfigurationError(
|
|
203
|
+
"Domain pattern cannot be empty",
|
|
204
|
+
context=context,
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
# Check for double wildcards or nested wildcards
|
|
208
|
+
if "**" in pattern:
|
|
209
|
+
context = ModelInfraErrorContext(
|
|
210
|
+
operation="validate_domain_pattern",
|
|
211
|
+
correlation_id=self._correlation_id,
|
|
212
|
+
)
|
|
213
|
+
raise ProtocolConfigurationError(
|
|
214
|
+
f"Invalid domain pattern '{pattern}': double wildcards (** ) are not "
|
|
215
|
+
"supported. Use '*.example.com' for single-level subdomain matching.",
|
|
216
|
+
context=context,
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
# Check for multiple wildcards
|
|
220
|
+
if pattern.count("*") > 1:
|
|
221
|
+
context = ModelInfraErrorContext(
|
|
222
|
+
operation="validate_domain_pattern",
|
|
223
|
+
correlation_id=self._correlation_id,
|
|
224
|
+
)
|
|
225
|
+
raise ProtocolConfigurationError(
|
|
226
|
+
f"Invalid domain pattern '{pattern}': multiple wildcards are not "
|
|
227
|
+
"supported. Use a single '*.domain.com' pattern.",
|
|
228
|
+
context=context,
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
# Wildcard must be at the start followed by a dot
|
|
232
|
+
if "*" in pattern and not pattern.startswith("*."):
|
|
233
|
+
context = ModelInfraErrorContext(
|
|
234
|
+
operation="validate_domain_pattern",
|
|
235
|
+
correlation_id=self._correlation_id,
|
|
236
|
+
)
|
|
237
|
+
raise ProtocolConfigurationError(
|
|
238
|
+
f"Invalid domain pattern '{pattern}': wildcard must be at the start "
|
|
239
|
+
"followed by a dot (e.g., '*.example.com').",
|
|
240
|
+
context=context,
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
# Validate the domain part after wildcard
|
|
244
|
+
if pattern.startswith("*."):
|
|
245
|
+
suffix = pattern[2:]
|
|
246
|
+
if not suffix or "." not in suffix:
|
|
247
|
+
context = ModelInfraErrorContext(
|
|
248
|
+
operation="validate_domain_pattern",
|
|
249
|
+
correlation_id=self._correlation_id,
|
|
250
|
+
)
|
|
251
|
+
raise ProtocolConfigurationError(
|
|
252
|
+
f"Invalid domain pattern '{pattern}': wildcard patterns must "
|
|
253
|
+
"include a valid domain (e.g., '*.example.com', not '*.' or '*.com').",
|
|
254
|
+
context=context,
|
|
255
|
+
)
|
|
256
|
+
# NOTE: Patterns like '*.co.uk' are technically valid but potentially too
|
|
257
|
+
# broad (matching any .co.uk subdomain). Proper validation would require
|
|
258
|
+
# checking against the Public Suffix List (PSL), which is beyond current
|
|
259
|
+
# scope. Security-conscious deployments should review domain allowlists
|
|
260
|
+
# manually and prefer specific domains over TLD-based wildcards.
|
|
261
|
+
|
|
262
|
+
def _compile_domain_patterns(
|
|
263
|
+
self, domains: list[str]
|
|
264
|
+
) -> tuple[re.Pattern[str], ...]:
|
|
265
|
+
"""Compile domain patterns for wildcard matching.
|
|
266
|
+
|
|
267
|
+
Converts domain allowlist entries into compiled regex patterns
|
|
268
|
+
for efficient matching. Supports two pattern types:
|
|
269
|
+
- Exact match: "api.example.com"
|
|
270
|
+
- Wildcard: "*.example.com" (matches any single subdomain)
|
|
271
|
+
|
|
272
|
+
Args:
|
|
273
|
+
domains: List of domain patterns to compile.
|
|
274
|
+
|
|
275
|
+
Returns:
|
|
276
|
+
Tuple of compiled regex patterns (immutable).
|
|
277
|
+
|
|
278
|
+
Raises:
|
|
279
|
+
ProtocolConfigurationError: If any pattern is invalid (see _validate_domain_pattern)
|
|
280
|
+
or if regex compilation fails.
|
|
281
|
+
|
|
282
|
+
Note:
|
|
283
|
+
Wildcard patterns only match a single subdomain level.
|
|
284
|
+
"*.example.com" matches "api.example.com" but NOT
|
|
285
|
+
"a.b.example.com".
|
|
286
|
+
"""
|
|
287
|
+
patterns: list[re.Pattern[str]] = []
|
|
288
|
+
for domain in domains:
|
|
289
|
+
# Validate pattern before compilation
|
|
290
|
+
self._validate_domain_pattern(domain)
|
|
291
|
+
|
|
292
|
+
try:
|
|
293
|
+
if domain.startswith("*."):
|
|
294
|
+
# Convert *.example.com to regex: ^[^.]+\.example\.com$
|
|
295
|
+
# [^.]+ matches one or more non-dot characters (single subdomain)
|
|
296
|
+
suffix = re.escape(domain[2:])
|
|
297
|
+
pattern = re.compile(rf"^[^.]+\.{suffix}$")
|
|
298
|
+
else:
|
|
299
|
+
# Exact match
|
|
300
|
+
pattern = re.compile(rf"^{re.escape(domain)}$")
|
|
301
|
+
except re.error as e:
|
|
302
|
+
context = ModelInfraErrorContext(
|
|
303
|
+
operation="compile_domain_pattern",
|
|
304
|
+
correlation_id=self._correlation_id,
|
|
305
|
+
)
|
|
306
|
+
raise ProtocolConfigurationError(
|
|
307
|
+
f"Failed to compile domain pattern '{domain}': {e}",
|
|
308
|
+
context=context,
|
|
309
|
+
) from e
|
|
310
|
+
patterns.append(pattern)
|
|
311
|
+
return tuple(patterns) # Return immutable tuple
|
|
312
|
+
|
|
313
|
+
def check_domain_access(self, domain: str) -> None:
|
|
314
|
+
"""Check if handler is allowed to access the given domain.
|
|
315
|
+
|
|
316
|
+
Validates that the target domain matches one of the patterns
|
|
317
|
+
in the handler's allowed_domains list. Supports exact matches
|
|
318
|
+
and wildcard patterns.
|
|
319
|
+
|
|
320
|
+
Args:
|
|
321
|
+
domain: Target domain to access (e.g., "api.example.com").
|
|
322
|
+
|
|
323
|
+
Returns:
|
|
324
|
+
None if access is allowed.
|
|
325
|
+
|
|
326
|
+
Raises:
|
|
327
|
+
SecurityViolationError: If domain access is denied.
|
|
328
|
+
Rule ID: SECURITY-310 (DOMAIN_ACCESS_DENIED)
|
|
329
|
+
|
|
330
|
+
Example:
|
|
331
|
+
>>> enforcer.check_domain_access("api.allowed.com") # OK
|
|
332
|
+
>>> enforcer.check_domain_access("api.forbidden.com") # Raises
|
|
333
|
+
"""
|
|
334
|
+
# Empty allowlist means no outbound access
|
|
335
|
+
if not self._domain_patterns:
|
|
336
|
+
raise SecurityViolationError(
|
|
337
|
+
rule_id=EnumSecurityRuleId.DOMAIN_ACCESS_DENIED,
|
|
338
|
+
message=f"Domain access denied: '{domain}' (no domains allowed)",
|
|
339
|
+
correlation_id=self._correlation_id,
|
|
340
|
+
)
|
|
341
|
+
|
|
342
|
+
# Check if domain matches any allowed pattern
|
|
343
|
+
for pattern in self._domain_patterns:
|
|
344
|
+
if pattern.match(domain):
|
|
345
|
+
return # Access allowed
|
|
346
|
+
|
|
347
|
+
# No pattern matched
|
|
348
|
+
raise SecurityViolationError(
|
|
349
|
+
rule_id=EnumSecurityRuleId.DOMAIN_ACCESS_DENIED,
|
|
350
|
+
message=f"Domain access denied: '{domain}' not in allowlist",
|
|
351
|
+
correlation_id=self._correlation_id,
|
|
352
|
+
)
|
|
353
|
+
|
|
354
|
+
def check_secret_scope_access(self, scope: str) -> None:
|
|
355
|
+
"""Check if handler is allowed to access the given secret scope.
|
|
356
|
+
|
|
357
|
+
Validates that the requested secret scope is declared in the
|
|
358
|
+
handler's security policy. Uses exact string matching (no
|
|
359
|
+
wildcards or prefix matching).
|
|
360
|
+
|
|
361
|
+
Args:
|
|
362
|
+
scope: Secret scope to access (e.g., "database-creds").
|
|
363
|
+
|
|
364
|
+
Returns:
|
|
365
|
+
None if access is allowed.
|
|
366
|
+
|
|
367
|
+
Raises:
|
|
368
|
+
SecurityViolationError: If secret scope access denied.
|
|
369
|
+
Rule ID: SECURITY-311 (SECRET_SCOPE_ACCESS_DENIED)
|
|
370
|
+
|
|
371
|
+
Example:
|
|
372
|
+
>>> enforcer.check_secret_scope_access("api-keys") # OK if declared
|
|
373
|
+
>>> enforcer.check_secret_scope_access("undeclared") # Raises
|
|
374
|
+
"""
|
|
375
|
+
if scope not in self._policy.secret_scopes:
|
|
376
|
+
raise SecurityViolationError(
|
|
377
|
+
rule_id=EnumSecurityRuleId.SECRET_SCOPE_ACCESS_DENIED,
|
|
378
|
+
message=f"Secret scope access denied: '{scope}' not declared",
|
|
379
|
+
correlation_id=self._correlation_id,
|
|
380
|
+
)
|
|
381
|
+
|
|
382
|
+
def check_classification_constraint(
|
|
383
|
+
self,
|
|
384
|
+
data_classification: EnumDataClassification,
|
|
385
|
+
) -> None:
|
|
386
|
+
"""Check if handler can process data of the given classification.
|
|
387
|
+
|
|
388
|
+
Validates that the data classification level does not exceed
|
|
389
|
+
the handler's declared maximum classification level.
|
|
390
|
+
|
|
391
|
+
Classification hierarchy (lowest to highest):
|
|
392
|
+
PUBLIC < INTERNAL < CONFIDENTIAL < RESTRICTED < SECRET < TOP_SECRET
|
|
393
|
+
|
|
394
|
+
Args:
|
|
395
|
+
data_classification: Classification of data being processed.
|
|
396
|
+
|
|
397
|
+
Returns:
|
|
398
|
+
None if handler can process data at this level.
|
|
399
|
+
|
|
400
|
+
Raises:
|
|
401
|
+
SecurityViolationError: If classification exceeds handler's level.
|
|
402
|
+
Rule ID: SECURITY-312 (CLASSIFICATION_CONSTRAINT_VIOLATION)
|
|
403
|
+
|
|
404
|
+
Example:
|
|
405
|
+
>>> # Handler declared for INTERNAL
|
|
406
|
+
>>> enforcer.check_classification_constraint(EnumDataClassification.PUBLIC) # OK
|
|
407
|
+
>>> enforcer.check_classification_constraint(EnumDataClassification.CONFIDENTIAL) # Raises
|
|
408
|
+
"""
|
|
409
|
+
handler_level = get_security_level(self._policy.data_classification)
|
|
410
|
+
data_level = get_security_level(data_classification)
|
|
411
|
+
|
|
412
|
+
if data_level > handler_level:
|
|
413
|
+
raise SecurityViolationError(
|
|
414
|
+
rule_id=EnumSecurityRuleId.CLASSIFICATION_CONSTRAINT_VIOLATION,
|
|
415
|
+
message=(
|
|
416
|
+
f"Classification constraint violated: cannot process "
|
|
417
|
+
f"{data_classification.value} data with handler classified "
|
|
418
|
+
f"for {self._policy.data_classification.value}"
|
|
419
|
+
),
|
|
420
|
+
correlation_id=self._correlation_id,
|
|
421
|
+
)
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
__all__ = [
|
|
425
|
+
"InvocationSecurityEnforcer",
|
|
426
|
+
"SecurityViolationError",
|
|
427
|
+
]
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""ONEX Kernel - Contract-driven bootstrap entrypoint.
|
|
4
|
+
|
|
5
|
+
This module provides the public API for the ONEX runtime kernel,
|
|
6
|
+
re-exporting the core functions from service_kernel.py.
|
|
7
|
+
|
|
8
|
+
Functions:
|
|
9
|
+
bootstrap: Initialize the ONEX runtime and execute the contract-driven bootstrap.
|
|
10
|
+
main: Entry point for the ONEX runtime.
|
|
11
|
+
load_runtime_config: Load runtime configuration from contract and environment.
|
|
12
|
+
|
|
13
|
+
Example:
|
|
14
|
+
>>> from pathlib import Path
|
|
15
|
+
>>> from omnibase_infra.runtime.kernel import load_runtime_config
|
|
16
|
+
>>>
|
|
17
|
+
>>> # Load configuration from contracts directory
|
|
18
|
+
>>> contracts_dir = Path("./contracts")
|
|
19
|
+
>>> config = load_runtime_config(contracts_dir)
|
|
20
|
+
>>> print(config.input_topic)
|
|
21
|
+
requests
|
|
22
|
+
>>> print(config.event_bus.type)
|
|
23
|
+
inmemory
|
|
24
|
+
|
|
25
|
+
Note:
|
|
26
|
+
This module serves as a stable public API. The implementation resides
|
|
27
|
+
in service_kernel.py, following the ONEX naming convention for service modules.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
from omnibase_infra.runtime.service_kernel import (
|
|
31
|
+
bootstrap,
|
|
32
|
+
load_runtime_config,
|
|
33
|
+
main,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
__all__: list[str] = [
|
|
37
|
+
"bootstrap",
|
|
38
|
+
"load_runtime_config",
|
|
39
|
+
"main",
|
|
40
|
+
]
|