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,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
|
+
]
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Shared classification security level mapping.
|
|
4
|
+
|
|
5
|
+
This module provides a single source of truth for data classification
|
|
6
|
+
security level mappings. Both registration-time validation and
|
|
7
|
+
invocation-time enforcement use this shared mapping to ensure
|
|
8
|
+
consistent security decisions.
|
|
9
|
+
|
|
10
|
+
Usage:
|
|
11
|
+
>>> from omnibase_infra.models.security.classification_levels import (
|
|
12
|
+
... CLASSIFICATION_SECURITY_LEVELS,
|
|
13
|
+
... get_security_level,
|
|
14
|
+
... )
|
|
15
|
+
>>> from omnibase_core.enums import EnumDataClassification
|
|
16
|
+
>>>
|
|
17
|
+
>>> level = get_security_level(EnumDataClassification.INTERNAL)
|
|
18
|
+
>>> level
|
|
19
|
+
2
|
|
20
|
+
|
|
21
|
+
Security Level Hierarchy (lowest to highest):
|
|
22
|
+
0: PUBLIC, OPEN (publicly accessible)
|
|
23
|
+
1: UNCLASSIFIED (not classified but not public)
|
|
24
|
+
2: INTERNAL, PRIVATE (organization internal)
|
|
25
|
+
3: SENSITIVE (requires extra handling)
|
|
26
|
+
4: CONFIDENTIAL (business confidential)
|
|
27
|
+
5: RESTRICTED, CLASSIFIED (restricted access)
|
|
28
|
+
6: SECRET (secret clearance required)
|
|
29
|
+
7: TOP_SECRET (highest classification)
|
|
30
|
+
|
|
31
|
+
Note:
|
|
32
|
+
This module is intentionally simple with no external dependencies
|
|
33
|
+
beyond omnibase_core.enums to prevent circular imports.
|
|
34
|
+
|
|
35
|
+
See Also:
|
|
36
|
+
- RegistrationSecurityValidator: Uses this for registration-time checks
|
|
37
|
+
- InvocationSecurityEnforcer: Uses this for runtime enforcement
|
|
38
|
+
- EnumDataClassification: The classification enum values
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
from __future__ import annotations
|
|
42
|
+
|
|
43
|
+
from omnibase_core.enums import EnumDataClassification
|
|
44
|
+
|
|
45
|
+
# Security level mapping for data classification comparison.
|
|
46
|
+
# Higher values indicate more sensitive/restricted data.
|
|
47
|
+
# This ordering reflects standard data classification hierarchies.
|
|
48
|
+
#
|
|
49
|
+
# IMPORTANT: This is the SINGLE SOURCE OF TRUTH for classification levels.
|
|
50
|
+
# Both registration_security_validator.py and invocation_security_enforcer.py
|
|
51
|
+
# MUST use this mapping to ensure consistent security decisions.
|
|
52
|
+
CLASSIFICATION_SECURITY_LEVELS: dict[EnumDataClassification, int] = {
|
|
53
|
+
EnumDataClassification.PUBLIC: 0,
|
|
54
|
+
EnumDataClassification.OPEN: 0,
|
|
55
|
+
EnumDataClassification.UNCLASSIFIED: 1,
|
|
56
|
+
EnumDataClassification.INTERNAL: 2,
|
|
57
|
+
EnumDataClassification.PRIVATE: 2,
|
|
58
|
+
EnumDataClassification.SENSITIVE: 3,
|
|
59
|
+
EnumDataClassification.CONFIDENTIAL: 4,
|
|
60
|
+
EnumDataClassification.RESTRICTED: 5,
|
|
61
|
+
EnumDataClassification.CLASSIFIED: 5,
|
|
62
|
+
EnumDataClassification.SECRET: 6,
|
|
63
|
+
EnumDataClassification.TOP_SECRET: 7,
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def get_security_level(classification: EnumDataClassification) -> int:
|
|
68
|
+
"""Get numeric security level for a data classification.
|
|
69
|
+
|
|
70
|
+
This function provides consistent security level lookups for both
|
|
71
|
+
registration-time validation and invocation-time enforcement.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
classification: The data classification enum value.
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
Integer security level (higher = more sensitive).
|
|
78
|
+
Range is 0 (PUBLIC) to 7 (TOP_SECRET).
|
|
79
|
+
|
|
80
|
+
Raises:
|
|
81
|
+
KeyError: If the classification is not in the mapping.
|
|
82
|
+
This should not happen with valid EnumDataClassification values.
|
|
83
|
+
|
|
84
|
+
Example:
|
|
85
|
+
>>> from omnibase_core.enums import EnumDataClassification
|
|
86
|
+
>>> get_security_level(EnumDataClassification.PUBLIC)
|
|
87
|
+
0
|
|
88
|
+
>>> get_security_level(EnumDataClassification.CONFIDENTIAL)
|
|
89
|
+
4
|
|
90
|
+
>>> get_security_level(EnumDataClassification.TOP_SECRET)
|
|
91
|
+
7
|
|
92
|
+
"""
|
|
93
|
+
return CLASSIFICATION_SECURITY_LEVELS[classification]
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
__all__ = [
|
|
97
|
+
"CLASSIFICATION_SECURITY_LEVELS",
|
|
98
|
+
"get_security_level",
|
|
99
|
+
]
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Environment-level security policy model.
|
|
4
|
+
|
|
5
|
+
This module defines the security constraints that apply at the environment
|
|
6
|
+
level. These constraints determine what security capabilities handlers
|
|
7
|
+
are permitted to request in each deployment environment.
|
|
8
|
+
|
|
9
|
+
Environment Policy Components:
|
|
10
|
+
- Permitted secret scopes: What secrets can be accessed
|
|
11
|
+
- Maximum data classification: Highest sensitivity level allowed
|
|
12
|
+
- Outbound domain constraints: Network access restrictions
|
|
13
|
+
- Adapter overrides: Special rules for adapter handlers
|
|
14
|
+
|
|
15
|
+
Validation Flow:
|
|
16
|
+
1. Handler declares security policy (ModelHandlerSecurityPolicy)
|
|
17
|
+
2. Environment policy defines constraints (ModelEnvironmentPolicy)
|
|
18
|
+
3. Registration validates handler policy against environment constraints
|
|
19
|
+
4. Runtime enforces declared policy at invocation time
|
|
20
|
+
|
|
21
|
+
See Also:
|
|
22
|
+
- ModelHandlerSecurityPolicy: Handler-declared security requirements
|
|
23
|
+
- EnumSecurityRuleId: Security validation rule identifiers
|
|
24
|
+
- EnumEnvironment: Deployment environment classification
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
from __future__ import annotations
|
|
28
|
+
|
|
29
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
30
|
+
|
|
31
|
+
from omnibase_core.enums import EnumDataClassification
|
|
32
|
+
from omnibase_infra.enums import EnumEnvironment
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class ModelEnvironmentPolicy(BaseModel):
|
|
36
|
+
"""Environment-level security constraints.
|
|
37
|
+
|
|
38
|
+
Defines what security capabilities are permitted in a given environment.
|
|
39
|
+
Used to validate handler security policies at registration time.
|
|
40
|
+
|
|
41
|
+
Environment Hierarchy (most to least permissive):
|
|
42
|
+
1. DEVELOPMENT - Most permissive, allows debugging features
|
|
43
|
+
2. CI - Automated testing, some elevated permissions
|
|
44
|
+
3. STAGING - Production-like with some relaxations
|
|
45
|
+
4. PRODUCTION - Most restrictive, full security enforcement
|
|
46
|
+
|
|
47
|
+
Constraint Types:
|
|
48
|
+
- Allowlists: Define what IS permitted (secret scopes, domains)
|
|
49
|
+
- Maximums: Define upper bounds (data classification)
|
|
50
|
+
- Requirements: Define what handlers MUST declare (domain allowlists)
|
|
51
|
+
- Overrides: Special rules for specific handler types (adapters)
|
|
52
|
+
|
|
53
|
+
Attributes:
|
|
54
|
+
environment: Target deployment environment.
|
|
55
|
+
permitted_secret_scopes: Secret scopes permitted in this environment.
|
|
56
|
+
Handlers requesting scopes not in this set will be rejected.
|
|
57
|
+
max_data_classification: Maximum data classification allowed.
|
|
58
|
+
Handlers declaring higher classification will be rejected.
|
|
59
|
+
allowed_outbound_domains: Reserved for future registration-time domain
|
|
60
|
+
enforcement. Currently NOT validated at registration time. This field
|
|
61
|
+
is intended for future validation where handlers requesting domains
|
|
62
|
+
not in this list would be rejected (unless None/unrestricted).
|
|
63
|
+
None means unrestricted, empty list would mean no outbound access.
|
|
64
|
+
Note: Handler-level domain allowlists (allowed_domains) ARE validated
|
|
65
|
+
via require_explicit_domain_allowlist constraint.
|
|
66
|
+
require_explicit_domain_allowlist: Whether handlers must declare
|
|
67
|
+
explicit domain allowlists. When True, handlers with empty
|
|
68
|
+
domain lists or ["*"] will be rejected.
|
|
69
|
+
adapter_secrets_override_allowed: Whether adapters can request
|
|
70
|
+
secrets. Usually False - adapters should use injected credentials.
|
|
71
|
+
|
|
72
|
+
Example:
|
|
73
|
+
>>> # Production environment with strict constraints
|
|
74
|
+
>>> prod_policy = ModelEnvironmentPolicy(
|
|
75
|
+
... environment=EnumEnvironment.PRODUCTION,
|
|
76
|
+
... permitted_secret_scopes=frozenset({
|
|
77
|
+
... "database/readonly",
|
|
78
|
+
... "api/service-account",
|
|
79
|
+
... }),
|
|
80
|
+
... max_data_classification=EnumDataClassification.CONFIDENTIAL,
|
|
81
|
+
... allowed_outbound_domains=[
|
|
82
|
+
... "api.internal.example.com",
|
|
83
|
+
... "metrics.internal.example.com",
|
|
84
|
+
... ],
|
|
85
|
+
... require_explicit_domain_allowlist=True,
|
|
86
|
+
... adapter_secrets_override_allowed=False,
|
|
87
|
+
... )
|
|
88
|
+
|
|
89
|
+
>>> # Development environment with relaxed constraints
|
|
90
|
+
>>> dev_policy = ModelEnvironmentPolicy(
|
|
91
|
+
... environment=EnumEnvironment.DEVELOPMENT,
|
|
92
|
+
... permitted_secret_scopes=frozenset({"*"}), # All scopes
|
|
93
|
+
... max_data_classification=EnumDataClassification.TOP_SECRET,
|
|
94
|
+
... allowed_outbound_domains=None, # Unrestricted
|
|
95
|
+
... require_explicit_domain_allowlist=False,
|
|
96
|
+
... adapter_secrets_override_allowed=True,
|
|
97
|
+
... )
|
|
98
|
+
"""
|
|
99
|
+
|
|
100
|
+
model_config = ConfigDict(
|
|
101
|
+
frozen=True,
|
|
102
|
+
extra="forbid",
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
environment: EnumEnvironment = Field(
|
|
106
|
+
description="Target environment",
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
permitted_secret_scopes: frozenset[str] = Field(
|
|
110
|
+
default_factory=frozenset,
|
|
111
|
+
description="Secret scopes permitted in this environment",
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
max_data_classification: EnumDataClassification = Field(
|
|
115
|
+
default=EnumDataClassification.INTERNAL,
|
|
116
|
+
description="Maximum data classification allowed",
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
allowed_outbound_domains: list[str] | None = Field(
|
|
120
|
+
default=None,
|
|
121
|
+
description=(
|
|
122
|
+
"Reserved for future registration-time domain enforcement. "
|
|
123
|
+
"Currently NOT validated - see require_explicit_domain_allowlist "
|
|
124
|
+
"for handler-level domain validation. None = unrestricted."
|
|
125
|
+
),
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
require_explicit_domain_allowlist: bool = Field(
|
|
129
|
+
default=False,
|
|
130
|
+
description="Whether handlers must declare explicit domain allowlists",
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
adapter_secrets_override_allowed: bool = Field(
|
|
134
|
+
default=False,
|
|
135
|
+
description=(
|
|
136
|
+
"Whether adapters can request secrets directly (usually False). "
|
|
137
|
+
"SECURITY WARNING: Enabling in production violates least-privilege "
|
|
138
|
+
"principles. Adapters should use platform secret management (e.g., Vault) "
|
|
139
|
+
"rather than direct secret access. Only enable for development/testing "
|
|
140
|
+
"environments where secret isolation is less critical."
|
|
141
|
+
),
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
__all__ = ["ModelEnvironmentPolicy"]
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Handler-declared security policy model.
|
|
4
|
+
|
|
5
|
+
This module defines the security policy that handlers declare at registration
|
|
6
|
+
time. The policy specifies what security capabilities the handler requires,
|
|
7
|
+
including secret access, network access, and data classification levels.
|
|
8
|
+
|
|
9
|
+
Security Policy Components:
|
|
10
|
+
- Secret scopes: What secrets the handler needs access to
|
|
11
|
+
- Network access: What domains the handler may contact
|
|
12
|
+
- Data classification: Maximum data sensitivity level processed
|
|
13
|
+
- Adapter tag: Whether this is a platform adapter (stricter rules)
|
|
14
|
+
|
|
15
|
+
Validation:
|
|
16
|
+
Security policies are validated against environment constraints at
|
|
17
|
+
registration time. See ModelEnvironmentPolicy for environment-level
|
|
18
|
+
constraints.
|
|
19
|
+
|
|
20
|
+
See Also:
|
|
21
|
+
- ModelEnvironmentPolicy: Environment-level security constraints
|
|
22
|
+
- EnumSecurityRuleId: Security validation rule identifiers
|
|
23
|
+
- EnumHandlerTypeCategory: Handler behavioral classification
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
from __future__ import annotations
|
|
27
|
+
|
|
28
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
29
|
+
|
|
30
|
+
from omnibase_core.enums import EnumDataClassification
|
|
31
|
+
from omnibase_infra.enums import EnumHandlerTypeCategory
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class ModelHandlerSecurityPolicy(BaseModel):
|
|
35
|
+
"""Security policy declared by a handler in its contract.
|
|
36
|
+
|
|
37
|
+
This model captures the security requirements and constraints
|
|
38
|
+
that a handler declares at registration time. The policy is
|
|
39
|
+
validated against environment constraints before the handler
|
|
40
|
+
is permitted to register.
|
|
41
|
+
|
|
42
|
+
Security Requirements:
|
|
43
|
+
Handlers must declare ALL security capabilities they require.
|
|
44
|
+
Any undeclared capability will be denied at runtime.
|
|
45
|
+
|
|
46
|
+
Adapter Handlers:
|
|
47
|
+
Handlers marked as adapters (is_adapter=True) have stricter
|
|
48
|
+
security constraints:
|
|
49
|
+
- Cannot request secret scopes (must use injected credentials)
|
|
50
|
+
- Must be EFFECT category (adapters perform I/O)
|
|
51
|
+
- May require explicit domain allowlists in production
|
|
52
|
+
|
|
53
|
+
Attributes:
|
|
54
|
+
secret_scopes: Secret scopes this handler requires access to.
|
|
55
|
+
Empty set means no secret access needed.
|
|
56
|
+
allowed_domains: Outbound domains this handler may access.
|
|
57
|
+
Empty list means no outbound access. Use ["*"] for unrestricted
|
|
58
|
+
(only permitted in development).
|
|
59
|
+
data_classification: Maximum data classification this handler
|
|
60
|
+
processes. Cannot exceed environment maximum.
|
|
61
|
+
is_adapter: Whether this is an adapter handler (platform plumbing).
|
|
62
|
+
Adapters have stricter security rules applied.
|
|
63
|
+
handler_type_category: Behavioral classification of the handler.
|
|
64
|
+
Required when is_adapter=True (must be EFFECT).
|
|
65
|
+
|
|
66
|
+
Example:
|
|
67
|
+
>>> policy = ModelHandlerSecurityPolicy(
|
|
68
|
+
... secret_scopes=frozenset({"database/readonly"}),
|
|
69
|
+
... allowed_domains=["api.internal.example.com"],
|
|
70
|
+
... data_classification=EnumDataClassification.CONFIDENTIAL,
|
|
71
|
+
... is_adapter=False,
|
|
72
|
+
... handler_type_category=EnumHandlerTypeCategory.EFFECT,
|
|
73
|
+
... )
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
model_config = ConfigDict(
|
|
77
|
+
frozen=True,
|
|
78
|
+
extra="forbid",
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
secret_scopes: frozenset[str] = Field(
|
|
82
|
+
default_factory=frozenset,
|
|
83
|
+
description="Secret scopes this handler requires access to",
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
allowed_domains: tuple[str, ...] = Field(
|
|
87
|
+
default_factory=tuple,
|
|
88
|
+
description="Outbound domains this handler may access (immutable tuple)",
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
data_classification: EnumDataClassification = Field(
|
|
92
|
+
default=EnumDataClassification.INTERNAL,
|
|
93
|
+
description="Maximum data classification this handler processes",
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
is_adapter: bool = Field(
|
|
97
|
+
default=False,
|
|
98
|
+
description="Whether this is an adapter handler (stricter security rules)",
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
handler_type_category: EnumHandlerTypeCategory | None = Field(
|
|
102
|
+
default=None,
|
|
103
|
+
description="Behavioral classification of the handler",
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
__all__ = ["ModelHandlerSecurityPolicy"]
|