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,233 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""
|
|
4
|
+
Runtime Scheduler Metrics Model.
|
|
5
|
+
|
|
6
|
+
This module provides the Pydantic model for tracking runtime scheduler performance
|
|
7
|
+
and operational metrics. Used for monitoring tick emission reliability, timing
|
|
8
|
+
performance, and scheduler health.
|
|
9
|
+
|
|
10
|
+
Metrics Categories:
|
|
11
|
+
- Tick Counts: Total ticks emitted and failed
|
|
12
|
+
- Timing Metrics: Duration tracking for individual ticks
|
|
13
|
+
- Sequence Tracking: For restart-safety and exactly-once semantics
|
|
14
|
+
- Circuit Breaker: Failure tolerance state
|
|
15
|
+
- Uptime: Scheduler operational duration
|
|
16
|
+
|
|
17
|
+
Thread Safety:
|
|
18
|
+
This model is immutable (frozen=True) and safe to share across threads.
|
|
19
|
+
Create new instances for updated metrics using model_copy(update={...}).
|
|
20
|
+
|
|
21
|
+
Example:
|
|
22
|
+
>>> from datetime import datetime, timezone
|
|
23
|
+
>>> # Use explicit timestamps for deterministic behavior
|
|
24
|
+
>>> last_tick = datetime(2025, 1, 15, 12, 0, 0, tzinfo=timezone.utc)
|
|
25
|
+
>>> metrics = ModelRuntimeSchedulerMetrics(
|
|
26
|
+
... scheduler_id="scheduler-001",
|
|
27
|
+
... ticks_emitted=100,
|
|
28
|
+
... last_tick_at=last_tick,
|
|
29
|
+
... )
|
|
30
|
+
>>> print(metrics.tick_success_rate())
|
|
31
|
+
1.0
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
from __future__ import annotations
|
|
35
|
+
|
|
36
|
+
from datetime import datetime
|
|
37
|
+
|
|
38
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
39
|
+
|
|
40
|
+
from omnibase_infra.runtime.enums import EnumSchedulerStatus
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class ModelRuntimeSchedulerMetrics(BaseModel):
|
|
44
|
+
"""Metrics for runtime scheduler operation.
|
|
45
|
+
|
|
46
|
+
Tracks tick emission performance, reliability, and operational state
|
|
47
|
+
of the ONEX runtime scheduler. These metrics are essential for
|
|
48
|
+
monitoring scheduler health and identifying performance issues.
|
|
49
|
+
|
|
50
|
+
Attributes:
|
|
51
|
+
scheduler_id: Unique identifier for this scheduler instance
|
|
52
|
+
status: Current operational status of the scheduler
|
|
53
|
+
ticks_emitted: Total number of ticks successfully emitted
|
|
54
|
+
ticks_failed: Total number of tick emissions that failed
|
|
55
|
+
last_tick_at: Timestamp of the most recent tick emission
|
|
56
|
+
last_tick_duration_ms: Duration of the most recent tick in milliseconds
|
|
57
|
+
average_tick_duration_ms: Rolling average tick duration in milliseconds
|
|
58
|
+
max_tick_duration_ms: Maximum tick duration observed in milliseconds
|
|
59
|
+
current_sequence_number: Current tick sequence number
|
|
60
|
+
last_persisted_sequence: Last sequence number persisted for restart-safety
|
|
61
|
+
circuit_breaker_open: Whether the circuit breaker is currently open
|
|
62
|
+
consecutive_failures: Number of consecutive tick failures
|
|
63
|
+
started_at: Timestamp when the scheduler started
|
|
64
|
+
total_uptime_seconds: Total scheduler uptime in seconds
|
|
65
|
+
|
|
66
|
+
Example:
|
|
67
|
+
>>> from datetime import datetime, timezone
|
|
68
|
+
>>> metrics = ModelRuntimeSchedulerMetrics(
|
|
69
|
+
... scheduler_id="prod-scheduler-001",
|
|
70
|
+
... ticks_emitted=1000,
|
|
71
|
+
... ticks_failed=5,
|
|
72
|
+
... average_tick_duration_ms=0.5,
|
|
73
|
+
... )
|
|
74
|
+
>>> metrics.tick_success_rate()
|
|
75
|
+
0.995...
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
model_config = ConfigDict(
|
|
79
|
+
frozen=True,
|
|
80
|
+
extra="forbid",
|
|
81
|
+
strict=True,
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
# Scheduler identification
|
|
85
|
+
scheduler_id: str = Field(
|
|
86
|
+
...,
|
|
87
|
+
description="Unique identifier for this scheduler instance",
|
|
88
|
+
min_length=1,
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
# Current status
|
|
92
|
+
status: EnumSchedulerStatus = Field(
|
|
93
|
+
default=EnumSchedulerStatus.STOPPED,
|
|
94
|
+
description="Current operational status of the scheduler",
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
# Tick counts
|
|
98
|
+
ticks_emitted: int = Field(
|
|
99
|
+
default=0,
|
|
100
|
+
ge=0,
|
|
101
|
+
description="Total number of ticks successfully emitted",
|
|
102
|
+
)
|
|
103
|
+
ticks_failed: int = Field(
|
|
104
|
+
default=0,
|
|
105
|
+
ge=0,
|
|
106
|
+
description="Total number of tick emissions that failed",
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
# Timing metrics (milliseconds)
|
|
110
|
+
last_tick_at: datetime | None = Field(
|
|
111
|
+
default=None,
|
|
112
|
+
description="Timestamp of the most recent tick emission",
|
|
113
|
+
)
|
|
114
|
+
last_tick_duration_ms: float = Field(
|
|
115
|
+
default=0.0,
|
|
116
|
+
ge=0.0,
|
|
117
|
+
description="Duration of the most recent tick in milliseconds",
|
|
118
|
+
)
|
|
119
|
+
average_tick_duration_ms: float = Field(
|
|
120
|
+
default=0.0,
|
|
121
|
+
ge=0.0,
|
|
122
|
+
description="Rolling average tick duration in milliseconds",
|
|
123
|
+
)
|
|
124
|
+
max_tick_duration_ms: float = Field(
|
|
125
|
+
default=0.0,
|
|
126
|
+
ge=0.0,
|
|
127
|
+
description="Maximum tick duration observed in milliseconds",
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
# Sequence tracking (for restart-safety)
|
|
131
|
+
current_sequence_number: int = Field(
|
|
132
|
+
default=0,
|
|
133
|
+
ge=0,
|
|
134
|
+
description="Current tick sequence number",
|
|
135
|
+
)
|
|
136
|
+
last_persisted_sequence: int = Field(
|
|
137
|
+
default=0,
|
|
138
|
+
ge=0,
|
|
139
|
+
description="Last sequence number persisted for restart-safety",
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
# Circuit breaker state
|
|
143
|
+
circuit_breaker_open: bool = Field(
|
|
144
|
+
default=False,
|
|
145
|
+
description="Whether the circuit breaker is currently open",
|
|
146
|
+
)
|
|
147
|
+
consecutive_failures: int = Field(
|
|
148
|
+
default=0,
|
|
149
|
+
ge=0,
|
|
150
|
+
description="Number of consecutive tick failures",
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
# Uptime tracking
|
|
154
|
+
started_at: datetime | None = Field(
|
|
155
|
+
default=None,
|
|
156
|
+
description="Timestamp when the scheduler started",
|
|
157
|
+
)
|
|
158
|
+
total_uptime_seconds: float = Field(
|
|
159
|
+
default=0.0,
|
|
160
|
+
ge=0.0,
|
|
161
|
+
description="Total scheduler uptime in seconds",
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
def tick_success_rate(self) -> float:
|
|
165
|
+
"""
|
|
166
|
+
Calculate the tick success rate.
|
|
167
|
+
|
|
168
|
+
Returns:
|
|
169
|
+
Success rate as a float between 0.0 and 1.0.
|
|
170
|
+
Returns 1.0 if no ticks have been attempted.
|
|
171
|
+
|
|
172
|
+
Example:
|
|
173
|
+
>>> metrics = ModelRuntimeSchedulerMetrics(
|
|
174
|
+
... scheduler_id="test",
|
|
175
|
+
... ticks_emitted=95,
|
|
176
|
+
... ticks_failed=5,
|
|
177
|
+
... )
|
|
178
|
+
>>> metrics.tick_success_rate()
|
|
179
|
+
0.95
|
|
180
|
+
"""
|
|
181
|
+
total = self.ticks_emitted + self.ticks_failed
|
|
182
|
+
if total == 0:
|
|
183
|
+
return 1.0
|
|
184
|
+
return self.ticks_emitted / total
|
|
185
|
+
|
|
186
|
+
def is_healthy(self) -> bool:
|
|
187
|
+
"""
|
|
188
|
+
Check if the scheduler is in a healthy state.
|
|
189
|
+
|
|
190
|
+
A scheduler is considered healthy if:
|
|
191
|
+
- It is in RUNNING status
|
|
192
|
+
- The circuit breaker is closed
|
|
193
|
+
- Consecutive failures are below threshold (5)
|
|
194
|
+
|
|
195
|
+
Returns:
|
|
196
|
+
True if the scheduler is healthy, False otherwise
|
|
197
|
+
|
|
198
|
+
Example:
|
|
199
|
+
>>> metrics = ModelRuntimeSchedulerMetrics(
|
|
200
|
+
... scheduler_id="test",
|
|
201
|
+
... status=EnumSchedulerStatus.RUNNING,
|
|
202
|
+
... )
|
|
203
|
+
>>> metrics.is_healthy()
|
|
204
|
+
True
|
|
205
|
+
"""
|
|
206
|
+
return (
|
|
207
|
+
self.status == EnumSchedulerStatus.RUNNING
|
|
208
|
+
and not self.circuit_breaker_open
|
|
209
|
+
and self.consecutive_failures < 5
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
def unpersisted_sequence_count(self) -> int:
|
|
213
|
+
"""
|
|
214
|
+
Calculate the number of sequences not yet persisted.
|
|
215
|
+
|
|
216
|
+
This is important for restart-safety to ensure no ticks are lost.
|
|
217
|
+
|
|
218
|
+
Returns:
|
|
219
|
+
Number of sequences that have been emitted but not persisted
|
|
220
|
+
|
|
221
|
+
Example:
|
|
222
|
+
>>> metrics = ModelRuntimeSchedulerMetrics(
|
|
223
|
+
... scheduler_id="test",
|
|
224
|
+
... current_sequence_number=100,
|
|
225
|
+
... last_persisted_sequence=95,
|
|
226
|
+
... )
|
|
227
|
+
>>> metrics.unpersisted_sequence_count()
|
|
228
|
+
5
|
|
229
|
+
"""
|
|
230
|
+
return self.current_sequence_number - self.last_persisted_sequence
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
__all__: list[str] = ["ModelRuntimeSchedulerMetrics"]
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Runtime Tick Event Model.
|
|
4
|
+
|
|
5
|
+
This module defines the ModelRuntimeTick infrastructure event model, which is emitted
|
|
6
|
+
by the runtime scheduler at configured intervals. This is an INFRASTRUCTURE concern,
|
|
7
|
+
not a domain event.
|
|
8
|
+
|
|
9
|
+
Infrastructure vs Domain Separation:
|
|
10
|
+
- RuntimeTick is emitted by the runtime scheduler (infrastructure concern)
|
|
11
|
+
- Orchestrators SUBSCRIBE to RuntimeTick and derive timeout decisions (domain concern)
|
|
12
|
+
- The `now` field is the single source of truth for current time across the system
|
|
13
|
+
- This field aligns with ModelOrchestratorContext.now and ModelEffectContext.now
|
|
14
|
+
|
|
15
|
+
Specification Reference:
|
|
16
|
+
This model implements ticket B6 (Runtime Scheduler) from the ONEX Runtime Registration
|
|
17
|
+
Ticket Plan. See docs/design/ONEX_RUNTIME_REGISTRATION_TICKET_PLAN.md for full spec.
|
|
18
|
+
|
|
19
|
+
Key Design Decisions:
|
|
20
|
+
- `now`: The authoritative wall-clock time for this tick. Orchestrators use this
|
|
21
|
+
for timeout calculations. Reducers MUST NOT use this field.
|
|
22
|
+
- `sequence_number`: Monotonically increasing counter per runtime instance.
|
|
23
|
+
Enables restart-safety and ordering guarantees within a single runtime.
|
|
24
|
+
- `tick_id`: Unique identifier for this specific tick emission. Used for
|
|
25
|
+
idempotency and distributed tracing.
|
|
26
|
+
- `scheduler_id`: Identifies which runtime scheduler instance emitted this tick.
|
|
27
|
+
Critical for multi-runtime deployments where each runtime emits its own ticks.
|
|
28
|
+
|
|
29
|
+
Usage:
|
|
30
|
+
Runtime schedulers emit this event on a configurable cadence:
|
|
31
|
+
- Default: 1000ms (1 second)
|
|
32
|
+
- Min: 100ms (prevents excessive CPU usage)
|
|
33
|
+
- Max: 60000ms (ensures timely timeout detection)
|
|
34
|
+
|
|
35
|
+
Configuration via: ONEX_RUNTIME_TICK_INTERVAL_MS environment variable
|
|
36
|
+
|
|
37
|
+
Example:
|
|
38
|
+
>>> from datetime import datetime, timezone
|
|
39
|
+
>>> from uuid import uuid4
|
|
40
|
+
>>> # Use explicit timestamps (time injection pattern) - not datetime.now()
|
|
41
|
+
>>> tick_time = datetime(2025, 1, 15, 12, 0, 0, tzinfo=timezone.utc)
|
|
42
|
+
>>> tick = ModelRuntimeTick(
|
|
43
|
+
... now=tick_time,
|
|
44
|
+
... tick_id=uuid4(),
|
|
45
|
+
... sequence_number=42,
|
|
46
|
+
... scheduled_at=tick_time,
|
|
47
|
+
... correlation_id=uuid4(),
|
|
48
|
+
... scheduler_id="runtime-instance-001",
|
|
49
|
+
... tick_interval_ms=1000,
|
|
50
|
+
... )
|
|
51
|
+
>>> print(tick.sequence_number)
|
|
52
|
+
42
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
from datetime import datetime
|
|
56
|
+
from uuid import UUID
|
|
57
|
+
|
|
58
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class ModelRuntimeTick(BaseModel):
|
|
62
|
+
"""Infrastructure event emitted by runtime scheduler at configured intervals.
|
|
63
|
+
|
|
64
|
+
Orchestrators subscribe to this event and derive timeout decisions from it.
|
|
65
|
+
The `now` field is the single source of truth for current time across the system,
|
|
66
|
+
matching the time injection pattern used in ModelOrchestratorContext and
|
|
67
|
+
ModelEffectContext (see OMN-948).
|
|
68
|
+
|
|
69
|
+
This is an INFRASTRUCTURE event, not a domain event. The distinction is:
|
|
70
|
+
- Infrastructure: RuntimeTick emission (scheduler responsibility)
|
|
71
|
+
- Domain: Timeout decisions derived from ticks (orchestrator responsibility)
|
|
72
|
+
|
|
73
|
+
Attributes:
|
|
74
|
+
now: The authoritative wall-clock time for this tick. UTC, timezone-aware.
|
|
75
|
+
Orchestrators use this for deadline/timeout calculations.
|
|
76
|
+
Effects may use this for retry/metrics timing.
|
|
77
|
+
Reducers MUST ignore this field and never depend on it.
|
|
78
|
+
tick_id: Unique identifier for this tick emission. Used for idempotency
|
|
79
|
+
guards and distributed tracing.
|
|
80
|
+
sequence_number: Monotonically increasing counter per runtime instance.
|
|
81
|
+
Provides ordering guarantees and restart-safety detection.
|
|
82
|
+
Resets to 0 on runtime restart.
|
|
83
|
+
scheduled_at: When this tick was scheduled to occur. May differ from `now`
|
|
84
|
+
if there was processing delay or clock skew.
|
|
85
|
+
correlation_id: Correlation ID for distributed tracing. All downstream
|
|
86
|
+
operations triggered by this tick share this ID.
|
|
87
|
+
scheduler_id: Identifies the runtime scheduler instance that emitted this tick.
|
|
88
|
+
Critical for multi-runtime deployments to avoid tick duplication.
|
|
89
|
+
tick_interval_ms: The configured tick interval in milliseconds. Informational
|
|
90
|
+
field indicating the scheduler's cadence configuration.
|
|
91
|
+
|
|
92
|
+
Thread Safety:
|
|
93
|
+
This model is frozen (immutable) for thread safety. Once created,
|
|
94
|
+
a RuntimeTick instance cannot be modified.
|
|
95
|
+
|
|
96
|
+
Restart Safety:
|
|
97
|
+
The sequence_number field enables detection of runtime restarts.
|
|
98
|
+
If sequence_number < expected, a restart has occurred. Orchestrators
|
|
99
|
+
should handle this gracefully by resetting their timeout calculations.
|
|
100
|
+
|
|
101
|
+
Example:
|
|
102
|
+
>>> from datetime import datetime, timezone
|
|
103
|
+
>>> from uuid import uuid4
|
|
104
|
+
>>> # Use explicit timestamps (time injection pattern) - not datetime.now()
|
|
105
|
+
>>> tick_time = datetime(2025, 1, 15, 12, 0, 0, tzinfo=timezone.utc)
|
|
106
|
+
>>> tick = ModelRuntimeTick(
|
|
107
|
+
... now=tick_time,
|
|
108
|
+
... tick_id=uuid4(),
|
|
109
|
+
... sequence_number=1,
|
|
110
|
+
... scheduled_at=tick_time,
|
|
111
|
+
... correlation_id=uuid4(),
|
|
112
|
+
... scheduler_id="runtime-001",
|
|
113
|
+
... tick_interval_ms=1000,
|
|
114
|
+
... )
|
|
115
|
+
>>> assert tick.tick_interval_ms == 1000
|
|
116
|
+
"""
|
|
117
|
+
|
|
118
|
+
model_config = ConfigDict(
|
|
119
|
+
frozen=True, # Immutable for thread safety
|
|
120
|
+
extra="forbid", # Strict validation - no extra fields allowed
|
|
121
|
+
from_attributes=True, # Support pytest-xdist compatibility
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
# Core time field - matches handler context injection pattern (OMN-948)
|
|
125
|
+
now: datetime = Field(
|
|
126
|
+
...,
|
|
127
|
+
description=(
|
|
128
|
+
"The authoritative wall-clock time for this tick. UTC, timezone-aware. "
|
|
129
|
+
"Orchestrators use this for timeout calculations. Reducers MUST ignore."
|
|
130
|
+
),
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
# Tick identification
|
|
134
|
+
tick_id: UUID = Field(
|
|
135
|
+
...,
|
|
136
|
+
description=(
|
|
137
|
+
"Unique identifier for this specific tick emission. "
|
|
138
|
+
"Used for idempotency and distributed tracing."
|
|
139
|
+
),
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
# Ordering and restart-safety
|
|
143
|
+
sequence_number: int = Field(
|
|
144
|
+
...,
|
|
145
|
+
ge=0,
|
|
146
|
+
description=(
|
|
147
|
+
"Monotonically increasing counter per runtime instance. "
|
|
148
|
+
"Provides ordering guarantees and restart-safety detection. "
|
|
149
|
+
"Resets to 0 on runtime restart."
|
|
150
|
+
),
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
# Scheduling metadata
|
|
154
|
+
scheduled_at: datetime = Field(
|
|
155
|
+
...,
|
|
156
|
+
description=(
|
|
157
|
+
"When this tick was scheduled to occur. May differ from `now` "
|
|
158
|
+
"if there was processing delay or clock skew."
|
|
159
|
+
),
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
# Tracing
|
|
163
|
+
correlation_id: UUID = Field(
|
|
164
|
+
...,
|
|
165
|
+
description=(
|
|
166
|
+
"Correlation ID for distributed tracing. All downstream "
|
|
167
|
+
"operations triggered by this tick share this ID."
|
|
168
|
+
),
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
# Scheduler identification
|
|
172
|
+
scheduler_id: str = Field(
|
|
173
|
+
...,
|
|
174
|
+
min_length=1,
|
|
175
|
+
description=(
|
|
176
|
+
"Identifies which runtime scheduler instance emitted this tick. "
|
|
177
|
+
"Critical for multi-runtime deployments."
|
|
178
|
+
),
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
# Configuration metadata
|
|
182
|
+
tick_interval_ms: int = Field(
|
|
183
|
+
...,
|
|
184
|
+
ge=100,
|
|
185
|
+
le=60000,
|
|
186
|
+
description=(
|
|
187
|
+
"Configured tick interval in milliseconds. "
|
|
188
|
+
"Valid range: 100ms (min) to 60000ms (max)."
|
|
189
|
+
),
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
__all__: list[str] = ["ModelRuntimeTick"]
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Model for secret cache statistics.
|
|
4
|
+
|
|
5
|
+
.. versionadded:: 0.8.0
|
|
6
|
+
Initial implementation for OMN-764.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ModelSecretCacheStats(BaseModel):
|
|
15
|
+
"""Cache statistics for observability.
|
|
16
|
+
|
|
17
|
+
Provides metrics for monitoring cache performance and health.
|
|
18
|
+
|
|
19
|
+
Attributes:
|
|
20
|
+
total_entries: Current number of cached entries.
|
|
21
|
+
hits: Total number of cache hits.
|
|
22
|
+
misses: Total number of cache misses.
|
|
23
|
+
refreshes: Total number of cache refreshes (TTL expiration).
|
|
24
|
+
expired_evictions: Total number of entries evicted due to expiration.
|
|
25
|
+
|
|
26
|
+
Example:
|
|
27
|
+
>>> stats = ModelSecretCacheStats(hits=100, misses=10)
|
|
28
|
+
>>> stats.hit_rate
|
|
29
|
+
0.909090909090909
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
model_config = ConfigDict(
|
|
33
|
+
strict=True,
|
|
34
|
+
frozen=True,
|
|
35
|
+
extra="forbid",
|
|
36
|
+
from_attributes=True,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
total_entries: int = Field(
|
|
40
|
+
default=0,
|
|
41
|
+
ge=0,
|
|
42
|
+
description="Current number of secrets in the cache.",
|
|
43
|
+
)
|
|
44
|
+
hits: int = Field(
|
|
45
|
+
default=0,
|
|
46
|
+
ge=0,
|
|
47
|
+
description="Total number of cache hits.",
|
|
48
|
+
)
|
|
49
|
+
misses: int = Field(
|
|
50
|
+
default=0,
|
|
51
|
+
ge=0,
|
|
52
|
+
description="Total number of cache misses.",
|
|
53
|
+
)
|
|
54
|
+
refreshes: int = Field(
|
|
55
|
+
default=0,
|
|
56
|
+
ge=0,
|
|
57
|
+
description="Total number of cache refreshes due to TTL expiration.",
|
|
58
|
+
)
|
|
59
|
+
expired_evictions: int = Field(
|
|
60
|
+
default=0,
|
|
61
|
+
ge=0,
|
|
62
|
+
description="Total number of entries evicted due to expiration.",
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
@property
|
|
66
|
+
def hit_rate(self) -> float:
|
|
67
|
+
"""Calculate cache hit rate.
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
Hit rate as a float between 0.0 and 1.0.
|
|
71
|
+
Returns 0.0 if no hits or misses have occurred.
|
|
72
|
+
|
|
73
|
+
Example:
|
|
74
|
+
>>> stats = ModelSecretCacheStats(hits=80, misses=20)
|
|
75
|
+
>>> stats.hit_rate
|
|
76
|
+
0.8
|
|
77
|
+
"""
|
|
78
|
+
total = self.hits + self.misses
|
|
79
|
+
return self.hits / total if total > 0 else 0.0
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
__all__: list[str] = ["ModelSecretCacheStats"]
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Model for secret mapping configuration.
|
|
4
|
+
|
|
5
|
+
.. versionadded:: 0.8.0
|
|
6
|
+
Initial implementation for OMN-764.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
from omnibase_infra.runtime.models.model_secret_source_spec import ModelSecretSourceSpec
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ModelSecretMapping(BaseModel):
|
|
17
|
+
"""Mapping from logical name to source specification.
|
|
18
|
+
|
|
19
|
+
Defines an explicit mapping between a logical secret name used in the
|
|
20
|
+
application and its concrete source location.
|
|
21
|
+
|
|
22
|
+
Attributes:
|
|
23
|
+
logical_name: Application-level secret identifier using dot notation.
|
|
24
|
+
source: Specification of where to retrieve the secret.
|
|
25
|
+
ttl_seconds: Optional TTL override for this specific secret.
|
|
26
|
+
|
|
27
|
+
Example:
|
|
28
|
+
>>> mapping = ModelSecretMapping(
|
|
29
|
+
... logical_name="database.postgres.password",
|
|
30
|
+
... source=ModelSecretSourceSpec(
|
|
31
|
+
... source_type="vault",
|
|
32
|
+
... source_path="secret/data/database/postgres#password",
|
|
33
|
+
... ),
|
|
34
|
+
... ttl_seconds=60, # Refresh every minute
|
|
35
|
+
... )
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
model_config = ConfigDict(
|
|
39
|
+
strict=True,
|
|
40
|
+
frozen=True,
|
|
41
|
+
extra="forbid",
|
|
42
|
+
from_attributes=True,
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
logical_name: str = Field(
|
|
46
|
+
...,
|
|
47
|
+
min_length=1,
|
|
48
|
+
description="Logical name for the secret using dot notation "
|
|
49
|
+
"(e.g., 'database.postgres.password').",
|
|
50
|
+
)
|
|
51
|
+
source: ModelSecretSourceSpec = Field(
|
|
52
|
+
...,
|
|
53
|
+
description="Source specification defining where to retrieve the secret.",
|
|
54
|
+
)
|
|
55
|
+
ttl_seconds: int | None = Field(
|
|
56
|
+
default=None,
|
|
57
|
+
ge=0,
|
|
58
|
+
description="Optional TTL override in seconds for this specific secret. "
|
|
59
|
+
"If None, uses the default TTL for the source type.",
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
__all__: list[str] = ["ModelSecretMapping"]
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Configuration model for SecretResolver.
|
|
4
|
+
|
|
5
|
+
.. versionadded:: 0.8.0
|
|
6
|
+
Initial implementation for OMN-764.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
14
|
+
|
|
15
|
+
from omnibase_infra.runtime.models.model_secret_mapping import ModelSecretMapping
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ModelSecretResolverConfig(BaseModel):
|
|
19
|
+
"""Configuration for SecretResolver.
|
|
20
|
+
|
|
21
|
+
Configures the centralized secret resolution system that supports
|
|
22
|
+
multiple secret sources with priority-based resolution.
|
|
23
|
+
|
|
24
|
+
Source Priority Order:
|
|
25
|
+
1. Vault (if configured) - for production secrets
|
|
26
|
+
2. Environment variables - for local development
|
|
27
|
+
3. File-based secrets - for Kubernetes deployments
|
|
28
|
+
|
|
29
|
+
Attributes:
|
|
30
|
+
mappings: Explicit mappings from logical names to source specs.
|
|
31
|
+
default_ttl_env_seconds: Default TTL for environment variable secrets.
|
|
32
|
+
default_ttl_file_seconds: Default TTL for file-based secrets.
|
|
33
|
+
default_ttl_vault_seconds: Default TTL for Vault secrets.
|
|
34
|
+
enable_convention_fallback: Enable automatic source discovery by convention.
|
|
35
|
+
convention_env_prefix: Prefix for environment variable convention lookup.
|
|
36
|
+
bootstrap_secrets: Secrets resolved directly from env (never through chain).
|
|
37
|
+
secrets_dir: Directory for file-based secrets (K8s secrets volume).
|
|
38
|
+
|
|
39
|
+
Example:
|
|
40
|
+
>>> config = ModelSecretResolverConfig(
|
|
41
|
+
... default_ttl_vault_seconds=60,
|
|
42
|
+
... enable_convention_fallback=True,
|
|
43
|
+
... convention_env_prefix="ONEX_",
|
|
44
|
+
... )
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
model_config = ConfigDict(
|
|
48
|
+
strict=True,
|
|
49
|
+
frozen=False, # Allow mutation for runtime configuration
|
|
50
|
+
extra="forbid",
|
|
51
|
+
from_attributes=True,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
# Explicit mappings: logical_name -> source_spec
|
|
55
|
+
mappings: list[ModelSecretMapping] = Field(
|
|
56
|
+
default_factory=list,
|
|
57
|
+
description="Explicit mappings from logical secret names to source specifications. "
|
|
58
|
+
"Takes precedence over convention-based resolution.",
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
# Default TTLs by source type (in seconds)
|
|
62
|
+
default_ttl_env_seconds: int = Field(
|
|
63
|
+
default=86400,
|
|
64
|
+
ge=0,
|
|
65
|
+
description="Default TTL for environment variable secrets (24 hours).",
|
|
66
|
+
)
|
|
67
|
+
default_ttl_file_seconds: int = Field(
|
|
68
|
+
default=86400,
|
|
69
|
+
ge=0,
|
|
70
|
+
description="Default TTL for file-based secrets (24 hours).",
|
|
71
|
+
)
|
|
72
|
+
default_ttl_vault_seconds: int = Field(
|
|
73
|
+
default=300,
|
|
74
|
+
ge=0,
|
|
75
|
+
description="Default TTL for Vault secrets (5 minutes).",
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
# Convention fallback when no explicit mapping exists
|
|
79
|
+
enable_convention_fallback: bool = Field(
|
|
80
|
+
default=True,
|
|
81
|
+
description="Enable automatic source discovery using naming conventions. "
|
|
82
|
+
"When True, 'database.postgres.password' becomes 'DATABASE_POSTGRES_PASSWORD'.",
|
|
83
|
+
)
|
|
84
|
+
convention_env_prefix: str = Field(
|
|
85
|
+
default="",
|
|
86
|
+
description="Prefix added to environment variable names during convention lookup. "
|
|
87
|
+
"E.g., 'ONEX_' makes 'database.password' look for 'ONEX_DATABASE_PASSWORD'.",
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
# Bootstrap secrets (always resolved from env, never through resolver chain)
|
|
91
|
+
bootstrap_secrets: list[str] = Field(
|
|
92
|
+
default_factory=lambda: ["vault.token", "vault.addr", "vault.ca_cert"],
|
|
93
|
+
description="Secrets that are always resolved directly from environment variables, "
|
|
94
|
+
"never through the resolver chain. Used for Vault bootstrap credentials.",
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
# File-based secrets directory (K8s secrets volume mount)
|
|
98
|
+
secrets_dir: Path = Field(
|
|
99
|
+
default=Path("/run/secrets"),
|
|
100
|
+
description="Directory containing file-based secrets (K8s secrets volume mount).",
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
# NOTE: Vault configuration will be added when ModelVaultHandlerConfig is available
|
|
104
|
+
# vault_config: ModelVaultHandlerConfig | None = None
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
__all__: list[str] = ["ModelSecretResolverConfig"]
|