omnibase_infra 0.2.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- omnibase_infra/__init__.py +101 -0
- omnibase_infra/adapters/adapter_onex_tool_execution.py +451 -0
- omnibase_infra/capabilities/__init__.py +15 -0
- omnibase_infra/capabilities/capability_inference_rules.py +211 -0
- omnibase_infra/capabilities/contract_capability_extractor.py +221 -0
- omnibase_infra/capabilities/intent_type_extractor.py +160 -0
- omnibase_infra/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/configs/widget_mapping.yaml +176 -0
- omnibase_infra/constants_topic_patterns.py +26 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +264 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +141 -0
- omnibase_infra/decorators/__init__.py +29 -0
- omnibase_infra/decorators/allow_any.py +109 -0
- omnibase_infra/dlq/__init__.py +90 -0
- omnibase_infra/dlq/constants_dlq.py +57 -0
- omnibase_infra/dlq/models/__init__.py +26 -0
- omnibase_infra/dlq/models/enum_replay_status.py +37 -0
- omnibase_infra/dlq/models/model_dlq_replay_record.py +135 -0
- omnibase_infra/dlq/models/model_dlq_tracking_config.py +184 -0
- omnibase_infra/dlq/service_dlq_tracking.py +611 -0
- omnibase_infra/enums/__init__.py +132 -0
- omnibase_infra/enums/enum_any_type_violation.py +104 -0
- omnibase_infra/enums/enum_backend_type.py +27 -0
- omnibase_infra/enums/enum_capture_outcome.py +42 -0
- omnibase_infra/enums/enum_capture_state.py +88 -0
- omnibase_infra/enums/enum_chain_violation_type.py +119 -0
- omnibase_infra/enums/enum_circuit_state.py +51 -0
- omnibase_infra/enums/enum_confirmation_event_type.py +27 -0
- omnibase_infra/enums/enum_consumer_group_purpose.py +92 -0
- omnibase_infra/enums/enum_contract_type.py +84 -0
- omnibase_infra/enums/enum_dedupe_strategy.py +46 -0
- omnibase_infra/enums/enum_dispatch_status.py +191 -0
- omnibase_infra/enums/enum_environment.py +46 -0
- omnibase_infra/enums/enum_execution_shape_violation.py +103 -0
- omnibase_infra/enums/enum_handler_error_type.py +111 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -0
- omnibase_infra/enums/enum_handler_source_mode.py +86 -0
- omnibase_infra/enums/enum_handler_source_type.py +87 -0
- omnibase_infra/enums/enum_handler_type.py +77 -0
- omnibase_infra/enums/enum_handler_type_category.py +61 -0
- omnibase_infra/enums/enum_infra_transport_type.py +73 -0
- omnibase_infra/enums/enum_introspection_reason.py +154 -0
- omnibase_infra/enums/enum_kafka_acks.py +99 -0
- omnibase_infra/enums/enum_message_category.py +213 -0
- omnibase_infra/enums/enum_node_archetype.py +74 -0
- omnibase_infra/enums/enum_node_output_type.py +185 -0
- omnibase_infra/enums/enum_non_retryable_error_category.py +224 -0
- omnibase_infra/enums/enum_policy_type.py +32 -0
- omnibase_infra/enums/enum_registration_state.py +261 -0
- omnibase_infra/enums/enum_registration_status.py +33 -0
- omnibase_infra/enums/enum_registry_response_status.py +28 -0
- omnibase_infra/enums/enum_response_status.py +26 -0
- omnibase_infra/enums/enum_retry_error_category.py +98 -0
- omnibase_infra/enums/enum_security_rule_id.py +103 -0
- omnibase_infra/enums/enum_selection_strategy.py +91 -0
- omnibase_infra/enums/enum_topic_standard.py +42 -0
- omnibase_infra/enums/enum_validation_severity.py +78 -0
- omnibase_infra/errors/__init__.py +160 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_binding_resolution.py +128 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +95 -0
- omnibase_infra/errors/error_consul.py +132 -0
- omnibase_infra/errors/error_container_wiring.py +243 -0
- omnibase_infra/errors/error_event_bus_registry.py +105 -0
- omnibase_infra/errors/error_infra.py +610 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +115 -0
- omnibase_infra/errors/error_vault.py +123 -0
- omnibase_infra/event_bus/__init__.py +72 -0
- omnibase_infra/event_bus/configs/kafka_event_bus_config.yaml +84 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +797 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1716 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +180 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +771 -0
- omnibase_infra/event_bus/models/__init__.py +29 -0
- omnibase_infra/event_bus/models/config/__init__.py +20 -0
- omnibase_infra/event_bus/models/config/model_kafka_event_bus_config.py +693 -0
- omnibase_infra/event_bus/models/model_dlq_event.py +206 -0
- omnibase_infra/event_bus/models/model_dlq_metrics.py +304 -0
- omnibase_infra/event_bus/models/model_event_headers.py +115 -0
- omnibase_infra/event_bus/models/model_event_message.py +60 -0
- omnibase_infra/event_bus/testing/__init__.py +26 -0
- omnibase_infra/event_bus/testing/adapter_protocol_event_publisher_inmemory.py +418 -0
- omnibase_infra/event_bus/testing/model_publisher_metrics.py +64 -0
- omnibase_infra/event_bus/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +82 -0
- omnibase_infra/handlers/filesystem/__init__.py +48 -0
- omnibase_infra/handlers/filesystem/enum_file_system_operation.py +35 -0
- omnibase_infra/handlers/filesystem/model_file_system_request.py +298 -0
- omnibase_infra/handlers/filesystem/model_file_system_result.py +166 -0
- omnibase_infra/handlers/handler_consul.py +795 -0
- omnibase_infra/handlers/handler_db.py +1046 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +2015 -0
- omnibase_infra/handlers/handler_http.py +926 -0
- omnibase_infra/handlers/handler_intent.py +387 -0
- omnibase_infra/handlers/handler_manifest_persistence.contract.yaml +184 -0
- omnibase_infra/handlers/handler_manifest_persistence.py +1539 -0
- omnibase_infra/handlers/handler_mcp.py +1430 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +428 -0
- omnibase_infra/handlers/mcp/__init__.py +19 -0
- omnibase_infra/handlers/mcp/adapter_onex_to_mcp.py +446 -0
- omnibase_infra/handlers/mcp/protocols.py +178 -0
- omnibase_infra/handlers/mcp/transport_streamable_http.py +352 -0
- omnibase_infra/handlers/mixins/__init__.py +47 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +338 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +542 -0
- omnibase_infra/handlers/mixins/mixin_consul_topic_index.py +585 -0
- omnibase_infra/handlers/mixins/mixin_vault_initialization.py +338 -0
- omnibase_infra/handlers/mixins/mixin_vault_retry.py +412 -0
- omnibase_infra/handlers/mixins/mixin_vault_secrets.py +450 -0
- omnibase_infra/handlers/mixins/mixin_vault_token.py +365 -0
- omnibase_infra/handlers/models/__init__.py +286 -0
- omnibase_infra/handlers/models/consul/__init__.py +81 -0
- omnibase_infra/handlers/models/consul/enum_consul_operation_type.py +57 -0
- omnibase_infra/handlers/models/consul/model_consul_deregister_payload.py +51 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_config.py +153 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_payload.py +89 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_found_payload.py +55 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_not_found_payload.py +49 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_recurse_payload.py +50 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_item.py +33 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_put_payload.py +41 -0
- omnibase_infra/handlers/models/consul/model_consul_register_payload.py +53 -0
- omnibase_infra/handlers/models/consul/model_consul_retry_config.py +66 -0
- omnibase_infra/handlers/models/consul/model_payload_consul.py +66 -0
- omnibase_infra/handlers/models/consul/registry_payload_consul.py +214 -0
- omnibase_infra/handlers/models/graph/__init__.py +35 -0
- omnibase_infra/handlers/models/graph/enum_graph_operation_type.py +20 -0
- omnibase_infra/handlers/models/graph/model_graph_execute_payload.py +38 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_config.py +54 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_payload.py +44 -0
- omnibase_infra/handlers/models/graph/model_graph_query_payload.py +40 -0
- omnibase_infra/handlers/models/graph/model_graph_record.py +22 -0
- omnibase_infra/handlers/models/http/__init__.py +50 -0
- omnibase_infra/handlers/models/http/enum_http_operation_type.py +29 -0
- omnibase_infra/handlers/models/http/model_http_body_content.py +45 -0
- omnibase_infra/handlers/models/http/model_http_get_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_http_handler_payload.py +90 -0
- omnibase_infra/handlers/models/http/model_http_post_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_payload_http.py +66 -0
- omnibase_infra/handlers/models/http/registry_payload_http.py +212 -0
- omnibase_infra/handlers/models/mcp/__init__.py +23 -0
- omnibase_infra/handlers/models/mcp/enum_mcp_operation_type.py +24 -0
- omnibase_infra/handlers/models/mcp/model_mcp_handler_config.py +40 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_call.py +32 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_result.py +45 -0
- omnibase_infra/handlers/models/model_consul_handler_response.py +96 -0
- omnibase_infra/handlers/models/model_db_describe_response.py +83 -0
- omnibase_infra/handlers/models/model_db_query_payload.py +95 -0
- omnibase_infra/handlers/models/model_db_query_response.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_config.py +98 -0
- omnibase_infra/handlers/models/model_filesystem_delete_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_delete_result.py +77 -0
- omnibase_infra/handlers/models/model_filesystem_directory_entry.py +75 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_result.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_payload.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_result.py +68 -0
- omnibase_infra/handlers/models/model_filesystem_read_payload.py +62 -0
- omnibase_infra/handlers/models/model_filesystem_read_result.py +61 -0
- omnibase_infra/handlers/models/model_filesystem_write_payload.py +70 -0
- omnibase_infra/handlers/models/model_filesystem_write_result.py +55 -0
- omnibase_infra/handlers/models/model_graph_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_handler_response.py +103 -0
- omnibase_infra/handlers/models/model_http_handler_response.py +101 -0
- omnibase_infra/handlers/models/model_manifest_metadata.py +75 -0
- omnibase_infra/handlers/models/model_manifest_persistence_config.py +62 -0
- omnibase_infra/handlers/models/model_manifest_query_payload.py +90 -0
- omnibase_infra/handlers/models/model_manifest_query_result.py +97 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_payload.py +44 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_result.py +98 -0
- omnibase_infra/handlers/models/model_manifest_store_payload.py +47 -0
- omnibase_infra/handlers/models/model_manifest_store_result.py +67 -0
- omnibase_infra/handlers/models/model_operation_context.py +187 -0
- omnibase_infra/handlers/models/model_qdrant_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_retry_state.py +162 -0
- omnibase_infra/handlers/models/model_vault_handler_response.py +98 -0
- omnibase_infra/handlers/models/qdrant/__init__.py +44 -0
- omnibase_infra/handlers/models/qdrant/enum_qdrant_operation_type.py +26 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_collection_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_delete_payload.py +36 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_config.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_payload.py +54 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_result.py +30 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_upsert_payload.py +36 -0
- omnibase_infra/handlers/models/vault/__init__.py +69 -0
- omnibase_infra/handlers/models/vault/enum_vault_operation_type.py +35 -0
- omnibase_infra/handlers/models/vault/model_payload_vault.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_delete_payload.py +57 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_config.py +148 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_payload.py +101 -0
- omnibase_infra/handlers/models/vault/model_vault_list_payload.py +58 -0
- omnibase_infra/handlers/models/vault/model_vault_renew_token_payload.py +67 -0
- omnibase_infra/handlers/models/vault/model_vault_retry_config.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_secret_payload.py +106 -0
- omnibase_infra/handlers/models/vault/model_vault_write_payload.py +66 -0
- omnibase_infra/handlers/models/vault/registry_payload_vault.py +213 -0
- omnibase_infra/handlers/registration_storage/__init__.py +43 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_mock.py +392 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_postgres.py +922 -0
- omnibase_infra/handlers/registration_storage/models/__init__.py +23 -0
- omnibase_infra/handlers/registration_storage/models/model_delete_registration_request.py +58 -0
- omnibase_infra/handlers/registration_storage/models/model_update_registration_request.py +73 -0
- omnibase_infra/handlers/registration_storage/protocol_registration_persistence.py +191 -0
- omnibase_infra/handlers/service_discovery/__init__.py +43 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_consul.py +1051 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_mock.py +258 -0
- omnibase_infra/handlers/service_discovery/models/__init__.py +22 -0
- omnibase_infra/handlers/service_discovery/models/model_discovery_result.py +64 -0
- omnibase_infra/handlers/service_discovery/models/model_registration_result.py +138 -0
- omnibase_infra/handlers/service_discovery/models/model_service_info.py +109 -0
- omnibase_infra/handlers/service_discovery/protocol_discovery_operations.py +170 -0
- omnibase_infra/idempotency/__init__.py +94 -0
- omnibase_infra/idempotency/models/__init__.py +43 -0
- omnibase_infra/idempotency/models/model_idempotency_check_result.py +85 -0
- omnibase_infra/idempotency/models/model_idempotency_guard_config.py +130 -0
- omnibase_infra/idempotency/models/model_idempotency_record.py +86 -0
- omnibase_infra/idempotency/models/model_idempotency_store_health_check_result.py +81 -0
- omnibase_infra/idempotency/models/model_idempotency_store_metrics.py +140 -0
- omnibase_infra/idempotency/models/model_postgres_idempotency_store_config.py +299 -0
- omnibase_infra/idempotency/protocol_idempotency_store.py +184 -0
- omnibase_infra/idempotency/store_inmemory.py +265 -0
- omnibase_infra/idempotency/store_postgres.py +923 -0
- omnibase_infra/infrastructure/__init__.py +0 -0
- omnibase_infra/migrations/001_create_event_ledger.sql +166 -0
- omnibase_infra/migrations/001_drop_event_ledger.sql +18 -0
- omnibase_infra/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +656 -0
- omnibase_infra/mixins/mixin_dict_like_accessors.py +146 -0
- omnibase_infra/mixins/mixin_envelope_extraction.py +119 -0
- omnibase_infra/mixins/mixin_node_introspection.py +2670 -0
- omnibase_infra/mixins/mixin_retry_execution.py +386 -0
- omnibase_infra/mixins/protocol_circuit_breaker_aware.py +133 -0
- omnibase_infra/models/__init__.py +144 -0
- omnibase_infra/models/bindings/__init__.py +59 -0
- omnibase_infra/models/bindings/constants.py +144 -0
- omnibase_infra/models/bindings/model_binding_resolution_result.py +103 -0
- omnibase_infra/models/bindings/model_operation_binding.py +44 -0
- omnibase_infra/models/bindings/model_operation_bindings_subcontract.py +152 -0
- omnibase_infra/models/bindings/model_parsed_binding.py +52 -0
- omnibase_infra/models/corpus/__init__.py +17 -0
- omnibase_infra/models/corpus/model_capture_config.py +133 -0
- omnibase_infra/models/corpus/model_capture_result.py +86 -0
- omnibase_infra/models/discovery/__init__.py +42 -0
- omnibase_infra/models/discovery/model_dependency_spec.py +319 -0
- omnibase_infra/models/discovery/model_discovered_capabilities.py +50 -0
- omnibase_infra/models/discovery/model_introspection_config.py +330 -0
- omnibase_infra/models/discovery/model_introspection_performance_metrics.py +169 -0
- omnibase_infra/models/discovery/model_introspection_task_config.py +116 -0
- omnibase_infra/models/dispatch/__init__.py +155 -0
- omnibase_infra/models/dispatch/model_debug_trace_snapshot.py +114 -0
- omnibase_infra/models/dispatch/model_dispatch_context.py +439 -0
- omnibase_infra/models/dispatch/model_dispatch_error.py +336 -0
- omnibase_infra/models/dispatch/model_dispatch_log_context.py +400 -0
- omnibase_infra/models/dispatch/model_dispatch_metadata.py +228 -0
- omnibase_infra/models/dispatch/model_dispatch_metrics.py +496 -0
- omnibase_infra/models/dispatch/model_dispatch_outcome.py +317 -0
- omnibase_infra/models/dispatch/model_dispatch_outputs.py +231 -0
- omnibase_infra/models/dispatch/model_dispatch_result.py +436 -0
- omnibase_infra/models/dispatch/model_dispatch_route.py +279 -0
- omnibase_infra/models/dispatch/model_dispatcher_metrics.py +275 -0
- omnibase_infra/models/dispatch/model_dispatcher_registration.py +352 -0
- omnibase_infra/models/dispatch/model_materialized_dispatch.py +141 -0
- omnibase_infra/models/dispatch/model_parsed_topic.py +135 -0
- omnibase_infra/models/dispatch/model_topic_parser.py +725 -0
- omnibase_infra/models/dispatch/model_tracing_context.py +285 -0
- omnibase_infra/models/errors/__init__.py +45 -0
- omnibase_infra/models/errors/model_handler_validation_error.py +594 -0
- omnibase_infra/models/errors/model_infra_error_context.py +99 -0
- omnibase_infra/models/errors/model_message_type_registry_error_context.py +71 -0
- omnibase_infra/models/errors/model_timeout_error_context.py +110 -0
- omnibase_infra/models/handlers/__init__.py +80 -0
- omnibase_infra/models/handlers/model_bootstrap_handler_descriptor.py +162 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +82 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +200 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -0
- omnibase_infra/models/handlers/model_handler_source_config.py +220 -0
- omnibase_infra/models/health/__init__.py +9 -0
- omnibase_infra/models/health/model_health_check_result.py +40 -0
- omnibase_infra/models/lifecycle/__init__.py +39 -0
- omnibase_infra/models/logging/__init__.py +51 -0
- omnibase_infra/models/logging/model_log_context.py +756 -0
- omnibase_infra/models/mcp/__init__.py +15 -0
- omnibase_infra/models/mcp/model_mcp_contract_config.py +80 -0
- omnibase_infra/models/mcp/model_mcp_server_config.py +67 -0
- omnibase_infra/models/mcp/model_mcp_tool_definition.py +73 -0
- omnibase_infra/models/mcp/model_mcp_tool_parameter.py +35 -0
- omnibase_infra/models/model_node_identity.py +126 -0
- omnibase_infra/models/model_retry_error_classification.py +78 -0
- omnibase_infra/models/projection/__init__.py +43 -0
- omnibase_infra/models/projection/model_capability_fields.py +112 -0
- omnibase_infra/models/projection/model_registration_projection.py +434 -0
- omnibase_infra/models/projection/model_registration_snapshot.py +322 -0
- omnibase_infra/models/projection/model_sequence_info.py +182 -0
- omnibase_infra/models/projection/model_snapshot_topic_config.py +591 -0
- omnibase_infra/models/projectors/__init__.py +41 -0
- omnibase_infra/models/projectors/model_projector_column.py +289 -0
- omnibase_infra/models/projectors/model_projector_discovery_result.py +65 -0
- omnibase_infra/models/projectors/model_projector_index.py +270 -0
- omnibase_infra/models/projectors/model_projector_schema.py +415 -0
- omnibase_infra/models/projectors/model_projector_validation_error.py +63 -0
- omnibase_infra/models/projectors/util_sql_identifiers.py +115 -0
- omnibase_infra/models/registration/__init__.py +68 -0
- omnibase_infra/models/registration/commands/__init__.py +15 -0
- omnibase_infra/models/registration/commands/model_node_registration_acked.py +108 -0
- omnibase_infra/models/registration/events/__init__.py +56 -0
- omnibase_infra/models/registration/events/model_node_became_active.py +103 -0
- omnibase_infra/models/registration/events/model_node_liveness_expired.py +103 -0
- omnibase_infra/models/registration/events/model_node_registration_accepted.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_received.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_timed_out.py +112 -0
- omnibase_infra/models/registration/events/model_node_registration_initiated.py +107 -0
- omnibase_infra/models/registration/events/model_node_registration_rejected.py +104 -0
- omnibase_infra/models/registration/model_event_bus_topic_entry.py +59 -0
- omnibase_infra/models/registration/model_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +190 -0
- omnibase_infra/models/registration/model_node_event_bus_config.py +99 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +195 -0
- omnibase_infra/models/registration/model_node_metadata.py +79 -0
- omnibase_infra/models/registration/model_node_registration.py +162 -0
- omnibase_infra/models/registration/model_node_registration_record.py +162 -0
- omnibase_infra/models/registry/__init__.py +29 -0
- omnibase_infra/models/registry/model_domain_constraint.py +202 -0
- omnibase_infra/models/registry/model_message_type_entry.py +271 -0
- omnibase_infra/models/resilience/__init__.py +9 -0
- omnibase_infra/models/resilience/model_circuit_breaker_config.py +227 -0
- omnibase_infra/models/routing/__init__.py +25 -0
- omnibase_infra/models/routing/model_routing_entry.py +52 -0
- omnibase_infra/models/routing/model_routing_subcontract.py +70 -0
- omnibase_infra/models/runtime/__init__.py +49 -0
- omnibase_infra/models/runtime/model_contract_security_config.py +41 -0
- omnibase_infra/models/runtime/model_discovery_error.py +81 -0
- omnibase_infra/models/runtime/model_discovery_result.py +162 -0
- omnibase_infra/models/runtime/model_discovery_warning.py +74 -0
- omnibase_infra/models/runtime/model_failed_plugin_load.py +63 -0
- omnibase_infra/models/runtime/model_handler_contract.py +296 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +129 -0
- omnibase_infra/models/runtime/model_plugin_load_context.py +93 -0
- omnibase_infra/models/runtime/model_plugin_load_summary.py +124 -0
- omnibase_infra/models/security/__init__.py +50 -0
- omnibase_infra/models/security/classification_levels.py +99 -0
- omnibase_infra/models/security/model_environment_policy.py +145 -0
- omnibase_infra/models/security/model_handler_security_policy.py +107 -0
- omnibase_infra/models/security/model_security_error.py +81 -0
- omnibase_infra/models/security/model_security_validation_result.py +328 -0
- omnibase_infra/models/security/model_security_warning.py +67 -0
- omnibase_infra/models/snapshot/__init__.py +27 -0
- omnibase_infra/models/snapshot/model_field_change.py +65 -0
- omnibase_infra/models/snapshot/model_snapshot.py +270 -0
- omnibase_infra/models/snapshot/model_snapshot_diff.py +203 -0
- omnibase_infra/models/snapshot/model_subject_ref.py +81 -0
- omnibase_infra/models/types/__init__.py +71 -0
- omnibase_infra/models/validation/__init__.py +89 -0
- omnibase_infra/models/validation/model_any_type_validation_result.py +118 -0
- omnibase_infra/models/validation/model_any_type_violation.py +141 -0
- omnibase_infra/models/validation/model_category_match_result.py +345 -0
- omnibase_infra/models/validation/model_chain_violation.py +166 -0
- omnibase_infra/models/validation/model_coverage_metrics.py +316 -0
- omnibase_infra/models/validation/model_execution_shape_rule.py +159 -0
- omnibase_infra/models/validation/model_execution_shape_validation.py +208 -0
- omnibase_infra/models/validation/model_execution_shape_validation_result.py +294 -0
- omnibase_infra/models/validation/model_execution_shape_violation.py +122 -0
- omnibase_infra/models/validation/model_localhandler_validation_result.py +139 -0
- omnibase_infra/models/validation/model_localhandler_violation.py +100 -0
- omnibase_infra/models/validation/model_output_validation_params.py +74 -0
- omnibase_infra/models/validation/model_validate_and_raise_params.py +84 -0
- omnibase_infra/models/validation/model_validation_error_params.py +84 -0
- omnibase_infra/models/validation/model_validation_outcome.py +287 -0
- omnibase_infra/nodes/__init__.py +57 -0
- omnibase_infra/nodes/architecture_validator/__init__.py +79 -0
- omnibase_infra/nodes/architecture_validator/contract.yaml +252 -0
- omnibase_infra/nodes/architecture_validator/contract_architecture_validator.yaml +203 -0
- omnibase_infra/nodes/architecture_validator/mixins/__init__.py +16 -0
- omnibase_infra/nodes/architecture_validator/mixins/mixin_file_path_rule.py +92 -0
- omnibase_infra/nodes/architecture_validator/models/__init__.py +36 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_request.py +56 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_result.py +311 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_violation.py +163 -0
- omnibase_infra/nodes/architecture_validator/models/model_rule_check_result.py +265 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_request.py +105 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_result.py +314 -0
- omnibase_infra/nodes/architecture_validator/node.py +262 -0
- omnibase_infra/nodes/architecture_validator/node_architecture_validator.py +383 -0
- omnibase_infra/nodes/architecture_validator/protocols/__init__.py +9 -0
- omnibase_infra/nodes/architecture_validator/protocols/protocol_architecture_rule.py +225 -0
- omnibase_infra/nodes/architecture_validator/registry/__init__.py +28 -0
- omnibase_infra/nodes/architecture_validator/registry/registry_infra_architecture_validator.py +106 -0
- omnibase_infra/nodes/architecture_validator/validators/__init__.py +104 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_direct_dispatch.py +422 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_handler_publishing.py +481 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_orchestrator_fsm.py +491 -0
- omnibase_infra/nodes/contract_registry_reducer/__init__.py +29 -0
- omnibase_infra/nodes/contract_registry_reducer/contract.yaml +255 -0
- omnibase_infra/nodes/contract_registry_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_contract_registry_state.py +266 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_cleanup_topic_references.py +55 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_deactivate_contract.py +58 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_mark_stale.py +49 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_heartbeat.py +71 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_topic.py +66 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_upsert_contract.py +92 -0
- omnibase_infra/nodes/contract_registry_reducer/node.py +121 -0
- omnibase_infra/nodes/contract_registry_reducer/reducer.py +784 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/registry_infra_contract_registry_reducer.py +101 -0
- omnibase_infra/nodes/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +167 -0
- omnibase_infra/nodes/effects/models/__init__.py +32 -0
- omnibase_infra/nodes/effects/models/model_backend_result.py +190 -0
- omnibase_infra/nodes/effects/models/model_effect_idempotency_config.py +92 -0
- omnibase_infra/nodes/effects/models/model_registry_request.py +132 -0
- omnibase_infra/nodes/effects/models/model_registry_response.py +263 -0
- omnibase_infra/nodes/effects/protocol_consul_client.py +89 -0
- omnibase_infra/nodes/effects/protocol_effect_idempotency_store.py +143 -0
- omnibase_infra/nodes/effects/protocol_postgres_adapter.py +96 -0
- omnibase_infra/nodes/effects/registry_effect.py +525 -0
- omnibase_infra/nodes/effects/store_effect_idempotency_inmemory.py +425 -0
- omnibase_infra/nodes/handlers/consul/contract.yaml +85 -0
- omnibase_infra/nodes/handlers/db/contract.yaml +72 -0
- omnibase_infra/nodes/handlers/graph/contract.yaml +127 -0
- omnibase_infra/nodes/handlers/http/contract.yaml +74 -0
- omnibase_infra/nodes/handlers/intent/contract.yaml +66 -0
- omnibase_infra/nodes/handlers/mcp/contract.yaml +69 -0
- omnibase_infra/nodes/handlers/vault/contract.yaml +91 -0
- omnibase_infra/nodes/node_intent_storage_effect/__init__.py +50 -0
- omnibase_infra/nodes/node_intent_storage_effect/contract.yaml +194 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/__init__.py +24 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/model_intent_storage_input.py +141 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/model_intent_storage_output.py +130 -0
- omnibase_infra/nodes/node_intent_storage_effect/node.py +94 -0
- omnibase_infra/nodes/node_intent_storage_effect/registry/__init__.py +35 -0
- omnibase_infra/nodes/node_intent_storage_effect/registry/registry_infra_intent_storage.py +294 -0
- omnibase_infra/nodes/node_ledger_projection_compute/__init__.py +50 -0
- omnibase_infra/nodes/node_ledger_projection_compute/contract.yaml +104 -0
- omnibase_infra/nodes/node_ledger_projection_compute/node.py +284 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/__init__.py +29 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/registry_infra_ledger_projection.py +118 -0
- omnibase_infra/nodes/node_ledger_write_effect/__init__.py +82 -0
- omnibase_infra/nodes/node_ledger_write_effect/contract.yaml +200 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/__init__.py +22 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_append.py +372 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_query.py +597 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/__init__.py +31 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_append_result.py +54 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_entry.py +92 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query.py +53 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query_result.py +41 -0
- omnibase_infra/nodes/node_ledger_write_effect/node.py +89 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/__init__.py +13 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/protocol_ledger_persistence.py +127 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/registry_infra_ledger_write.py +121 -0
- omnibase_infra/nodes/node_registration_orchestrator/README.md +542 -0
- omnibase_infra/nodes/node_registration_orchestrator/__init__.py +120 -0
- omnibase_infra/nodes/node_registration_orchestrator/contract.yaml +482 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/__init__.py +53 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_introspected.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_registration_acked.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_runtime_tick.py +373 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/__init__.py +62 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_heartbeat.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_introspected.py +694 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_registration_acked.py +458 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_runtime_tick.py +364 -0
- omnibase_infra/nodes/node_registration_orchestrator/introspection_event_router.py +544 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/__init__.py +75 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_intent_payload.py +194 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_registration_intent.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_intent_execution_result.py +50 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_node_liveness_expired.py +107 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_config.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_input.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_output.py +166 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_intent_payload.py +235 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_upsert_intent.py +68 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_execution_result.py +384 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_state.py +60 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registration_intent.py +177 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registry_intent.py +247 -0
- omnibase_infra/nodes/node_registration_orchestrator/node.py +195 -0
- omnibase_infra/nodes/node_registration_orchestrator/plugin.py +909 -0
- omnibase_infra/nodes/node_registration_orchestrator/protocols.py +439 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/registry_infra_node_registration_orchestrator.py +528 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +393 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +743 -0
- omnibase_infra/nodes/node_registration_reducer/__init__.py +15 -0
- omnibase_infra/nodes/node_registration_reducer/contract.yaml +301 -0
- omnibase_infra/nodes/node_registration_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/node_registration_reducer/models/model_validation_result.py +113 -0
- omnibase_infra/nodes/node_registration_reducer/node.py +139 -0
- omnibase_infra/nodes/node_registration_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_registration_reducer/registry/registry_infra_node_registration_reducer.py +79 -0
- omnibase_infra/nodes/node_registration_storage_effect/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_storage_effect/contract.yaml +220 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/__init__.py +44 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_delete_result.py +132 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_record.py +199 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_update.py +155 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_details.py +123 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_result.py +117 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_query.py +100 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_result.py +136 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_upsert_result.py +127 -0
- omnibase_infra/nodes/node_registration_storage_effect/node.py +112 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/__init__.py +22 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/protocol_registration_persistence.py +333 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/__init__.py +23 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/registry_infra_registration_storage.py +215 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +677 -0
- omnibase_infra/nodes/node_registry_effect/handlers/__init__.py +70 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_deregister.py +211 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_register.py +212 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_partial_retry.py +417 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_deactivate.py +215 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_upsert.py +208 -0
- omnibase_infra/nodes/node_registry_effect/models/__init__.py +43 -0
- omnibase_infra/nodes/node_registry_effect/models/model_partial_retry_request.py +92 -0
- omnibase_infra/nodes/node_registry_effect/node.py +165 -0
- omnibase_infra/nodes/node_registry_effect/registry/__init__.py +27 -0
- omnibase_infra/nodes/node_registry_effect/registry/registry_infra_registry_effect.py +196 -0
- omnibase_infra/nodes/node_service_discovery_effect/__init__.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/contract.yaml +246 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/__init__.py +67 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_health_status.py +72 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_service_discovery_operation.py +58 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_query.py +99 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_result.py +98 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_health_check_config.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_query_metadata.py +63 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_registration_result.py +130 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_details.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_result.py +119 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_info.py +106 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_registration.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/node.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/__init__.py +14 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/protocol_discovery_operations.py +279 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/__init__.py +13 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/registry_infra_service_discovery.py +222 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +37 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +87 -0
- omnibase_infra/nodes/reducers/models/model_payload_ledger_append.py +133 -0
- omnibase_infra/nodes/reducers/models/model_payload_postgres_upsert_registration.py +60 -0
- omnibase_infra/nodes/reducers/models/model_registration_confirmation.py +166 -0
- omnibase_infra/nodes/reducers/models/model_registration_state.py +433 -0
- omnibase_infra/nodes/reducers/registration_reducer.py +1138 -0
- omnibase_infra/observability/__init__.py +143 -0
- omnibase_infra/observability/constants_metrics.py +91 -0
- omnibase_infra/observability/factory_observability_sink.py +525 -0
- omnibase_infra/observability/handlers/__init__.py +118 -0
- omnibase_infra/observability/handlers/handler_logging_structured.py +967 -0
- omnibase_infra/observability/handlers/handler_metrics_prometheus.py +1120 -0
- omnibase_infra/observability/handlers/model_logging_handler_config.py +71 -0
- omnibase_infra/observability/handlers/model_logging_handler_response.py +77 -0
- omnibase_infra/observability/handlers/model_metrics_handler_config.py +172 -0
- omnibase_infra/observability/handlers/model_metrics_handler_payload.py +135 -0
- omnibase_infra/observability/handlers/model_metrics_handler_response.py +101 -0
- omnibase_infra/observability/hooks/__init__.py +74 -0
- omnibase_infra/observability/hooks/hook_observability.py +1223 -0
- omnibase_infra/observability/models/__init__.py +30 -0
- omnibase_infra/observability/models/enum_required_log_context_key.py +77 -0
- omnibase_infra/observability/models/model_buffered_log_entry.py +117 -0
- omnibase_infra/observability/models/model_logging_sink_config.py +73 -0
- omnibase_infra/observability/models/model_metrics_sink_config.py +156 -0
- omnibase_infra/observability/sinks/__init__.py +69 -0
- omnibase_infra/observability/sinks/sink_logging_structured.py +809 -0
- omnibase_infra/observability/sinks/sink_metrics_prometheus.py +710 -0
- omnibase_infra/plugins/__init__.py +27 -0
- omnibase_infra/plugins/examples/__init__.py +28 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer.py +271 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer_error_handling.py +210 -0
- omnibase_infra/plugins/models/__init__.py +21 -0
- omnibase_infra/plugins/models/model_plugin_context.py +76 -0
- omnibase_infra/plugins/models/model_plugin_input_data.py +58 -0
- omnibase_infra/plugins/models/model_plugin_output_data.py +62 -0
- omnibase_infra/plugins/plugin_compute_base.py +449 -0
- omnibase_infra/projectors/__init__.py +30 -0
- omnibase_infra/projectors/contracts/__init__.py +63 -0
- omnibase_infra/projectors/contracts/registration_projector.yaml +370 -0
- omnibase_infra/projectors/projection_reader_registration.py +1559 -0
- omnibase_infra/projectors/snapshot_publisher_registration.py +1329 -0
- omnibase_infra/protocols/__init__.py +104 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -0
- omnibase_infra/protocols/protocol_container_aware.py +200 -0
- omnibase_infra/protocols/protocol_dispatch_engine.py +152 -0
- omnibase_infra/protocols/protocol_event_bus_like.py +127 -0
- omnibase_infra/protocols/protocol_event_projector.py +96 -0
- omnibase_infra/protocols/protocol_idempotency_store.py +142 -0
- omnibase_infra/protocols/protocol_message_dispatcher.py +247 -0
- omnibase_infra/protocols/protocol_message_type_registry.py +306 -0
- omnibase_infra/protocols/protocol_plugin_compute.py +368 -0
- omnibase_infra/protocols/protocol_projector_schema_validator.py +82 -0
- omnibase_infra/protocols/protocol_registry_metrics.py +215 -0
- omnibase_infra/protocols/protocol_snapshot_publisher.py +396 -0
- omnibase_infra/protocols/protocol_snapshot_store.py +567 -0
- omnibase_infra/runtime/__init__.py +445 -0
- omnibase_infra/runtime/binding_config_resolver.py +2771 -0
- omnibase_infra/runtime/binding_resolver.py +753 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/constants_notification.py +75 -0
- omnibase_infra/runtime/constants_security.py +70 -0
- omnibase_infra/runtime/contract_handler_discovery.py +587 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +51 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/contract_loaders/operation_bindings_loader.py +789 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -0
- omnibase_infra/runtime/emit_daemon/__init__.py +97 -0
- omnibase_infra/runtime/emit_daemon/cli.py +844 -0
- omnibase_infra/runtime/emit_daemon/client.py +811 -0
- omnibase_infra/runtime/emit_daemon/config.py +535 -0
- omnibase_infra/runtime/emit_daemon/daemon.py +812 -0
- omnibase_infra/runtime/emit_daemon/event_registry.py +477 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_request.py +139 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_response.py +191 -0
- omnibase_infra/runtime/emit_daemon/queue.py +618 -0
- omnibase_infra/runtime/enums/__init__.py +18 -0
- omnibase_infra/runtime/enums/enum_config_ref_scheme.py +33 -0
- omnibase_infra/runtime/enums/enum_scheduler_status.py +170 -0
- omnibase_infra/runtime/envelope_validator.py +179 -0
- omnibase_infra/runtime/event_bus_subcontract_wiring.py +466 -0
- omnibase_infra/runtime/handler_bootstrap_source.py +507 -0
- omnibase_infra/runtime/handler_contract_config_loader.py +603 -0
- omnibase_infra/runtime/handler_contract_source.py +750 -0
- omnibase_infra/runtime/handler_identity.py +81 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2046 -0
- omnibase_infra/runtime/handler_registry.py +329 -0
- omnibase_infra/runtime/handler_source_resolver.py +367 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kafka_contract_source.py +984 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +402 -0
- omnibase_infra/runtime/mixins/__init__.py +24 -0
- omnibase_infra/runtime/mixins/mixin_projector_notification_publishing.py +566 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +778 -0
- omnibase_infra/runtime/models/__init__.py +229 -0
- omnibase_infra/runtime/models/model_batch_lifecycle_result.py +217 -0
- omnibase_infra/runtime/models/model_binding_config.py +168 -0
- omnibase_infra/runtime/models/model_binding_config_cache_stats.py +135 -0
- omnibase_infra/runtime/models/model_binding_config_resolver_config.py +329 -0
- omnibase_infra/runtime/models/model_cached_secret.py +138 -0
- omnibase_infra/runtime/models/model_compute_key.py +138 -0
- omnibase_infra/runtime/models/model_compute_registration.py +97 -0
- omnibase_infra/runtime/models/model_config_cache_entry.py +61 -0
- omnibase_infra/runtime/models/model_config_ref.py +331 -0
- omnibase_infra/runtime/models/model_config_ref_parse_result.py +125 -0
- omnibase_infra/runtime/models/model_contract_load_result.py +224 -0
- omnibase_infra/runtime/models/model_domain_plugin_config.py +92 -0
- omnibase_infra/runtime/models/model_domain_plugin_result.py +270 -0
- omnibase_infra/runtime/models/model_duplicate_response.py +54 -0
- omnibase_infra/runtime/models/model_enabled_protocols_config.py +61 -0
- omnibase_infra/runtime/models/model_event_bus_config.py +54 -0
- omnibase_infra/runtime/models/model_failed_component.py +55 -0
- omnibase_infra/runtime/models/model_health_check_response.py +168 -0
- omnibase_infra/runtime/models/model_health_check_result.py +229 -0
- omnibase_infra/runtime/models/model_lifecycle_result.py +245 -0
- omnibase_infra/runtime/models/model_logging_config.py +42 -0
- omnibase_infra/runtime/models/model_optional_correlation_id.py +167 -0
- omnibase_infra/runtime/models/model_optional_string.py +94 -0
- omnibase_infra/runtime/models/model_optional_uuid.py +110 -0
- omnibase_infra/runtime/models/model_policy_context.py +100 -0
- omnibase_infra/runtime/models/model_policy_key.py +138 -0
- omnibase_infra/runtime/models/model_policy_registration.py +139 -0
- omnibase_infra/runtime/models/model_policy_result.py +103 -0
- omnibase_infra/runtime/models/model_policy_type_filter.py +157 -0
- omnibase_infra/runtime/models/model_projector_notification_config.py +171 -0
- omnibase_infra/runtime/models/model_projector_plugin_loader_config.py +47 -0
- omnibase_infra/runtime/models/model_protocol_registration_config.py +65 -0
- omnibase_infra/runtime/models/model_retry_policy.py +105 -0
- omnibase_infra/runtime/models/model_runtime_config.py +150 -0
- omnibase_infra/runtime/models/model_runtime_contract_config.py +268 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_config.py +625 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_metrics.py +233 -0
- omnibase_infra/runtime/models/model_runtime_tick.py +193 -0
- omnibase_infra/runtime/models/model_secret_cache_stats.py +82 -0
- omnibase_infra/runtime/models/model_secret_mapping.py +63 -0
- omnibase_infra/runtime/models/model_secret_resolver_config.py +107 -0
- omnibase_infra/runtime/models/model_secret_resolver_metrics.py +111 -0
- omnibase_infra/runtime/models/model_secret_source_info.py +72 -0
- omnibase_infra/runtime/models/model_secret_source_spec.py +66 -0
- omnibase_infra/runtime/models/model_security_config.py +109 -0
- omnibase_infra/runtime/models/model_shutdown_batch_result.py +75 -0
- omnibase_infra/runtime/models/model_shutdown_config.py +94 -0
- omnibase_infra/runtime/models/model_transition_notification_outbox_config.py +112 -0
- omnibase_infra/runtime/models/model_transition_notification_outbox_metrics.py +140 -0
- omnibase_infra/runtime/models/model_transition_notification_publisher_metrics.py +357 -0
- omnibase_infra/runtime/projector_plugin_loader.py +1462 -0
- omnibase_infra/runtime/projector_schema_manager.py +565 -0
- omnibase_infra/runtime/projector_shell.py +1330 -0
- omnibase_infra/runtime/protocol_contract_descriptor.py +92 -0
- omnibase_infra/runtime/protocol_contract_source.py +92 -0
- omnibase_infra/runtime/protocol_domain_plugin.py +474 -0
- omnibase_infra/runtime/protocol_handler_discovery.py +221 -0
- omnibase_infra/runtime/protocol_handler_plugin_loader.py +327 -0
- omnibase_infra/runtime/protocol_lifecycle_executor.py +435 -0
- omnibase_infra/runtime/protocol_policy.py +366 -0
- omnibase_infra/runtime/protocols/__init__.py +37 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -0
- omnibase_infra/runtime/publisher_topic_scoped.py +294 -0
- omnibase_infra/runtime/registry/__init__.py +93 -0
- omnibase_infra/runtime/registry/mixin_message_type_query.py +326 -0
- omnibase_infra/runtime/registry/mixin_message_type_registration.py +354 -0
- omnibase_infra/runtime/registry/registry_event_bus_binding.py +268 -0
- omnibase_infra/runtime/registry/registry_message_type.py +542 -0
- omnibase_infra/runtime/registry/registry_protocol_binding.py +445 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_contract_source.py +693 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1185 -0
- omnibase_infra/runtime/runtime_contract_config_loader.py +406 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2112 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1651 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +2350 -0
- omnibase_infra/runtime/service_runtime_host_process.py +3493 -0
- omnibase_infra/runtime/transition_notification_outbox.py +1190 -0
- omnibase_infra/runtime/transition_notification_publisher.py +765 -0
- omnibase_infra/runtime/util_container_wiring.py +1124 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +723 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/schemas/schema_transition_notification_outbox.sql +245 -0
- omnibase_infra/services/__init__.py +89 -0
- omnibase_infra/services/corpus_capture.py +684 -0
- omnibase_infra/services/mcp/__init__.py +31 -0
- omnibase_infra/services/mcp/mcp_server_lifecycle.py +449 -0
- omnibase_infra/services/mcp/service_mcp_tool_discovery.py +411 -0
- omnibase_infra/services/mcp/service_mcp_tool_registry.py +329 -0
- omnibase_infra/services/mcp/service_mcp_tool_sync.py +565 -0
- omnibase_infra/services/registry_api/__init__.py +40 -0
- omnibase_infra/services/registry_api/main.py +261 -0
- omnibase_infra/services/registry_api/models/__init__.py +66 -0
- omnibase_infra/services/registry_api/models/model_capability_widget_mapping.py +38 -0
- omnibase_infra/services/registry_api/models/model_pagination_info.py +48 -0
- omnibase_infra/services/registry_api/models/model_registry_discovery_response.py +73 -0
- omnibase_infra/services/registry_api/models/model_registry_health_response.py +49 -0
- omnibase_infra/services/registry_api/models/model_registry_instance_view.py +88 -0
- omnibase_infra/services/registry_api/models/model_registry_node_view.py +88 -0
- omnibase_infra/services/registry_api/models/model_registry_summary.py +60 -0
- omnibase_infra/services/registry_api/models/model_response_list_instances.py +43 -0
- omnibase_infra/services/registry_api/models/model_response_list_nodes.py +51 -0
- omnibase_infra/services/registry_api/models/model_warning.py +49 -0
- omnibase_infra/services/registry_api/models/model_widget_defaults.py +28 -0
- omnibase_infra/services/registry_api/models/model_widget_mapping.py +51 -0
- omnibase_infra/services/registry_api/routes.py +371 -0
- omnibase_infra/services/registry_api/service.py +837 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +898 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +699 -0
- omnibase_infra/services/service_timeout_scanner.py +394 -0
- omnibase_infra/services/session/__init__.py +56 -0
- omnibase_infra/services/session/config_consumer.py +137 -0
- omnibase_infra/services/session/config_store.py +139 -0
- omnibase_infra/services/session/consumer.py +1007 -0
- omnibase_infra/services/session/protocol_session_aggregator.py +117 -0
- omnibase_infra/services/session/store.py +997 -0
- omnibase_infra/services/snapshot/__init__.py +31 -0
- omnibase_infra/services/snapshot/service_snapshot.py +647 -0
- omnibase_infra/services/snapshot/store_inmemory.py +637 -0
- omnibase_infra/services/snapshot/store_postgres.py +1279 -0
- omnibase_infra/shared/__init__.py +8 -0
- omnibase_infra/testing/__init__.py +10 -0
- omnibase_infra/testing/utils.py +23 -0
- omnibase_infra/topics/__init__.py +45 -0
- omnibase_infra/topics/platform_topic_suffixes.py +140 -0
- omnibase_infra/topics/util_topic_composition.py +95 -0
- omnibase_infra/types/__init__.py +48 -0
- omnibase_infra/types/type_cache_info.py +49 -0
- omnibase_infra/types/type_dsn.py +173 -0
- omnibase_infra/types/type_infra_aliases.py +60 -0
- omnibase_infra/types/typed_dict/__init__.py +29 -0
- omnibase_infra/types/typed_dict/typed_dict_envelope_build_params.py +115 -0
- omnibase_infra/types/typed_dict/typed_dict_introspection_cache.py +128 -0
- omnibase_infra/types/typed_dict/typed_dict_performance_metrics_cache.py +140 -0
- omnibase_infra/types/typed_dict_capabilities.py +64 -0
- omnibase_infra/utils/__init__.py +117 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_atomic_file.py +261 -0
- omnibase_infra/utils/util_consumer_group.py +232 -0
- omnibase_infra/utils/util_datetime.py +372 -0
- omnibase_infra/utils/util_db_transaction.py +239 -0
- omnibase_infra/utils/util_dsn_validation.py +333 -0
- omnibase_infra/utils/util_env_parsing.py +264 -0
- omnibase_infra/utils/util_error_sanitization.py +457 -0
- omnibase_infra/utils/util_pydantic_validators.py +477 -0
- omnibase_infra/utils/util_retry_optimistic.py +281 -0
- omnibase_infra/utils/util_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -0
- omnibase_infra/validation/contracts/security.validation.yaml +114 -0
- omnibase_infra/validation/enums/__init__.py +11 -0
- omnibase_infra/validation/enums/enum_contract_violation_severity.py +13 -0
- omnibase_infra/validation/infra_validators.py +1514 -0
- omnibase_infra/validation/linter_contract.py +907 -0
- omnibase_infra/validation/mixin_any_type_classification.py +120 -0
- omnibase_infra/validation/mixin_any_type_exemption.py +580 -0
- omnibase_infra/validation/mixin_any_type_reporting.py +106 -0
- omnibase_infra/validation/mixin_execution_shape_violation_checks.py +596 -0
- omnibase_infra/validation/mixin_node_archetype_detection.py +254 -0
- omnibase_infra/validation/models/__init__.py +15 -0
- omnibase_infra/validation/models/model_contract_lint_result.py +101 -0
- omnibase_infra/validation/models/model_contract_violation.py +41 -0
- omnibase_infra/validation/service_validation_aggregator.py +395 -0
- omnibase_infra/validation/validation_exemptions.yaml +2033 -0
- omnibase_infra/validation/validator_any_type.py +715 -0
- omnibase_infra/validation/validator_chain_propagation.py +839 -0
- omnibase_infra/validation/validator_execution_shape.py +465 -0
- omnibase_infra/validation/validator_localhandler.py +261 -0
- omnibase_infra/validation/validator_registration_security.py +410 -0
- omnibase_infra/validation/validator_routing_coverage.py +1020 -0
- omnibase_infra/validation/validator_runtime_shape.py +915 -0
- omnibase_infra/validation/validator_security.py +513 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.6.dist-info/METADATA +197 -0
- omnibase_infra-0.2.6.dist-info/RECORD +833 -0
- omnibase_infra-0.2.6.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.6.dist-info/entry_points.txt +5 -0
- omnibase_infra-0.2.6.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,591 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Snapshot Topic Configuration Model.
|
|
4
|
+
|
|
5
|
+
Provides Pydantic configuration for Kafka snapshot topics. Snapshot topics use
|
|
6
|
+
log compaction (cleanup.policy=compact) so only the latest snapshot per entity_id
|
|
7
|
+
is retained, enabling efficient state reconstruction without replaying the full
|
|
8
|
+
event log.
|
|
9
|
+
|
|
10
|
+
Design Notes:
|
|
11
|
+
Snapshot topics are distinct from event topics in several key ways:
|
|
12
|
+
|
|
13
|
+
1. **Compaction vs Retention**:
|
|
14
|
+
- Event topics: cleanup.policy=delete (immutable log, time-based retention)
|
|
15
|
+
- Snapshot topics: cleanup.policy=compact (only latest per key retained)
|
|
16
|
+
|
|
17
|
+
2. **Authoritative Source**:
|
|
18
|
+
- Events are the source of truth (immutable facts)
|
|
19
|
+
- Snapshots are derived, read-optimized views (can be rebuilt from events)
|
|
20
|
+
|
|
21
|
+
3. **Key Format**:
|
|
22
|
+
- Snapshot keys: "{domain}:{entity_id}" (e.g., "registration:uuid-here")
|
|
23
|
+
- This enables per-entity compaction where only the latest snapshot survives
|
|
24
|
+
|
|
25
|
+
4. **Partition Strategy**:
|
|
26
|
+
- Partitioning should match the projection's entity_id partitioning
|
|
27
|
+
- This ensures snapshots for a given entity are always in the same partition
|
|
28
|
+
|
|
29
|
+
Topic Naming (per ONEX Topic Taxonomy):
|
|
30
|
+
ONEX Kafka format: onex.<domain>.snapshots
|
|
31
|
+
Environment-Aware format: <env>.<domain>.snapshots.v<version>
|
|
32
|
+
|
|
33
|
+
Examples:
|
|
34
|
+
- onex.registration.snapshots
|
|
35
|
+
- dev.registration.snapshots.v1
|
|
36
|
+
- prod.discovery.snapshots.v1
|
|
37
|
+
|
|
38
|
+
Related Tickets:
|
|
39
|
+
- OMN-947 (F2): Snapshot Publishing
|
|
40
|
+
- OMN-944 (F1): Registration Projection Schema
|
|
41
|
+
- OMN-940 (F0): Define Projector Execution Model
|
|
42
|
+
|
|
43
|
+
See Also:
|
|
44
|
+
- ONEX Topic Taxonomy: docs/standards/onex_topic_taxonomy.md
|
|
45
|
+
- ModelKafkaEventBusConfig: Event bus configuration patterns
|
|
46
|
+
- ModelRegistrationProjection: The projection model snapshotted to this topic
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
from __future__ import annotations
|
|
50
|
+
|
|
51
|
+
import logging
|
|
52
|
+
import os
|
|
53
|
+
from pathlib import Path
|
|
54
|
+
from typing import TYPE_CHECKING
|
|
55
|
+
from uuid import uuid4
|
|
56
|
+
|
|
57
|
+
import yaml
|
|
58
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
|
|
59
|
+
|
|
60
|
+
from omnibase_infra.enums import EnumInfraTransportType
|
|
61
|
+
from omnibase_infra.topics import SUFFIX_REGISTRATION_SNAPSHOTS
|
|
62
|
+
|
|
63
|
+
if TYPE_CHECKING:
|
|
64
|
+
from omnibase_infra.errors.error_infra import ProtocolConfigurationError
|
|
65
|
+
from omnibase_infra.models.errors.model_infra_error_context import (
|
|
66
|
+
ModelInfraErrorContext,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def _get_error_classes() -> tuple[
|
|
71
|
+
type[ProtocolConfigurationError], type[ModelInfraErrorContext]
|
|
72
|
+
]:
|
|
73
|
+
"""Lazy import of error classes to avoid circular import.
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
Tuple of (ProtocolConfigurationError, ModelInfraErrorContext)
|
|
77
|
+
"""
|
|
78
|
+
from omnibase_infra.errors.error_infra import ProtocolConfigurationError
|
|
79
|
+
from omnibase_infra.models.errors.model_infra_error_context import (
|
|
80
|
+
ModelInfraErrorContext,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
return ProtocolConfigurationError, ModelInfraErrorContext
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
logger = logging.getLogger(__name__)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class ModelSnapshotTopicConfig(BaseModel):
|
|
90
|
+
"""Configuration for Kafka snapshot topics.
|
|
91
|
+
|
|
92
|
+
Snapshot topics use log compaction (cleanup.policy=compact) so only the
|
|
93
|
+
latest snapshot per entity_id is retained. This enables efficient state
|
|
94
|
+
reconstruction for orchestrators and read models without replaying the
|
|
95
|
+
full event log.
|
|
96
|
+
|
|
97
|
+
Key Semantics:
|
|
98
|
+
Kafka compaction uses message keys to determine which records to retain.
|
|
99
|
+
For snapshot topics, keys should follow the format:
|
|
100
|
+
|
|
101
|
+
{domain}:{entity_id}
|
|
102
|
+
|
|
103
|
+
For example: "registration:550e8400-e29b-41d4-a716-446655440000"
|
|
104
|
+
|
|
105
|
+
This ensures that only the latest snapshot for each entity survives
|
|
106
|
+
compaction, while maintaining domain isolation.
|
|
107
|
+
|
|
108
|
+
Compaction Timing:
|
|
109
|
+
The min_compaction_lag_ms and max_compaction_lag_ms settings control
|
|
110
|
+
how quickly compaction can occur:
|
|
111
|
+
|
|
112
|
+
- min_compaction_lag_ms (default: 60s): Minimum time before a message
|
|
113
|
+
can be compacted. Prevents very recent snapshots from being compacted
|
|
114
|
+
immediately (useful if consumers are slightly behind).
|
|
115
|
+
|
|
116
|
+
- max_compaction_lag_ms (default: 5min): Maximum time before compaction
|
|
117
|
+
is forced. Ensures stale snapshots are cleaned up in a timely manner.
|
|
118
|
+
|
|
119
|
+
For high-write-volume topics, consider increasing these values to reduce
|
|
120
|
+
compaction overhead.
|
|
121
|
+
|
|
122
|
+
Attributes:
|
|
123
|
+
topic: Full Kafka topic name for registration snapshots
|
|
124
|
+
partition_count: Number of partitions (should match projection partitioning)
|
|
125
|
+
replication_factor: Replication factor for durability
|
|
126
|
+
cleanup_policy: Kafka cleanup policy (must be "compact" for snapshots)
|
|
127
|
+
min_compaction_lag_ms: Minimum time before a message can be compacted
|
|
128
|
+
max_compaction_lag_ms: Maximum time before compaction is forced
|
|
129
|
+
segment_bytes: Segment size (smaller = more frequent compaction)
|
|
130
|
+
retention_ms: Retention time (-1 for infinite, required for compacted topics)
|
|
131
|
+
min_insync_replicas: Minimum in-sync replicas for writes
|
|
132
|
+
|
|
133
|
+
Example:
|
|
134
|
+
>>> from omnibase_infra.models.projection import ModelSnapshotTopicConfig
|
|
135
|
+
>>>
|
|
136
|
+
>>> # Use defaults
|
|
137
|
+
>>> config = ModelSnapshotTopicConfig.default()
|
|
138
|
+
>>> config.topic
|
|
139
|
+
'onex.registration.snapshots'
|
|
140
|
+
>>>
|
|
141
|
+
>>> # Custom configuration
|
|
142
|
+
>>> config = ModelSnapshotTopicConfig(
|
|
143
|
+
... topic="prod.registration.snapshots.v1",
|
|
144
|
+
... partition_count=24,
|
|
145
|
+
... replication_factor=3,
|
|
146
|
+
... )
|
|
147
|
+
>>>
|
|
148
|
+
>>> # From YAML
|
|
149
|
+
>>> config = ModelSnapshotTopicConfig.from_yaml(
|
|
150
|
+
... Path("config/snapshot_topic.yaml")
|
|
151
|
+
... )
|
|
152
|
+
"""
|
|
153
|
+
|
|
154
|
+
model_config = ConfigDict(frozen=True, extra="forbid", from_attributes=True)
|
|
155
|
+
|
|
156
|
+
# Topic identity
|
|
157
|
+
topic: str = Field(
|
|
158
|
+
default=SUFFIX_REGISTRATION_SNAPSHOTS,
|
|
159
|
+
min_length=1,
|
|
160
|
+
max_length=255,
|
|
161
|
+
description="Full Kafka topic name for registration snapshots",
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
# Partition configuration
|
|
165
|
+
partition_count: int = Field(
|
|
166
|
+
default=12,
|
|
167
|
+
ge=1,
|
|
168
|
+
le=1000,
|
|
169
|
+
description="Number of partitions (should match projection partitioning)",
|
|
170
|
+
)
|
|
171
|
+
replication_factor: int = Field(
|
|
172
|
+
default=3,
|
|
173
|
+
ge=1,
|
|
174
|
+
le=10,
|
|
175
|
+
description="Replication factor for durability",
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
# Compaction configuration (required for snapshot topics)
|
|
179
|
+
cleanup_policy: str = Field(
|
|
180
|
+
default="compact",
|
|
181
|
+
description="Kafka cleanup policy. Must be 'compact' for snapshot topics.",
|
|
182
|
+
)
|
|
183
|
+
min_compaction_lag_ms: int = Field(
|
|
184
|
+
default=60000, # 1 minute
|
|
185
|
+
ge=0,
|
|
186
|
+
le=604800000, # 7 days max
|
|
187
|
+
description="Minimum time (ms) before a message can be compacted",
|
|
188
|
+
)
|
|
189
|
+
max_compaction_lag_ms: int = Field(
|
|
190
|
+
default=300000, # 5 minutes
|
|
191
|
+
ge=0,
|
|
192
|
+
le=604800000, # 7 days max
|
|
193
|
+
description="Maximum time (ms) before compaction is forced",
|
|
194
|
+
)
|
|
195
|
+
segment_bytes: int = Field(
|
|
196
|
+
default=104857600, # 100MB
|
|
197
|
+
ge=1048576, # 1MB minimum
|
|
198
|
+
le=1073741824, # 1GB maximum
|
|
199
|
+
description="Segment size in bytes (smaller = more frequent compaction)",
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
# Retention (must be -1 or very long for compacted topics)
|
|
203
|
+
retention_ms: int = Field(
|
|
204
|
+
default=-1, # Infinite retention (required for compacted topics)
|
|
205
|
+
ge=-1,
|
|
206
|
+
description="Retention time in ms (-1 for infinite, recommended for compaction)",
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
# Durability settings
|
|
210
|
+
min_insync_replicas: int = Field(
|
|
211
|
+
default=2,
|
|
212
|
+
ge=1,
|
|
213
|
+
le=10,
|
|
214
|
+
description="Minimum in-sync replicas for writes",
|
|
215
|
+
)
|
|
216
|
+
|
|
217
|
+
@field_validator("cleanup_policy", mode="before")
|
|
218
|
+
@classmethod
|
|
219
|
+
def validate_cleanup_policy(cls, v: object) -> str:
|
|
220
|
+
"""Validate that cleanup_policy is 'compact' for snapshot topics.
|
|
221
|
+
|
|
222
|
+
Snapshot topics MUST use log compaction to retain only the latest
|
|
223
|
+
snapshot per entity_id. Other cleanup policies would either:
|
|
224
|
+
- 'delete': Remove old snapshots based on time, losing state
|
|
225
|
+
- 'compact,delete': Hybrid that may delete before compaction completes
|
|
226
|
+
|
|
227
|
+
Args:
|
|
228
|
+
v: Cleanup policy value (any type before Pydantic conversion)
|
|
229
|
+
|
|
230
|
+
Returns:
|
|
231
|
+
Validated cleanup policy string
|
|
232
|
+
|
|
233
|
+
Raises:
|
|
234
|
+
ProtocolConfigurationError: If cleanup_policy is not 'compact'
|
|
235
|
+
"""
|
|
236
|
+
ProtocolConfigurationError, ModelInfraErrorContext = _get_error_classes()
|
|
237
|
+
context = ModelInfraErrorContext(
|
|
238
|
+
transport_type=EnumInfraTransportType.KAFKA,
|
|
239
|
+
operation="validate_snapshot_topic_config",
|
|
240
|
+
target_name="snapshot_topic",
|
|
241
|
+
correlation_id=uuid4(),
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
if v is None:
|
|
245
|
+
raise ProtocolConfigurationError(
|
|
246
|
+
"cleanup_policy cannot be None for snapshot topics",
|
|
247
|
+
context=context,
|
|
248
|
+
parameter="cleanup_policy",
|
|
249
|
+
value=None,
|
|
250
|
+
)
|
|
251
|
+
if not isinstance(v, str):
|
|
252
|
+
raise ProtocolConfigurationError(
|
|
253
|
+
f"cleanup_policy must be a string, got {type(v).__name__}",
|
|
254
|
+
context=context,
|
|
255
|
+
parameter="cleanup_policy",
|
|
256
|
+
value=type(v).__name__,
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
v_lower = v.strip().lower()
|
|
260
|
+
if v_lower != "compact":
|
|
261
|
+
raise ProtocolConfigurationError(
|
|
262
|
+
f"Snapshot topics MUST use cleanup.policy=compact. "
|
|
263
|
+
f"Got '{v}'. Snapshots require compaction to retain only the "
|
|
264
|
+
f"latest state per entity_id. Using '{v}' would cause data loss.",
|
|
265
|
+
context=context,
|
|
266
|
+
parameter="cleanup_policy",
|
|
267
|
+
value=v,
|
|
268
|
+
)
|
|
269
|
+
|
|
270
|
+
return v_lower
|
|
271
|
+
|
|
272
|
+
@field_validator("topic", mode="before")
|
|
273
|
+
@classmethod
|
|
274
|
+
def validate_topic(cls, v: object) -> str:
|
|
275
|
+
"""Validate topic format and content.
|
|
276
|
+
|
|
277
|
+
Args:
|
|
278
|
+
v: Topic value (any type before Pydantic conversion)
|
|
279
|
+
|
|
280
|
+
Returns:
|
|
281
|
+
Validated topic string
|
|
282
|
+
|
|
283
|
+
Raises:
|
|
284
|
+
ProtocolConfigurationError: If topic is invalid
|
|
285
|
+
"""
|
|
286
|
+
ProtocolConfigurationError, ModelInfraErrorContext = _get_error_classes()
|
|
287
|
+
context = ModelInfraErrorContext(
|
|
288
|
+
transport_type=EnumInfraTransportType.KAFKA,
|
|
289
|
+
operation="validate_snapshot_topic_config",
|
|
290
|
+
target_name="snapshot_topic",
|
|
291
|
+
correlation_id=uuid4(),
|
|
292
|
+
)
|
|
293
|
+
|
|
294
|
+
if v is None:
|
|
295
|
+
raise ProtocolConfigurationError(
|
|
296
|
+
"topic cannot be None",
|
|
297
|
+
context=context,
|
|
298
|
+
parameter="topic",
|
|
299
|
+
value=None,
|
|
300
|
+
)
|
|
301
|
+
if not isinstance(v, str):
|
|
302
|
+
raise ProtocolConfigurationError(
|
|
303
|
+
f"topic must be a string, got {type(v).__name__}",
|
|
304
|
+
context=context,
|
|
305
|
+
parameter="topic",
|
|
306
|
+
value=type(v).__name__,
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
topic = v.strip()
|
|
310
|
+
if not topic:
|
|
311
|
+
raise ProtocolConfigurationError(
|
|
312
|
+
"topic cannot be empty",
|
|
313
|
+
context=context,
|
|
314
|
+
parameter="topic",
|
|
315
|
+
value=v,
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
# Validate topic contains "snapshots" suffix (per ONEX taxonomy)
|
|
319
|
+
if not topic.endswith(".snapshots") and ".snapshots." not in topic:
|
|
320
|
+
logger.warning(
|
|
321
|
+
"Topic name '%s' does not follow ONEX snapshot topic naming "
|
|
322
|
+
"convention (should end with '.snapshots' or contain '.snapshots.'). "
|
|
323
|
+
"Expected patterns: 'onex.<domain>.snapshots' or "
|
|
324
|
+
"'<env>.<domain>.snapshots.v<version>'",
|
|
325
|
+
topic,
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
return topic
|
|
329
|
+
|
|
330
|
+
@model_validator(mode="after")
|
|
331
|
+
def validate_compaction_lag_order(self) -> ModelSnapshotTopicConfig:
|
|
332
|
+
"""Validate that min_compaction_lag_ms <= max_compaction_lag_ms.
|
|
333
|
+
|
|
334
|
+
The min lag should not exceed max lag, otherwise compaction timing
|
|
335
|
+
would be undefined. Kafka requires that minimum compaction lag is
|
|
336
|
+
less than or equal to maximum compaction lag.
|
|
337
|
+
|
|
338
|
+
Returns:
|
|
339
|
+
Self if validation passes
|
|
340
|
+
|
|
341
|
+
Raises:
|
|
342
|
+
ProtocolConfigurationError: If min_compaction_lag_ms > max_compaction_lag_ms
|
|
343
|
+
"""
|
|
344
|
+
if self.min_compaction_lag_ms > self.max_compaction_lag_ms:
|
|
345
|
+
ProtocolConfigurationError, ModelInfraErrorContext = _get_error_classes()
|
|
346
|
+
context = ModelInfraErrorContext(
|
|
347
|
+
transport_type=EnumInfraTransportType.KAFKA,
|
|
348
|
+
operation="validate_snapshot_topic_config",
|
|
349
|
+
target_name="snapshot_topic",
|
|
350
|
+
correlation_id=uuid4(),
|
|
351
|
+
)
|
|
352
|
+
raise ProtocolConfigurationError(
|
|
353
|
+
f"min_compaction_lag_ms ({self.min_compaction_lag_ms}) must be <= "
|
|
354
|
+
f"max_compaction_lag_ms ({self.max_compaction_lag_ms})",
|
|
355
|
+
context=context,
|
|
356
|
+
parameter="compaction_lag",
|
|
357
|
+
value=f"min={self.min_compaction_lag_ms}, max={self.max_compaction_lag_ms}",
|
|
358
|
+
)
|
|
359
|
+
return self
|
|
360
|
+
|
|
361
|
+
def apply_environment_overrides(self) -> ModelSnapshotTopicConfig:
|
|
362
|
+
"""Apply environment variable overrides to configuration.
|
|
363
|
+
|
|
364
|
+
Environment variables are mapped as follows:
|
|
365
|
+
- SNAPSHOT_TOPIC -> topic
|
|
366
|
+
- SNAPSHOT_PARTITION_COUNT -> partition_count
|
|
367
|
+
- SNAPSHOT_REPLICATION_FACTOR -> replication_factor
|
|
368
|
+
- SNAPSHOT_MIN_COMPACTION_LAG_MS -> min_compaction_lag_ms
|
|
369
|
+
- SNAPSHOT_MAX_COMPACTION_LAG_MS -> max_compaction_lag_ms
|
|
370
|
+
- SNAPSHOT_SEGMENT_BYTES -> segment_bytes
|
|
371
|
+
- SNAPSHOT_RETENTION_MS -> retention_ms
|
|
372
|
+
- SNAPSHOT_MIN_INSYNC_REPLICAS -> min_insync_replicas
|
|
373
|
+
|
|
374
|
+
Note: cleanup_policy is NOT overridable via environment variable
|
|
375
|
+
because snapshot topics MUST use compaction.
|
|
376
|
+
|
|
377
|
+
Returns:
|
|
378
|
+
New configuration instance with environment overrides applied
|
|
379
|
+
"""
|
|
380
|
+
overrides: dict[str, object] = {}
|
|
381
|
+
|
|
382
|
+
env_mappings: dict[str, str] = {
|
|
383
|
+
"SNAPSHOT_TOPIC": "topic",
|
|
384
|
+
"SNAPSHOT_PARTITION_COUNT": "partition_count",
|
|
385
|
+
"SNAPSHOT_REPLICATION_FACTOR": "replication_factor",
|
|
386
|
+
"SNAPSHOT_MIN_COMPACTION_LAG_MS": "min_compaction_lag_ms",
|
|
387
|
+
"SNAPSHOT_MAX_COMPACTION_LAG_MS": "max_compaction_lag_ms",
|
|
388
|
+
"SNAPSHOT_SEGMENT_BYTES": "segment_bytes",
|
|
389
|
+
"SNAPSHOT_RETENTION_MS": "retention_ms",
|
|
390
|
+
"SNAPSHOT_MIN_INSYNC_REPLICAS": "min_insync_replicas",
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
# Integer fields for type conversion
|
|
394
|
+
int_fields = {
|
|
395
|
+
"partition_count",
|
|
396
|
+
"replication_factor",
|
|
397
|
+
"min_compaction_lag_ms",
|
|
398
|
+
"max_compaction_lag_ms",
|
|
399
|
+
"segment_bytes",
|
|
400
|
+
"retention_ms",
|
|
401
|
+
"min_insync_replicas",
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
for env_var, field_name in env_mappings.items():
|
|
405
|
+
env_value = os.environ.get(env_var)
|
|
406
|
+
if env_value is not None:
|
|
407
|
+
if field_name in int_fields:
|
|
408
|
+
try:
|
|
409
|
+
overrides[field_name] = int(env_value)
|
|
410
|
+
except ValueError:
|
|
411
|
+
logger.warning(
|
|
412
|
+
"Failed to parse integer environment variable %s='%s', "
|
|
413
|
+
"using default value for %s",
|
|
414
|
+
env_var,
|
|
415
|
+
env_value,
|
|
416
|
+
field_name,
|
|
417
|
+
)
|
|
418
|
+
continue
|
|
419
|
+
else:
|
|
420
|
+
overrides[field_name] = env_value
|
|
421
|
+
|
|
422
|
+
if overrides:
|
|
423
|
+
current_data = self.model_dump()
|
|
424
|
+
current_data.update(overrides)
|
|
425
|
+
return ModelSnapshotTopicConfig(**current_data)
|
|
426
|
+
|
|
427
|
+
return self
|
|
428
|
+
|
|
429
|
+
@classmethod
|
|
430
|
+
def default(cls) -> ModelSnapshotTopicConfig:
|
|
431
|
+
"""Create default configuration with environment overrides.
|
|
432
|
+
|
|
433
|
+
Returns a canonical default configuration for development and testing,
|
|
434
|
+
with environment variable overrides applied.
|
|
435
|
+
|
|
436
|
+
Defaults are tuned for:
|
|
437
|
+
- Moderate write volume (12 partitions)
|
|
438
|
+
- High durability (replication_factor=3, min_insync_replicas=2)
|
|
439
|
+
- Balanced compaction (1 min lag, 5 min max lag)
|
|
440
|
+
- Infinite retention (required for compacted topics)
|
|
441
|
+
|
|
442
|
+
Returns:
|
|
443
|
+
Default configuration instance with environment overrides
|
|
444
|
+
"""
|
|
445
|
+
base_config = cls(
|
|
446
|
+
topic=SUFFIX_REGISTRATION_SNAPSHOTS,
|
|
447
|
+
partition_count=12,
|
|
448
|
+
replication_factor=3,
|
|
449
|
+
cleanup_policy="compact",
|
|
450
|
+
min_compaction_lag_ms=60000, # 1 minute
|
|
451
|
+
max_compaction_lag_ms=300000, # 5 minutes
|
|
452
|
+
segment_bytes=104857600, # 100MB
|
|
453
|
+
retention_ms=-1, # Infinite
|
|
454
|
+
min_insync_replicas=2,
|
|
455
|
+
)
|
|
456
|
+
return base_config.apply_environment_overrides()
|
|
457
|
+
|
|
458
|
+
@classmethod
|
|
459
|
+
def from_yaml(cls, path: Path) -> ModelSnapshotTopicConfig:
|
|
460
|
+
"""Load configuration from YAML file.
|
|
461
|
+
|
|
462
|
+
Loads configuration from a YAML file and applies environment
|
|
463
|
+
variable overrides on top.
|
|
464
|
+
|
|
465
|
+
Args:
|
|
466
|
+
path: Path to YAML configuration file
|
|
467
|
+
|
|
468
|
+
Returns:
|
|
469
|
+
Configuration instance loaded from YAML with env overrides
|
|
470
|
+
|
|
471
|
+
Raises:
|
|
472
|
+
FileNotFoundError: If the YAML file does not exist
|
|
473
|
+
ProtocolConfigurationError: If the YAML content is invalid
|
|
474
|
+
|
|
475
|
+
Example YAML:
|
|
476
|
+
```yaml
|
|
477
|
+
topic: "prod.registration.snapshots.v1"
|
|
478
|
+
partition_count: 24
|
|
479
|
+
replication_factor: 3
|
|
480
|
+
cleanup_policy: "compact"
|
|
481
|
+
min_compaction_lag_ms: 120000
|
|
482
|
+
max_compaction_lag_ms: 600000
|
|
483
|
+
segment_bytes: 52428800
|
|
484
|
+
retention_ms: -1
|
|
485
|
+
min_insync_replicas: 2
|
|
486
|
+
```
|
|
487
|
+
"""
|
|
488
|
+
ProtocolConfigurationError, ModelInfraErrorContext = _get_error_classes()
|
|
489
|
+
context = ModelInfraErrorContext(
|
|
490
|
+
transport_type=EnumInfraTransportType.KAFKA,
|
|
491
|
+
operation="load_yaml_config",
|
|
492
|
+
target_name="snapshot_topic_config",
|
|
493
|
+
correlation_id=uuid4(),
|
|
494
|
+
)
|
|
495
|
+
|
|
496
|
+
if not path.exists():
|
|
497
|
+
raise ProtocolConfigurationError(
|
|
498
|
+
f"Configuration file not found: {path}",
|
|
499
|
+
context=context,
|
|
500
|
+
config_path=str(path),
|
|
501
|
+
)
|
|
502
|
+
|
|
503
|
+
try:
|
|
504
|
+
with path.open("r", encoding="utf-8") as f:
|
|
505
|
+
data = yaml.safe_load(f)
|
|
506
|
+
except yaml.YAMLError as e:
|
|
507
|
+
raise ProtocolConfigurationError(
|
|
508
|
+
f"Failed to parse YAML from {path}: {e}",
|
|
509
|
+
context=context,
|
|
510
|
+
config_path=str(path),
|
|
511
|
+
error_details=str(e),
|
|
512
|
+
) from e
|
|
513
|
+
except UnicodeDecodeError as e:
|
|
514
|
+
raise ProtocolConfigurationError(
|
|
515
|
+
f"Configuration file contains binary or non-UTF-8 content: {path}",
|
|
516
|
+
context=context,
|
|
517
|
+
config_path=str(path),
|
|
518
|
+
error_details=f"Encoding error at position {e.start}-{e.end}: {e.reason}",
|
|
519
|
+
) from e
|
|
520
|
+
except OSError as e:
|
|
521
|
+
raise ProtocolConfigurationError(
|
|
522
|
+
f"Failed to read configuration file: {path}: {e}",
|
|
523
|
+
context=context,
|
|
524
|
+
config_path=str(path),
|
|
525
|
+
error_details=str(e),
|
|
526
|
+
) from e
|
|
527
|
+
|
|
528
|
+
if data is None:
|
|
529
|
+
data = {}
|
|
530
|
+
|
|
531
|
+
if not isinstance(data, dict):
|
|
532
|
+
raise ProtocolConfigurationError(
|
|
533
|
+
f"YAML content must be a dictionary, got {type(data)}",
|
|
534
|
+
context=context,
|
|
535
|
+
parameter="yaml_content",
|
|
536
|
+
value=type(data).__name__,
|
|
537
|
+
)
|
|
538
|
+
|
|
539
|
+
config = cls(**data)
|
|
540
|
+
return config.apply_environment_overrides()
|
|
541
|
+
|
|
542
|
+
def to_kafka_config(self) -> dict[str, str]:
|
|
543
|
+
"""Convert to Kafka topic configuration dictionary.
|
|
544
|
+
|
|
545
|
+
Returns a dictionary suitable for passing to Kafka AdminClient
|
|
546
|
+
topic creation APIs or kafka-topics.sh --config options.
|
|
547
|
+
|
|
548
|
+
Returns:
|
|
549
|
+
Dictionary of Kafka topic configuration properties
|
|
550
|
+
|
|
551
|
+
Example:
|
|
552
|
+
>>> config = ModelSnapshotTopicConfig.default()
|
|
553
|
+
>>> kafka_config = config.to_kafka_config()
|
|
554
|
+
>>> kafka_config["cleanup.policy"]
|
|
555
|
+
'compact'
|
|
556
|
+
>>> kafka_config["min.compaction.lag.ms"]
|
|
557
|
+
'60000'
|
|
558
|
+
"""
|
|
559
|
+
return {
|
|
560
|
+
"cleanup.policy": self.cleanup_policy,
|
|
561
|
+
"min.compaction.lag.ms": str(self.min_compaction_lag_ms),
|
|
562
|
+
"max.compaction.lag.ms": str(self.max_compaction_lag_ms),
|
|
563
|
+
"segment.bytes": str(self.segment_bytes),
|
|
564
|
+
"retention.ms": str(self.retention_ms),
|
|
565
|
+
"min.insync.replicas": str(self.min_insync_replicas),
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
def get_snapshot_key(self, domain: str, entity_id: str) -> str:
|
|
569
|
+
"""Generate a snapshot key for Kafka compaction.
|
|
570
|
+
|
|
571
|
+
Keys follow the format: {domain}:{entity_id}
|
|
572
|
+
|
|
573
|
+
This ensures that compaction retains only the latest snapshot
|
|
574
|
+
for each (domain, entity_id) combination.
|
|
575
|
+
|
|
576
|
+
Args:
|
|
577
|
+
domain: Domain namespace (e.g., "registration", "discovery")
|
|
578
|
+
entity_id: Entity UUID as string
|
|
579
|
+
|
|
580
|
+
Returns:
|
|
581
|
+
Formatted snapshot key for Kafka message
|
|
582
|
+
|
|
583
|
+
Example:
|
|
584
|
+
>>> config = ModelSnapshotTopicConfig.default()
|
|
585
|
+
>>> config.get_snapshot_key("registration", "550e8400-e29b-41d4-a716-446655440000")
|
|
586
|
+
'registration:550e8400-e29b-41d4-a716-446655440000'
|
|
587
|
+
"""
|
|
588
|
+
return f"{domain}:{entity_id}"
|
|
589
|
+
|
|
590
|
+
|
|
591
|
+
__all__: list[str] = ["ModelSnapshotTopicConfig"]
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""ONEX Projector Schema Models Module.
|
|
4
|
+
|
|
5
|
+
Provides Pydantic models for projector schema definitions, used by
|
|
6
|
+
ProjectorSchemaValidator for schema validation and migration SQL generation.
|
|
7
|
+
|
|
8
|
+
NOTE: Schema models are temporarily defined here until omnibase_core provides
|
|
9
|
+
them at omnibase_core.models.projectors. Once available, this module should
|
|
10
|
+
re-export from omnibase_core instead.
|
|
11
|
+
|
|
12
|
+
Exports:
|
|
13
|
+
ModelProjectorSchema: Complete projection table schema definition
|
|
14
|
+
ModelProjectorColumn: Individual column definition within a schema
|
|
15
|
+
ModelProjectorIndex: Index definition for projection tables
|
|
16
|
+
ModelProjectorValidationError: Structured error for validation failures
|
|
17
|
+
ModelProjectorDiscoveryResult: Result of projector contract discovery
|
|
18
|
+
|
|
19
|
+
Related Tickets:
|
|
20
|
+
- OMN-1168: ProjectorPluginLoader contract discovery loading
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
from omnibase_infra.models.projectors.model_projector_column import (
|
|
24
|
+
ModelProjectorColumn,
|
|
25
|
+
)
|
|
26
|
+
from omnibase_infra.models.projectors.model_projector_discovery_result import (
|
|
27
|
+
ModelProjectorDiscoveryResult,
|
|
28
|
+
)
|
|
29
|
+
from omnibase_infra.models.projectors.model_projector_index import ModelProjectorIndex
|
|
30
|
+
from omnibase_infra.models.projectors.model_projector_schema import ModelProjectorSchema
|
|
31
|
+
from omnibase_infra.models.projectors.model_projector_validation_error import (
|
|
32
|
+
ModelProjectorValidationError,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
__all__ = [
|
|
36
|
+
"ModelProjectorColumn",
|
|
37
|
+
"ModelProjectorDiscoveryResult",
|
|
38
|
+
"ModelProjectorIndex",
|
|
39
|
+
"ModelProjectorSchema",
|
|
40
|
+
"ModelProjectorValidationError",
|
|
41
|
+
]
|