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,10 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
"""Testing utilities for omnibase_infra.
|
|
3
|
+
|
|
4
|
+
This module provides shared testing utilities for the infrastructure layer,
|
|
5
|
+
including CI environment detection and other common test helpers.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from omnibase_infra.testing.utils import is_ci_environment
|
|
9
|
+
|
|
10
|
+
__all__ = ["is_ci_environment"]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
"""Shared testing utilities for omnibase_infra.
|
|
3
|
+
|
|
4
|
+
This module provides utility functions commonly needed across test files,
|
|
5
|
+
such as environment detection and test configuration helpers.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import os
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def is_ci_environment() -> bool:
|
|
12
|
+
"""Detect if running in CI environment.
|
|
13
|
+
|
|
14
|
+
Checks common CI environment variables:
|
|
15
|
+
- CI: Generic CI flag used by most CI systems
|
|
16
|
+
- GITHUB_ACTIONS: GitHub Actions specific
|
|
17
|
+
|
|
18
|
+
Returns:
|
|
19
|
+
True if running in a CI environment, False otherwise.
|
|
20
|
+
"""
|
|
21
|
+
ci_value = os.getenv("CI", "").lower()
|
|
22
|
+
github_actions = os.getenv("GITHUB_ACTIONS", "").lower()
|
|
23
|
+
return ci_value in ("true", "1", "yes") or github_actions in ("true", "1", "yes")
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""ONEX Infrastructure Topic Constants.
|
|
2
|
+
|
|
3
|
+
This module provides platform-reserved topic suffix constants for ONEX infrastructure
|
|
4
|
+
components. Domain services should NOT import from this module - domain topics should
|
|
5
|
+
be defined in domain contracts.
|
|
6
|
+
|
|
7
|
+
Exports:
|
|
8
|
+
Platform topic suffix constants (e.g., SUFFIX_NODE_REGISTRATION)
|
|
9
|
+
ALL_PLATFORM_SUFFIXES: Complete tuple of all platform-reserved suffixes
|
|
10
|
+
build_full_topic: Compose full topic from env, namespace, and suffix
|
|
11
|
+
TopicCompositionError: Error raised when topic composition fails
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from omnibase_infra.topics.platform_topic_suffixes import (
|
|
15
|
+
ALL_PLATFORM_SUFFIXES,
|
|
16
|
+
SUFFIX_FSM_STATE_TRANSITIONS,
|
|
17
|
+
SUFFIX_NODE_HEARTBEAT,
|
|
18
|
+
SUFFIX_NODE_INTROSPECTION,
|
|
19
|
+
SUFFIX_NODE_REGISTRATION,
|
|
20
|
+
SUFFIX_REGISTRATION_SNAPSHOTS,
|
|
21
|
+
SUFFIX_REQUEST_INTROSPECTION,
|
|
22
|
+
SUFFIX_RUNTIME_TICK,
|
|
23
|
+
)
|
|
24
|
+
from omnibase_infra.topics.util_topic_composition import (
|
|
25
|
+
MAX_NAMESPACE_LENGTH,
|
|
26
|
+
TopicCompositionError,
|
|
27
|
+
build_full_topic,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
__all__: list[str] = [
|
|
31
|
+
# Individual suffix constants
|
|
32
|
+
"SUFFIX_NODE_REGISTRATION",
|
|
33
|
+
"SUFFIX_NODE_INTROSPECTION",
|
|
34
|
+
"SUFFIX_NODE_HEARTBEAT",
|
|
35
|
+
"SUFFIX_REQUEST_INTROSPECTION",
|
|
36
|
+
"SUFFIX_FSM_STATE_TRANSITIONS",
|
|
37
|
+
"SUFFIX_RUNTIME_TICK",
|
|
38
|
+
"SUFFIX_REGISTRATION_SNAPSHOTS",
|
|
39
|
+
# Aggregate tuple
|
|
40
|
+
"ALL_PLATFORM_SUFFIXES",
|
|
41
|
+
# Topic composition utilities
|
|
42
|
+
"build_full_topic",
|
|
43
|
+
"TopicCompositionError",
|
|
44
|
+
"MAX_NAMESPACE_LENGTH",
|
|
45
|
+
]
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"""Platform-reserved topic suffixes for ONEX infrastructure.
|
|
2
|
+
|
|
3
|
+
WARNING: These are platform-reserved suffixes. Domain services must NOT
|
|
4
|
+
import from this module. Domain topics should be defined in domain contracts.
|
|
5
|
+
|
|
6
|
+
Topic Suffix Format:
|
|
7
|
+
onex.<kind>.<producer>.<event-name>.v<version>
|
|
8
|
+
|
|
9
|
+
Structure:
|
|
10
|
+
- onex: Required prefix for all ONEX topics
|
|
11
|
+
- kind: Message category (evt, cmd, intent, snapshot, dlq)
|
|
12
|
+
- producer: Service/module that produces the message
|
|
13
|
+
- event-name: Descriptive name using kebab-case
|
|
14
|
+
- version: Semantic version (v1, v2, etc.)
|
|
15
|
+
|
|
16
|
+
Kinds:
|
|
17
|
+
evt - Event topics (state changes, notifications)
|
|
18
|
+
cmd - Command topics (requests for action)
|
|
19
|
+
intent - Intent topics (internal workflow coordination)
|
|
20
|
+
snapshot - Snapshot topics (periodic state snapshots)
|
|
21
|
+
dlq - Dead letter queue topics
|
|
22
|
+
|
|
23
|
+
Examples:
|
|
24
|
+
onex.evt.platform.node-registration.v1
|
|
25
|
+
onex.cmd.platform.request-introspection.v1
|
|
26
|
+
onex.intent.platform.runtime-tick.v1
|
|
27
|
+
|
|
28
|
+
Usage:
|
|
29
|
+
from omnibase_infra.topics import SUFFIX_NODE_REGISTRATION
|
|
30
|
+
|
|
31
|
+
# Compose full topic with tenant/namespace prefix
|
|
32
|
+
full_topic = f"{tenant}.{namespace}.{SUFFIX_NODE_REGISTRATION}"
|
|
33
|
+
|
|
34
|
+
See Also:
|
|
35
|
+
omnibase_core.validation.validate_topic_suffix - Validation function
|
|
36
|
+
omnibase_core.validation.compose_full_topic - Topic composition utility
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
from omnibase_core.errors import OnexError
|
|
40
|
+
from omnibase_core.validation import validate_topic_suffix
|
|
41
|
+
|
|
42
|
+
# =============================================================================
|
|
43
|
+
# PLATFORM-RESERVED TOPIC SUFFIXES
|
|
44
|
+
# =============================================================================
|
|
45
|
+
|
|
46
|
+
# Node lifecycle events
|
|
47
|
+
SUFFIX_NODE_REGISTRATION: str = "onex.evt.platform.node-registration.v1"
|
|
48
|
+
"""Topic suffix for node registration events.
|
|
49
|
+
|
|
50
|
+
Published when a node registers with the runtime. Contains node metadata,
|
|
51
|
+
capabilities, and health check configuration.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
SUFFIX_NODE_INTROSPECTION: str = "onex.evt.platform.node-introspection.v1"
|
|
55
|
+
"""Topic suffix for node introspection events.
|
|
56
|
+
|
|
57
|
+
Published when a node responds to an introspection request. Contains node
|
|
58
|
+
capabilities, supported operations, and current state.
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
SUFFIX_NODE_HEARTBEAT: str = "onex.evt.platform.node-heartbeat.v1"
|
|
62
|
+
"""Topic suffix for node heartbeat events.
|
|
63
|
+
|
|
64
|
+
Published periodically by nodes to indicate liveness. Contains timestamp,
|
|
65
|
+
resource usage metrics, and health status.
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
# Command topics
|
|
69
|
+
SUFFIX_REQUEST_INTROSPECTION: str = "onex.cmd.platform.request-introspection.v1"
|
|
70
|
+
"""Topic suffix for introspection request commands.
|
|
71
|
+
|
|
72
|
+
Published to request introspection from a specific node or all nodes.
|
|
73
|
+
Nodes respond on the SUFFIX_NODE_INTROSPECTION topic.
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
# FSM and state management
|
|
77
|
+
SUFFIX_FSM_STATE_TRANSITIONS: str = "onex.evt.platform.fsm-state-transitions.v1"
|
|
78
|
+
"""Topic suffix for FSM state transition events.
|
|
79
|
+
|
|
80
|
+
Published when a node's finite state machine transitions between states.
|
|
81
|
+
Contains previous state, new state, trigger event, and transition metadata.
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
# Runtime coordination
|
|
85
|
+
SUFFIX_RUNTIME_TICK: str = "onex.intent.platform.runtime-tick.v1"
|
|
86
|
+
"""Topic suffix for runtime tick intents.
|
|
87
|
+
|
|
88
|
+
Internal topic for runtime orchestration. Triggers periodic tasks like
|
|
89
|
+
heartbeat collection, health checks, and scheduled workflows.
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
# Registration snapshots
|
|
93
|
+
SUFFIX_REGISTRATION_SNAPSHOTS: str = "onex.snapshot.platform.registration-snapshots.v1"
|
|
94
|
+
"""Topic suffix for registration snapshot events.
|
|
95
|
+
|
|
96
|
+
Published periodically with aggregated registration state. Used for
|
|
97
|
+
dashboard displays and monitoring systems.
|
|
98
|
+
"""
|
|
99
|
+
|
|
100
|
+
# =============================================================================
|
|
101
|
+
# AGGREGATE TUPLE
|
|
102
|
+
# =============================================================================
|
|
103
|
+
|
|
104
|
+
ALL_PLATFORM_SUFFIXES: tuple[str, ...] = (
|
|
105
|
+
SUFFIX_NODE_REGISTRATION,
|
|
106
|
+
SUFFIX_NODE_INTROSPECTION,
|
|
107
|
+
SUFFIX_NODE_HEARTBEAT,
|
|
108
|
+
SUFFIX_REQUEST_INTROSPECTION,
|
|
109
|
+
SUFFIX_FSM_STATE_TRANSITIONS,
|
|
110
|
+
SUFFIX_RUNTIME_TICK,
|
|
111
|
+
SUFFIX_REGISTRATION_SNAPSHOTS,
|
|
112
|
+
)
|
|
113
|
+
"""Complete tuple of all platform-reserved topic suffixes.
|
|
114
|
+
|
|
115
|
+
Use this tuple for:
|
|
116
|
+
- Validating that domain topics don't conflict with platform topics
|
|
117
|
+
- Iterating over all platform topics for subscription setup
|
|
118
|
+
- Documentation and discovery
|
|
119
|
+
"""
|
|
120
|
+
|
|
121
|
+
# =============================================================================
|
|
122
|
+
# IMPORT-TIME VALIDATION
|
|
123
|
+
# =============================================================================
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def _validate_all_suffixes() -> None:
|
|
127
|
+
"""Validate all suffixes at import time to fail fast on invalid format.
|
|
128
|
+
|
|
129
|
+
Raises:
|
|
130
|
+
OnexError: If any suffix fails validation with details about which
|
|
131
|
+
suffix failed and why.
|
|
132
|
+
"""
|
|
133
|
+
for suffix in ALL_PLATFORM_SUFFIXES:
|
|
134
|
+
result = validate_topic_suffix(suffix)
|
|
135
|
+
if not result.is_valid:
|
|
136
|
+
raise OnexError(f"Invalid platform topic suffix '{suffix}': {result.error}")
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
# Run validation at import time
|
|
140
|
+
_validate_all_suffixes()
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"""Topic composition utilities for ONEX infrastructure.
|
|
2
|
+
|
|
3
|
+
IMPORTANT: build_full_topic() is the ONLY supported way to compose
|
|
4
|
+
Kafka topics in omnibase_infra. Direct string concatenation is prohibited.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from omnibase_core.errors import OnexError
|
|
8
|
+
from omnibase_core.validation import validate_topic_suffix
|
|
9
|
+
from omnibase_core.validation.validator_topic_suffix import ENV_PREFIXES
|
|
10
|
+
|
|
11
|
+
MAX_NAMESPACE_LENGTH = 100
|
|
12
|
+
"""Maximum allowed namespace length.
|
|
13
|
+
|
|
14
|
+
Kafka topics have a 249 character limit. With env prefix (~10 chars),
|
|
15
|
+
separators (2 dots), and suffix (~50 chars), namespace should be limited
|
|
16
|
+
to ensure total topic length stays within bounds.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class TopicCompositionError(OnexError):
|
|
21
|
+
"""Raised when topic composition fails due to invalid components.
|
|
22
|
+
|
|
23
|
+
Extends OnexError to follow ONEX error handling conventions.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def build_full_topic(env: str, namespace: str, suffix: str) -> str:
|
|
28
|
+
"""Build full topic from components with validation.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
env: Environment prefix (e.g., "dev", "staging", "prod", "test", "local")
|
|
32
|
+
namespace: Namespace/tenant identifier (e.g., "omnibase", "myapp", "tenant-123")
|
|
33
|
+
suffix: Validated topic suffix (e.g., "onex.evt.platform.node-introspection.v1")
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
Full topic string: {env}.{namespace}.{suffix}
|
|
37
|
+
|
|
38
|
+
Raises:
|
|
39
|
+
TopicCompositionError: If env is not a valid environment prefix
|
|
40
|
+
TopicCompositionError: If namespace is empty or contains invalid characters
|
|
41
|
+
TopicCompositionError: If suffix doesn't match ONEX topic format
|
|
42
|
+
|
|
43
|
+
Namespace Validation Rules:
|
|
44
|
+
- Must not be empty
|
|
45
|
+
- Allowed characters: alphanumeric (a-z, A-Z, 0-9), hyphens (-), underscores (_)
|
|
46
|
+
- Numeric-only namespaces ARE valid (e.g., "12345") to support numeric tenant IDs
|
|
47
|
+
- Invalid: spaces, dots, special characters
|
|
48
|
+
|
|
49
|
+
Example:
|
|
50
|
+
>>> build_full_topic("dev", "omnibase", "onex.evt.platform.node-introspection.v1")
|
|
51
|
+
'dev.omnibase.onex.evt.platform.node-introspection.v1'
|
|
52
|
+
|
|
53
|
+
>>> build_full_topic("prod", "myapp", "onex.cmd.platform.request-introspection.v1")
|
|
54
|
+
'prod.myapp.onex.cmd.platform.request-introspection.v1'
|
|
55
|
+
"""
|
|
56
|
+
# Validate environment prefix
|
|
57
|
+
if env not in ENV_PREFIXES:
|
|
58
|
+
raise TopicCompositionError(
|
|
59
|
+
f"Invalid environment prefix '{env}'. "
|
|
60
|
+
f"Must be one of: {', '.join(sorted(ENV_PREFIXES))}"
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
# Validate namespace
|
|
64
|
+
# Allowed characters: alphanumeric (a-z, A-Z, 0-9), hyphens, underscores
|
|
65
|
+
# Note: Numeric-only namespaces (e.g., "12345") ARE valid because isalnum()
|
|
66
|
+
# returns True for digit-only strings. This is intentional to support
|
|
67
|
+
# numeric tenant/organization IDs as namespaces.
|
|
68
|
+
if not namespace:
|
|
69
|
+
raise TopicCompositionError("Namespace cannot be empty")
|
|
70
|
+
if len(namespace) > MAX_NAMESPACE_LENGTH:
|
|
71
|
+
raise TopicCompositionError(
|
|
72
|
+
f"Namespace exceeds maximum length of {MAX_NAMESPACE_LENGTH} characters. "
|
|
73
|
+
f"Got {len(namespace)} characters."
|
|
74
|
+
)
|
|
75
|
+
if not namespace.replace("-", "").replace("_", "").isalnum():
|
|
76
|
+
raise TopicCompositionError(
|
|
77
|
+
f"Invalid namespace '{namespace}'. "
|
|
78
|
+
"Must contain only alphanumeric characters, hyphens, and underscores"
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
# Enforce lowercase to ensure composed topics are valid
|
|
82
|
+
# (ONEX topic suffixes are lowercase, so namespaces should match)
|
|
83
|
+
if namespace != namespace.lower():
|
|
84
|
+
raise TopicCompositionError(
|
|
85
|
+
f"Namespace must be lowercase: '{namespace}'. "
|
|
86
|
+
"Use lowercase to ensure consistent topic naming."
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
# Validate suffix using omnibase_core validation
|
|
90
|
+
result = validate_topic_suffix(suffix)
|
|
91
|
+
if not result.is_valid:
|
|
92
|
+
raise TopicCompositionError(f"Invalid topic suffix '{suffix}': {result.error}")
|
|
93
|
+
|
|
94
|
+
# Compose full topic
|
|
95
|
+
return f"{env}.{namespace}.{suffix}"
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Types module for omnibase_infra.
|
|
4
|
+
|
|
5
|
+
This module re-exports commonly used types for external consumption.
|
|
6
|
+
Types are organized into categories:
|
|
7
|
+
|
|
8
|
+
Top-level exports (this module):
|
|
9
|
+
- ModelParsedDSN: Pydantic model for parsed DSN components
|
|
10
|
+
- TypeCacheInfo: NamedTuple for cache hit/miss statistics
|
|
11
|
+
- TypedDictCapabilities: TypedDict for node capability introspection
|
|
12
|
+
|
|
13
|
+
Type aliases (from type_infra_aliases):
|
|
14
|
+
- ASTFunctionDef: ast.AsyncFunctionDef | ast.FunctionDef
|
|
15
|
+
- MessageOutputCategory: EnumMessageCategory | EnumNodeOutputType
|
|
16
|
+
- PathInput: Path | str (named to avoid collision with stdlib os.PathLike)
|
|
17
|
+
- PolicyTypeInput: EnumPolicyType | str
|
|
18
|
+
|
|
19
|
+
Note on cache-related TypedDicts:
|
|
20
|
+
TypedDictIntrospectionCache and TypedDictPerformanceMetricsCache are NOT
|
|
21
|
+
re-exported here because they are internal implementation details of the
|
|
22
|
+
MixinNodeIntrospection mixin. These types are tightly coupled to the mixin's
|
|
23
|
+
caching implementation and should not be used directly by external consumers.
|
|
24
|
+
If needed for testing or advanced use cases, import from the typed_dict submodule:
|
|
25
|
+
from omnibase_infra.types.typed_dict import TypedDictIntrospectionCache
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
from omnibase_infra.types.type_cache_info import TypeCacheInfo
|
|
29
|
+
from omnibase_infra.types.type_dsn import ModelParsedDSN
|
|
30
|
+
from omnibase_infra.types.type_infra_aliases import (
|
|
31
|
+
ASTFunctionDef,
|
|
32
|
+
MessageOutputCategory,
|
|
33
|
+
PathInput,
|
|
34
|
+
PolicyTypeInput,
|
|
35
|
+
)
|
|
36
|
+
from omnibase_infra.types.typed_dict_capabilities import TypedDictCapabilities
|
|
37
|
+
|
|
38
|
+
__all__: list[str] = [
|
|
39
|
+
# Type aliases
|
|
40
|
+
"ASTFunctionDef",
|
|
41
|
+
"MessageOutputCategory",
|
|
42
|
+
"PathInput",
|
|
43
|
+
"PolicyTypeInput",
|
|
44
|
+
# Models and TypedDicts
|
|
45
|
+
"ModelParsedDSN",
|
|
46
|
+
"TypeCacheInfo",
|
|
47
|
+
"TypedDictCapabilities",
|
|
48
|
+
]
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright 2025 OmniNode Team
|
|
3
|
+
|
|
4
|
+
"""Cache information type for topic parser caching statistics.
|
|
5
|
+
|
|
6
|
+
This module provides a type-safe NamedTuple for representing cache statistics,
|
|
7
|
+
mirroring the structure of functools._CacheInfo for compatibility with LRU
|
|
8
|
+
cache implementations.
|
|
9
|
+
|
|
10
|
+
Example:
|
|
11
|
+
>>> from omnibase_infra.types import TypeCacheInfo
|
|
12
|
+
>>> info = TypeCacheInfo(hits=100, misses=10, maxsize=128, currsize=50)
|
|
13
|
+
>>> print(f"Hit rate: {info.hits / (info.hits + info.misses):.2%}")
|
|
14
|
+
Hit rate: 90.91%
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from typing import NamedTuple
|
|
18
|
+
|
|
19
|
+
__all__ = ["TypeCacheInfo"]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class TypeCacheInfo(NamedTuple):
|
|
23
|
+
"""Cache statistics for topic parsing operations.
|
|
24
|
+
|
|
25
|
+
This mirrors functools._CacheInfo structure for type safety when
|
|
26
|
+
exposing cache statistics from LRU-cached parsing functions.
|
|
27
|
+
|
|
28
|
+
Attributes:
|
|
29
|
+
hits: Number of cache hits (requests served from cache).
|
|
30
|
+
misses: Number of cache misses (requests requiring computation).
|
|
31
|
+
maxsize: Maximum cache size, or None for unlimited cache.
|
|
32
|
+
currsize: Current number of entries in the cache.
|
|
33
|
+
|
|
34
|
+
Example:
|
|
35
|
+
>>> info = TypeCacheInfo(hits=50, misses=5, maxsize=128, currsize=30)
|
|
36
|
+
>>> info.hits
|
|
37
|
+
50
|
|
38
|
+
>>> info.maxsize
|
|
39
|
+
128
|
|
40
|
+
|
|
41
|
+
Note:
|
|
42
|
+
This type is intentionally compatible with functools._CacheInfo
|
|
43
|
+
to allow seamless interoperability with standard library caching.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
hits: int
|
|
47
|
+
misses: int
|
|
48
|
+
maxsize: int | None
|
|
49
|
+
currsize: int
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
# Copyright 2025 OmniNode Team
|
|
3
|
+
|
|
4
|
+
"""Strongly-typed DSN parse result model.
|
|
5
|
+
|
|
6
|
+
This module provides a Pydantic model for representing parsed PostgreSQL
|
|
7
|
+
Data Source Name (DSN) connection strings with full type safety and
|
|
8
|
+
validation.
|
|
9
|
+
|
|
10
|
+
The model replaces loose dict[str, object] return types with a structured,
|
|
11
|
+
immutable, and validated representation of DSN components.
|
|
12
|
+
|
|
13
|
+
Example:
|
|
14
|
+
>>> from omnibase_infra.types import ModelParsedDSN
|
|
15
|
+
>>> dsn = ModelParsedDSN(
|
|
16
|
+
... scheme="postgresql",
|
|
17
|
+
... username="admin",
|
|
18
|
+
... password="secret",
|
|
19
|
+
... hostname="localhost",
|
|
20
|
+
... port=5432,
|
|
21
|
+
... database="mydb",
|
|
22
|
+
... )
|
|
23
|
+
>>> dsn.hostname
|
|
24
|
+
'localhost'
|
|
25
|
+
>>> dsn.port
|
|
26
|
+
5432
|
|
27
|
+
|
|
28
|
+
Note:
|
|
29
|
+
The model is frozen (immutable) to ensure DSN components cannot be
|
|
30
|
+
accidentally modified after parsing. This provides safety when passing
|
|
31
|
+
DSN information through multiple layers of the application.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
from typing import Literal
|
|
35
|
+
|
|
36
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
37
|
+
|
|
38
|
+
__all__ = ["ModelParsedDSN"]
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class ModelParsedDSN(BaseModel):
|
|
42
|
+
"""Strongly-typed DSN parse result for PostgreSQL connection strings.
|
|
43
|
+
|
|
44
|
+
This model provides a structured representation of parsed DSN components
|
|
45
|
+
with validation for port ranges and scheme restrictions. The model is
|
|
46
|
+
immutable (frozen) to prevent accidental modification of connection
|
|
47
|
+
parameters.
|
|
48
|
+
|
|
49
|
+
Attributes:
|
|
50
|
+
scheme: The database scheme/protocol. Must be 'postgresql' or 'postgres'.
|
|
51
|
+
username: The database username for authentication. None if not specified.
|
|
52
|
+
password: The database password for authentication. None if not specified.
|
|
53
|
+
Note: Handle with care as this contains sensitive credentials.
|
|
54
|
+
hostname: The database server hostname or IP address. None if not specified.
|
|
55
|
+
port: The database server port number (1-65535). None if not specified.
|
|
56
|
+
database: The name of the database to connect to.
|
|
57
|
+
query: Additional connection parameters as key-value pairs. Values may be
|
|
58
|
+
strings or lists of strings for multi-value parameters.
|
|
59
|
+
|
|
60
|
+
Example:
|
|
61
|
+
>>> dsn = ModelParsedDSN(
|
|
62
|
+
... scheme="postgresql",
|
|
63
|
+
... username="app_user",
|
|
64
|
+
... hostname="db.example.com",
|
|
65
|
+
... port=5432,
|
|
66
|
+
... database="production",
|
|
67
|
+
... query={"sslmode": "require"},
|
|
68
|
+
... )
|
|
69
|
+
>>> dsn.scheme
|
|
70
|
+
'postgresql'
|
|
71
|
+
>>> dsn.query
|
|
72
|
+
{'sslmode': 'require'}
|
|
73
|
+
|
|
74
|
+
Note:
|
|
75
|
+
The password field should be handled carefully in logging and
|
|
76
|
+
error messages to avoid credential exposure. Use the sanitization
|
|
77
|
+
utilities from util_dsn_validation for safe string representations.
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
scheme: Literal["postgresql", "postgres"] = Field(
|
|
81
|
+
description="Database scheme/protocol. Must be 'postgresql' or 'postgres'."
|
|
82
|
+
)
|
|
83
|
+
username: str | None = Field(
|
|
84
|
+
default=None,
|
|
85
|
+
description="Database username for authentication.",
|
|
86
|
+
)
|
|
87
|
+
password: str | None = Field(
|
|
88
|
+
default=None,
|
|
89
|
+
description="Database password for authentication. Handle with care.",
|
|
90
|
+
)
|
|
91
|
+
hostname: str | None = Field(
|
|
92
|
+
default=None,
|
|
93
|
+
description="Database server hostname or IP address.",
|
|
94
|
+
)
|
|
95
|
+
port: int | None = Field(
|
|
96
|
+
default=None,
|
|
97
|
+
ge=1,
|
|
98
|
+
le=65535,
|
|
99
|
+
description="Database server port number (valid range: 1-65535).",
|
|
100
|
+
)
|
|
101
|
+
database: str = Field(
|
|
102
|
+
description="Name of the database to connect to.",
|
|
103
|
+
)
|
|
104
|
+
query: dict[str, str | list[str]] = Field(
|
|
105
|
+
default_factory=dict,
|
|
106
|
+
description="Additional connection parameters as key-value pairs.",
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
model_config = ConfigDict(frozen=True, extra="forbid", from_attributes=True)
|
|
110
|
+
|
|
111
|
+
def __repr__(self) -> str:
|
|
112
|
+
"""Return string representation with masked password.
|
|
113
|
+
|
|
114
|
+
This method overrides the default Pydantic __repr__ to prevent
|
|
115
|
+
credential exposure in logs, debug output, and error messages.
|
|
116
|
+
The actual password value remains accessible via the .password
|
|
117
|
+
attribute for legitimate use cases.
|
|
118
|
+
|
|
119
|
+
Returns:
|
|
120
|
+
String representation with password shown as '[REDACTED]' if set,
|
|
121
|
+
or None if not set.
|
|
122
|
+
|
|
123
|
+
Example:
|
|
124
|
+
>>> dsn = ModelParsedDSN(
|
|
125
|
+
... scheme="postgresql",
|
|
126
|
+
... username="admin",
|
|
127
|
+
... password="secret123",
|
|
128
|
+
... hostname="localhost",
|
|
129
|
+
... port=5432,
|
|
130
|
+
... database="mydb",
|
|
131
|
+
... )
|
|
132
|
+
>>> repr(dsn) # Shows '[REDACTED]' instead of 'secret123'
|
|
133
|
+
"ModelParsedDSN(scheme='postgresql', username='admin', ...)"
|
|
134
|
+
"""
|
|
135
|
+
password_display = "[REDACTED]" if self.password else None
|
|
136
|
+
return (
|
|
137
|
+
f"ModelParsedDSN(scheme={self.scheme!r}, username={self.username!r}, "
|
|
138
|
+
f"password={password_display!r}, hostname={self.hostname!r}, "
|
|
139
|
+
f"port={self.port!r}, database={self.database!r}, query={self.query!r})"
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
def __str__(self) -> str:
|
|
143
|
+
"""Return string representation with masked password.
|
|
144
|
+
|
|
145
|
+
Delegates to __repr__ to ensure consistent password masking across
|
|
146
|
+
all string conversion contexts (str(), print(), f-strings, etc.).
|
|
147
|
+
|
|
148
|
+
Returns:
|
|
149
|
+
String representation with password masked.
|
|
150
|
+
"""
|
|
151
|
+
return self.__repr__()
|
|
152
|
+
|
|
153
|
+
def to_sanitized_dict(self) -> dict[str, object]:
|
|
154
|
+
"""Return a dict representation with the password masked.
|
|
155
|
+
|
|
156
|
+
Useful for logging and debugging without exposing credentials.
|
|
157
|
+
|
|
158
|
+
Returns:
|
|
159
|
+
dict[str, object]: Model data with password replaced by '[REDACTED]' if set.
|
|
160
|
+
|
|
161
|
+
Example:
|
|
162
|
+
>>> dsn = ModelParsedDSN(
|
|
163
|
+
... scheme="postgresql", username="user", password="secret",
|
|
164
|
+
... hostname="localhost", port=5432, database="mydb"
|
|
165
|
+
... )
|
|
166
|
+
>>> dsn.to_sanitized_dict()
|
|
167
|
+
{'scheme': 'postgresql', 'username': 'user', 'password': '[REDACTED]',
|
|
168
|
+
'hostname': 'localhost', 'port': 5432, 'database': 'mydb', 'query': {}}
|
|
169
|
+
"""
|
|
170
|
+
data = self.model_dump()
|
|
171
|
+
if data.get("password"):
|
|
172
|
+
data["password"] = "[REDACTED]"
|
|
173
|
+
return data
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""
|
|
4
|
+
Infrastructure-specific type aliases for union complexity reduction.
|
|
5
|
+
|
|
6
|
+
These type aliases consolidate repeated union patterns found in omnibase_infra,
|
|
7
|
+
following the same pattern as omnibase_core.types.type_json.
|
|
8
|
+
|
|
9
|
+
When to use each alias:
|
|
10
|
+
MessageOutputCategory: Use for message routing, dispatcher selection,
|
|
11
|
+
and node output validation. Accepts both EnumMessageCategory (EVENT,
|
|
12
|
+
COMMAND, INTENT) and EnumNodeOutputType (includes PROJECTION).
|
|
13
|
+
|
|
14
|
+
PathInput: Use for function parameters that accept filesystem paths.
|
|
15
|
+
Allows callers to pass either Path objects or string paths.
|
|
16
|
+
|
|
17
|
+
PolicyTypeInput: Use for policy configuration APIs that need flexibility
|
|
18
|
+
between enum values and string representations.
|
|
19
|
+
|
|
20
|
+
ASTFunctionDef: Use when analyzing Python AST for function definitions,
|
|
21
|
+
covering both sync and async functions.
|
|
22
|
+
|
|
23
|
+
See OMN-1358 for the union reduction initiative that drove these definitions.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
from __future__ import annotations
|
|
27
|
+
|
|
28
|
+
import ast
|
|
29
|
+
from pathlib import Path
|
|
30
|
+
|
|
31
|
+
from omnibase_infra.enums import EnumMessageCategory, EnumNodeOutputType, EnumPolicyType
|
|
32
|
+
|
|
33
|
+
# Message category or node output type (for routing and validation)
|
|
34
|
+
# Replaces 24 occurrences of: EnumMessageCategory | EnumNodeOutputType
|
|
35
|
+
type MessageOutputCategory = EnumMessageCategory | EnumNodeOutputType
|
|
36
|
+
|
|
37
|
+
# Filesystem path input flexibility
|
|
38
|
+
# Replaces 11 occurrences of: Path | str
|
|
39
|
+
# Note: Named PathInput (not PathLike) to avoid collision with stdlib os.PathLike Protocol.
|
|
40
|
+
# PathInput represents filesystem path flexibility (Path | str), whereas os.PathLike is
|
|
41
|
+
# a Protocol for objects implementing __fspath__().
|
|
42
|
+
type PathInput = Path | str
|
|
43
|
+
|
|
44
|
+
# Policy type with string fallback for API flexibility
|
|
45
|
+
# Replaces 8 occurrences of: EnumPolicyType | str
|
|
46
|
+
# NOTE: This is an INPUT type alias for API flexibility. Pydantic validators
|
|
47
|
+
# using validate_policy_type_value() COERCE strings to EnumPolicyType, so
|
|
48
|
+
# the actual stored value is always an enum, ensuring type-safe field access.
|
|
49
|
+
type PolicyTypeInput = EnumPolicyType | str
|
|
50
|
+
|
|
51
|
+
# AST function definition node types
|
|
52
|
+
# Replaces 7 occurrences of: ast.AsyncFunctionDef | ast.FunctionDef
|
|
53
|
+
type ASTFunctionDef = ast.AsyncFunctionDef | ast.FunctionDef
|
|
54
|
+
|
|
55
|
+
__all__ = [
|
|
56
|
+
"ASTFunctionDef",
|
|
57
|
+
"MessageOutputCategory",
|
|
58
|
+
"PathInput",
|
|
59
|
+
"PolicyTypeInput",
|
|
60
|
+
]
|