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,427 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""
|
|
4
|
+
Dispatch Context Enforcer.
|
|
5
|
+
|
|
6
|
+
Enforces ONEX time injection rules at dispatch time based on dispatcher's node kind.
|
|
7
|
+
This is a critical component for maintaining ONEX architectural invariants:
|
|
8
|
+
|
|
9
|
+
- **Reducers** NEVER receive `now` (deterministic execution required)
|
|
10
|
+
- **Orchestrators** ALWAYS receive `now` (time-dependent coordination)
|
|
11
|
+
- **Effects** ALWAYS receive `now` (time-dependent I/O operations)
|
|
12
|
+
- **Compute** NEVER receives `now` (pure transformation, deterministic)
|
|
13
|
+
|
|
14
|
+
Design Pattern:
|
|
15
|
+
The DispatchContextEnforcer acts as a factory that creates appropriately
|
|
16
|
+
configured ModelDispatchContext instances based on the dispatcher's node_kind.
|
|
17
|
+
It extracts correlation metadata from the envelope and enforces time injection
|
|
18
|
+
rules at context creation time.
|
|
19
|
+
|
|
20
|
+
This separation of concerns keeps the MessageDispatchEngine focused on routing
|
|
21
|
+
while delegating context creation and validation to this specialized component.
|
|
22
|
+
|
|
23
|
+
Thread Safety:
|
|
24
|
+
DispatchContextEnforcer is stateless and thread-safe. All methods can be
|
|
25
|
+
called concurrently without synchronization.
|
|
26
|
+
|
|
27
|
+
Typing Note (ModelEventEnvelope[object]):
|
|
28
|
+
Methods in this class use ``ModelEventEnvelope[object]`` instead of ``Any``
|
|
29
|
+
per CLAUDE.md guidance: "Use ``object`` for generic payloads".
|
|
30
|
+
|
|
31
|
+
This is intentional:
|
|
32
|
+
- CLAUDE.md mandates "NEVER use ``Any``" for type annotations
|
|
33
|
+
- Context creation extracts correlation metadata from envelopes regardless
|
|
34
|
+
of payload type; the enforcer operates on envelope metadata, not content
|
|
35
|
+
- ``object`` signals "any object payload" while maintaining type safety
|
|
36
|
+
|
|
37
|
+
Related:
|
|
38
|
+
- OMN-973: Time injection enforcement at dispatch
|
|
39
|
+
- ModelDispatchContext: The context model with factory methods
|
|
40
|
+
- ProtocolMessageDispatcher: Protocol defining dispatcher node_kind
|
|
41
|
+
|
|
42
|
+
Example:
|
|
43
|
+
>>> from omnibase_infra.runtime.dispatch_context_enforcer import DispatchContextEnforcer
|
|
44
|
+
>>> from omnibase_core.enums.enum_node_kind import EnumNodeKind
|
|
45
|
+
>>>
|
|
46
|
+
>>> enforcer = DispatchContextEnforcer()
|
|
47
|
+
>>>
|
|
48
|
+
>>> # For a reducer dispatcher - NO time injection
|
|
49
|
+
>>> ctx = enforcer.create_context_for_dispatcher(reducer_dispatcher, envelope)
|
|
50
|
+
>>> assert ctx.now is None
|
|
51
|
+
>>>
|
|
52
|
+
>>> # For an orchestrator dispatcher - WITH time injection
|
|
53
|
+
>>> ctx = enforcer.create_context_for_dispatcher(orchestrator_dispatcher, envelope)
|
|
54
|
+
>>> assert ctx.now is not None
|
|
55
|
+
|
|
56
|
+
.. versionadded:: 0.5.0
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
from __future__ import annotations
|
|
60
|
+
|
|
61
|
+
__all__ = ["DispatchContextEnforcer"]
|
|
62
|
+
|
|
63
|
+
from datetime import UTC, datetime
|
|
64
|
+
from typing import TYPE_CHECKING
|
|
65
|
+
from uuid import uuid4
|
|
66
|
+
|
|
67
|
+
from omnibase_core.enums import EnumCoreErrorCode, EnumNodeKind
|
|
68
|
+
from omnibase_core.models.errors import ModelOnexError
|
|
69
|
+
from omnibase_infra.models.dispatch.model_dispatch_context import ModelDispatchContext
|
|
70
|
+
from omnibase_infra.runtime.registry_dispatcher import ProtocolMessageDispatcher
|
|
71
|
+
|
|
72
|
+
if TYPE_CHECKING:
|
|
73
|
+
from omnibase_core.models.events.model_event_envelope import ModelEventEnvelope
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class DispatchContextEnforcer:
|
|
77
|
+
"""
|
|
78
|
+
Enforces time injection rules based on dispatcher's node kind.
|
|
79
|
+
|
|
80
|
+
Creates appropriately configured dispatch contexts for each dispatcher,
|
|
81
|
+
ensuring that:
|
|
82
|
+
- Reducers and Compute nodes NEVER receive time injection
|
|
83
|
+
- Orchestrators and Effects ALWAYS receive time injection
|
|
84
|
+
|
|
85
|
+
This enforcer provides a single point of enforcement for ONEX's time
|
|
86
|
+
injection rules, preventing accidental violations that could compromise
|
|
87
|
+
reducer determinism.
|
|
88
|
+
|
|
89
|
+
Key Invariants:
|
|
90
|
+
- Reducer dispatchers receive context with `now=None`
|
|
91
|
+
- Compute dispatchers receive context with `now=None`
|
|
92
|
+
- Orchestrator dispatchers receive context with `now=<current_time>`
|
|
93
|
+
- Effect dispatchers receive context with `now=<current_time>`
|
|
94
|
+
|
|
95
|
+
Example:
|
|
96
|
+
>>> enforcer = DispatchContextEnforcer()
|
|
97
|
+
>>>
|
|
98
|
+
>>> # Create context for reducer (no time)
|
|
99
|
+
>>> reducer_ctx = enforcer.create_context_for_dispatcher(
|
|
100
|
+
... reducer_dispatcher, envelope
|
|
101
|
+
... )
|
|
102
|
+
>>> assert reducer_ctx.now is None
|
|
103
|
+
>>>
|
|
104
|
+
>>> # Create context for orchestrator (with time)
|
|
105
|
+
>>> orch_ctx = enforcer.create_context_for_dispatcher(
|
|
106
|
+
... orchestrator_dispatcher, envelope
|
|
107
|
+
... )
|
|
108
|
+
>>> assert orch_ctx.now is not None
|
|
109
|
+
|
|
110
|
+
Thread Safety:
|
|
111
|
+
This class is stateless and thread-safe. All methods can be called
|
|
112
|
+
concurrently without synchronization.
|
|
113
|
+
|
|
114
|
+
.. versionadded:: 0.5.0
|
|
115
|
+
"""
|
|
116
|
+
|
|
117
|
+
def create_context_for_node_kind(
|
|
118
|
+
self,
|
|
119
|
+
node_kind: EnumNodeKind,
|
|
120
|
+
envelope: ModelEventEnvelope[object],
|
|
121
|
+
dispatcher_id: str,
|
|
122
|
+
) -> ModelDispatchContext:
|
|
123
|
+
"""
|
|
124
|
+
Create appropriate dispatch context based on node_kind.
|
|
125
|
+
|
|
126
|
+
This is the core method that implements time injection rules. Both
|
|
127
|
+
``create_context_for_dispatcher()`` and external callers (e.g.,
|
|
128
|
+
``MessageDispatchEngine._create_context_for_entry()``) delegate to
|
|
129
|
+
this method to ensure a single source of truth for context creation.
|
|
130
|
+
|
|
131
|
+
Time Injection Rules:
|
|
132
|
+
- REDUCER: No time injection (deterministic state aggregation)
|
|
133
|
+
- COMPUTE: No time injection (pure transformation)
|
|
134
|
+
- ORCHESTRATOR: With time injection (coordination)
|
|
135
|
+
- EFFECT: With time injection (I/O operations)
|
|
136
|
+
- RUNTIME_HOST: With time injection (infrastructure)
|
|
137
|
+
|
|
138
|
+
Args:
|
|
139
|
+
node_kind: The ONEX node kind determining time injection behavior.
|
|
140
|
+
envelope: The event envelope containing correlation metadata.
|
|
141
|
+
dispatcher_id: Identifier for the dispatcher (used in error messages).
|
|
142
|
+
|
|
143
|
+
Returns:
|
|
144
|
+
ModelDispatchContext configured appropriately for the node kind.
|
|
145
|
+
|
|
146
|
+
Raises:
|
|
147
|
+
ModelOnexError: If node_kind is unrecognized (INTERNAL_ERROR).
|
|
148
|
+
|
|
149
|
+
Time Semantics:
|
|
150
|
+
The ``now`` field is captured at context creation time (dispatch time),
|
|
151
|
+
NOT at handler execution time. For ORCHESTRATOR, EFFECT, and RUNTIME_HOST
|
|
152
|
+
nodes, this means:
|
|
153
|
+
|
|
154
|
+
- ``now`` represents when the context was created
|
|
155
|
+
- Handler execution may occur microseconds to milliseconds later
|
|
156
|
+
- For most use cases, this drift is negligible
|
|
157
|
+
- If sub-millisecond precision is required, handlers should capture
|
|
158
|
+
their own time at the start of execution
|
|
159
|
+
|
|
160
|
+
Example:
|
|
161
|
+
>>> ctx = enforcer.create_context_for_node_kind(
|
|
162
|
+
... EnumNodeKind.REDUCER, envelope, "my-dispatcher"
|
|
163
|
+
... )
|
|
164
|
+
>>> assert ctx.now is None # No time for reducers
|
|
165
|
+
|
|
166
|
+
.. versionadded:: 0.5.0
|
|
167
|
+
|
|
168
|
+
.. versionchanged:: 0.5.x
|
|
169
|
+
Error code for unrecognized node_kind changed from VALIDATION_ERROR
|
|
170
|
+
to INTERNAL_ERROR. This reflects that unhandled cases are internal
|
|
171
|
+
implementation errors (missing switch cases), not validation failures.
|
|
172
|
+
"""
|
|
173
|
+
# Extract correlation metadata from envelope
|
|
174
|
+
correlation_id = envelope.correlation_id or uuid4()
|
|
175
|
+
trace_id = envelope.trace_id
|
|
176
|
+
|
|
177
|
+
# Route to appropriate factory based on node kind
|
|
178
|
+
if node_kind == EnumNodeKind.REDUCER:
|
|
179
|
+
return ModelDispatchContext.for_reducer(
|
|
180
|
+
correlation_id=correlation_id,
|
|
181
|
+
trace_id=trace_id,
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
if node_kind == EnumNodeKind.COMPUTE:
|
|
185
|
+
return ModelDispatchContext.for_compute(
|
|
186
|
+
correlation_id=correlation_id,
|
|
187
|
+
trace_id=trace_id,
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
if node_kind == EnumNodeKind.ORCHESTRATOR:
|
|
191
|
+
# Timestamp captured at context creation (dispatch time).
|
|
192
|
+
# Drift from actual handler execution is microseconds in practice.
|
|
193
|
+
return ModelDispatchContext.for_orchestrator(
|
|
194
|
+
correlation_id=correlation_id,
|
|
195
|
+
trace_id=trace_id,
|
|
196
|
+
now=datetime.now(UTC),
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
if node_kind == EnumNodeKind.EFFECT:
|
|
200
|
+
return ModelDispatchContext.for_effect(
|
|
201
|
+
correlation_id=correlation_id,
|
|
202
|
+
trace_id=trace_id,
|
|
203
|
+
now=datetime.now(UTC),
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
if node_kind == EnumNodeKind.RUNTIME_HOST:
|
|
207
|
+
return ModelDispatchContext.for_runtime_host(
|
|
208
|
+
correlation_id=correlation_id,
|
|
209
|
+
trace_id=trace_id,
|
|
210
|
+
now=datetime.now(UTC),
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
# Unknown node kind - should never happen as all EnumNodeKind values are handled above.
|
|
214
|
+
# If we reach here, a new enum value was added without updating this switch.
|
|
215
|
+
raise ModelOnexError(
|
|
216
|
+
message=f"Unhandled node_kind '{node_kind}' for dispatcher "
|
|
217
|
+
f"'{dispatcher_id}'. This is an internal error - missing case handler.",
|
|
218
|
+
error_code=EnumCoreErrorCode.INTERNAL_ERROR,
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
def create_context_for_dispatcher(
|
|
222
|
+
self,
|
|
223
|
+
dispatcher: ProtocolMessageDispatcher,
|
|
224
|
+
envelope: ModelEventEnvelope[object],
|
|
225
|
+
) -> ModelDispatchContext:
|
|
226
|
+
"""
|
|
227
|
+
Create appropriate dispatch context based on dispatcher's node_kind.
|
|
228
|
+
|
|
229
|
+
Examines the dispatcher's node_kind and creates a context with or
|
|
230
|
+
without time injection according to ONEX rules:
|
|
231
|
+
|
|
232
|
+
- REDUCER: No time injection (deterministic)
|
|
233
|
+
- COMPUTE: No time injection (pure transformation)
|
|
234
|
+
- ORCHESTRATOR: With time injection (coordination)
|
|
235
|
+
- EFFECT: With time injection (I/O operations)
|
|
236
|
+
- RUNTIME_HOST: With time injection (infrastructure)
|
|
237
|
+
|
|
238
|
+
Args:
|
|
239
|
+
dispatcher: The dispatcher to create context for.
|
|
240
|
+
envelope: The event envelope containing correlation metadata.
|
|
241
|
+
|
|
242
|
+
Returns:
|
|
243
|
+
ModelDispatchContext configured appropriately for the node kind.
|
|
244
|
+
|
|
245
|
+
Raises:
|
|
246
|
+
ModelOnexError: If node_kind is unrecognized (INTERNAL_ERROR).
|
|
247
|
+
|
|
248
|
+
Example:
|
|
249
|
+
>>> ctx = enforcer.create_context_for_dispatcher(dispatcher, envelope)
|
|
250
|
+
>>> if dispatcher.node_kind == EnumNodeKind.REDUCER:
|
|
251
|
+
... assert ctx.now is None
|
|
252
|
+
... else:
|
|
253
|
+
... assert ctx.now is not None
|
|
254
|
+
|
|
255
|
+
.. versionadded:: 0.5.0
|
|
256
|
+
"""
|
|
257
|
+
return self.create_context_for_node_kind(
|
|
258
|
+
node_kind=dispatcher.node_kind,
|
|
259
|
+
envelope=envelope,
|
|
260
|
+
dispatcher_id=dispatcher.dispatcher_id,
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
def validate_no_time_injection_for_reducer(
|
|
264
|
+
self,
|
|
265
|
+
context: ModelDispatchContext,
|
|
266
|
+
) -> None:
|
|
267
|
+
"""
|
|
268
|
+
Validate that a reducer context does not have time injection.
|
|
269
|
+
|
|
270
|
+
This method provides an explicit validation checkpoint that can be
|
|
271
|
+
called before dispatching to a reducer to ensure no time injection
|
|
272
|
+
has occurred (e.g., via manual context construction).
|
|
273
|
+
|
|
274
|
+
Args:
|
|
275
|
+
context: The dispatch context to validate.
|
|
276
|
+
|
|
277
|
+
Raises:
|
|
278
|
+
ModelOnexError: If context has time injection for a reducer
|
|
279
|
+
(VALIDATION_FAILED).
|
|
280
|
+
|
|
281
|
+
Example:
|
|
282
|
+
>>> # This will raise if context has now != None
|
|
283
|
+
>>> enforcer.validate_no_time_injection_for_reducer(reducer_ctx)
|
|
284
|
+
|
|
285
|
+
.. versionadded:: 0.5.0
|
|
286
|
+
"""
|
|
287
|
+
if context.node_kind == EnumNodeKind.REDUCER and context.now is not None:
|
|
288
|
+
raise ModelOnexError(
|
|
289
|
+
message="REDUCER nodes cannot receive time injection. "
|
|
290
|
+
f"Dispatch context has now={context.now} but reducers must be "
|
|
291
|
+
"deterministic. This is an ONEX architectural violation.",
|
|
292
|
+
error_code=EnumCoreErrorCode.VALIDATION_FAILED,
|
|
293
|
+
)
|
|
294
|
+
|
|
295
|
+
def validate_no_time_injection_for_compute(
|
|
296
|
+
self,
|
|
297
|
+
context: ModelDispatchContext,
|
|
298
|
+
) -> None:
|
|
299
|
+
"""
|
|
300
|
+
Validate that a compute context does not have time injection.
|
|
301
|
+
|
|
302
|
+
This method provides an explicit validation checkpoint that can be
|
|
303
|
+
called before dispatching to a compute node to ensure no time injection
|
|
304
|
+
has occurred (e.g., via manual context construction).
|
|
305
|
+
|
|
306
|
+
Args:
|
|
307
|
+
context: The dispatch context to validate.
|
|
308
|
+
|
|
309
|
+
Raises:
|
|
310
|
+
ModelOnexError: If context has time injection for a compute node
|
|
311
|
+
(VALIDATION_FAILED).
|
|
312
|
+
|
|
313
|
+
Example:
|
|
314
|
+
>>> # This will raise if context has now != None
|
|
315
|
+
>>> enforcer.validate_no_time_injection_for_compute(compute_ctx)
|
|
316
|
+
|
|
317
|
+
.. versionadded:: 0.5.0
|
|
318
|
+
"""
|
|
319
|
+
if context.node_kind == EnumNodeKind.COMPUTE and context.now is not None:
|
|
320
|
+
raise ModelOnexError(
|
|
321
|
+
message="COMPUTE nodes cannot receive time injection. "
|
|
322
|
+
f"Dispatch context has now={context.now} but compute nodes must be "
|
|
323
|
+
"deterministic. This is an ONEX architectural violation.",
|
|
324
|
+
error_code=EnumCoreErrorCode.VALIDATION_FAILED,
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
def validate_no_time_injection_for_deterministic_node(
|
|
328
|
+
self,
|
|
329
|
+
context: ModelDispatchContext,
|
|
330
|
+
) -> None:
|
|
331
|
+
"""
|
|
332
|
+
Validate that a deterministic node context does not have time injection.
|
|
333
|
+
|
|
334
|
+
This method provides an explicit validation checkpoint that can be
|
|
335
|
+
called before dispatching to a REDUCER or COMPUTE node to ensure no
|
|
336
|
+
time injection has occurred (e.g., via manual context construction).
|
|
337
|
+
|
|
338
|
+
Args:
|
|
339
|
+
context: The dispatch context to validate.
|
|
340
|
+
|
|
341
|
+
Raises:
|
|
342
|
+
ModelOnexError: If context has time injection for a REDUCER or COMPUTE
|
|
343
|
+
node (VALIDATION_FAILED).
|
|
344
|
+
|
|
345
|
+
Example:
|
|
346
|
+
>>> # This will raise if context has now != None for deterministic nodes
|
|
347
|
+
>>> enforcer.validate_no_time_injection_for_deterministic_node(ctx)
|
|
348
|
+
|
|
349
|
+
.. versionadded:: 0.5.0
|
|
350
|
+
"""
|
|
351
|
+
if (
|
|
352
|
+
context.node_kind in (EnumNodeKind.REDUCER, EnumNodeKind.COMPUTE)
|
|
353
|
+
and context.now is not None
|
|
354
|
+
):
|
|
355
|
+
raise ModelOnexError(
|
|
356
|
+
message=f"{context.node_kind.value.upper()} nodes cannot receive time injection. "
|
|
357
|
+
f"Dispatch context has now={context.now} but {context.node_kind.value.lower()} "
|
|
358
|
+
"nodes must be deterministic. This is an ONEX architectural violation.",
|
|
359
|
+
error_code=EnumCoreErrorCode.VALIDATION_FAILED,
|
|
360
|
+
)
|
|
361
|
+
|
|
362
|
+
def requires_time_injection(self, node_kind: EnumNodeKind) -> bool:
|
|
363
|
+
"""
|
|
364
|
+
Check if a node kind requires time injection.
|
|
365
|
+
|
|
366
|
+
This method can be used for logging, metrics, or conditional logic
|
|
367
|
+
based on whether time injection is expected for a given node kind.
|
|
368
|
+
|
|
369
|
+
Args:
|
|
370
|
+
node_kind: The ONEX node kind to check.
|
|
371
|
+
|
|
372
|
+
Returns:
|
|
373
|
+
True if the node kind requires time injection, False otherwise.
|
|
374
|
+
|
|
375
|
+
Time Injection Requirements:
|
|
376
|
+
- REDUCER: False (deterministic, no time)
|
|
377
|
+
- COMPUTE: False (pure transformation, no time)
|
|
378
|
+
- ORCHESTRATOR: True (coordination needs time)
|
|
379
|
+
- EFFECT: True (I/O operations need time)
|
|
380
|
+
- RUNTIME_HOST: True (infrastructure needs time)
|
|
381
|
+
|
|
382
|
+
Example:
|
|
383
|
+
>>> enforcer.requires_time_injection(EnumNodeKind.REDUCER)
|
|
384
|
+
False
|
|
385
|
+
>>> enforcer.requires_time_injection(EnumNodeKind.ORCHESTRATOR)
|
|
386
|
+
True
|
|
387
|
+
|
|
388
|
+
.. versionadded:: 0.5.0
|
|
389
|
+
"""
|
|
390
|
+
return node_kind in {
|
|
391
|
+
EnumNodeKind.ORCHESTRATOR,
|
|
392
|
+
EnumNodeKind.EFFECT,
|
|
393
|
+
EnumNodeKind.RUNTIME_HOST,
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
def forbids_time_injection(self, node_kind: EnumNodeKind) -> bool:
|
|
397
|
+
"""
|
|
398
|
+
Check if a node kind forbids time injection.
|
|
399
|
+
|
|
400
|
+
This is the inverse of requires_time_injection and is useful for
|
|
401
|
+
validation logic that needs to explicitly check for forbidden cases.
|
|
402
|
+
|
|
403
|
+
Args:
|
|
404
|
+
node_kind: The ONEX node kind to check.
|
|
405
|
+
|
|
406
|
+
Returns:
|
|
407
|
+
True if the node kind forbids time injection, False otherwise.
|
|
408
|
+
|
|
409
|
+
Time Injection Forbidden:
|
|
410
|
+
- REDUCER: True (must be deterministic)
|
|
411
|
+
- COMPUTE: True (must be pure transformation)
|
|
412
|
+
- ORCHESTRATOR: False (needs time)
|
|
413
|
+
- EFFECT: False (needs time)
|
|
414
|
+
- RUNTIME_HOST: False (needs time)
|
|
415
|
+
|
|
416
|
+
Example:
|
|
417
|
+
>>> enforcer.forbids_time_injection(EnumNodeKind.REDUCER)
|
|
418
|
+
True
|
|
419
|
+
>>> enforcer.forbids_time_injection(EnumNodeKind.EFFECT)
|
|
420
|
+
False
|
|
421
|
+
|
|
422
|
+
.. versionadded:: 0.5.0
|
|
423
|
+
"""
|
|
424
|
+
return node_kind in {
|
|
425
|
+
EnumNodeKind.REDUCER,
|
|
426
|
+
EnumNodeKind.COMPUTE,
|
|
427
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Hook Event Daemon - Event emission infrastructure for OmniClaude hooks.
|
|
4
|
+
|
|
5
|
+
This package provides the daemon and supporting infrastructure for emitting
|
|
6
|
+
events from OmniClaude hooks to Kafka topics.
|
|
7
|
+
|
|
8
|
+
Components:
|
|
9
|
+
- EmitDaemon: Unix socket server for persistent Kafka event emission
|
|
10
|
+
- EmitClient: Client for emitting events via the daemon
|
|
11
|
+
- EventRegistry: Maps event types to Kafka topics with metadata injection
|
|
12
|
+
- ModelEventRegistration: Configuration model for event type mappings
|
|
13
|
+
- ModelEmitDaemonConfig: Configuration model for the daemon
|
|
14
|
+
- BoundedEventQueue: In-memory queue with disk spool overflow
|
|
15
|
+
- ModelQueuedEvent: Event model for queued events
|
|
16
|
+
|
|
17
|
+
Example Usage:
|
|
18
|
+
```python
|
|
19
|
+
from omnibase_infra.runtime.emit_daemon import (
|
|
20
|
+
EmitClient,
|
|
21
|
+
EmitDaemon,
|
|
22
|
+
EventRegistry,
|
|
23
|
+
ModelEmitDaemonConfig,
|
|
24
|
+
ModelEventRegistration,
|
|
25
|
+
emit_event,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
# Client usage (recommended for hooks)
|
|
29
|
+
async with EmitClient() as client:
|
|
30
|
+
event_id = await client.emit("prompt.submitted", {"prompt_id": "abc123"})
|
|
31
|
+
|
|
32
|
+
# Or use convenience function
|
|
33
|
+
event_id = await emit_event("prompt.submitted", {"prompt_id": "abc123"})
|
|
34
|
+
|
|
35
|
+
# Daemon usage (for running the server)
|
|
36
|
+
config = ModelEmitDaemonConfig(
|
|
37
|
+
kafka_bootstrap_servers="kafka:9092",
|
|
38
|
+
)
|
|
39
|
+
daemon = EmitDaemon(config)
|
|
40
|
+
await daemon.start()
|
|
41
|
+
await daemon.run_until_shutdown()
|
|
42
|
+
|
|
43
|
+
# Or use the registry directly
|
|
44
|
+
registry = EventRegistry(environment="dev")
|
|
45
|
+
topic = registry.resolve_topic("prompt.submitted")
|
|
46
|
+
```
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
from omnibase_infra.runtime.emit_daemon.cli import main as cli_main
|
|
50
|
+
from omnibase_infra.runtime.emit_daemon.client import (
|
|
51
|
+
EmitClient,
|
|
52
|
+
EmitClientError,
|
|
53
|
+
emit_event,
|
|
54
|
+
emit_event_with_fallback,
|
|
55
|
+
)
|
|
56
|
+
from omnibase_infra.runtime.emit_daemon.config import ModelEmitDaemonConfig
|
|
57
|
+
from omnibase_infra.runtime.emit_daemon.daemon import EmitDaemon
|
|
58
|
+
from omnibase_infra.runtime.emit_daemon.event_registry import (
|
|
59
|
+
EventRegistry,
|
|
60
|
+
ModelEventRegistration,
|
|
61
|
+
)
|
|
62
|
+
from omnibase_infra.runtime.emit_daemon.model_daemon_request import (
|
|
63
|
+
ModelDaemonEmitRequest,
|
|
64
|
+
ModelDaemonPingRequest,
|
|
65
|
+
parse_daemon_request,
|
|
66
|
+
)
|
|
67
|
+
from omnibase_infra.runtime.emit_daemon.model_daemon_response import (
|
|
68
|
+
ModelDaemonErrorResponse,
|
|
69
|
+
ModelDaemonPingResponse,
|
|
70
|
+
ModelDaemonQueuedResponse,
|
|
71
|
+
parse_daemon_response,
|
|
72
|
+
)
|
|
73
|
+
from omnibase_infra.runtime.emit_daemon.queue import (
|
|
74
|
+
BoundedEventQueue,
|
|
75
|
+
ModelQueuedEvent,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
__all__: list[str] = [
|
|
79
|
+
"BoundedEventQueue",
|
|
80
|
+
"EmitClient",
|
|
81
|
+
"EmitClientError",
|
|
82
|
+
"EmitDaemon",
|
|
83
|
+
"EventRegistry",
|
|
84
|
+
"ModelDaemonEmitRequest",
|
|
85
|
+
"ModelDaemonErrorResponse",
|
|
86
|
+
"ModelDaemonPingRequest",
|
|
87
|
+
"ModelDaemonPingResponse",
|
|
88
|
+
"ModelDaemonQueuedResponse",
|
|
89
|
+
"ModelEmitDaemonConfig",
|
|
90
|
+
"ModelEventRegistration",
|
|
91
|
+
"ModelQueuedEvent",
|
|
92
|
+
"cli_main",
|
|
93
|
+
"emit_event",
|
|
94
|
+
"emit_event_with_fallback",
|
|
95
|
+
"parse_daemon_request",
|
|
96
|
+
"parse_daemon_response",
|
|
97
|
+
]
|