omnibase_infra 0.2.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- omnibase_infra/__init__.py +101 -0
- omnibase_infra/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +261 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +138 -0
- omnibase_infra/decorators/__init__.py +29 -0
- omnibase_infra/decorators/allow_any.py +109 -0
- omnibase_infra/dlq/__init__.py +90 -0
- omnibase_infra/dlq/constants_dlq.py +57 -0
- omnibase_infra/dlq/models/__init__.py +26 -0
- omnibase_infra/dlq/models/enum_replay_status.py +37 -0
- omnibase_infra/dlq/models/model_dlq_replay_record.py +135 -0
- omnibase_infra/dlq/models/model_dlq_tracking_config.py +184 -0
- omnibase_infra/dlq/service_dlq_tracking.py +611 -0
- omnibase_infra/enums/__init__.py +123 -0
- omnibase_infra/enums/enum_any_type_violation.py +104 -0
- omnibase_infra/enums/enum_backend_type.py +27 -0
- omnibase_infra/enums/enum_capture_outcome.py +42 -0
- omnibase_infra/enums/enum_capture_state.py +88 -0
- omnibase_infra/enums/enum_chain_violation_type.py +119 -0
- omnibase_infra/enums/enum_circuit_state.py +51 -0
- omnibase_infra/enums/enum_confirmation_event_type.py +27 -0
- omnibase_infra/enums/enum_contract_type.py +84 -0
- omnibase_infra/enums/enum_dedupe_strategy.py +46 -0
- omnibase_infra/enums/enum_dispatch_status.py +191 -0
- omnibase_infra/enums/enum_environment.py +46 -0
- omnibase_infra/enums/enum_execution_shape_violation.py +103 -0
- omnibase_infra/enums/enum_handler_error_type.py +101 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -0
- omnibase_infra/enums/enum_handler_source_type.py +87 -0
- omnibase_infra/enums/enum_handler_type.py +77 -0
- omnibase_infra/enums/enum_handler_type_category.py +61 -0
- omnibase_infra/enums/enum_infra_transport_type.py +73 -0
- omnibase_infra/enums/enum_introspection_reason.py +154 -0
- omnibase_infra/enums/enum_message_category.py +213 -0
- omnibase_infra/enums/enum_node_archetype.py +74 -0
- omnibase_infra/enums/enum_node_output_type.py +185 -0
- omnibase_infra/enums/enum_non_retryable_error_category.py +224 -0
- omnibase_infra/enums/enum_policy_type.py +32 -0
- omnibase_infra/enums/enum_registration_state.py +261 -0
- omnibase_infra/enums/enum_registration_status.py +33 -0
- omnibase_infra/enums/enum_registry_response_status.py +28 -0
- omnibase_infra/enums/enum_response_status.py +26 -0
- omnibase_infra/enums/enum_retry_error_category.py +98 -0
- omnibase_infra/enums/enum_security_rule_id.py +103 -0
- omnibase_infra/enums/enum_selection_strategy.py +91 -0
- omnibase_infra/enums/enum_topic_standard.py +42 -0
- omnibase_infra/enums/enum_validation_severity.py +78 -0
- omnibase_infra/errors/__init__.py +156 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +92 -0
- omnibase_infra/errors/error_consul.py +132 -0
- omnibase_infra/errors/error_container_wiring.py +243 -0
- omnibase_infra/errors/error_event_bus_registry.py +102 -0
- omnibase_infra/errors/error_infra.py +608 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +112 -0
- omnibase_infra/errors/error_vault.py +123 -0
- omnibase_infra/event_bus/__init__.py +72 -0
- omnibase_infra/event_bus/configs/kafka_event_bus_config.yaml +86 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +743 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1658 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +184 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +765 -0
- omnibase_infra/event_bus/models/__init__.py +29 -0
- omnibase_infra/event_bus/models/config/__init__.py +20 -0
- omnibase_infra/event_bus/models/config/model_kafka_event_bus_config.py +725 -0
- omnibase_infra/event_bus/models/model_dlq_event.py +206 -0
- omnibase_infra/event_bus/models/model_dlq_metrics.py +304 -0
- omnibase_infra/event_bus/models/model_event_headers.py +115 -0
- omnibase_infra/event_bus/models/model_event_message.py +60 -0
- omnibase_infra/event_bus/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +75 -0
- omnibase_infra/handlers/filesystem/__init__.py +48 -0
- omnibase_infra/handlers/filesystem/enum_file_system_operation.py +35 -0
- omnibase_infra/handlers/filesystem/model_file_system_request.py +298 -0
- omnibase_infra/handlers/filesystem/model_file_system_result.py +166 -0
- omnibase_infra/handlers/handler_consul.py +787 -0
- omnibase_infra/handlers/handler_db.py +1039 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +1154 -0
- omnibase_infra/handlers/handler_http.py +920 -0
- omnibase_infra/handlers/handler_manifest_persistence.contract.yaml +184 -0
- omnibase_infra/handlers/handler_manifest_persistence.py +1539 -0
- omnibase_infra/handlers/handler_mcp.py +748 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +422 -0
- omnibase_infra/handlers/mcp/__init__.py +19 -0
- omnibase_infra/handlers/mcp/adapter_onex_to_mcp.py +446 -0
- omnibase_infra/handlers/mcp/protocols.py +178 -0
- omnibase_infra/handlers/mcp/transport_streamable_http.py +352 -0
- omnibase_infra/handlers/mixins/__init__.py +42 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +337 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +277 -0
- omnibase_infra/handlers/mixins/mixin_vault_initialization.py +338 -0
- omnibase_infra/handlers/mixins/mixin_vault_retry.py +412 -0
- omnibase_infra/handlers/mixins/mixin_vault_secrets.py +450 -0
- omnibase_infra/handlers/mixins/mixin_vault_token.py +365 -0
- omnibase_infra/handlers/models/__init__.py +286 -0
- omnibase_infra/handlers/models/consul/__init__.py +81 -0
- omnibase_infra/handlers/models/consul/enum_consul_operation_type.py +57 -0
- omnibase_infra/handlers/models/consul/model_consul_deregister_payload.py +51 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_config.py +153 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_payload.py +89 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_found_payload.py +55 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_not_found_payload.py +49 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_recurse_payload.py +50 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_item.py +33 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_put_payload.py +41 -0
- omnibase_infra/handlers/models/consul/model_consul_register_payload.py +53 -0
- omnibase_infra/handlers/models/consul/model_consul_retry_config.py +66 -0
- omnibase_infra/handlers/models/consul/model_payload_consul.py +66 -0
- omnibase_infra/handlers/models/consul/registry_payload_consul.py +214 -0
- omnibase_infra/handlers/models/graph/__init__.py +35 -0
- omnibase_infra/handlers/models/graph/enum_graph_operation_type.py +20 -0
- omnibase_infra/handlers/models/graph/model_graph_execute_payload.py +38 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_config.py +54 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_payload.py +44 -0
- omnibase_infra/handlers/models/graph/model_graph_query_payload.py +40 -0
- omnibase_infra/handlers/models/graph/model_graph_record.py +22 -0
- omnibase_infra/handlers/models/http/__init__.py +50 -0
- omnibase_infra/handlers/models/http/enum_http_operation_type.py +29 -0
- omnibase_infra/handlers/models/http/model_http_body_content.py +45 -0
- omnibase_infra/handlers/models/http/model_http_get_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_http_handler_payload.py +90 -0
- omnibase_infra/handlers/models/http/model_http_post_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_payload_http.py +66 -0
- omnibase_infra/handlers/models/http/registry_payload_http.py +212 -0
- omnibase_infra/handlers/models/mcp/__init__.py +23 -0
- omnibase_infra/handlers/models/mcp/enum_mcp_operation_type.py +24 -0
- omnibase_infra/handlers/models/mcp/model_mcp_handler_config.py +40 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_call.py +32 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_result.py +45 -0
- omnibase_infra/handlers/models/model_consul_handler_response.py +96 -0
- omnibase_infra/handlers/models/model_db_describe_response.py +83 -0
- omnibase_infra/handlers/models/model_db_query_payload.py +95 -0
- omnibase_infra/handlers/models/model_db_query_response.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_config.py +98 -0
- omnibase_infra/handlers/models/model_filesystem_delete_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_delete_result.py +77 -0
- omnibase_infra/handlers/models/model_filesystem_directory_entry.py +75 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_result.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_payload.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_result.py +68 -0
- omnibase_infra/handlers/models/model_filesystem_read_payload.py +62 -0
- omnibase_infra/handlers/models/model_filesystem_read_result.py +61 -0
- omnibase_infra/handlers/models/model_filesystem_write_payload.py +70 -0
- omnibase_infra/handlers/models/model_filesystem_write_result.py +55 -0
- omnibase_infra/handlers/models/model_graph_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_handler_response.py +103 -0
- omnibase_infra/handlers/models/model_http_handler_response.py +101 -0
- omnibase_infra/handlers/models/model_manifest_metadata.py +75 -0
- omnibase_infra/handlers/models/model_manifest_persistence_config.py +62 -0
- omnibase_infra/handlers/models/model_manifest_query_payload.py +90 -0
- omnibase_infra/handlers/models/model_manifest_query_result.py +97 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_payload.py +44 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_result.py +98 -0
- omnibase_infra/handlers/models/model_manifest_store_payload.py +47 -0
- omnibase_infra/handlers/models/model_manifest_store_result.py +67 -0
- omnibase_infra/handlers/models/model_operation_context.py +187 -0
- omnibase_infra/handlers/models/model_qdrant_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_retry_state.py +162 -0
- omnibase_infra/handlers/models/model_vault_handler_response.py +98 -0
- omnibase_infra/handlers/models/qdrant/__init__.py +44 -0
- omnibase_infra/handlers/models/qdrant/enum_qdrant_operation_type.py +26 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_collection_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_delete_payload.py +36 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_config.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_payload.py +54 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_result.py +30 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_upsert_payload.py +36 -0
- omnibase_infra/handlers/models/vault/__init__.py +69 -0
- omnibase_infra/handlers/models/vault/enum_vault_operation_type.py +35 -0
- omnibase_infra/handlers/models/vault/model_payload_vault.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_delete_payload.py +57 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_config.py +148 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_payload.py +101 -0
- omnibase_infra/handlers/models/vault/model_vault_list_payload.py +58 -0
- omnibase_infra/handlers/models/vault/model_vault_renew_token_payload.py +67 -0
- omnibase_infra/handlers/models/vault/model_vault_retry_config.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_secret_payload.py +106 -0
- omnibase_infra/handlers/models/vault/model_vault_write_payload.py +66 -0
- omnibase_infra/handlers/models/vault/registry_payload_vault.py +213 -0
- omnibase_infra/handlers/registration_storage/__init__.py +43 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_mock.py +392 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_postgres.py +915 -0
- omnibase_infra/handlers/registration_storage/models/__init__.py +23 -0
- omnibase_infra/handlers/registration_storage/models/model_delete_registration_request.py +58 -0
- omnibase_infra/handlers/registration_storage/models/model_update_registration_request.py +73 -0
- omnibase_infra/handlers/registration_storage/protocol_registration_persistence.py +191 -0
- omnibase_infra/handlers/service_discovery/__init__.py +43 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_consul.py +747 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_mock.py +258 -0
- omnibase_infra/handlers/service_discovery/models/__init__.py +22 -0
- omnibase_infra/handlers/service_discovery/models/model_discovery_result.py +64 -0
- omnibase_infra/handlers/service_discovery/models/model_registration_result.py +138 -0
- omnibase_infra/handlers/service_discovery/models/model_service_info.py +99 -0
- omnibase_infra/handlers/service_discovery/protocol_discovery_operations.py +170 -0
- omnibase_infra/idempotency/__init__.py +94 -0
- omnibase_infra/idempotency/models/__init__.py +43 -0
- omnibase_infra/idempotency/models/model_idempotency_check_result.py +85 -0
- omnibase_infra/idempotency/models/model_idempotency_guard_config.py +130 -0
- omnibase_infra/idempotency/models/model_idempotency_record.py +86 -0
- omnibase_infra/idempotency/models/model_idempotency_store_health_check_result.py +81 -0
- omnibase_infra/idempotency/models/model_idempotency_store_metrics.py +140 -0
- omnibase_infra/idempotency/models/model_postgres_idempotency_store_config.py +299 -0
- omnibase_infra/idempotency/protocol_idempotency_store.py +184 -0
- omnibase_infra/idempotency/store_inmemory.py +265 -0
- omnibase_infra/idempotency/store_postgres.py +923 -0
- omnibase_infra/infrastructure/__init__.py +0 -0
- omnibase_infra/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +655 -0
- omnibase_infra/mixins/mixin_dict_like_accessors.py +146 -0
- omnibase_infra/mixins/mixin_envelope_extraction.py +119 -0
- omnibase_infra/mixins/mixin_node_introspection.py +2465 -0
- omnibase_infra/mixins/mixin_retry_execution.py +386 -0
- omnibase_infra/mixins/protocol_circuit_breaker_aware.py +133 -0
- omnibase_infra/models/__init__.py +136 -0
- omnibase_infra/models/corpus/__init__.py +17 -0
- omnibase_infra/models/corpus/model_capture_config.py +133 -0
- omnibase_infra/models/corpus/model_capture_result.py +86 -0
- omnibase_infra/models/discovery/__init__.py +42 -0
- omnibase_infra/models/discovery/model_dependency_spec.py +319 -0
- omnibase_infra/models/discovery/model_discovered_capabilities.py +50 -0
- omnibase_infra/models/discovery/model_introspection_config.py +311 -0
- omnibase_infra/models/discovery/model_introspection_performance_metrics.py +169 -0
- omnibase_infra/models/discovery/model_introspection_task_config.py +116 -0
- omnibase_infra/models/dispatch/__init__.py +147 -0
- omnibase_infra/models/dispatch/model_dispatch_context.py +439 -0
- omnibase_infra/models/dispatch/model_dispatch_error.py +336 -0
- omnibase_infra/models/dispatch/model_dispatch_log_context.py +400 -0
- omnibase_infra/models/dispatch/model_dispatch_metadata.py +228 -0
- omnibase_infra/models/dispatch/model_dispatch_metrics.py +496 -0
- omnibase_infra/models/dispatch/model_dispatch_outcome.py +317 -0
- omnibase_infra/models/dispatch/model_dispatch_outputs.py +231 -0
- omnibase_infra/models/dispatch/model_dispatch_result.py +436 -0
- omnibase_infra/models/dispatch/model_dispatch_route.py +279 -0
- omnibase_infra/models/dispatch/model_dispatcher_metrics.py +275 -0
- omnibase_infra/models/dispatch/model_dispatcher_registration.py +352 -0
- omnibase_infra/models/dispatch/model_parsed_topic.py +135 -0
- omnibase_infra/models/dispatch/model_topic_parser.py +725 -0
- omnibase_infra/models/dispatch/model_tracing_context.py +285 -0
- omnibase_infra/models/errors/__init__.py +45 -0
- omnibase_infra/models/errors/model_handler_validation_error.py +594 -0
- omnibase_infra/models/errors/model_infra_error_context.py +99 -0
- omnibase_infra/models/errors/model_message_type_registry_error_context.py +71 -0
- omnibase_infra/models/errors/model_timeout_error_context.py +110 -0
- omnibase_infra/models/handlers/__init__.py +37 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +80 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +185 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -0
- omnibase_infra/models/health/__init__.py +9 -0
- omnibase_infra/models/health/model_health_check_result.py +40 -0
- omnibase_infra/models/lifecycle/__init__.py +39 -0
- omnibase_infra/models/logging/__init__.py +51 -0
- omnibase_infra/models/logging/model_log_context.py +756 -0
- omnibase_infra/models/model_retry_error_classification.py +78 -0
- omnibase_infra/models/projection/__init__.py +43 -0
- omnibase_infra/models/projection/model_capability_fields.py +112 -0
- omnibase_infra/models/projection/model_registration_projection.py +434 -0
- omnibase_infra/models/projection/model_registration_snapshot.py +322 -0
- omnibase_infra/models/projection/model_sequence_info.py +182 -0
- omnibase_infra/models/projection/model_snapshot_topic_config.py +590 -0
- omnibase_infra/models/projectors/__init__.py +41 -0
- omnibase_infra/models/projectors/model_projector_column.py +289 -0
- omnibase_infra/models/projectors/model_projector_discovery_result.py +65 -0
- omnibase_infra/models/projectors/model_projector_index.py +270 -0
- omnibase_infra/models/projectors/model_projector_schema.py +415 -0
- omnibase_infra/models/projectors/model_projector_validation_error.py +63 -0
- omnibase_infra/models/projectors/util_sql_identifiers.py +115 -0
- omnibase_infra/models/registration/__init__.py +59 -0
- omnibase_infra/models/registration/commands/__init__.py +15 -0
- omnibase_infra/models/registration/commands/model_node_registration_acked.py +108 -0
- omnibase_infra/models/registration/events/__init__.py +56 -0
- omnibase_infra/models/registration/events/model_node_became_active.py +103 -0
- omnibase_infra/models/registration/events/model_node_liveness_expired.py +103 -0
- omnibase_infra/models/registration/events/model_node_registration_accepted.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_received.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_timed_out.py +112 -0
- omnibase_infra/models/registration/events/model_node_registration_initiated.py +107 -0
- omnibase_infra/models/registration/events/model_node_registration_rejected.py +104 -0
- omnibase_infra/models/registration/model_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +179 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +175 -0
- omnibase_infra/models/registration/model_node_metadata.py +79 -0
- omnibase_infra/models/registration/model_node_registration.py +162 -0
- omnibase_infra/models/registration/model_node_registration_record.py +162 -0
- omnibase_infra/models/registry/__init__.py +29 -0
- omnibase_infra/models/registry/model_domain_constraint.py +202 -0
- omnibase_infra/models/registry/model_message_type_entry.py +271 -0
- omnibase_infra/models/resilience/__init__.py +9 -0
- omnibase_infra/models/resilience/model_circuit_breaker_config.py +227 -0
- omnibase_infra/models/routing/__init__.py +25 -0
- omnibase_infra/models/routing/model_routing_entry.py +52 -0
- omnibase_infra/models/routing/model_routing_subcontract.py +70 -0
- omnibase_infra/models/runtime/__init__.py +40 -0
- omnibase_infra/models/runtime/model_contract_security_config.py +41 -0
- omnibase_infra/models/runtime/model_discovery_error.py +81 -0
- omnibase_infra/models/runtime/model_discovery_result.py +162 -0
- omnibase_infra/models/runtime/model_discovery_warning.py +74 -0
- omnibase_infra/models/runtime/model_failed_plugin_load.py +63 -0
- omnibase_infra/models/runtime/model_handler_contract.py +280 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +120 -0
- omnibase_infra/models/runtime/model_plugin_load_context.py +93 -0
- omnibase_infra/models/runtime/model_plugin_load_summary.py +124 -0
- omnibase_infra/models/security/__init__.py +50 -0
- omnibase_infra/models/security/classification_levels.py +99 -0
- omnibase_infra/models/security/model_environment_policy.py +145 -0
- omnibase_infra/models/security/model_handler_security_policy.py +107 -0
- omnibase_infra/models/security/model_security_error.py +81 -0
- omnibase_infra/models/security/model_security_validation_result.py +328 -0
- omnibase_infra/models/security/model_security_warning.py +67 -0
- omnibase_infra/models/snapshot/__init__.py +27 -0
- omnibase_infra/models/snapshot/model_field_change.py +65 -0
- omnibase_infra/models/snapshot/model_snapshot.py +270 -0
- omnibase_infra/models/snapshot/model_snapshot_diff.py +203 -0
- omnibase_infra/models/snapshot/model_subject_ref.py +81 -0
- omnibase_infra/models/types/__init__.py +71 -0
- omnibase_infra/models/validation/__init__.py +89 -0
- omnibase_infra/models/validation/model_any_type_validation_result.py +118 -0
- omnibase_infra/models/validation/model_any_type_violation.py +141 -0
- omnibase_infra/models/validation/model_category_match_result.py +345 -0
- omnibase_infra/models/validation/model_chain_violation.py +166 -0
- omnibase_infra/models/validation/model_coverage_metrics.py +316 -0
- omnibase_infra/models/validation/model_execution_shape_rule.py +159 -0
- omnibase_infra/models/validation/model_execution_shape_validation.py +208 -0
- omnibase_infra/models/validation/model_execution_shape_validation_result.py +294 -0
- omnibase_infra/models/validation/model_execution_shape_violation.py +122 -0
- omnibase_infra/models/validation/model_localhandler_validation_result.py +139 -0
- omnibase_infra/models/validation/model_localhandler_violation.py +100 -0
- omnibase_infra/models/validation/model_output_validation_params.py +74 -0
- omnibase_infra/models/validation/model_validate_and_raise_params.py +84 -0
- omnibase_infra/models/validation/model_validation_error_params.py +84 -0
- omnibase_infra/models/validation/model_validation_outcome.py +287 -0
- omnibase_infra/nodes/__init__.py +48 -0
- omnibase_infra/nodes/architecture_validator/__init__.py +79 -0
- omnibase_infra/nodes/architecture_validator/contract.yaml +252 -0
- omnibase_infra/nodes/architecture_validator/contract_architecture_validator.yaml +208 -0
- omnibase_infra/nodes/architecture_validator/mixins/__init__.py +16 -0
- omnibase_infra/nodes/architecture_validator/mixins/mixin_file_path_rule.py +92 -0
- omnibase_infra/nodes/architecture_validator/models/__init__.py +36 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_request.py +56 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_result.py +311 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_violation.py +163 -0
- omnibase_infra/nodes/architecture_validator/models/model_rule_check_result.py +265 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_request.py +105 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_result.py +314 -0
- omnibase_infra/nodes/architecture_validator/node.py +262 -0
- omnibase_infra/nodes/architecture_validator/node_architecture_validator.py +383 -0
- omnibase_infra/nodes/architecture_validator/protocols/__init__.py +9 -0
- omnibase_infra/nodes/architecture_validator/protocols/protocol_architecture_rule.py +225 -0
- omnibase_infra/nodes/architecture_validator/registry/__init__.py +28 -0
- omnibase_infra/nodes/architecture_validator/registry/registry_infra_architecture_validator.py +99 -0
- omnibase_infra/nodes/architecture_validator/validators/__init__.py +104 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_direct_dispatch.py +422 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_handler_publishing.py +481 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_orchestrator_fsm.py +491 -0
- omnibase_infra/nodes/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +172 -0
- omnibase_infra/nodes/effects/models/__init__.py +32 -0
- omnibase_infra/nodes/effects/models/model_backend_result.py +190 -0
- omnibase_infra/nodes/effects/models/model_effect_idempotency_config.py +92 -0
- omnibase_infra/nodes/effects/models/model_registry_request.py +132 -0
- omnibase_infra/nodes/effects/models/model_registry_response.py +263 -0
- omnibase_infra/nodes/effects/protocol_consul_client.py +89 -0
- omnibase_infra/nodes/effects/protocol_effect_idempotency_store.py +143 -0
- omnibase_infra/nodes/effects/protocol_postgres_adapter.py +96 -0
- omnibase_infra/nodes/effects/registry_effect.py +525 -0
- omnibase_infra/nodes/effects/store_effect_idempotency_inmemory.py +425 -0
- omnibase_infra/nodes/node_registration_orchestrator/README.md +542 -0
- omnibase_infra/nodes/node_registration_orchestrator/__init__.py +120 -0
- omnibase_infra/nodes/node_registration_orchestrator/contract.yaml +475 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/__init__.py +53 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_introspected.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_registration_acked.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_runtime_tick.py +373 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/__init__.py +62 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_heartbeat.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_introspected.py +609 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_registration_acked.py +458 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_runtime_tick.py +364 -0
- omnibase_infra/nodes/node_registration_orchestrator/introspection_event_router.py +544 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/__init__.py +75 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_intent_payload.py +194 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_registration_intent.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_intent_execution_result.py +50 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_node_liveness_expired.py +107 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_config.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_input.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_output.py +166 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_intent_payload.py +235 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_upsert_intent.py +68 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_execution_result.py +384 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_state.py +60 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registration_intent.py +177 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registry_intent.py +247 -0
- omnibase_infra/nodes/node_registration_orchestrator/node.py +195 -0
- omnibase_infra/nodes/node_registration_orchestrator/plugin.py +909 -0
- omnibase_infra/nodes/node_registration_orchestrator/protocols.py +439 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/registry_infra_node_registration_orchestrator.py +525 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +392 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +742 -0
- omnibase_infra/nodes/node_registration_reducer/__init__.py +15 -0
- omnibase_infra/nodes/node_registration_reducer/contract.yaml +301 -0
- omnibase_infra/nodes/node_registration_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/node_registration_reducer/models/model_validation_result.py +113 -0
- omnibase_infra/nodes/node_registration_reducer/node.py +139 -0
- omnibase_infra/nodes/node_registration_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_registration_reducer/registry/registry_infra_node_registration_reducer.py +79 -0
- omnibase_infra/nodes/node_registration_storage_effect/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_storage_effect/contract.yaml +225 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/__init__.py +44 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_delete_result.py +132 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_record.py +199 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_update.py +155 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_details.py +123 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_result.py +117 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_query.py +100 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_result.py +136 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_upsert_result.py +127 -0
- omnibase_infra/nodes/node_registration_storage_effect/node.py +109 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/__init__.py +22 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/protocol_registration_persistence.py +333 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/__init__.py +23 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/registry_infra_registration_storage.py +194 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +682 -0
- omnibase_infra/nodes/node_registry_effect/handlers/__init__.py +70 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_deregister.py +211 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_register.py +212 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_partial_retry.py +416 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_deactivate.py +215 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_upsert.py +208 -0
- omnibase_infra/nodes/node_registry_effect/models/__init__.py +43 -0
- omnibase_infra/nodes/node_registry_effect/models/model_partial_retry_request.py +92 -0
- omnibase_infra/nodes/node_registry_effect/node.py +165 -0
- omnibase_infra/nodes/node_registry_effect/registry/__init__.py +27 -0
- omnibase_infra/nodes/node_registry_effect/registry/registry_infra_registry_effect.py +196 -0
- omnibase_infra/nodes/node_service_discovery_effect/__init__.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/contract.yaml +246 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/__init__.py +67 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_health_status.py +72 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_service_discovery_operation.py +58 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_query.py +99 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_result.py +98 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_health_check_config.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_query_metadata.py +63 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_registration_result.py +130 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_details.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_result.py +119 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_info.py +106 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_registration.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/node.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/__init__.py +14 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/protocol_discovery_operations.py +279 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/__init__.py +13 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/registry_infra_service_discovery.py +214 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +32 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +76 -0
- omnibase_infra/nodes/reducers/models/model_payload_postgres_upsert_registration.py +60 -0
- omnibase_infra/nodes/reducers/models/model_registration_confirmation.py +166 -0
- omnibase_infra/nodes/reducers/models/model_registration_state.py +433 -0
- omnibase_infra/nodes/reducers/registration_reducer.py +1137 -0
- omnibase_infra/observability/__init__.py +143 -0
- omnibase_infra/observability/constants_metrics.py +91 -0
- omnibase_infra/observability/factory_observability_sink.py +525 -0
- omnibase_infra/observability/handlers/__init__.py +118 -0
- omnibase_infra/observability/handlers/handler_logging_structured.py +967 -0
- omnibase_infra/observability/handlers/handler_metrics_prometheus.py +1120 -0
- omnibase_infra/observability/handlers/model_logging_handler_config.py +71 -0
- omnibase_infra/observability/handlers/model_logging_handler_response.py +77 -0
- omnibase_infra/observability/handlers/model_metrics_handler_config.py +172 -0
- omnibase_infra/observability/handlers/model_metrics_handler_payload.py +135 -0
- omnibase_infra/observability/handlers/model_metrics_handler_response.py +101 -0
- omnibase_infra/observability/hooks/__init__.py +74 -0
- omnibase_infra/observability/hooks/hook_observability.py +1223 -0
- omnibase_infra/observability/models/__init__.py +30 -0
- omnibase_infra/observability/models/enum_required_log_context_key.py +77 -0
- omnibase_infra/observability/models/model_buffered_log_entry.py +117 -0
- omnibase_infra/observability/models/model_logging_sink_config.py +73 -0
- omnibase_infra/observability/models/model_metrics_sink_config.py +156 -0
- omnibase_infra/observability/sinks/__init__.py +69 -0
- omnibase_infra/observability/sinks/sink_logging_structured.py +809 -0
- omnibase_infra/observability/sinks/sink_metrics_prometheus.py +710 -0
- omnibase_infra/plugins/__init__.py +27 -0
- omnibase_infra/plugins/examples/__init__.py +28 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer.py +271 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer_error_handling.py +210 -0
- omnibase_infra/plugins/models/__init__.py +21 -0
- omnibase_infra/plugins/models/model_plugin_context.py +76 -0
- omnibase_infra/plugins/models/model_plugin_input_data.py +58 -0
- omnibase_infra/plugins/models/model_plugin_output_data.py +62 -0
- omnibase_infra/plugins/plugin_compute_base.py +435 -0
- omnibase_infra/projectors/__init__.py +30 -0
- omnibase_infra/projectors/contracts/__init__.py +63 -0
- omnibase_infra/projectors/contracts/registration_projector.yaml +370 -0
- omnibase_infra/projectors/projection_reader_registration.py +1559 -0
- omnibase_infra/projectors/snapshot_publisher_registration.py +1329 -0
- omnibase_infra/protocols/__init__.py +99 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -0
- omnibase_infra/protocols/protocol_event_bus_like.py +127 -0
- omnibase_infra/protocols/protocol_event_projector.py +96 -0
- omnibase_infra/protocols/protocol_idempotency_store.py +142 -0
- omnibase_infra/protocols/protocol_message_dispatcher.py +247 -0
- omnibase_infra/protocols/protocol_message_type_registry.py +306 -0
- omnibase_infra/protocols/protocol_plugin_compute.py +368 -0
- omnibase_infra/protocols/protocol_projector_schema_validator.py +82 -0
- omnibase_infra/protocols/protocol_registry_metrics.py +215 -0
- omnibase_infra/protocols/protocol_snapshot_publisher.py +396 -0
- omnibase_infra/protocols/protocol_snapshot_store.py +567 -0
- omnibase_infra/runtime/__init__.py +296 -0
- omnibase_infra/runtime/binding_config_resolver.py +2706 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/contract_handler_discovery.py +582 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +42 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -0
- omnibase_infra/runtime/enums/__init__.py +18 -0
- omnibase_infra/runtime/enums/enum_config_ref_scheme.py +33 -0
- omnibase_infra/runtime/enums/enum_scheduler_status.py +170 -0
- omnibase_infra/runtime/envelope_validator.py +179 -0
- omnibase_infra/runtime/handler_contract_source.py +669 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2029 -0
- omnibase_infra/runtime/handler_registry.py +321 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +378 -0
- omnibase_infra/runtime/mixins/__init__.py +17 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +757 -0
- omnibase_infra/runtime/models/__init__.py +192 -0
- omnibase_infra/runtime/models/model_batch_lifecycle_result.py +217 -0
- omnibase_infra/runtime/models/model_binding_config.py +168 -0
- omnibase_infra/runtime/models/model_binding_config_cache_stats.py +135 -0
- omnibase_infra/runtime/models/model_binding_config_resolver_config.py +329 -0
- omnibase_infra/runtime/models/model_cached_secret.py +138 -0
- omnibase_infra/runtime/models/model_compute_key.py +138 -0
- omnibase_infra/runtime/models/model_compute_registration.py +97 -0
- omnibase_infra/runtime/models/model_config_cache_entry.py +61 -0
- omnibase_infra/runtime/models/model_config_ref.py +331 -0
- omnibase_infra/runtime/models/model_config_ref_parse_result.py +125 -0
- omnibase_infra/runtime/models/model_domain_plugin_config.py +92 -0
- omnibase_infra/runtime/models/model_domain_plugin_result.py +270 -0
- omnibase_infra/runtime/models/model_duplicate_response.py +54 -0
- omnibase_infra/runtime/models/model_enabled_protocols_config.py +61 -0
- omnibase_infra/runtime/models/model_event_bus_config.py +54 -0
- omnibase_infra/runtime/models/model_failed_component.py +55 -0
- omnibase_infra/runtime/models/model_health_check_response.py +168 -0
- omnibase_infra/runtime/models/model_health_check_result.py +228 -0
- omnibase_infra/runtime/models/model_lifecycle_result.py +245 -0
- omnibase_infra/runtime/models/model_logging_config.py +42 -0
- omnibase_infra/runtime/models/model_optional_correlation_id.py +167 -0
- omnibase_infra/runtime/models/model_optional_string.py +94 -0
- omnibase_infra/runtime/models/model_optional_uuid.py +110 -0
- omnibase_infra/runtime/models/model_policy_context.py +100 -0
- omnibase_infra/runtime/models/model_policy_key.py +138 -0
- omnibase_infra/runtime/models/model_policy_registration.py +139 -0
- omnibase_infra/runtime/models/model_policy_result.py +103 -0
- omnibase_infra/runtime/models/model_policy_type_filter.py +157 -0
- omnibase_infra/runtime/models/model_projector_plugin_loader_config.py +47 -0
- omnibase_infra/runtime/models/model_protocol_registration_config.py +65 -0
- omnibase_infra/runtime/models/model_retry_policy.py +105 -0
- omnibase_infra/runtime/models/model_runtime_config.py +150 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_config.py +624 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_metrics.py +233 -0
- omnibase_infra/runtime/models/model_runtime_tick.py +193 -0
- omnibase_infra/runtime/models/model_secret_cache_stats.py +82 -0
- omnibase_infra/runtime/models/model_secret_mapping.py +63 -0
- omnibase_infra/runtime/models/model_secret_resolver_config.py +107 -0
- omnibase_infra/runtime/models/model_secret_resolver_metrics.py +111 -0
- omnibase_infra/runtime/models/model_secret_source_info.py +72 -0
- omnibase_infra/runtime/models/model_secret_source_spec.py +66 -0
- omnibase_infra/runtime/models/model_shutdown_batch_result.py +75 -0
- omnibase_infra/runtime/models/model_shutdown_config.py +94 -0
- omnibase_infra/runtime/projector_plugin_loader.py +1462 -0
- omnibase_infra/runtime/projector_schema_manager.py +565 -0
- omnibase_infra/runtime/projector_shell.py +1102 -0
- omnibase_infra/runtime/protocol_contract_descriptor.py +92 -0
- omnibase_infra/runtime/protocol_contract_source.py +92 -0
- omnibase_infra/runtime/protocol_domain_plugin.py +474 -0
- omnibase_infra/runtime/protocol_handler_discovery.py +221 -0
- omnibase_infra/runtime/protocol_handler_plugin_loader.py +327 -0
- omnibase_infra/runtime/protocol_lifecycle_executor.py +435 -0
- omnibase_infra/runtime/protocol_policy.py +366 -0
- omnibase_infra/runtime/protocols/__init__.py +27 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -0
- omnibase_infra/runtime/registry/__init__.py +93 -0
- omnibase_infra/runtime/registry/mixin_message_type_query.py +326 -0
- omnibase_infra/runtime/registry/mixin_message_type_registration.py +354 -0
- omnibase_infra/runtime/registry/registry_event_bus_binding.py +268 -0
- omnibase_infra/runtime/registry/registry_message_type.py +542 -0
- omnibase_infra/runtime/registry/registry_protocol_binding.py +444 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1502 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2110 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1573 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +1805 -0
- omnibase_infra/runtime/service_runtime_host_process.py +2260 -0
- omnibase_infra/runtime/util_container_wiring.py +1123 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +566 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/services/__init__.py +68 -0
- omnibase_infra/services/corpus_capture.py +678 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +897 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +682 -0
- omnibase_infra/services/service_timeout_scanner.py +390 -0
- omnibase_infra/services/snapshot/__init__.py +31 -0
- omnibase_infra/services/snapshot/service_snapshot.py +647 -0
- omnibase_infra/services/snapshot/store_inmemory.py +637 -0
- omnibase_infra/services/snapshot/store_postgres.py +1279 -0
- omnibase_infra/shared/__init__.py +8 -0
- omnibase_infra/testing/__init__.py +10 -0
- omnibase_infra/testing/utils.py +23 -0
- omnibase_infra/types/__init__.py +48 -0
- omnibase_infra/types/type_cache_info.py +49 -0
- omnibase_infra/types/type_dsn.py +173 -0
- omnibase_infra/types/type_infra_aliases.py +60 -0
- omnibase_infra/types/typed_dict/__init__.py +21 -0
- omnibase_infra/types/typed_dict/typed_dict_introspection_cache.py +128 -0
- omnibase_infra/types/typed_dict/typed_dict_performance_metrics_cache.py +140 -0
- omnibase_infra/types/typed_dict_capabilities.py +64 -0
- omnibase_infra/utils/__init__.py +89 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_datetime.py +372 -0
- omnibase_infra/utils/util_dsn_validation.py +333 -0
- omnibase_infra/utils/util_env_parsing.py +264 -0
- omnibase_infra/utils/util_error_sanitization.py +457 -0
- omnibase_infra/utils/util_pydantic_validators.py +477 -0
- omnibase_infra/utils/util_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -0
- omnibase_infra/validation/enums/__init__.py +11 -0
- omnibase_infra/validation/enums/enum_contract_violation_severity.py +13 -0
- omnibase_infra/validation/infra_validators.py +1486 -0
- omnibase_infra/validation/linter_contract.py +907 -0
- omnibase_infra/validation/mixin_any_type_classification.py +120 -0
- omnibase_infra/validation/mixin_any_type_exemption.py +580 -0
- omnibase_infra/validation/mixin_any_type_reporting.py +106 -0
- omnibase_infra/validation/mixin_execution_shape_violation_checks.py +596 -0
- omnibase_infra/validation/mixin_node_archetype_detection.py +254 -0
- omnibase_infra/validation/models/__init__.py +15 -0
- omnibase_infra/validation/models/model_contract_lint_result.py +101 -0
- omnibase_infra/validation/models/model_contract_violation.py +41 -0
- omnibase_infra/validation/service_validation_aggregator.py +395 -0
- omnibase_infra/validation/validation_exemptions.yaml +1710 -0
- omnibase_infra/validation/validator_any_type.py +715 -0
- omnibase_infra/validation/validator_chain_propagation.py +839 -0
- omnibase_infra/validation/validator_execution_shape.py +465 -0
- omnibase_infra/validation/validator_localhandler.py +261 -0
- omnibase_infra/validation/validator_registration_security.py +410 -0
- omnibase_infra/validation/validator_routing_coverage.py +1020 -0
- omnibase_infra/validation/validator_runtime_shape.py +915 -0
- omnibase_infra/validation/validator_security.py +410 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.1.dist-info/METADATA +197 -0
- omnibase_infra-0.2.1.dist-info/RECORD +675 -0
- omnibase_infra-0.2.1.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.1.dist-info/entry_points.txt +4 -0
- omnibase_infra-0.2.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,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,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
|
+
]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""TypedDict definitions for omnibase_infra.
|
|
4
|
+
|
|
5
|
+
This package contains TypedDict definitions that represent JSON-serialized
|
|
6
|
+
forms of Pydantic models, enabling proper type checking for cache operations
|
|
7
|
+
and JSON serialization/deserialization without requiring type: ignore comments.
|
|
8
|
+
|
|
9
|
+
Available TypedDicts:
|
|
10
|
+
- TypedDictIntrospectionCache: JSON-serialized ModelNodeIntrospectionEvent
|
|
11
|
+
- TypedDictPerformanceMetricsCache: JSON-serialized introspection performance metrics
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from omnibase_infra.types.typed_dict.typed_dict_introspection_cache import (
|
|
15
|
+
TypedDictIntrospectionCache,
|
|
16
|
+
)
|
|
17
|
+
from omnibase_infra.types.typed_dict.typed_dict_performance_metrics_cache import (
|
|
18
|
+
TypedDictPerformanceMetricsCache,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
__all__ = ["TypedDictIntrospectionCache", "TypedDictPerformanceMetricsCache"]
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""TypedDict definition for JSON-serialized introspection cache data.
|
|
4
|
+
|
|
5
|
+
This module provides a TypedDict that represents the JSON-serialized form of
|
|
6
|
+
ModelNodeIntrospectionEvent, enabling proper type checking for cache operations
|
|
7
|
+
without requiring type: ignore comments.
|
|
8
|
+
|
|
9
|
+
The TypedDictIntrospectionCache matches the output of
|
|
10
|
+
ModelNodeIntrospectionEvent.model_dump(mode="json"), providing a typed interface
|
|
11
|
+
for working with cached introspection data.
|
|
12
|
+
|
|
13
|
+
Key Features:
|
|
14
|
+
- Full type annotations for all introspection event fields
|
|
15
|
+
- Proper handling of serialized datetime (ISO string format)
|
|
16
|
+
- Proper handling of serialized UUID (string format)
|
|
17
|
+
- Integration with TypedDictCapabilities for nested capabilities structure
|
|
18
|
+
- Integration with TypedDictPerformanceMetricsCache for performance metrics
|
|
19
|
+
|
|
20
|
+
Usage:
|
|
21
|
+
This TypedDict is primarily used for:
|
|
22
|
+
- Typing cache storage for introspection data
|
|
23
|
+
- Type-safe JSON deserialization of introspection events
|
|
24
|
+
- Avoiding type: ignore comments in cache operations
|
|
25
|
+
|
|
26
|
+
Example:
|
|
27
|
+
```python
|
|
28
|
+
from omnibase_infra.types.typed_dict import TypedDictIntrospectionCache
|
|
29
|
+
|
|
30
|
+
# Cache storage with proper typing
|
|
31
|
+
cache: TypedDictIntrospectionCache | None = None
|
|
32
|
+
|
|
33
|
+
def store_introspection(event: ModelNodeIntrospectionEvent) -> None:
|
|
34
|
+
global cache
|
|
35
|
+
# model_dump(mode="json") returns data matching TypedDictIntrospectionCache
|
|
36
|
+
cache = event.model_dump(mode="json")
|
|
37
|
+
|
|
38
|
+
def get_cached_node_id() -> str | None:
|
|
39
|
+
if cache is not None:
|
|
40
|
+
return cache["node_id"] # Type-safe access
|
|
41
|
+
return None
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
See Also:
|
|
45
|
+
- TypedDictCapabilities: Nested structure for capability information
|
|
46
|
+
- TypedDictPerformanceMetricsCache: Nested structure for performance metrics
|
|
47
|
+
- ModelNodeIntrospectionEvent: Source Pydantic model for introspection events
|
|
48
|
+
- MixinNodeIntrospection: Primary consumer of this TypedDict
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
from __future__ import annotations
|
|
52
|
+
|
|
53
|
+
from typing import TypedDict
|
|
54
|
+
|
|
55
|
+
from omnibase_infra.types.typed_dict.typed_dict_performance_metrics_cache import (
|
|
56
|
+
TypedDictPerformanceMetricsCache,
|
|
57
|
+
)
|
|
58
|
+
from omnibase_infra.types.typed_dict_capabilities import TypedDictCapabilities
|
|
59
|
+
|
|
60
|
+
__all__ = ["TypedDictIntrospectionCache"]
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class TypedDictIntrospectionCache(TypedDict):
|
|
64
|
+
"""TypedDict representing the JSON-serialized ModelNodeIntrospectionEvent.
|
|
65
|
+
|
|
66
|
+
This type matches the output of ModelNodeIntrospectionEvent.model_dump(mode="json"),
|
|
67
|
+
enabling proper type checking for cache operations without requiring type: ignore
|
|
68
|
+
comments.
|
|
69
|
+
|
|
70
|
+
The TypedDict provides a typed interface for working with introspection cache data,
|
|
71
|
+
ensuring type safety when accessing fields from cached introspection events.
|
|
72
|
+
|
|
73
|
+
Attributes:
|
|
74
|
+
node_id: Unique identifier for the node (UUID serialized to string).
|
|
75
|
+
node_type: The type classification of the node (e.g., "EFFECT", "COMPUTE").
|
|
76
|
+
capabilities: Nested structure containing node capabilities information.
|
|
77
|
+
Uses TypedDictCapabilities which includes operations, protocols,
|
|
78
|
+
has_fsm flag, and method_signatures.
|
|
79
|
+
endpoints: Dictionary mapping endpoint names to their URLs.
|
|
80
|
+
Common keys include "health", "api", and "metrics".
|
|
81
|
+
current_state: Current FSM state if applicable, None otherwise.
|
|
82
|
+
Represents the node's finite state machine state.
|
|
83
|
+
version: Semantic version string of the node.
|
|
84
|
+
reason: The reason for the introspection event (e.g., "startup", "shutdown",
|
|
85
|
+
"heartbeat", "request").
|
|
86
|
+
correlation_id: Optional correlation ID for request tracing.
|
|
87
|
+
UUID serializes to string in JSON mode, may be None.
|
|
88
|
+
timestamp: ISO 8601 formatted datetime string indicating when the
|
|
89
|
+
introspection event was created.
|
|
90
|
+
performance_metrics: Optional performance metrics from the introspection
|
|
91
|
+
operation. Contains timing information for capability discovery,
|
|
92
|
+
endpoint gathering, and state retrieval. May be None if metrics
|
|
93
|
+
were not captured.
|
|
94
|
+
|
|
95
|
+
Note:
|
|
96
|
+
The capabilities field uses TypedDictCapabilities for type safety.
|
|
97
|
+
When serialized to JSON, the structure is:
|
|
98
|
+
- operations (list[str]): Discovered operation method names
|
|
99
|
+
- protocols (list[str]): Implemented protocol names
|
|
100
|
+
- has_fsm (bool): Whether the node has FSM capabilities
|
|
101
|
+
- method_signatures (dict[str, str]): Method name to signature mapping
|
|
102
|
+
|
|
103
|
+
Example:
|
|
104
|
+
```python
|
|
105
|
+
# Type-safe cache access
|
|
106
|
+
cache: TypedDictIntrospectionCache = event.model_dump(mode="json")
|
|
107
|
+
|
|
108
|
+
# All field access is type-checked
|
|
109
|
+
node_id: str = cache["node_id"]
|
|
110
|
+
capabilities: TypedDictCapabilities = cache["capabilities"]
|
|
111
|
+
operations: list[str] = capabilities["operations"]
|
|
112
|
+
|
|
113
|
+
# Nullable fields properly typed
|
|
114
|
+
state: str | None = cache["current_state"]
|
|
115
|
+
metrics: TypedDictPerformanceMetricsCache | None = cache["performance_metrics"]
|
|
116
|
+
```
|
|
117
|
+
"""
|
|
118
|
+
|
|
119
|
+
node_id: str
|
|
120
|
+
node_type: str
|
|
121
|
+
capabilities: TypedDictCapabilities
|
|
122
|
+
endpoints: dict[str, str]
|
|
123
|
+
current_state: str | None
|
|
124
|
+
version: str
|
|
125
|
+
reason: str
|
|
126
|
+
correlation_id: str | None # UUID serializes to string in JSON mode
|
|
127
|
+
timestamp: str # datetime serializes to ISO string in JSON mode
|
|
128
|
+
performance_metrics: TypedDictPerformanceMetricsCache | None
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Copyright 2025 OmniNode Team. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
"""TypedDict for JSON-serialized performance metrics cache.
|
|
4
|
+
|
|
5
|
+
This module provides a TypedDict that matches the JSON output of
|
|
6
|
+
ModelIntrospectionPerformanceMetrics.model_dump(mode="json"), enabling
|
|
7
|
+
proper type checking for cached performance metrics without runtime
|
|
8
|
+
validation overhead.
|
|
9
|
+
|
|
10
|
+
The TypedDict is used for:
|
|
11
|
+
- Type-safe cache operations for performance metrics
|
|
12
|
+
- Avoiding type: ignore comments when working with serialized metrics
|
|
13
|
+
- Static type checking of JSON-structured performance data
|
|
14
|
+
- Documentation of the expected cache entry shape
|
|
15
|
+
|
|
16
|
+
Related Models:
|
|
17
|
+
- ModelIntrospectionPerformanceMetrics: The Pydantic source model
|
|
18
|
+
- MixinNodeIntrospection: Uses this for caching introspection metrics
|
|
19
|
+
|
|
20
|
+
Example:
|
|
21
|
+
```python
|
|
22
|
+
from omnibase_infra.types.typed_dict import TypedDictPerformanceMetricsCache
|
|
23
|
+
|
|
24
|
+
def get_cached_metrics() -> TypedDictPerformanceMetricsCache | None:
|
|
25
|
+
cache_entry = cache.get("metrics")
|
|
26
|
+
if cache_entry is not None:
|
|
27
|
+
# Type checker knows the shape without runtime validation
|
|
28
|
+
return cache_entry
|
|
29
|
+
return None
|
|
30
|
+
|
|
31
|
+
metrics = get_cached_metrics()
|
|
32
|
+
if metrics:
|
|
33
|
+
print(f"Total time: {metrics['total_introspection_ms']}ms")
|
|
34
|
+
if metrics.get('threshold_exceeded'):
|
|
35
|
+
print(f"Slow ops: {metrics.get('slow_operations', [])}")
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Note:
|
|
39
|
+
This TypedDict uses `total=True` (default) because the source Pydantic
|
|
40
|
+
model `ModelIntrospectionPerformanceMetrics` has defaults for all fields,
|
|
41
|
+
ensuring that `model_dump(mode="json")` always produces complete JSON
|
|
42
|
+
with all fields present. Type checkers will require all fields when
|
|
43
|
+
constructing dict literals, which matches the actual runtime behavior.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
from typing import TypedDict
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class TypedDictPerformanceMetricsCache(TypedDict):
|
|
50
|
+
"""TypedDict for JSON-serialized ModelIntrospectionPerformanceMetrics.
|
|
51
|
+
|
|
52
|
+
This type matches the output of ModelIntrospectionPerformanceMetrics.model_dump(mode="json"),
|
|
53
|
+
enabling proper type checking for cached performance metrics.
|
|
54
|
+
|
|
55
|
+
All fields are required (total=True, the default) because the source Pydantic
|
|
56
|
+
model has defaults for all fields, ensuring model_dump() always produces
|
|
57
|
+
complete JSON output with all fields present.
|
|
58
|
+
|
|
59
|
+
Attributes:
|
|
60
|
+
get_capabilities_ms: Time taken by get_capabilities() in milliseconds.
|
|
61
|
+
Threshold: <50ms for acceptable performance.
|
|
62
|
+
discover_capabilities_ms: Time taken by _discover_capabilities() in milliseconds.
|
|
63
|
+
Threshold: <30ms for acceptable performance.
|
|
64
|
+
get_endpoints_ms: Time taken by get_endpoints() in milliseconds.
|
|
65
|
+
This operation is typically fast (<1ms) as it returns static data.
|
|
66
|
+
get_current_state_ms: Time taken by get_current_state() in milliseconds.
|
|
67
|
+
This operation is typically fast (<1ms) for simple state retrieval.
|
|
68
|
+
total_introspection_ms: Total time for get_introspection_data() in milliseconds.
|
|
69
|
+
Threshold: <50ms for acceptable performance.
|
|
70
|
+
cache_hit: Whether the result was served from cache.
|
|
71
|
+
Cache hits should complete in <1ms.
|
|
72
|
+
method_count: Number of methods discovered during reflection.
|
|
73
|
+
Higher counts may correlate with longer discover_capabilities_ms times.
|
|
74
|
+
threshold_exceeded: Whether any operation exceeded performance thresholds.
|
|
75
|
+
True indicates potential performance degradation.
|
|
76
|
+
slow_operations: List of operation names that exceeded their thresholds.
|
|
77
|
+
Possible values: 'get_capabilities', 'discover_capabilities',
|
|
78
|
+
'total_introspection', 'cache_hit'.
|
|
79
|
+
captured_at: UTC timestamp when metrics were captured (ISO 8601 string).
|
|
80
|
+
Datetime serializes to ISO string format in JSON mode.
|
|
81
|
+
|
|
82
|
+
Example:
|
|
83
|
+
```python
|
|
84
|
+
from omnibase_infra.types.typed_dict import TypedDictPerformanceMetricsCache
|
|
85
|
+
|
|
86
|
+
# Type-safe cache dictionary
|
|
87
|
+
cache: dict[str, TypedDictPerformanceMetricsCache] = {}
|
|
88
|
+
|
|
89
|
+
# Store metrics
|
|
90
|
+
cache["node-123"] = {
|
|
91
|
+
"get_capabilities_ms": 12.5,
|
|
92
|
+
"discover_capabilities_ms": 8.2,
|
|
93
|
+
"get_endpoints_ms": 0.5,
|
|
94
|
+
"get_current_state_ms": 0.1,
|
|
95
|
+
"total_introspection_ms": 21.3,
|
|
96
|
+
"cache_hit": False,
|
|
97
|
+
"method_count": 15,
|
|
98
|
+
"threshold_exceeded": False,
|
|
99
|
+
"slow_operations": [],
|
|
100
|
+
"captured_at": "2025-01-15T10:30:00Z",
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
# Retrieve with full type safety
|
|
104
|
+
if entry := cache.get("node-123"):
|
|
105
|
+
total_ms = entry.get("total_introspection_ms", 0.0)
|
|
106
|
+
if entry.get("threshold_exceeded"):
|
|
107
|
+
slow_ops = entry.get("slow_operations", [])
|
|
108
|
+
print(f"Performance degradation: {slow_ops}")
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Performance Thresholds:
|
|
112
|
+
The following thresholds are defined as module-level constants in:
|
|
113
|
+
src/omnibase_infra/mixins/mixin_node_introspection.py
|
|
114
|
+
|
|
115
|
+
Constants (SOURCE OF TRUTH - update this docstring if values change):
|
|
116
|
+
- PERF_THRESHOLD_GET_CAPABILITIES_MS: 50.0ms
|
|
117
|
+
- PERF_THRESHOLD_DISCOVER_CAPABILITIES_MS: 30.0ms
|
|
118
|
+
- PERF_THRESHOLD_GET_INTROSPECTION_DATA_MS: 50.0ms
|
|
119
|
+
- PERF_THRESHOLD_CACHE_HIT_MS: 1.0ms
|
|
120
|
+
|
|
121
|
+
Summary:
|
|
122
|
+
- get_capabilities: <50ms
|
|
123
|
+
- discover_capabilities: <30ms
|
|
124
|
+
- total_introspection: <50ms
|
|
125
|
+
- cache_hit: <1ms
|
|
126
|
+
"""
|
|
127
|
+
|
|
128
|
+
get_capabilities_ms: float
|
|
129
|
+
discover_capabilities_ms: float
|
|
130
|
+
get_endpoints_ms: float
|
|
131
|
+
get_current_state_ms: float
|
|
132
|
+
total_introspection_ms: float
|
|
133
|
+
cache_hit: bool
|
|
134
|
+
method_count: int
|
|
135
|
+
threshold_exceeded: bool
|
|
136
|
+
slow_operations: list[str]
|
|
137
|
+
captured_at: str # datetime serializes to ISO string in JSON mode
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
__all__ = ["TypedDictPerformanceMetricsCache"]
|