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,87 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Handler Source Type Enumeration for Validation Error Identification.
|
|
4
|
+
|
|
5
|
+
Defines the canonical source types for handler validation errors in the ONEX
|
|
6
|
+
structured validation and error reporting system. Each source type identifies
|
|
7
|
+
where in the validation pipeline an error was detected, enabling precise
|
|
8
|
+
error attribution and targeted remediation.
|
|
9
|
+
|
|
10
|
+
Handler validation occurs across multiple stages:
|
|
11
|
+
- CONTRACT: Error from contract.yaml parsing/validation.
|
|
12
|
+
Issues with YAML structure, required fields, or schema violations.
|
|
13
|
+
- DESCRIPTOR: Error from handler descriptor validation.
|
|
14
|
+
Issues with handler metadata, signatures, or interface compliance.
|
|
15
|
+
- STATIC_ANALYSIS: Error from AST/static code analysis.
|
|
16
|
+
Issues detected by analyzing Python source without execution.
|
|
17
|
+
- RUNTIME: Error detected during runtime execution.
|
|
18
|
+
Issues that only manifest when the handler is invoked.
|
|
19
|
+
- REGISTRATION: Error during handler registration phase.
|
|
20
|
+
Issues with handler registration process or registry state.
|
|
21
|
+
- CONFIGURATION: Error in handler configuration loading.
|
|
22
|
+
Issues with configuration values, environment, or dependencies.
|
|
23
|
+
|
|
24
|
+
See Also:
|
|
25
|
+
- EnumHandlerType: Defines handler types (EFFECT, COMPUTE, REDUCER, ORCHESTRATOR)
|
|
26
|
+
- EnumExecutionShapeViolation: Defines validation violation types
|
|
27
|
+
- ModelHandlerValidationError: Error model that uses this enum for source attribution
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
from enum import Enum
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class EnumHandlerSourceType(str, Enum):
|
|
34
|
+
"""Handler validation error source types for structured error reporting.
|
|
35
|
+
|
|
36
|
+
These represent the validation stages where handler errors can be detected.
|
|
37
|
+
Each source type enables precise error attribution and provides context for
|
|
38
|
+
debugging and remediation.
|
|
39
|
+
|
|
40
|
+
Attributes:
|
|
41
|
+
CONTRACT: Error from contract.yaml parsing or validation.
|
|
42
|
+
Indicates issues with the contract definition itself, such as:
|
|
43
|
+
- Invalid YAML syntax
|
|
44
|
+
- Missing required fields
|
|
45
|
+
- Schema validation failures
|
|
46
|
+
- Invalid handler routing configuration
|
|
47
|
+
DESCRIPTOR: Error from handler descriptor validation.
|
|
48
|
+
Indicates issues with handler metadata or interface compliance:
|
|
49
|
+
- Invalid handler signatures
|
|
50
|
+
- Missing required methods
|
|
51
|
+
- Protocol implementation issues
|
|
52
|
+
- Type annotation problems
|
|
53
|
+
STATIC_ANALYSIS: Error from AST or static code analysis.
|
|
54
|
+
Indicates issues detected by analyzing source code without execution:
|
|
55
|
+
- Forbidden API usage
|
|
56
|
+
- Invalid import statements
|
|
57
|
+
- Code structure violations
|
|
58
|
+
- Purity constraint violations
|
|
59
|
+
RUNTIME: Error detected during runtime execution.
|
|
60
|
+
Indicates issues that only manifest when handler is invoked:
|
|
61
|
+
- Unhandled exceptions
|
|
62
|
+
- Type mismatches at runtime
|
|
63
|
+
- Resource exhaustion
|
|
64
|
+
- Integration failures
|
|
65
|
+
REGISTRATION: Error during handler registration phase.
|
|
66
|
+
Indicates issues with the registration process:
|
|
67
|
+
- Duplicate handler registration
|
|
68
|
+
- Registry state conflicts
|
|
69
|
+
- Dependency resolution failures
|
|
70
|
+
- Handler initialization errors
|
|
71
|
+
CONFIGURATION: Error in handler configuration loading.
|
|
72
|
+
Indicates issues with configuration or environment:
|
|
73
|
+
- Missing environment variables
|
|
74
|
+
- Invalid configuration values
|
|
75
|
+
- Dependency injection failures
|
|
76
|
+
- Service connection issues
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
CONTRACT = "contract"
|
|
80
|
+
DESCRIPTOR = "descriptor"
|
|
81
|
+
STATIC_ANALYSIS = "static_analysis"
|
|
82
|
+
RUNTIME = "runtime"
|
|
83
|
+
REGISTRATION = "registration"
|
|
84
|
+
CONFIGURATION = "configuration"
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
__all__ = ["EnumHandlerSourceType"]
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Handler Type Enumeration - Architectural Role Classification.
|
|
4
|
+
|
|
5
|
+
Defines the architectural role of handlers in the ONEX system.
|
|
6
|
+
Each handler type drives lifecycle management, protocol selection, and runtime
|
|
7
|
+
invocation pattern. This is orthogonal to behavioral classification (EnumHandlerTypeCategory).
|
|
8
|
+
|
|
9
|
+
Architectural Role Semantics:
|
|
10
|
+
- INFRA_HANDLER: Protocol/transport handlers that manage external connections.
|
|
11
|
+
Examples: HTTP adapters, database connectors, Consul clients, Vault clients.
|
|
12
|
+
Lifecycle: Connection pooling, health checks, circuit breakers.
|
|
13
|
+
- NODE_HANDLER: Event processing handlers bound to ONEX nodes.
|
|
14
|
+
Examples: Effect handlers, orchestrator step handlers.
|
|
15
|
+
Lifecycle: Node registration, event subscription, capability advertisement.
|
|
16
|
+
- PROJECTION_HANDLER: Handlers for projection read/write operations.
|
|
17
|
+
Examples: State projection writers, read model updaters.
|
|
18
|
+
Lifecycle: Projection versioning, consistency guarantees.
|
|
19
|
+
- COMPUTE_HANDLER: Pure computation handlers with no side effects.
|
|
20
|
+
Examples: Validation handlers, transformation handlers.
|
|
21
|
+
Lifecycle: Stateless, idempotent, cacheable.
|
|
22
|
+
|
|
23
|
+
Design Principle:
|
|
24
|
+
Handler descriptors must specify BOTH:
|
|
25
|
+
1. EnumHandlerType (architectural role - this enum)
|
|
26
|
+
2. EnumHandlerTypeCategory (behavioral classification)
|
|
27
|
+
|
|
28
|
+
This separation enables:
|
|
29
|
+
- Architectural role: Drives infrastructure binding and lifecycle
|
|
30
|
+
- Behavioral category: Drives execution shape validation and output constraints
|
|
31
|
+
|
|
32
|
+
See Also:
|
|
33
|
+
- EnumHandlerTypeCategory: Behavioral classification (EFFECT, COMPUTE, NONDETERMINISTIC_COMPUTE)
|
|
34
|
+
- EnumNodeArchetype: Node archetypes for execution shape validation
|
|
35
|
+
- EnumNodeOutputType: Valid node output types
|
|
36
|
+
- EnumMessageCategory: Message categories for routing
|
|
37
|
+
- HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md: Full handler architecture documentation
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
from enum import Enum
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class EnumHandlerType(str, Enum):
|
|
44
|
+
"""Handler architectural role - selects interface and lifecycle.
|
|
45
|
+
|
|
46
|
+
These represent the architectural classification of handlers in ONEX.
|
|
47
|
+
Each type drives lifecycle management, protocol selection, and runtime invocation pattern.
|
|
48
|
+
|
|
49
|
+
Note: This is orthogonal to EnumHandlerTypeCategory which represents behavioral classification.
|
|
50
|
+
Both must be specified on handler descriptors.
|
|
51
|
+
|
|
52
|
+
Attributes:
|
|
53
|
+
INFRA_HANDLER: Protocol/transport handlers (HTTP, DB, Consul, Vault).
|
|
54
|
+
Manages external connections and protocol-specific operations.
|
|
55
|
+
Lifecycle: Connection pooling, health checks, circuit breakers.
|
|
56
|
+
Examples: DatabaseAdapter, ConsulClient, VaultClient, HttpGateway.
|
|
57
|
+
NODE_HANDLER: Event processing handlers bound to nodes.
|
|
58
|
+
Handles event routing and processing within the ONEX node graph.
|
|
59
|
+
Lifecycle: Node registration, event subscription, capability advertisement.
|
|
60
|
+
Examples: RegistrationHandler, IntrospectionHandler, RoutingHandler.
|
|
61
|
+
PROJECTION_HANDLER: Projection read/write handlers.
|
|
62
|
+
Manages projection state and read model operations.
|
|
63
|
+
Lifecycle: Projection versioning, consistency guarantees, snapshot management.
|
|
64
|
+
Examples: StateProjectionWriter, ReadModelUpdater, SnapshotHandler.
|
|
65
|
+
COMPUTE_HANDLER: Pure computation handlers.
|
|
66
|
+
Performs stateless, deterministic transformations.
|
|
67
|
+
Lifecycle: Stateless, idempotent, cacheable - no external dependencies.
|
|
68
|
+
Examples: ValidationHandler, TransformationHandler, SerializationHandler.
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
INFRA_HANDLER = "infra_handler"
|
|
72
|
+
NODE_HANDLER = "node_handler"
|
|
73
|
+
PROJECTION_HANDLER = "projection_handler"
|
|
74
|
+
COMPUTE_HANDLER = "compute_handler"
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
__all__ = ["EnumHandlerType"]
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Handler Type Category Enumeration for behavioral classification.
|
|
4
|
+
|
|
5
|
+
Defines the behavioral classification of handlers for ONEX architecture.
|
|
6
|
+
This enum is orthogonal to EnumHandlerType (architectural role) - both must
|
|
7
|
+
be specified on handler descriptors.
|
|
8
|
+
|
|
9
|
+
Classification Guide:
|
|
10
|
+
| Category | Deterministic? | Side Effects? | Examples |
|
|
11
|
+
|----------|----------------|---------------|----------|
|
|
12
|
+
| COMPUTE | Yes | No | Validation, transformation, mapping |
|
|
13
|
+
| EFFECT | N/A | Yes | DB, HTTP, Consul, Vault, Kafka, LLM calls |
|
|
14
|
+
| NONDETERMINISTIC_COMPUTE | No | No | UUID generation, datetime.now(), random.choice() |
|
|
15
|
+
|
|
16
|
+
Note: LLM API calls are EFFECT (external I/O), not NONDETERMINISTIC_COMPUTE.
|
|
17
|
+
|
|
18
|
+
See Also:
|
|
19
|
+
- EnumHandlerType: Architectural role classification (INFRA_HANDLER, NODE_HANDLER, etc.)
|
|
20
|
+
- EnumNodeArchetype: Node archetypes for execution shape validation (EFFECT, COMPUTE, etc.)
|
|
21
|
+
- HANDLER_PROTOCOL_DRIVEN_ARCHITECTURE.md: Full architecture documentation
|
|
22
|
+
|
|
23
|
+
Note on Naming Consistency:
|
|
24
|
+
EnumHandlerTypeCategory and EnumNodeArchetype both use EFFECT and COMPUTE values but serve
|
|
25
|
+
different purposes:
|
|
26
|
+
- EnumHandlerTypeCategory: Classifies handler BEHAVIOR (side effects, determinism)
|
|
27
|
+
- EnumNodeArchetype: Classifies node ARCHITECTURE (execution shape validation)
|
|
28
|
+
The shared terminology reflects that EFFECT handlers are typically bound to EFFECT nodes,
|
|
29
|
+
and COMPUTE handlers to COMPUTE nodes, but they represent different conceptual axes.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
from enum import Enum
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class EnumHandlerTypeCategory(str, Enum):
|
|
36
|
+
"""Handler behavioral classification - selects policy envelope.
|
|
37
|
+
|
|
38
|
+
Determines how the handler behaves at runtime and what policies apply.
|
|
39
|
+
Drives: Security rules, determinism guarantees, replay safety, permissions.
|
|
40
|
+
|
|
41
|
+
Note: ADAPTER is NOT a category - it's a policy tag (is_adapter: bool) on
|
|
42
|
+
handler descriptors. Adapters are behaviorally EFFECT but have stricter defaults.
|
|
43
|
+
|
|
44
|
+
Attributes:
|
|
45
|
+
COMPUTE: Pure, deterministic computation. No side effects.
|
|
46
|
+
Examples: Validation, transformation, mapping, calculations.
|
|
47
|
+
Safe for replay, caching, and parallel execution.
|
|
48
|
+
EFFECT: Side-effecting I/O operations. May not be deterministic.
|
|
49
|
+
Examples: Database operations, HTTP calls, Consul, Vault, Kafka, LLM APIs.
|
|
50
|
+
Requires idempotency handling for replay safety.
|
|
51
|
+
NONDETERMINISTIC_COMPUTE: Pure (no I/O) but not deterministic.
|
|
52
|
+
Examples: UUID generation, datetime.now(), random.choice().
|
|
53
|
+
No external side effects but results may vary between runs.
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
COMPUTE = "compute"
|
|
57
|
+
EFFECT = "effect"
|
|
58
|
+
NONDETERMINISTIC_COMPUTE = "nondeterministic_compute"
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
__all__ = ["EnumHandlerTypeCategory"]
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Infrastructure Transport Type Enumeration.
|
|
4
|
+
|
|
5
|
+
Defines the canonical transport types for infrastructure components.
|
|
6
|
+
Used for error context, protocol routing, and transport identification.
|
|
7
|
+
|
|
8
|
+
Supported transport types:
|
|
9
|
+
- HTTP: REST API transport
|
|
10
|
+
- DATABASE: PostgreSQL and other database connections
|
|
11
|
+
- KAFKA: Kafka message broker
|
|
12
|
+
- CONSUL: Consul service discovery and KV operations
|
|
13
|
+
- VAULT: HashiCorp Vault secret management
|
|
14
|
+
- VALKEY: Valkey (Redis-compatible) cache/messaging
|
|
15
|
+
- GRPC: gRPC protocol
|
|
16
|
+
- RUNTIME: Runtime host internal transport
|
|
17
|
+
- MCP: Model Context Protocol (AI agent tool interface)
|
|
18
|
+
- FILESYSTEM: Local filesystem operations
|
|
19
|
+
- INMEMORY: In-memory transport for testing/local development
|
|
20
|
+
- QDRANT: Qdrant vector database operations
|
|
21
|
+
- GRAPH: Graph database (Memgraph/Neo4j) operations
|
|
22
|
+
|
|
23
|
+
Each transport type has a corresponding handler implementation:
|
|
24
|
+
- HandlerConsul: Service registration, health checks, KV store operations
|
|
25
|
+
- HandlerVault: Secret retrieval, token management, lease renewal
|
|
26
|
+
- EventBusKafka: Event publishing/subscription, consumer groups
|
|
27
|
+
- EventBusInmemory: In-memory event bus for testing and local development
|
|
28
|
+
- PostgresConnectionManager: Connection pooling, query execution
|
|
29
|
+
- HandlerMCP: MCP server for exposing ONEX nodes as AI agent tools
|
|
30
|
+
- HandlerFileSystem: File read/write, directory operations
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
from enum import Enum
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class EnumInfraTransportType(str, Enum):
|
|
37
|
+
"""Infrastructure transport types for ONEX infrastructure components.
|
|
38
|
+
|
|
39
|
+
These represent the transport/protocol layer types used in
|
|
40
|
+
omnibase_infra for external integration.
|
|
41
|
+
|
|
42
|
+
Attributes:
|
|
43
|
+
HTTP: HTTP/REST API transport
|
|
44
|
+
DATABASE: Database connection transport (PostgreSQL, etc.)
|
|
45
|
+
KAFKA: Kafka message broker transport
|
|
46
|
+
CONSUL: Consul discovery transport
|
|
47
|
+
VAULT: HashiCorp Vault secret transport
|
|
48
|
+
VALKEY: Valkey (Redis-compatible) cache/message transport
|
|
49
|
+
GRPC: gRPC protocol transport
|
|
50
|
+
RUNTIME: Runtime host process internal transport
|
|
51
|
+
MCP: Model Context Protocol transport for AI agent integration
|
|
52
|
+
FILESYSTEM: Local filesystem transport
|
|
53
|
+
INMEMORY: In-memory transport for testing and local development
|
|
54
|
+
QDRANT: Qdrant vector database transport
|
|
55
|
+
GRAPH: Graph database (Memgraph/Neo4j) transport
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
HTTP = "http"
|
|
59
|
+
DATABASE = "db"
|
|
60
|
+
KAFKA = "kafka"
|
|
61
|
+
CONSUL = "consul"
|
|
62
|
+
VAULT = "vault"
|
|
63
|
+
VALKEY = "valkey"
|
|
64
|
+
GRPC = "grpc"
|
|
65
|
+
RUNTIME = "runtime"
|
|
66
|
+
MCP = "mcp"
|
|
67
|
+
FILESYSTEM = "filesystem"
|
|
68
|
+
INMEMORY = "inmemory"
|
|
69
|
+
QDRANT = "qdrant"
|
|
70
|
+
GRAPH = "graph"
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
__all__ = ["EnumInfraTransportType"]
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""
|
|
4
|
+
Introspection Reason Enumeration.
|
|
5
|
+
|
|
6
|
+
Defines reason values for node introspection events, categorizing why a node
|
|
7
|
+
emits an introspection event for filtering, alerting, and analytics.
|
|
8
|
+
|
|
9
|
+
Thread Safety:
|
|
10
|
+
All enums in this module are immutable and thread-safe.
|
|
11
|
+
Enum values can be safely shared across threads without synchronization.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from enum import Enum, unique
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@unique
|
|
18
|
+
class EnumIntrospectionReason(str, Enum):
|
|
19
|
+
"""
|
|
20
|
+
Reasons why a node emits an introspection event.
|
|
21
|
+
|
|
22
|
+
Used by ModelNodeIntrospectionEvent to categorize introspection
|
|
23
|
+
events for filtering, alerting, and analytics.
|
|
24
|
+
|
|
25
|
+
Values:
|
|
26
|
+
STARTUP: Node just started and is announcing presence.
|
|
27
|
+
SHUTDOWN: Node is gracefully shutting down.
|
|
28
|
+
REQUEST: Explicit request for introspection (e.g., admin query).
|
|
29
|
+
HEARTBEAT: Periodic health heartbeat.
|
|
30
|
+
HEALTH_CHANGE: Node health status changed.
|
|
31
|
+
CAPABILITY_CHANGE: Node capabilities changed at runtime.
|
|
32
|
+
|
|
33
|
+
Example:
|
|
34
|
+
>>> reason = EnumIntrospectionReason.STARTUP
|
|
35
|
+
>>> reason.is_lifecycle_event()
|
|
36
|
+
True
|
|
37
|
+
>>> str(EnumIntrospectionReason.HEARTBEAT)
|
|
38
|
+
'heartbeat'
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
STARTUP = "startup"
|
|
42
|
+
"""Node just started and is announcing presence."""
|
|
43
|
+
|
|
44
|
+
SHUTDOWN = "shutdown"
|
|
45
|
+
"""Node is gracefully shutting down."""
|
|
46
|
+
|
|
47
|
+
REQUEST = "request"
|
|
48
|
+
"""Explicit request for introspection (e.g., admin query)."""
|
|
49
|
+
|
|
50
|
+
HEARTBEAT = "heartbeat"
|
|
51
|
+
"""Periodic health heartbeat."""
|
|
52
|
+
|
|
53
|
+
HEALTH_CHANGE = "health_change"
|
|
54
|
+
"""Node health status changed."""
|
|
55
|
+
|
|
56
|
+
CAPABILITY_CHANGE = "capability_change"
|
|
57
|
+
"""Node capabilities changed at runtime."""
|
|
58
|
+
|
|
59
|
+
def __str__(self) -> str:
|
|
60
|
+
"""Return the string value for serialization."""
|
|
61
|
+
return self.value
|
|
62
|
+
|
|
63
|
+
def is_lifecycle_event(self) -> bool:
|
|
64
|
+
"""
|
|
65
|
+
Check if this reason represents a lifecycle event.
|
|
66
|
+
|
|
67
|
+
Lifecycle events indicate node startup or shutdown, which are
|
|
68
|
+
significant for registration and discovery workflows.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
True if the reason is a lifecycle event, False otherwise
|
|
72
|
+
|
|
73
|
+
Example:
|
|
74
|
+
>>> EnumIntrospectionReason.STARTUP.is_lifecycle_event()
|
|
75
|
+
True
|
|
76
|
+
>>> EnumIntrospectionReason.HEARTBEAT.is_lifecycle_event()
|
|
77
|
+
False
|
|
78
|
+
"""
|
|
79
|
+
return self in {
|
|
80
|
+
EnumIntrospectionReason.STARTUP,
|
|
81
|
+
EnumIntrospectionReason.SHUTDOWN,
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
def is_health_related(self) -> bool:
|
|
85
|
+
"""
|
|
86
|
+
Check if this reason is health-related.
|
|
87
|
+
|
|
88
|
+
Health-related reasons indicate the node is reporting its health
|
|
89
|
+
status, either periodically or due to a change.
|
|
90
|
+
|
|
91
|
+
Returns:
|
|
92
|
+
True if the reason is health-related, False otherwise
|
|
93
|
+
|
|
94
|
+
Example:
|
|
95
|
+
>>> EnumIntrospectionReason.HEARTBEAT.is_health_related()
|
|
96
|
+
True
|
|
97
|
+
>>> EnumIntrospectionReason.REQUEST.is_health_related()
|
|
98
|
+
False
|
|
99
|
+
"""
|
|
100
|
+
return self in {
|
|
101
|
+
EnumIntrospectionReason.HEARTBEAT,
|
|
102
|
+
EnumIntrospectionReason.HEALTH_CHANGE,
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
def is_change_event(self) -> bool:
|
|
106
|
+
"""
|
|
107
|
+
Check if this reason indicates a state change.
|
|
108
|
+
|
|
109
|
+
Change events indicate something about the node changed that
|
|
110
|
+
may require re-evaluation by the registration system.
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
True if the reason indicates a change, False otherwise
|
|
114
|
+
|
|
115
|
+
Example:
|
|
116
|
+
>>> EnumIntrospectionReason.CAPABILITY_CHANGE.is_change_event()
|
|
117
|
+
True
|
|
118
|
+
>>> EnumIntrospectionReason.HEARTBEAT.is_change_event()
|
|
119
|
+
False
|
|
120
|
+
"""
|
|
121
|
+
return self in {
|
|
122
|
+
EnumIntrospectionReason.HEALTH_CHANGE,
|
|
123
|
+
EnumIntrospectionReason.CAPABILITY_CHANGE,
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
@classmethod
|
|
127
|
+
def get_description(cls, reason: "EnumIntrospectionReason") -> str:
|
|
128
|
+
"""
|
|
129
|
+
Get a human-readable description of the introspection reason.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
reason: The introspection reason to describe
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
A human-readable description of the reason
|
|
136
|
+
|
|
137
|
+
Example:
|
|
138
|
+
>>> EnumIntrospectionReason.get_description(
|
|
139
|
+
... EnumIntrospectionReason.STARTUP
|
|
140
|
+
... )
|
|
141
|
+
'Node just started and is announcing presence'
|
|
142
|
+
"""
|
|
143
|
+
descriptions = {
|
|
144
|
+
cls.STARTUP: "Node just started and is announcing presence",
|
|
145
|
+
cls.SHUTDOWN: "Node is gracefully shutting down",
|
|
146
|
+
cls.REQUEST: "Explicit request for introspection",
|
|
147
|
+
cls.HEARTBEAT: "Periodic health heartbeat",
|
|
148
|
+
cls.HEALTH_CHANGE: "Node health status changed",
|
|
149
|
+
cls.CAPABILITY_CHANGE: "Node capabilities changed at runtime",
|
|
150
|
+
}
|
|
151
|
+
return descriptions.get(reason, "Unknown introspection reason")
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
__all__: list[str] = ["EnumIntrospectionReason"]
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""
|
|
4
|
+
Message Category Enumeration.
|
|
5
|
+
|
|
6
|
+
Defines the fundamental message categories in ONEX event-driven architecture:
|
|
7
|
+
- EVENT: Domain events representing facts that have occurred
|
|
8
|
+
- COMMAND: Instructions to perform an action
|
|
9
|
+
- INTENT: User intents requiring interpretation and routing
|
|
10
|
+
|
|
11
|
+
IMPORTANT: PROJECTION is NOT a message category. Projections are node output types
|
|
12
|
+
used for execution shape validation (see EnumNodeOutputType). Projections are
|
|
13
|
+
state outputs produced by REDUCER nodes and are not routed via Kafka topics.
|
|
14
|
+
|
|
15
|
+
Topic Naming Conventions:
|
|
16
|
+
- EVENT: Read from `*.events` topics (e.g., `order.events`, `user.events`)
|
|
17
|
+
- COMMAND: Read from `*.commands` topics (e.g., `order.commands`)
|
|
18
|
+
- INTENT: Read from `*.intents` topics (e.g., `checkout.intents`)
|
|
19
|
+
|
|
20
|
+
Thread Safety:
|
|
21
|
+
All enums in this module are immutable and thread-safe.
|
|
22
|
+
Enum values can be safely shared across threads without synchronization.
|
|
23
|
+
|
|
24
|
+
See Also:
|
|
25
|
+
EnumNodeOutputType: For node output types including PROJECTION
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
from __future__ import annotations
|
|
29
|
+
|
|
30
|
+
from enum import Enum, unique
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@unique
|
|
34
|
+
class EnumMessageCategory(str, Enum):
|
|
35
|
+
"""
|
|
36
|
+
Message category classification for ONEX event-driven routing.
|
|
37
|
+
|
|
38
|
+
The three fundamental message categories determine how messages are
|
|
39
|
+
processed and routed through the system:
|
|
40
|
+
|
|
41
|
+
- **EVENT**: Facts that have occurred (past tense, immutable)
|
|
42
|
+
- Published to event topics (*.events.*)
|
|
43
|
+
- Consumed by reducers and projections
|
|
44
|
+
- Example: UserCreatedEvent, OrderCompletedEvent
|
|
45
|
+
|
|
46
|
+
- **COMMAND**: Instructions to perform an action (imperative)
|
|
47
|
+
- Published to command topics (*.commands.*)
|
|
48
|
+
- Consumed by command handlers
|
|
49
|
+
- Example: CreateUserCommand, ProcessPaymentCommand
|
|
50
|
+
|
|
51
|
+
- **INTENT**: User intents requiring interpretation (declarative)
|
|
52
|
+
- Published to intent topics (*.intents.*)
|
|
53
|
+
- Consumed by orchestrators for routing decisions
|
|
54
|
+
- Example: UserWantsToCheckoutIntent, RequestPasswordResetIntent
|
|
55
|
+
|
|
56
|
+
Note:
|
|
57
|
+
PROJECTION is intentionally NOT included here. Projections are
|
|
58
|
+
node output types (see EnumNodeOutputType), not routable message
|
|
59
|
+
categories. REDUCERs produce projections as state outputs.
|
|
60
|
+
|
|
61
|
+
Maintainer Note:
|
|
62
|
+
When adding new values to this enum, you MUST update the following:
|
|
63
|
+
|
|
64
|
+
1. ``_MESSAGE_CATEGORY_TO_OUTPUT_TYPE`` mapping in
|
|
65
|
+
``omnibase_infra/validation/execution_shape_validator.py``
|
|
66
|
+
2. ``_CATEGORY_TO_SUFFIX`` and ``_SUFFIX_TO_CATEGORY`` mappings
|
|
67
|
+
at the bottom of this file (see module-level constants)
|
|
68
|
+
3. Topic routing logic in ``topic_category_validator.py`` and
|
|
69
|
+
any pattern matching that uses category suffixes
|
|
70
|
+
4. The ``from_topic()`` method if the new category uses a
|
|
71
|
+
different topic naming convention
|
|
72
|
+
|
|
73
|
+
Attributes:
|
|
74
|
+
topic_suffix: The plural suffix used in topic names (e.g., "events")
|
|
75
|
+
|
|
76
|
+
Example:
|
|
77
|
+
>>> category = EnumMessageCategory.EVENT
|
|
78
|
+
>>> category.topic_suffix
|
|
79
|
+
'events'
|
|
80
|
+
>>> EnumMessageCategory.from_topic("onex.user.events")
|
|
81
|
+
<EnumMessageCategory.EVENT: 'event'>
|
|
82
|
+
>>> EnumMessageCategory.from_topic("dev.order.commands.v1")
|
|
83
|
+
<EnumMessageCategory.COMMAND: 'command'>
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
EVENT = "event"
|
|
87
|
+
"""Domain events representing facts that have occurred."""
|
|
88
|
+
|
|
89
|
+
COMMAND = "command"
|
|
90
|
+
"""Instructions to perform an action."""
|
|
91
|
+
|
|
92
|
+
INTENT = "intent"
|
|
93
|
+
"""User intents requiring interpretation and routing."""
|
|
94
|
+
|
|
95
|
+
def __str__(self) -> str:
|
|
96
|
+
"""Return the string value for serialization."""
|
|
97
|
+
return self.value
|
|
98
|
+
|
|
99
|
+
@property
|
|
100
|
+
def topic_suffix(self) -> str:
|
|
101
|
+
"""
|
|
102
|
+
Get the topic suffix for this category (plural form).
|
|
103
|
+
|
|
104
|
+
The suffix is used in topic naming conventions:
|
|
105
|
+
- EVENT -> "events" (e.g., onex.user.events)
|
|
106
|
+
- COMMAND -> "commands" (e.g., onex.order.commands)
|
|
107
|
+
- INTENT -> "intents" (e.g., onex.checkout.intents)
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
The plural suffix string for topic names
|
|
111
|
+
|
|
112
|
+
Example:
|
|
113
|
+
>>> EnumMessageCategory.EVENT.topic_suffix
|
|
114
|
+
'events'
|
|
115
|
+
>>> EnumMessageCategory.COMMAND.topic_suffix
|
|
116
|
+
'commands'
|
|
117
|
+
"""
|
|
118
|
+
return _CATEGORY_TO_SUFFIX[self]
|
|
119
|
+
|
|
120
|
+
@classmethod
|
|
121
|
+
def from_topic(cls, topic: str) -> EnumMessageCategory | None:
|
|
122
|
+
"""
|
|
123
|
+
Infer the message category from a topic string.
|
|
124
|
+
|
|
125
|
+
Examines the topic for category keywords (events, commands, intents)
|
|
126
|
+
as complete segments and returns the corresponding category. Handles both
|
|
127
|
+
ONEX Kafka format (onex.<domain>.<type>) and Environment-Aware format
|
|
128
|
+
(<env>.<domain>.<category>.<version>).
|
|
129
|
+
|
|
130
|
+
The matching is segment-based to prevent false positives. For example:
|
|
131
|
+
- "onex.user.events" matches EVENT (segment "events" exists)
|
|
132
|
+
- "dev.eventsource.data.v1" does NOT match ("eventsource" != "events")
|
|
133
|
+
|
|
134
|
+
Args:
|
|
135
|
+
topic: The topic string to analyze
|
|
136
|
+
|
|
137
|
+
Returns:
|
|
138
|
+
EnumMessageCategory if a category can be inferred, None otherwise
|
|
139
|
+
|
|
140
|
+
Example:
|
|
141
|
+
>>> EnumMessageCategory.from_topic("onex.user.events")
|
|
142
|
+
<EnumMessageCategory.EVENT: 'event'>
|
|
143
|
+
>>> EnumMessageCategory.from_topic("dev.order.commands.v1")
|
|
144
|
+
<EnumMessageCategory.COMMAND: 'command'>
|
|
145
|
+
>>> EnumMessageCategory.from_topic("prod.checkout.intents.v2")
|
|
146
|
+
<EnumMessageCategory.INTENT: 'intent'>
|
|
147
|
+
>>> EnumMessageCategory.from_topic("invalid.topic")
|
|
148
|
+
None
|
|
149
|
+
>>> EnumMessageCategory.from_topic("dev.eventsource.data.v1")
|
|
150
|
+
None # No false positive: "eventsource" is not the same as "events"
|
|
151
|
+
"""
|
|
152
|
+
if not topic:
|
|
153
|
+
return None
|
|
154
|
+
|
|
155
|
+
# Split topic into segments and check for exact category suffix matches.
|
|
156
|
+
# This prevents false positives where a segment merely contains the
|
|
157
|
+
# category suffix as a substring (e.g., "eventsource" containing "events").
|
|
158
|
+
segments = topic.lower().split(".")
|
|
159
|
+
for suffix, category in _SUFFIX_TO_CATEGORY.items():
|
|
160
|
+
if suffix in segments:
|
|
161
|
+
return category
|
|
162
|
+
|
|
163
|
+
return None
|
|
164
|
+
|
|
165
|
+
@classmethod
|
|
166
|
+
def from_suffix(cls, suffix: str) -> EnumMessageCategory | None:
|
|
167
|
+
"""
|
|
168
|
+
Get the category from a topic suffix.
|
|
169
|
+
|
|
170
|
+
Args:
|
|
171
|
+
suffix: The suffix to look up (e.g., "events", "commands", "intents")
|
|
172
|
+
|
|
173
|
+
Returns:
|
|
174
|
+
EnumMessageCategory if the suffix is valid, None otherwise
|
|
175
|
+
|
|
176
|
+
Example:
|
|
177
|
+
>>> EnumMessageCategory.from_suffix("events")
|
|
178
|
+
<EnumMessageCategory.EVENT: 'event'>
|
|
179
|
+
>>> EnumMessageCategory.from_suffix("commands")
|
|
180
|
+
<EnumMessageCategory.COMMAND: 'command'>
|
|
181
|
+
>>> EnumMessageCategory.from_suffix("unknown")
|
|
182
|
+
None
|
|
183
|
+
"""
|
|
184
|
+
return _SUFFIX_TO_CATEGORY.get(suffix.lower())
|
|
185
|
+
|
|
186
|
+
def is_event(self) -> bool:
|
|
187
|
+
"""Check if this is an event category."""
|
|
188
|
+
return self == EnumMessageCategory.EVENT
|
|
189
|
+
|
|
190
|
+
def is_command(self) -> bool:
|
|
191
|
+
"""Check if this is a command category."""
|
|
192
|
+
return self == EnumMessageCategory.COMMAND
|
|
193
|
+
|
|
194
|
+
def is_intent(self) -> bool:
|
|
195
|
+
"""Check if this is an intent category."""
|
|
196
|
+
return self == EnumMessageCategory.INTENT
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
# Module-level constant mappings for better performance (avoid dict creation per call)
|
|
200
|
+
# Defined after enum class to enable proper type resolution
|
|
201
|
+
_CATEGORY_TO_SUFFIX: dict[EnumMessageCategory, str] = {
|
|
202
|
+
EnumMessageCategory.EVENT: "events",
|
|
203
|
+
EnumMessageCategory.COMMAND: "commands",
|
|
204
|
+
EnumMessageCategory.INTENT: "intents",
|
|
205
|
+
}
|
|
206
|
+
_SUFFIX_TO_CATEGORY: dict[str, EnumMessageCategory] = {
|
|
207
|
+
"events": EnumMessageCategory.EVENT,
|
|
208
|
+
"commands": EnumMessageCategory.COMMAND,
|
|
209
|
+
"intents": EnumMessageCategory.INTENT,
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
__all__ = ["EnumMessageCategory"]
|