omnibase_infra 0.2.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- omnibase_infra/__init__.py +101 -0
- omnibase_infra/adapters/adapter_onex_tool_execution.py +451 -0
- omnibase_infra/capabilities/__init__.py +15 -0
- omnibase_infra/capabilities/capability_inference_rules.py +211 -0
- omnibase_infra/capabilities/contract_capability_extractor.py +221 -0
- omnibase_infra/capabilities/intent_type_extractor.py +160 -0
- omnibase_infra/cli/__init__.py +1 -0
- omnibase_infra/cli/commands.py +216 -0
- omnibase_infra/clients/__init__.py +0 -0
- omnibase_infra/configs/widget_mapping.yaml +176 -0
- omnibase_infra/constants_topic_patterns.py +26 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +264 -0
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +141 -0
- omnibase_infra/decorators/__init__.py +29 -0
- omnibase_infra/decorators/allow_any.py +109 -0
- omnibase_infra/dlq/__init__.py +90 -0
- omnibase_infra/dlq/constants_dlq.py +57 -0
- omnibase_infra/dlq/models/__init__.py +26 -0
- omnibase_infra/dlq/models/enum_replay_status.py +37 -0
- omnibase_infra/dlq/models/model_dlq_replay_record.py +135 -0
- omnibase_infra/dlq/models/model_dlq_tracking_config.py +184 -0
- omnibase_infra/dlq/service_dlq_tracking.py +611 -0
- omnibase_infra/enums/__init__.py +132 -0
- omnibase_infra/enums/enum_any_type_violation.py +104 -0
- omnibase_infra/enums/enum_backend_type.py +27 -0
- omnibase_infra/enums/enum_capture_outcome.py +42 -0
- omnibase_infra/enums/enum_capture_state.py +88 -0
- omnibase_infra/enums/enum_chain_violation_type.py +119 -0
- omnibase_infra/enums/enum_circuit_state.py +51 -0
- omnibase_infra/enums/enum_confirmation_event_type.py +27 -0
- omnibase_infra/enums/enum_consumer_group_purpose.py +92 -0
- omnibase_infra/enums/enum_contract_type.py +84 -0
- omnibase_infra/enums/enum_dedupe_strategy.py +46 -0
- omnibase_infra/enums/enum_dispatch_status.py +191 -0
- omnibase_infra/enums/enum_environment.py +46 -0
- omnibase_infra/enums/enum_execution_shape_violation.py +103 -0
- omnibase_infra/enums/enum_handler_error_type.py +111 -0
- omnibase_infra/enums/enum_handler_loader_error.py +178 -0
- omnibase_infra/enums/enum_handler_source_mode.py +86 -0
- omnibase_infra/enums/enum_handler_source_type.py +87 -0
- omnibase_infra/enums/enum_handler_type.py +77 -0
- omnibase_infra/enums/enum_handler_type_category.py +61 -0
- omnibase_infra/enums/enum_infra_transport_type.py +73 -0
- omnibase_infra/enums/enum_introspection_reason.py +154 -0
- omnibase_infra/enums/enum_kafka_acks.py +99 -0
- omnibase_infra/enums/enum_message_category.py +213 -0
- omnibase_infra/enums/enum_node_archetype.py +74 -0
- omnibase_infra/enums/enum_node_output_type.py +185 -0
- omnibase_infra/enums/enum_non_retryable_error_category.py +224 -0
- omnibase_infra/enums/enum_policy_type.py +32 -0
- omnibase_infra/enums/enum_registration_state.py +261 -0
- omnibase_infra/enums/enum_registration_status.py +33 -0
- omnibase_infra/enums/enum_registry_response_status.py +28 -0
- omnibase_infra/enums/enum_response_status.py +26 -0
- omnibase_infra/enums/enum_retry_error_category.py +98 -0
- omnibase_infra/enums/enum_security_rule_id.py +103 -0
- omnibase_infra/enums/enum_selection_strategy.py +91 -0
- omnibase_infra/enums/enum_topic_standard.py +42 -0
- omnibase_infra/enums/enum_validation_severity.py +78 -0
- omnibase_infra/errors/__init__.py +160 -0
- omnibase_infra/errors/error_architecture_violation.py +152 -0
- omnibase_infra/errors/error_binding_resolution.py +128 -0
- omnibase_infra/errors/error_chain_propagation.py +188 -0
- omnibase_infra/errors/error_compute_registry.py +95 -0
- omnibase_infra/errors/error_consul.py +132 -0
- omnibase_infra/errors/error_container_wiring.py +243 -0
- omnibase_infra/errors/error_event_bus_registry.py +105 -0
- omnibase_infra/errors/error_infra.py +610 -0
- omnibase_infra/errors/error_message_type_registry.py +101 -0
- omnibase_infra/errors/error_policy_registry.py +115 -0
- omnibase_infra/errors/error_vault.py +123 -0
- omnibase_infra/event_bus/__init__.py +72 -0
- omnibase_infra/event_bus/configs/kafka_event_bus_config.yaml +84 -0
- omnibase_infra/event_bus/event_bus_inmemory.py +797 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1716 -0
- omnibase_infra/event_bus/mixin_kafka_broadcast.py +180 -0
- omnibase_infra/event_bus/mixin_kafka_dlq.py +771 -0
- omnibase_infra/event_bus/models/__init__.py +29 -0
- omnibase_infra/event_bus/models/config/__init__.py +20 -0
- omnibase_infra/event_bus/models/config/model_kafka_event_bus_config.py +693 -0
- omnibase_infra/event_bus/models/model_dlq_event.py +206 -0
- omnibase_infra/event_bus/models/model_dlq_metrics.py +304 -0
- omnibase_infra/event_bus/models/model_event_headers.py +115 -0
- omnibase_infra/event_bus/models/model_event_message.py +60 -0
- omnibase_infra/event_bus/testing/__init__.py +26 -0
- omnibase_infra/event_bus/testing/adapter_protocol_event_publisher_inmemory.py +418 -0
- omnibase_infra/event_bus/testing/model_publisher_metrics.py +64 -0
- omnibase_infra/event_bus/topic_constants.py +376 -0
- omnibase_infra/handlers/__init__.py +82 -0
- omnibase_infra/handlers/filesystem/__init__.py +48 -0
- omnibase_infra/handlers/filesystem/enum_file_system_operation.py +35 -0
- omnibase_infra/handlers/filesystem/model_file_system_request.py +298 -0
- omnibase_infra/handlers/filesystem/model_file_system_result.py +166 -0
- omnibase_infra/handlers/handler_consul.py +795 -0
- omnibase_infra/handlers/handler_db.py +1046 -0
- omnibase_infra/handlers/handler_filesystem.py +1478 -0
- omnibase_infra/handlers/handler_graph.py +2015 -0
- omnibase_infra/handlers/handler_http.py +926 -0
- omnibase_infra/handlers/handler_intent.py +387 -0
- omnibase_infra/handlers/handler_manifest_persistence.contract.yaml +184 -0
- omnibase_infra/handlers/handler_manifest_persistence.py +1539 -0
- omnibase_infra/handlers/handler_mcp.py +1430 -0
- omnibase_infra/handlers/handler_qdrant.py +1076 -0
- omnibase_infra/handlers/handler_vault.py +428 -0
- omnibase_infra/handlers/mcp/__init__.py +19 -0
- omnibase_infra/handlers/mcp/adapter_onex_to_mcp.py +446 -0
- omnibase_infra/handlers/mcp/protocols.py +178 -0
- omnibase_infra/handlers/mcp/transport_streamable_http.py +352 -0
- omnibase_infra/handlers/mixins/__init__.py +47 -0
- omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
- omnibase_infra/handlers/mixins/mixin_consul_kv.py +338 -0
- omnibase_infra/handlers/mixins/mixin_consul_service.py +542 -0
- omnibase_infra/handlers/mixins/mixin_consul_topic_index.py +585 -0
- omnibase_infra/handlers/mixins/mixin_vault_initialization.py +338 -0
- omnibase_infra/handlers/mixins/mixin_vault_retry.py +412 -0
- omnibase_infra/handlers/mixins/mixin_vault_secrets.py +450 -0
- omnibase_infra/handlers/mixins/mixin_vault_token.py +365 -0
- omnibase_infra/handlers/models/__init__.py +286 -0
- omnibase_infra/handlers/models/consul/__init__.py +81 -0
- omnibase_infra/handlers/models/consul/enum_consul_operation_type.py +57 -0
- omnibase_infra/handlers/models/consul/model_consul_deregister_payload.py +51 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_config.py +153 -0
- omnibase_infra/handlers/models/consul/model_consul_handler_payload.py +89 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_found_payload.py +55 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_not_found_payload.py +49 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_get_recurse_payload.py +50 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_item.py +33 -0
- omnibase_infra/handlers/models/consul/model_consul_kv_put_payload.py +41 -0
- omnibase_infra/handlers/models/consul/model_consul_register_payload.py +53 -0
- omnibase_infra/handlers/models/consul/model_consul_retry_config.py +66 -0
- omnibase_infra/handlers/models/consul/model_payload_consul.py +66 -0
- omnibase_infra/handlers/models/consul/registry_payload_consul.py +214 -0
- omnibase_infra/handlers/models/graph/__init__.py +35 -0
- omnibase_infra/handlers/models/graph/enum_graph_operation_type.py +20 -0
- omnibase_infra/handlers/models/graph/model_graph_execute_payload.py +38 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_config.py +54 -0
- omnibase_infra/handlers/models/graph/model_graph_handler_payload.py +44 -0
- omnibase_infra/handlers/models/graph/model_graph_query_payload.py +40 -0
- omnibase_infra/handlers/models/graph/model_graph_record.py +22 -0
- omnibase_infra/handlers/models/http/__init__.py +50 -0
- omnibase_infra/handlers/models/http/enum_http_operation_type.py +29 -0
- omnibase_infra/handlers/models/http/model_http_body_content.py +45 -0
- omnibase_infra/handlers/models/http/model_http_get_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_http_handler_payload.py +90 -0
- omnibase_infra/handlers/models/http/model_http_post_payload.py +88 -0
- omnibase_infra/handlers/models/http/model_payload_http.py +66 -0
- omnibase_infra/handlers/models/http/registry_payload_http.py +212 -0
- omnibase_infra/handlers/models/mcp/__init__.py +23 -0
- omnibase_infra/handlers/models/mcp/enum_mcp_operation_type.py +24 -0
- omnibase_infra/handlers/models/mcp/model_mcp_handler_config.py +40 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_call.py +32 -0
- omnibase_infra/handlers/models/mcp/model_mcp_tool_result.py +45 -0
- omnibase_infra/handlers/models/model_consul_handler_response.py +96 -0
- omnibase_infra/handlers/models/model_db_describe_response.py +83 -0
- omnibase_infra/handlers/models/model_db_query_payload.py +95 -0
- omnibase_infra/handlers/models/model_db_query_response.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_config.py +98 -0
- omnibase_infra/handlers/models/model_filesystem_delete_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_delete_result.py +77 -0
- omnibase_infra/handlers/models/model_filesystem_directory_entry.py +75 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_payload.py +54 -0
- omnibase_infra/handlers/models/model_filesystem_ensure_directory_result.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_payload.py +60 -0
- omnibase_infra/handlers/models/model_filesystem_list_directory_result.py +68 -0
- omnibase_infra/handlers/models/model_filesystem_read_payload.py +62 -0
- omnibase_infra/handlers/models/model_filesystem_read_result.py +61 -0
- omnibase_infra/handlers/models/model_filesystem_write_payload.py +70 -0
- omnibase_infra/handlers/models/model_filesystem_write_result.py +55 -0
- omnibase_infra/handlers/models/model_graph_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_handler_response.py +103 -0
- omnibase_infra/handlers/models/model_http_handler_response.py +101 -0
- omnibase_infra/handlers/models/model_manifest_metadata.py +75 -0
- omnibase_infra/handlers/models/model_manifest_persistence_config.py +62 -0
- omnibase_infra/handlers/models/model_manifest_query_payload.py +90 -0
- omnibase_infra/handlers/models/model_manifest_query_result.py +97 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_payload.py +44 -0
- omnibase_infra/handlers/models/model_manifest_retrieve_result.py +98 -0
- omnibase_infra/handlers/models/model_manifest_store_payload.py +47 -0
- omnibase_infra/handlers/models/model_manifest_store_result.py +67 -0
- omnibase_infra/handlers/models/model_operation_context.py +187 -0
- omnibase_infra/handlers/models/model_qdrant_handler_response.py +98 -0
- omnibase_infra/handlers/models/model_retry_state.py +162 -0
- omnibase_infra/handlers/models/model_vault_handler_response.py +98 -0
- omnibase_infra/handlers/models/qdrant/__init__.py +44 -0
- omnibase_infra/handlers/models/qdrant/enum_qdrant_operation_type.py +26 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_collection_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_delete_payload.py +36 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_config.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_handler_payload.py +54 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_payload.py +42 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_search_result.py +30 -0
- omnibase_infra/handlers/models/qdrant/model_qdrant_upsert_payload.py +36 -0
- omnibase_infra/handlers/models/vault/__init__.py +69 -0
- omnibase_infra/handlers/models/vault/enum_vault_operation_type.py +35 -0
- omnibase_infra/handlers/models/vault/model_payload_vault.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_delete_payload.py +57 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_config.py +148 -0
- omnibase_infra/handlers/models/vault/model_vault_handler_payload.py +101 -0
- omnibase_infra/handlers/models/vault/model_vault_list_payload.py +58 -0
- omnibase_infra/handlers/models/vault/model_vault_renew_token_payload.py +67 -0
- omnibase_infra/handlers/models/vault/model_vault_retry_config.py +66 -0
- omnibase_infra/handlers/models/vault/model_vault_secret_payload.py +106 -0
- omnibase_infra/handlers/models/vault/model_vault_write_payload.py +66 -0
- omnibase_infra/handlers/models/vault/registry_payload_vault.py +213 -0
- omnibase_infra/handlers/registration_storage/__init__.py +43 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_mock.py +392 -0
- omnibase_infra/handlers/registration_storage/handler_registration_storage_postgres.py +922 -0
- omnibase_infra/handlers/registration_storage/models/__init__.py +23 -0
- omnibase_infra/handlers/registration_storage/models/model_delete_registration_request.py +58 -0
- omnibase_infra/handlers/registration_storage/models/model_update_registration_request.py +73 -0
- omnibase_infra/handlers/registration_storage/protocol_registration_persistence.py +191 -0
- omnibase_infra/handlers/service_discovery/__init__.py +43 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_consul.py +1051 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_mock.py +258 -0
- omnibase_infra/handlers/service_discovery/models/__init__.py +22 -0
- omnibase_infra/handlers/service_discovery/models/model_discovery_result.py +64 -0
- omnibase_infra/handlers/service_discovery/models/model_registration_result.py +138 -0
- omnibase_infra/handlers/service_discovery/models/model_service_info.py +109 -0
- omnibase_infra/handlers/service_discovery/protocol_discovery_operations.py +170 -0
- omnibase_infra/idempotency/__init__.py +94 -0
- omnibase_infra/idempotency/models/__init__.py +43 -0
- omnibase_infra/idempotency/models/model_idempotency_check_result.py +85 -0
- omnibase_infra/idempotency/models/model_idempotency_guard_config.py +130 -0
- omnibase_infra/idempotency/models/model_idempotency_record.py +86 -0
- omnibase_infra/idempotency/models/model_idempotency_store_health_check_result.py +81 -0
- omnibase_infra/idempotency/models/model_idempotency_store_metrics.py +140 -0
- omnibase_infra/idempotency/models/model_postgres_idempotency_store_config.py +299 -0
- omnibase_infra/idempotency/protocol_idempotency_store.py +184 -0
- omnibase_infra/idempotency/store_inmemory.py +265 -0
- omnibase_infra/idempotency/store_postgres.py +923 -0
- omnibase_infra/infrastructure/__init__.py +0 -0
- omnibase_infra/migrations/001_create_event_ledger.sql +166 -0
- omnibase_infra/migrations/001_drop_event_ledger.sql +18 -0
- omnibase_infra/mixins/__init__.py +71 -0
- omnibase_infra/mixins/mixin_async_circuit_breaker.py +656 -0
- omnibase_infra/mixins/mixin_dict_like_accessors.py +146 -0
- omnibase_infra/mixins/mixin_envelope_extraction.py +119 -0
- omnibase_infra/mixins/mixin_node_introspection.py +2670 -0
- omnibase_infra/mixins/mixin_retry_execution.py +386 -0
- omnibase_infra/mixins/protocol_circuit_breaker_aware.py +133 -0
- omnibase_infra/models/__init__.py +144 -0
- omnibase_infra/models/bindings/__init__.py +59 -0
- omnibase_infra/models/bindings/constants.py +144 -0
- omnibase_infra/models/bindings/model_binding_resolution_result.py +103 -0
- omnibase_infra/models/bindings/model_operation_binding.py +44 -0
- omnibase_infra/models/bindings/model_operation_bindings_subcontract.py +152 -0
- omnibase_infra/models/bindings/model_parsed_binding.py +52 -0
- omnibase_infra/models/corpus/__init__.py +17 -0
- omnibase_infra/models/corpus/model_capture_config.py +133 -0
- omnibase_infra/models/corpus/model_capture_result.py +86 -0
- omnibase_infra/models/discovery/__init__.py +42 -0
- omnibase_infra/models/discovery/model_dependency_spec.py +319 -0
- omnibase_infra/models/discovery/model_discovered_capabilities.py +50 -0
- omnibase_infra/models/discovery/model_introspection_config.py +330 -0
- omnibase_infra/models/discovery/model_introspection_performance_metrics.py +169 -0
- omnibase_infra/models/discovery/model_introspection_task_config.py +116 -0
- omnibase_infra/models/dispatch/__init__.py +155 -0
- omnibase_infra/models/dispatch/model_debug_trace_snapshot.py +114 -0
- omnibase_infra/models/dispatch/model_dispatch_context.py +439 -0
- omnibase_infra/models/dispatch/model_dispatch_error.py +336 -0
- omnibase_infra/models/dispatch/model_dispatch_log_context.py +400 -0
- omnibase_infra/models/dispatch/model_dispatch_metadata.py +228 -0
- omnibase_infra/models/dispatch/model_dispatch_metrics.py +496 -0
- omnibase_infra/models/dispatch/model_dispatch_outcome.py +317 -0
- omnibase_infra/models/dispatch/model_dispatch_outputs.py +231 -0
- omnibase_infra/models/dispatch/model_dispatch_result.py +436 -0
- omnibase_infra/models/dispatch/model_dispatch_route.py +279 -0
- omnibase_infra/models/dispatch/model_dispatcher_metrics.py +275 -0
- omnibase_infra/models/dispatch/model_dispatcher_registration.py +352 -0
- omnibase_infra/models/dispatch/model_materialized_dispatch.py +141 -0
- omnibase_infra/models/dispatch/model_parsed_topic.py +135 -0
- omnibase_infra/models/dispatch/model_topic_parser.py +725 -0
- omnibase_infra/models/dispatch/model_tracing_context.py +285 -0
- omnibase_infra/models/errors/__init__.py +45 -0
- omnibase_infra/models/errors/model_handler_validation_error.py +594 -0
- omnibase_infra/models/errors/model_infra_error_context.py +99 -0
- omnibase_infra/models/errors/model_message_type_registry_error_context.py +71 -0
- omnibase_infra/models/errors/model_timeout_error_context.py +110 -0
- omnibase_infra/models/handlers/__init__.py +80 -0
- omnibase_infra/models/handlers/model_bootstrap_handler_descriptor.py +162 -0
- omnibase_infra/models/handlers/model_contract_discovery_result.py +82 -0
- omnibase_infra/models/handlers/model_handler_descriptor.py +200 -0
- omnibase_infra/models/handlers/model_handler_identifier.py +215 -0
- omnibase_infra/models/handlers/model_handler_source_config.py +220 -0
- omnibase_infra/models/health/__init__.py +9 -0
- omnibase_infra/models/health/model_health_check_result.py +40 -0
- omnibase_infra/models/lifecycle/__init__.py +39 -0
- omnibase_infra/models/logging/__init__.py +51 -0
- omnibase_infra/models/logging/model_log_context.py +756 -0
- omnibase_infra/models/mcp/__init__.py +15 -0
- omnibase_infra/models/mcp/model_mcp_contract_config.py +80 -0
- omnibase_infra/models/mcp/model_mcp_server_config.py +67 -0
- omnibase_infra/models/mcp/model_mcp_tool_definition.py +73 -0
- omnibase_infra/models/mcp/model_mcp_tool_parameter.py +35 -0
- omnibase_infra/models/model_node_identity.py +126 -0
- omnibase_infra/models/model_retry_error_classification.py +78 -0
- omnibase_infra/models/projection/__init__.py +43 -0
- omnibase_infra/models/projection/model_capability_fields.py +112 -0
- omnibase_infra/models/projection/model_registration_projection.py +434 -0
- omnibase_infra/models/projection/model_registration_snapshot.py +322 -0
- omnibase_infra/models/projection/model_sequence_info.py +182 -0
- omnibase_infra/models/projection/model_snapshot_topic_config.py +591 -0
- omnibase_infra/models/projectors/__init__.py +41 -0
- omnibase_infra/models/projectors/model_projector_column.py +289 -0
- omnibase_infra/models/projectors/model_projector_discovery_result.py +65 -0
- omnibase_infra/models/projectors/model_projector_index.py +270 -0
- omnibase_infra/models/projectors/model_projector_schema.py +415 -0
- omnibase_infra/models/projectors/model_projector_validation_error.py +63 -0
- omnibase_infra/models/projectors/util_sql_identifiers.py +115 -0
- omnibase_infra/models/registration/__init__.py +68 -0
- omnibase_infra/models/registration/commands/__init__.py +15 -0
- omnibase_infra/models/registration/commands/model_node_registration_acked.py +108 -0
- omnibase_infra/models/registration/events/__init__.py +56 -0
- omnibase_infra/models/registration/events/model_node_became_active.py +103 -0
- omnibase_infra/models/registration/events/model_node_liveness_expired.py +103 -0
- omnibase_infra/models/registration/events/model_node_registration_accepted.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_received.py +98 -0
- omnibase_infra/models/registration/events/model_node_registration_ack_timed_out.py +112 -0
- omnibase_infra/models/registration/events/model_node_registration_initiated.py +107 -0
- omnibase_infra/models/registration/events/model_node_registration_rejected.py +104 -0
- omnibase_infra/models/registration/model_event_bus_topic_entry.py +59 -0
- omnibase_infra/models/registration/model_introspection_metrics.py +253 -0
- omnibase_infra/models/registration/model_node_capabilities.py +190 -0
- omnibase_infra/models/registration/model_node_event_bus_config.py +99 -0
- omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +195 -0
- omnibase_infra/models/registration/model_node_metadata.py +79 -0
- omnibase_infra/models/registration/model_node_registration.py +162 -0
- omnibase_infra/models/registration/model_node_registration_record.py +162 -0
- omnibase_infra/models/registry/__init__.py +29 -0
- omnibase_infra/models/registry/model_domain_constraint.py +202 -0
- omnibase_infra/models/registry/model_message_type_entry.py +271 -0
- omnibase_infra/models/resilience/__init__.py +9 -0
- omnibase_infra/models/resilience/model_circuit_breaker_config.py +227 -0
- omnibase_infra/models/routing/__init__.py +25 -0
- omnibase_infra/models/routing/model_routing_entry.py +52 -0
- omnibase_infra/models/routing/model_routing_subcontract.py +70 -0
- omnibase_infra/models/runtime/__init__.py +49 -0
- omnibase_infra/models/runtime/model_contract_security_config.py +41 -0
- omnibase_infra/models/runtime/model_discovery_error.py +81 -0
- omnibase_infra/models/runtime/model_discovery_result.py +162 -0
- omnibase_infra/models/runtime/model_discovery_warning.py +74 -0
- omnibase_infra/models/runtime/model_failed_plugin_load.py +63 -0
- omnibase_infra/models/runtime/model_handler_contract.py +296 -0
- omnibase_infra/models/runtime/model_loaded_handler.py +129 -0
- omnibase_infra/models/runtime/model_plugin_load_context.py +93 -0
- omnibase_infra/models/runtime/model_plugin_load_summary.py +124 -0
- omnibase_infra/models/security/__init__.py +50 -0
- omnibase_infra/models/security/classification_levels.py +99 -0
- omnibase_infra/models/security/model_environment_policy.py +145 -0
- omnibase_infra/models/security/model_handler_security_policy.py +107 -0
- omnibase_infra/models/security/model_security_error.py +81 -0
- omnibase_infra/models/security/model_security_validation_result.py +328 -0
- omnibase_infra/models/security/model_security_warning.py +67 -0
- omnibase_infra/models/snapshot/__init__.py +27 -0
- omnibase_infra/models/snapshot/model_field_change.py +65 -0
- omnibase_infra/models/snapshot/model_snapshot.py +270 -0
- omnibase_infra/models/snapshot/model_snapshot_diff.py +203 -0
- omnibase_infra/models/snapshot/model_subject_ref.py +81 -0
- omnibase_infra/models/types/__init__.py +71 -0
- omnibase_infra/models/validation/__init__.py +89 -0
- omnibase_infra/models/validation/model_any_type_validation_result.py +118 -0
- omnibase_infra/models/validation/model_any_type_violation.py +141 -0
- omnibase_infra/models/validation/model_category_match_result.py +345 -0
- omnibase_infra/models/validation/model_chain_violation.py +166 -0
- omnibase_infra/models/validation/model_coverage_metrics.py +316 -0
- omnibase_infra/models/validation/model_execution_shape_rule.py +159 -0
- omnibase_infra/models/validation/model_execution_shape_validation.py +208 -0
- omnibase_infra/models/validation/model_execution_shape_validation_result.py +294 -0
- omnibase_infra/models/validation/model_execution_shape_violation.py +122 -0
- omnibase_infra/models/validation/model_localhandler_validation_result.py +139 -0
- omnibase_infra/models/validation/model_localhandler_violation.py +100 -0
- omnibase_infra/models/validation/model_output_validation_params.py +74 -0
- omnibase_infra/models/validation/model_validate_and_raise_params.py +84 -0
- omnibase_infra/models/validation/model_validation_error_params.py +84 -0
- omnibase_infra/models/validation/model_validation_outcome.py +287 -0
- omnibase_infra/nodes/__init__.py +57 -0
- omnibase_infra/nodes/architecture_validator/__init__.py +79 -0
- omnibase_infra/nodes/architecture_validator/contract.yaml +252 -0
- omnibase_infra/nodes/architecture_validator/contract_architecture_validator.yaml +203 -0
- omnibase_infra/nodes/architecture_validator/mixins/__init__.py +16 -0
- omnibase_infra/nodes/architecture_validator/mixins/mixin_file_path_rule.py +92 -0
- omnibase_infra/nodes/architecture_validator/models/__init__.py +36 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_request.py +56 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_result.py +311 -0
- omnibase_infra/nodes/architecture_validator/models/model_architecture_violation.py +163 -0
- omnibase_infra/nodes/architecture_validator/models/model_rule_check_result.py +265 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_request.py +105 -0
- omnibase_infra/nodes/architecture_validator/models/model_validation_result.py +314 -0
- omnibase_infra/nodes/architecture_validator/node.py +262 -0
- omnibase_infra/nodes/architecture_validator/node_architecture_validator.py +383 -0
- omnibase_infra/nodes/architecture_validator/protocols/__init__.py +9 -0
- omnibase_infra/nodes/architecture_validator/protocols/protocol_architecture_rule.py +225 -0
- omnibase_infra/nodes/architecture_validator/registry/__init__.py +28 -0
- omnibase_infra/nodes/architecture_validator/registry/registry_infra_architecture_validator.py +106 -0
- omnibase_infra/nodes/architecture_validator/validators/__init__.py +104 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_direct_dispatch.py +422 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_handler_publishing.py +481 -0
- omnibase_infra/nodes/architecture_validator/validators/validator_no_orchestrator_fsm.py +491 -0
- omnibase_infra/nodes/contract_registry_reducer/__init__.py +29 -0
- omnibase_infra/nodes/contract_registry_reducer/contract.yaml +255 -0
- omnibase_infra/nodes/contract_registry_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_contract_registry_state.py +266 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_cleanup_topic_references.py +55 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_deactivate_contract.py +58 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_mark_stale.py +49 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_heartbeat.py +71 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_update_topic.py +66 -0
- omnibase_infra/nodes/contract_registry_reducer/models/model_payload_upsert_contract.py +92 -0
- omnibase_infra/nodes/contract_registry_reducer/node.py +121 -0
- omnibase_infra/nodes/contract_registry_reducer/reducer.py +784 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/contract_registry_reducer/registry/registry_infra_contract_registry_reducer.py +101 -0
- omnibase_infra/nodes/effects/README.md +358 -0
- omnibase_infra/nodes/effects/__init__.py +26 -0
- omnibase_infra/nodes/effects/contract.yaml +167 -0
- omnibase_infra/nodes/effects/models/__init__.py +32 -0
- omnibase_infra/nodes/effects/models/model_backend_result.py +190 -0
- omnibase_infra/nodes/effects/models/model_effect_idempotency_config.py +92 -0
- omnibase_infra/nodes/effects/models/model_registry_request.py +132 -0
- omnibase_infra/nodes/effects/models/model_registry_response.py +263 -0
- omnibase_infra/nodes/effects/protocol_consul_client.py +89 -0
- omnibase_infra/nodes/effects/protocol_effect_idempotency_store.py +143 -0
- omnibase_infra/nodes/effects/protocol_postgres_adapter.py +96 -0
- omnibase_infra/nodes/effects/registry_effect.py +525 -0
- omnibase_infra/nodes/effects/store_effect_idempotency_inmemory.py +425 -0
- omnibase_infra/nodes/handlers/consul/contract.yaml +85 -0
- omnibase_infra/nodes/handlers/db/contract.yaml +72 -0
- omnibase_infra/nodes/handlers/graph/contract.yaml +127 -0
- omnibase_infra/nodes/handlers/http/contract.yaml +74 -0
- omnibase_infra/nodes/handlers/intent/contract.yaml +66 -0
- omnibase_infra/nodes/handlers/mcp/contract.yaml +69 -0
- omnibase_infra/nodes/handlers/vault/contract.yaml +91 -0
- omnibase_infra/nodes/node_intent_storage_effect/__init__.py +50 -0
- omnibase_infra/nodes/node_intent_storage_effect/contract.yaml +194 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/__init__.py +24 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/model_intent_storage_input.py +141 -0
- omnibase_infra/nodes/node_intent_storage_effect/models/model_intent_storage_output.py +130 -0
- omnibase_infra/nodes/node_intent_storage_effect/node.py +94 -0
- omnibase_infra/nodes/node_intent_storage_effect/registry/__init__.py +35 -0
- omnibase_infra/nodes/node_intent_storage_effect/registry/registry_infra_intent_storage.py +294 -0
- omnibase_infra/nodes/node_ledger_projection_compute/__init__.py +50 -0
- omnibase_infra/nodes/node_ledger_projection_compute/contract.yaml +104 -0
- omnibase_infra/nodes/node_ledger_projection_compute/node.py +284 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/__init__.py +29 -0
- omnibase_infra/nodes/node_ledger_projection_compute/registry/registry_infra_ledger_projection.py +118 -0
- omnibase_infra/nodes/node_ledger_write_effect/__init__.py +82 -0
- omnibase_infra/nodes/node_ledger_write_effect/contract.yaml +200 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/__init__.py +22 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_append.py +372 -0
- omnibase_infra/nodes/node_ledger_write_effect/handlers/handler_ledger_query.py +597 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/__init__.py +31 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_append_result.py +54 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_entry.py +92 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query.py +53 -0
- omnibase_infra/nodes/node_ledger_write_effect/models/model_ledger_query_result.py +41 -0
- omnibase_infra/nodes/node_ledger_write_effect/node.py +89 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/__init__.py +13 -0
- omnibase_infra/nodes/node_ledger_write_effect/protocols/protocol_ledger_persistence.py +127 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_ledger_write_effect/registry/registry_infra_ledger_write.py +121 -0
- omnibase_infra/nodes/node_registration_orchestrator/README.md +542 -0
- omnibase_infra/nodes/node_registration_orchestrator/__init__.py +120 -0
- omnibase_infra/nodes/node_registration_orchestrator/contract.yaml +482 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/__init__.py +53 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_introspected.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_registration_acked.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_runtime_tick.py +373 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/__init__.py +62 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_heartbeat.py +376 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_introspected.py +694 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_registration_acked.py +458 -0
- omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_runtime_tick.py +364 -0
- omnibase_infra/nodes/node_registration_orchestrator/introspection_event_router.py +544 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/__init__.py +75 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_intent_payload.py +194 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_registration_intent.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_intent_execution_result.py +50 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_node_liveness_expired.py +107 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_config.py +67 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_input.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_output.py +166 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_intent_payload.py +235 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_upsert_intent.py +68 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_execution_result.py +384 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_state.py +60 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registration_intent.py +177 -0
- omnibase_infra/nodes/node_registration_orchestrator/models/model_registry_intent.py +247 -0
- omnibase_infra/nodes/node_registration_orchestrator/node.py +195 -0
- omnibase_infra/nodes/node_registration_orchestrator/plugin.py +909 -0
- omnibase_infra/nodes/node_registration_orchestrator/protocols.py +439 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_orchestrator/registry/registry_infra_node_registration_orchestrator.py +528 -0
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +393 -0
- omnibase_infra/nodes/node_registration_orchestrator/wiring.py +743 -0
- omnibase_infra/nodes/node_registration_reducer/__init__.py +15 -0
- omnibase_infra/nodes/node_registration_reducer/contract.yaml +301 -0
- omnibase_infra/nodes/node_registration_reducer/models/__init__.py +38 -0
- omnibase_infra/nodes/node_registration_reducer/models/model_validation_result.py +113 -0
- omnibase_infra/nodes/node_registration_reducer/node.py +139 -0
- omnibase_infra/nodes/node_registration_reducer/registry/__init__.py +9 -0
- omnibase_infra/nodes/node_registration_reducer/registry/registry_infra_node_registration_reducer.py +79 -0
- omnibase_infra/nodes/node_registration_storage_effect/__init__.py +41 -0
- omnibase_infra/nodes/node_registration_storage_effect/contract.yaml +220 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/__init__.py +44 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_delete_result.py +132 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_record.py +199 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_update.py +155 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_details.py +123 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_result.py +117 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_query.py +100 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_result.py +136 -0
- omnibase_infra/nodes/node_registration_storage_effect/models/model_upsert_result.py +127 -0
- omnibase_infra/nodes/node_registration_storage_effect/node.py +112 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/__init__.py +22 -0
- omnibase_infra/nodes/node_registration_storage_effect/protocols/protocol_registration_persistence.py +333 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/__init__.py +23 -0
- omnibase_infra/nodes/node_registration_storage_effect/registry/registry_infra_registration_storage.py +215 -0
- omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
- omnibase_infra/nodes/node_registry_effect/contract.yaml +677 -0
- omnibase_infra/nodes/node_registry_effect/handlers/__init__.py +70 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_deregister.py +211 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_register.py +212 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_partial_retry.py +417 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_deactivate.py +215 -0
- omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_upsert.py +208 -0
- omnibase_infra/nodes/node_registry_effect/models/__init__.py +43 -0
- omnibase_infra/nodes/node_registry_effect/models/model_partial_retry_request.py +92 -0
- omnibase_infra/nodes/node_registry_effect/node.py +165 -0
- omnibase_infra/nodes/node_registry_effect/registry/__init__.py +27 -0
- omnibase_infra/nodes/node_registry_effect/registry/registry_infra_registry_effect.py +196 -0
- omnibase_infra/nodes/node_service_discovery_effect/__init__.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/contract.yaml +246 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/__init__.py +67 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_health_status.py +72 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/enum_service_discovery_operation.py +58 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_query.py +99 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_result.py +98 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_health_check_config.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_query_metadata.py +63 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_registration_result.py +130 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_details.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_result.py +119 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_info.py +106 -0
- omnibase_infra/nodes/node_service_discovery_effect/models/model_service_registration.py +121 -0
- omnibase_infra/nodes/node_service_discovery_effect/node.py +111 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/__init__.py +14 -0
- omnibase_infra/nodes/node_service_discovery_effect/protocols/protocol_discovery_operations.py +279 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/__init__.py +13 -0
- omnibase_infra/nodes/node_service_discovery_effect/registry/registry_infra_service_discovery.py +222 -0
- omnibase_infra/nodes/reducers/__init__.py +30 -0
- omnibase_infra/nodes/reducers/models/__init__.py +37 -0
- omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +87 -0
- omnibase_infra/nodes/reducers/models/model_payload_ledger_append.py +133 -0
- omnibase_infra/nodes/reducers/models/model_payload_postgres_upsert_registration.py +60 -0
- omnibase_infra/nodes/reducers/models/model_registration_confirmation.py +166 -0
- omnibase_infra/nodes/reducers/models/model_registration_state.py +433 -0
- omnibase_infra/nodes/reducers/registration_reducer.py +1138 -0
- omnibase_infra/observability/__init__.py +143 -0
- omnibase_infra/observability/constants_metrics.py +91 -0
- omnibase_infra/observability/factory_observability_sink.py +525 -0
- omnibase_infra/observability/handlers/__init__.py +118 -0
- omnibase_infra/observability/handlers/handler_logging_structured.py +967 -0
- omnibase_infra/observability/handlers/handler_metrics_prometheus.py +1120 -0
- omnibase_infra/observability/handlers/model_logging_handler_config.py +71 -0
- omnibase_infra/observability/handlers/model_logging_handler_response.py +77 -0
- omnibase_infra/observability/handlers/model_metrics_handler_config.py +172 -0
- omnibase_infra/observability/handlers/model_metrics_handler_payload.py +135 -0
- omnibase_infra/observability/handlers/model_metrics_handler_response.py +101 -0
- omnibase_infra/observability/hooks/__init__.py +74 -0
- omnibase_infra/observability/hooks/hook_observability.py +1223 -0
- omnibase_infra/observability/models/__init__.py +30 -0
- omnibase_infra/observability/models/enum_required_log_context_key.py +77 -0
- omnibase_infra/observability/models/model_buffered_log_entry.py +117 -0
- omnibase_infra/observability/models/model_logging_sink_config.py +73 -0
- omnibase_infra/observability/models/model_metrics_sink_config.py +156 -0
- omnibase_infra/observability/sinks/__init__.py +69 -0
- omnibase_infra/observability/sinks/sink_logging_structured.py +809 -0
- omnibase_infra/observability/sinks/sink_metrics_prometheus.py +710 -0
- omnibase_infra/plugins/__init__.py +27 -0
- omnibase_infra/plugins/examples/__init__.py +28 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer.py +271 -0
- omnibase_infra/plugins/examples/plugin_json_normalizer_error_handling.py +210 -0
- omnibase_infra/plugins/models/__init__.py +21 -0
- omnibase_infra/plugins/models/model_plugin_context.py +76 -0
- omnibase_infra/plugins/models/model_plugin_input_data.py +58 -0
- omnibase_infra/plugins/models/model_plugin_output_data.py +62 -0
- omnibase_infra/plugins/plugin_compute_base.py +449 -0
- omnibase_infra/projectors/__init__.py +30 -0
- omnibase_infra/projectors/contracts/__init__.py +63 -0
- omnibase_infra/projectors/contracts/registration_projector.yaml +370 -0
- omnibase_infra/projectors/projection_reader_registration.py +1559 -0
- omnibase_infra/projectors/snapshot_publisher_registration.py +1329 -0
- omnibase_infra/protocols/__init__.py +104 -0
- omnibase_infra/protocols/protocol_capability_projection.py +253 -0
- omnibase_infra/protocols/protocol_capability_query.py +251 -0
- omnibase_infra/protocols/protocol_container_aware.py +200 -0
- omnibase_infra/protocols/protocol_dispatch_engine.py +152 -0
- omnibase_infra/protocols/protocol_event_bus_like.py +127 -0
- omnibase_infra/protocols/protocol_event_projector.py +96 -0
- omnibase_infra/protocols/protocol_idempotency_store.py +142 -0
- omnibase_infra/protocols/protocol_message_dispatcher.py +247 -0
- omnibase_infra/protocols/protocol_message_type_registry.py +306 -0
- omnibase_infra/protocols/protocol_plugin_compute.py +368 -0
- omnibase_infra/protocols/protocol_projector_schema_validator.py +82 -0
- omnibase_infra/protocols/protocol_registry_metrics.py +215 -0
- omnibase_infra/protocols/protocol_snapshot_publisher.py +396 -0
- omnibase_infra/protocols/protocol_snapshot_store.py +567 -0
- omnibase_infra/runtime/__init__.py +445 -0
- omnibase_infra/runtime/binding_config_resolver.py +2771 -0
- omnibase_infra/runtime/binding_resolver.py +753 -0
- omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
- omnibase_infra/runtime/constants_notification.py +75 -0
- omnibase_infra/runtime/constants_security.py +70 -0
- omnibase_infra/runtime/contract_handler_discovery.py +587 -0
- omnibase_infra/runtime/contract_loaders/__init__.py +51 -0
- omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
- omnibase_infra/runtime/contract_loaders/operation_bindings_loader.py +789 -0
- omnibase_infra/runtime/dispatch_context_enforcer.py +427 -0
- omnibase_infra/runtime/emit_daemon/__init__.py +97 -0
- omnibase_infra/runtime/emit_daemon/cli.py +844 -0
- omnibase_infra/runtime/emit_daemon/client.py +811 -0
- omnibase_infra/runtime/emit_daemon/config.py +535 -0
- omnibase_infra/runtime/emit_daemon/daemon.py +812 -0
- omnibase_infra/runtime/emit_daemon/event_registry.py +477 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_request.py +139 -0
- omnibase_infra/runtime/emit_daemon/model_daemon_response.py +191 -0
- omnibase_infra/runtime/emit_daemon/queue.py +618 -0
- omnibase_infra/runtime/enums/__init__.py +18 -0
- omnibase_infra/runtime/enums/enum_config_ref_scheme.py +33 -0
- omnibase_infra/runtime/enums/enum_scheduler_status.py +170 -0
- omnibase_infra/runtime/envelope_validator.py +179 -0
- omnibase_infra/runtime/event_bus_subcontract_wiring.py +466 -0
- omnibase_infra/runtime/handler_bootstrap_source.py +507 -0
- omnibase_infra/runtime/handler_contract_config_loader.py +603 -0
- omnibase_infra/runtime/handler_contract_source.py +750 -0
- omnibase_infra/runtime/handler_identity.py +81 -0
- omnibase_infra/runtime/handler_plugin_loader.py +2046 -0
- omnibase_infra/runtime/handler_registry.py +329 -0
- omnibase_infra/runtime/handler_source_resolver.py +367 -0
- omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
- omnibase_infra/runtime/kafka_contract_source.py +984 -0
- omnibase_infra/runtime/kernel.py +40 -0
- omnibase_infra/runtime/mixin_policy_validation.py +522 -0
- omnibase_infra/runtime/mixin_semver_cache.py +402 -0
- omnibase_infra/runtime/mixins/__init__.py +24 -0
- omnibase_infra/runtime/mixins/mixin_projector_notification_publishing.py +566 -0
- omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +778 -0
- omnibase_infra/runtime/models/__init__.py +229 -0
- omnibase_infra/runtime/models/model_batch_lifecycle_result.py +217 -0
- omnibase_infra/runtime/models/model_binding_config.py +168 -0
- omnibase_infra/runtime/models/model_binding_config_cache_stats.py +135 -0
- omnibase_infra/runtime/models/model_binding_config_resolver_config.py +329 -0
- omnibase_infra/runtime/models/model_cached_secret.py +138 -0
- omnibase_infra/runtime/models/model_compute_key.py +138 -0
- omnibase_infra/runtime/models/model_compute_registration.py +97 -0
- omnibase_infra/runtime/models/model_config_cache_entry.py +61 -0
- omnibase_infra/runtime/models/model_config_ref.py +331 -0
- omnibase_infra/runtime/models/model_config_ref_parse_result.py +125 -0
- omnibase_infra/runtime/models/model_contract_load_result.py +224 -0
- omnibase_infra/runtime/models/model_domain_plugin_config.py +92 -0
- omnibase_infra/runtime/models/model_domain_plugin_result.py +270 -0
- omnibase_infra/runtime/models/model_duplicate_response.py +54 -0
- omnibase_infra/runtime/models/model_enabled_protocols_config.py +61 -0
- omnibase_infra/runtime/models/model_event_bus_config.py +54 -0
- omnibase_infra/runtime/models/model_failed_component.py +55 -0
- omnibase_infra/runtime/models/model_health_check_response.py +168 -0
- omnibase_infra/runtime/models/model_health_check_result.py +229 -0
- omnibase_infra/runtime/models/model_lifecycle_result.py +245 -0
- omnibase_infra/runtime/models/model_logging_config.py +42 -0
- omnibase_infra/runtime/models/model_optional_correlation_id.py +167 -0
- omnibase_infra/runtime/models/model_optional_string.py +94 -0
- omnibase_infra/runtime/models/model_optional_uuid.py +110 -0
- omnibase_infra/runtime/models/model_policy_context.py +100 -0
- omnibase_infra/runtime/models/model_policy_key.py +138 -0
- omnibase_infra/runtime/models/model_policy_registration.py +139 -0
- omnibase_infra/runtime/models/model_policy_result.py +103 -0
- omnibase_infra/runtime/models/model_policy_type_filter.py +157 -0
- omnibase_infra/runtime/models/model_projector_notification_config.py +171 -0
- omnibase_infra/runtime/models/model_projector_plugin_loader_config.py +47 -0
- omnibase_infra/runtime/models/model_protocol_registration_config.py +65 -0
- omnibase_infra/runtime/models/model_retry_policy.py +105 -0
- omnibase_infra/runtime/models/model_runtime_config.py +150 -0
- omnibase_infra/runtime/models/model_runtime_contract_config.py +268 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_config.py +625 -0
- omnibase_infra/runtime/models/model_runtime_scheduler_metrics.py +233 -0
- omnibase_infra/runtime/models/model_runtime_tick.py +193 -0
- omnibase_infra/runtime/models/model_secret_cache_stats.py +82 -0
- omnibase_infra/runtime/models/model_secret_mapping.py +63 -0
- omnibase_infra/runtime/models/model_secret_resolver_config.py +107 -0
- omnibase_infra/runtime/models/model_secret_resolver_metrics.py +111 -0
- omnibase_infra/runtime/models/model_secret_source_info.py +72 -0
- omnibase_infra/runtime/models/model_secret_source_spec.py +66 -0
- omnibase_infra/runtime/models/model_security_config.py +109 -0
- omnibase_infra/runtime/models/model_shutdown_batch_result.py +75 -0
- omnibase_infra/runtime/models/model_shutdown_config.py +94 -0
- omnibase_infra/runtime/models/model_transition_notification_outbox_config.py +112 -0
- omnibase_infra/runtime/models/model_transition_notification_outbox_metrics.py +140 -0
- omnibase_infra/runtime/models/model_transition_notification_publisher_metrics.py +357 -0
- omnibase_infra/runtime/projector_plugin_loader.py +1462 -0
- omnibase_infra/runtime/projector_schema_manager.py +565 -0
- omnibase_infra/runtime/projector_shell.py +1330 -0
- omnibase_infra/runtime/protocol_contract_descriptor.py +92 -0
- omnibase_infra/runtime/protocol_contract_source.py +92 -0
- omnibase_infra/runtime/protocol_domain_plugin.py +474 -0
- omnibase_infra/runtime/protocol_handler_discovery.py +221 -0
- omnibase_infra/runtime/protocol_handler_plugin_loader.py +327 -0
- omnibase_infra/runtime/protocol_lifecycle_executor.py +435 -0
- omnibase_infra/runtime/protocol_policy.py +366 -0
- omnibase_infra/runtime/protocols/__init__.py +37 -0
- omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -0
- omnibase_infra/runtime/publisher_topic_scoped.py +294 -0
- omnibase_infra/runtime/registry/__init__.py +93 -0
- omnibase_infra/runtime/registry/mixin_message_type_query.py +326 -0
- omnibase_infra/runtime/registry/mixin_message_type_registration.py +354 -0
- omnibase_infra/runtime/registry/registry_event_bus_binding.py +268 -0
- omnibase_infra/runtime/registry/registry_message_type.py +542 -0
- omnibase_infra/runtime/registry/registry_protocol_binding.py +445 -0
- omnibase_infra/runtime/registry_compute.py +1143 -0
- omnibase_infra/runtime/registry_contract_source.py +693 -0
- omnibase_infra/runtime/registry_dispatcher.py +678 -0
- omnibase_infra/runtime/registry_policy.py +1185 -0
- omnibase_infra/runtime/runtime_contract_config_loader.py +406 -0
- omnibase_infra/runtime/runtime_scheduler.py +1070 -0
- omnibase_infra/runtime/secret_resolver.py +2112 -0
- omnibase_infra/runtime/security_metadata_validator.py +776 -0
- omnibase_infra/runtime/service_kernel.py +1651 -0
- omnibase_infra/runtime/service_message_dispatch_engine.py +2350 -0
- omnibase_infra/runtime/service_runtime_host_process.py +3493 -0
- omnibase_infra/runtime/transition_notification_outbox.py +1190 -0
- omnibase_infra/runtime/transition_notification_publisher.py +765 -0
- omnibase_infra/runtime/util_container_wiring.py +1124 -0
- omnibase_infra/runtime/util_validation.py +314 -0
- omnibase_infra/runtime/util_version.py +98 -0
- omnibase_infra/runtime/util_wiring.py +723 -0
- omnibase_infra/schemas/schema_registration_projection.sql +320 -0
- omnibase_infra/schemas/schema_transition_notification_outbox.sql +245 -0
- omnibase_infra/services/__init__.py +89 -0
- omnibase_infra/services/corpus_capture.py +684 -0
- omnibase_infra/services/mcp/__init__.py +31 -0
- omnibase_infra/services/mcp/mcp_server_lifecycle.py +449 -0
- omnibase_infra/services/mcp/service_mcp_tool_discovery.py +411 -0
- omnibase_infra/services/mcp/service_mcp_tool_registry.py +329 -0
- omnibase_infra/services/mcp/service_mcp_tool_sync.py +565 -0
- omnibase_infra/services/registry_api/__init__.py +40 -0
- omnibase_infra/services/registry_api/main.py +261 -0
- omnibase_infra/services/registry_api/models/__init__.py +66 -0
- omnibase_infra/services/registry_api/models/model_capability_widget_mapping.py +38 -0
- omnibase_infra/services/registry_api/models/model_pagination_info.py +48 -0
- omnibase_infra/services/registry_api/models/model_registry_discovery_response.py +73 -0
- omnibase_infra/services/registry_api/models/model_registry_health_response.py +49 -0
- omnibase_infra/services/registry_api/models/model_registry_instance_view.py +88 -0
- omnibase_infra/services/registry_api/models/model_registry_node_view.py +88 -0
- omnibase_infra/services/registry_api/models/model_registry_summary.py +60 -0
- omnibase_infra/services/registry_api/models/model_response_list_instances.py +43 -0
- omnibase_infra/services/registry_api/models/model_response_list_nodes.py +51 -0
- omnibase_infra/services/registry_api/models/model_warning.py +49 -0
- omnibase_infra/services/registry_api/models/model_widget_defaults.py +28 -0
- omnibase_infra/services/registry_api/models/model_widget_mapping.py +51 -0
- omnibase_infra/services/registry_api/routes.py +371 -0
- omnibase_infra/services/registry_api/service.py +837 -0
- omnibase_infra/services/service_capability_query.py +945 -0
- omnibase_infra/services/service_health.py +898 -0
- omnibase_infra/services/service_node_selector.py +530 -0
- omnibase_infra/services/service_timeout_emitter.py +699 -0
- omnibase_infra/services/service_timeout_scanner.py +394 -0
- omnibase_infra/services/session/__init__.py +56 -0
- omnibase_infra/services/session/config_consumer.py +137 -0
- omnibase_infra/services/session/config_store.py +139 -0
- omnibase_infra/services/session/consumer.py +1007 -0
- omnibase_infra/services/session/protocol_session_aggregator.py +117 -0
- omnibase_infra/services/session/store.py +997 -0
- omnibase_infra/services/snapshot/__init__.py +31 -0
- omnibase_infra/services/snapshot/service_snapshot.py +647 -0
- omnibase_infra/services/snapshot/store_inmemory.py +637 -0
- omnibase_infra/services/snapshot/store_postgres.py +1279 -0
- omnibase_infra/shared/__init__.py +8 -0
- omnibase_infra/testing/__init__.py +10 -0
- omnibase_infra/testing/utils.py +23 -0
- omnibase_infra/topics/__init__.py +45 -0
- omnibase_infra/topics/platform_topic_suffixes.py +140 -0
- omnibase_infra/topics/util_topic_composition.py +95 -0
- omnibase_infra/types/__init__.py +48 -0
- omnibase_infra/types/type_cache_info.py +49 -0
- omnibase_infra/types/type_dsn.py +173 -0
- omnibase_infra/types/type_infra_aliases.py +60 -0
- omnibase_infra/types/typed_dict/__init__.py +29 -0
- omnibase_infra/types/typed_dict/typed_dict_envelope_build_params.py +115 -0
- omnibase_infra/types/typed_dict/typed_dict_introspection_cache.py +128 -0
- omnibase_infra/types/typed_dict/typed_dict_performance_metrics_cache.py +140 -0
- omnibase_infra/types/typed_dict_capabilities.py +64 -0
- omnibase_infra/utils/__init__.py +117 -0
- omnibase_infra/utils/correlation.py +208 -0
- omnibase_infra/utils/util_atomic_file.py +261 -0
- omnibase_infra/utils/util_consumer_group.py +232 -0
- omnibase_infra/utils/util_datetime.py +372 -0
- omnibase_infra/utils/util_db_transaction.py +239 -0
- omnibase_infra/utils/util_dsn_validation.py +333 -0
- omnibase_infra/utils/util_env_parsing.py +264 -0
- omnibase_infra/utils/util_error_sanitization.py +457 -0
- omnibase_infra/utils/util_pydantic_validators.py +477 -0
- omnibase_infra/utils/util_retry_optimistic.py +281 -0
- omnibase_infra/utils/util_semver.py +233 -0
- omnibase_infra/validation/__init__.py +307 -0
- omnibase_infra/validation/contracts/security.validation.yaml +114 -0
- omnibase_infra/validation/enums/__init__.py +11 -0
- omnibase_infra/validation/enums/enum_contract_violation_severity.py +13 -0
- omnibase_infra/validation/infra_validators.py +1514 -0
- omnibase_infra/validation/linter_contract.py +907 -0
- omnibase_infra/validation/mixin_any_type_classification.py +120 -0
- omnibase_infra/validation/mixin_any_type_exemption.py +580 -0
- omnibase_infra/validation/mixin_any_type_reporting.py +106 -0
- omnibase_infra/validation/mixin_execution_shape_violation_checks.py +596 -0
- omnibase_infra/validation/mixin_node_archetype_detection.py +254 -0
- omnibase_infra/validation/models/__init__.py +15 -0
- omnibase_infra/validation/models/model_contract_lint_result.py +101 -0
- omnibase_infra/validation/models/model_contract_violation.py +41 -0
- omnibase_infra/validation/service_validation_aggregator.py +395 -0
- omnibase_infra/validation/validation_exemptions.yaml +2033 -0
- omnibase_infra/validation/validator_any_type.py +715 -0
- omnibase_infra/validation/validator_chain_propagation.py +839 -0
- omnibase_infra/validation/validator_execution_shape.py +465 -0
- omnibase_infra/validation/validator_localhandler.py +261 -0
- omnibase_infra/validation/validator_registration_security.py +410 -0
- omnibase_infra/validation/validator_routing_coverage.py +1020 -0
- omnibase_infra/validation/validator_runtime_shape.py +915 -0
- omnibase_infra/validation/validator_security.py +513 -0
- omnibase_infra/validation/validator_topic_category.py +1152 -0
- omnibase_infra-0.2.6.dist-info/METADATA +197 -0
- omnibase_infra-0.2.6.dist-info/RECORD +833 -0
- omnibase_infra-0.2.6.dist-info/WHEEL +4 -0
- omnibase_infra-0.2.6.dist-info/entry_points.txt +5 -0
- omnibase_infra-0.2.6.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Model for optional string values in runtime module.
|
|
4
|
+
|
|
5
|
+
This module provides a strongly-typed Pydantic model for optional string
|
|
6
|
+
values, replacing `str | None` union types to comply with ONEX standards.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ModelOptionalString(BaseModel):
|
|
13
|
+
"""Strongly-typed model for optional string values.
|
|
14
|
+
|
|
15
|
+
Replaces `str | None` to comply with ONEX standards requiring specific
|
|
16
|
+
typed models instead of generic union types.
|
|
17
|
+
|
|
18
|
+
This wrapper provides a consistent API for working with optional strings,
|
|
19
|
+
including presence checking, default value handling, and functional
|
|
20
|
+
transformation methods.
|
|
21
|
+
|
|
22
|
+
Attributes:
|
|
23
|
+
value: The optional string value, defaults to None.
|
|
24
|
+
|
|
25
|
+
Example:
|
|
26
|
+
>>> opt = ModelOptionalString(value="hello")
|
|
27
|
+
>>> opt.has_value()
|
|
28
|
+
True
|
|
29
|
+
>>> opt.get_or_default("default")
|
|
30
|
+
'hello'
|
|
31
|
+
>>> empty = ModelOptionalString()
|
|
32
|
+
>>> empty.get_or_default("default")
|
|
33
|
+
'default'
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
model_config = ConfigDict(frozen=True, from_attributes=True, extra="forbid")
|
|
37
|
+
|
|
38
|
+
value: str | None = Field(default=None, description="Optional string value")
|
|
39
|
+
|
|
40
|
+
def get(self) -> str | None:
|
|
41
|
+
"""Get the optional value.
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
The string value if present, None otherwise.
|
|
45
|
+
"""
|
|
46
|
+
return self.value
|
|
47
|
+
|
|
48
|
+
def has_value(self) -> bool:
|
|
49
|
+
"""Check if value is present.
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
True if value is not None, False otherwise.
|
|
53
|
+
"""
|
|
54
|
+
return self.value is not None
|
|
55
|
+
|
|
56
|
+
def get_or_default(self, default: str) -> str:
|
|
57
|
+
"""Get value or return default if None.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
default: The default value to return if None.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
The stored value if present, otherwise the default.
|
|
64
|
+
"""
|
|
65
|
+
return self.value if self.value is not None else default
|
|
66
|
+
|
|
67
|
+
def __bool__(self) -> bool:
|
|
68
|
+
"""Boolean representation based on value presence.
|
|
69
|
+
|
|
70
|
+
Warning:
|
|
71
|
+
**Non-standard __bool__ behavior**: This model overrides ``__bool__`` to
|
|
72
|
+
return ``True`` only when a value is present. This differs from typical
|
|
73
|
+
Pydantic model behavior where ``bool(model)`` always returns ``True`` for
|
|
74
|
+
any valid model instance.
|
|
75
|
+
|
|
76
|
+
This design enables idiomatic presence checks::
|
|
77
|
+
|
|
78
|
+
if opt_string:
|
|
79
|
+
# Value is present - use it
|
|
80
|
+
process(opt_string.value)
|
|
81
|
+
else:
|
|
82
|
+
# No value - use fallback
|
|
83
|
+
use_default()
|
|
84
|
+
|
|
85
|
+
Use ``opt_string.has_value()`` for explicit, self-documenting code.
|
|
86
|
+
Use ``opt_string is not None`` if you need to check model existence.
|
|
87
|
+
|
|
88
|
+
Returns:
|
|
89
|
+
True if value is present, False otherwise.
|
|
90
|
+
"""
|
|
91
|
+
return self.has_value()
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
__all__ = ["ModelOptionalString"]
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Model for optional UUID values in runtime module.
|
|
4
|
+
|
|
5
|
+
This module provides a strongly-typed Pydantic model for optional UUID
|
|
6
|
+
values, replacing `UUID | None` union types to comply with ONEX standards.
|
|
7
|
+
|
|
8
|
+
Design Note - Code Duplication:
|
|
9
|
+
The optional wrapper models (ModelOptionalUUID, ModelOptionalString,
|
|
10
|
+
ModelOptionalCorrelationId) contain similar methods (get(), has_value(),
|
|
11
|
+
get_or_default(), __bool__()). This duplication is intentional to comply
|
|
12
|
+
with ONEX principles:
|
|
13
|
+
|
|
14
|
+
1. Each model is self-contained and independently testable
|
|
15
|
+
2. No inheritance or mixin dependencies (composition over inheritance)
|
|
16
|
+
3. Explicit behavior for each type without generic base classes
|
|
17
|
+
4. Each model can evolve independently without breaking others
|
|
18
|
+
5. Clear type signatures without generic type parameters
|
|
19
|
+
|
|
20
|
+
While this creates some duplication, it provides stronger type safety,
|
|
21
|
+
better testability, and clearer semantics for each optional type.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from uuid import UUID
|
|
25
|
+
|
|
26
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ModelOptionalUUID(BaseModel):
|
|
30
|
+
"""Strongly-typed model for optional UUID values.
|
|
31
|
+
|
|
32
|
+
Replaces `UUID | None` to comply with ONEX standards requiring specific
|
|
33
|
+
typed models instead of generic union types.
|
|
34
|
+
|
|
35
|
+
This wrapper provides a consistent API for working with optional UUIDs,
|
|
36
|
+
including presence checking, default value handling, and functional
|
|
37
|
+
transformation methods.
|
|
38
|
+
|
|
39
|
+
Attributes:
|
|
40
|
+
value: The optional UUID value, defaults to None.
|
|
41
|
+
|
|
42
|
+
Example:
|
|
43
|
+
>>> from uuid import UUID
|
|
44
|
+
>>> opt = ModelOptionalUUID(value=UUID("12345678-1234-5678-1234-567812345678"))
|
|
45
|
+
>>> opt.has_value()
|
|
46
|
+
True
|
|
47
|
+
>>> empty = ModelOptionalUUID()
|
|
48
|
+
>>> empty.has_value()
|
|
49
|
+
False
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
model_config = ConfigDict(frozen=True, from_attributes=True, extra="forbid")
|
|
53
|
+
|
|
54
|
+
value: UUID | None = Field(default=None, description="Optional UUID value")
|
|
55
|
+
|
|
56
|
+
def get(self) -> UUID | None:
|
|
57
|
+
"""Get the optional value.
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
The UUID value if present, None otherwise.
|
|
61
|
+
"""
|
|
62
|
+
return self.value
|
|
63
|
+
|
|
64
|
+
def has_value(self) -> bool:
|
|
65
|
+
"""Check if value is present.
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
True if value is not None, False otherwise.
|
|
69
|
+
"""
|
|
70
|
+
return self.value is not None
|
|
71
|
+
|
|
72
|
+
def get_or_default(self, default: UUID) -> UUID:
|
|
73
|
+
"""Get value or return default if None.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
default: The default UUID to return if None.
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
The stored value if present, otherwise the default.
|
|
80
|
+
"""
|
|
81
|
+
return self.value if self.value is not None else default
|
|
82
|
+
|
|
83
|
+
def __bool__(self) -> bool:
|
|
84
|
+
"""Boolean representation based on value presence.
|
|
85
|
+
|
|
86
|
+
Warning:
|
|
87
|
+
**Non-standard __bool__ behavior**: This model overrides ``__bool__`` to
|
|
88
|
+
return ``True`` only when a value is present. This differs from typical
|
|
89
|
+
Pydantic model behavior where ``bool(model)`` always returns ``True`` for
|
|
90
|
+
any valid model instance.
|
|
91
|
+
|
|
92
|
+
This design enables idiomatic presence checks::
|
|
93
|
+
|
|
94
|
+
if opt_uuid:
|
|
95
|
+
# Value is present - use it
|
|
96
|
+
process(opt_uuid.value)
|
|
97
|
+
else:
|
|
98
|
+
# No value - use fallback
|
|
99
|
+
use_default()
|
|
100
|
+
|
|
101
|
+
Use ``opt_uuid.has_value()`` for explicit, self-documenting code.
|
|
102
|
+
Use ``opt_uuid is not None`` if you need to check model existence.
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
True if value is present, False otherwise.
|
|
106
|
+
"""
|
|
107
|
+
return self.has_value()
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
__all__ = ["ModelOptionalUUID"]
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Pydantic model for policy evaluation context.
|
|
4
|
+
|
|
5
|
+
This module provides the ModelPolicyContext Pydantic BaseModel for passing
|
|
6
|
+
structured context to policy evaluation methods.
|
|
7
|
+
|
|
8
|
+
Design Notes:
|
|
9
|
+
- Uses ConfigDict(extra="allow") to support arbitrary policy-specific fields
|
|
10
|
+
- Supports dict-like access via __getitem__ for flexible API usage
|
|
11
|
+
- Can be instantiated from dicts using model_validate()
|
|
12
|
+
- Follows ONEX naming convention: Model<Name>
|
|
13
|
+
|
|
14
|
+
This model replaces the former JsonType usage in ProtocolPolicy.evaluate()
|
|
15
|
+
and ProtocolPolicy.decide() method signatures, providing type safety while
|
|
16
|
+
maintaining flexibility for diverse policy contexts.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
from uuid import UUID
|
|
22
|
+
|
|
23
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
24
|
+
|
|
25
|
+
from omnibase_infra.mixins import MixinDictLikeAccessors
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class ModelPolicyContext(MixinDictLikeAccessors, BaseModel):
|
|
29
|
+
"""Base Pydantic model for policy evaluation context.
|
|
30
|
+
|
|
31
|
+
This model provides structured context for policy evaluation including
|
|
32
|
+
correlation IDs, attempt counts, and policy-specific parameters.
|
|
33
|
+
|
|
34
|
+
Common Fields:
|
|
35
|
+
correlation_id: UUID for distributed tracing
|
|
36
|
+
attempt: Current retry/evaluation attempt number
|
|
37
|
+
timestamp_ms: Evaluation timestamp in milliseconds
|
|
38
|
+
metadata: Additional metadata for observability
|
|
39
|
+
|
|
40
|
+
Configuration:
|
|
41
|
+
- extra="allow": Accepts arbitrary additional fields for policy-specific data
|
|
42
|
+
- frozen=False: Allows mutation (though policies should not mutate context)
|
|
43
|
+
- populate_by_name=True: Allows field access by alias
|
|
44
|
+
|
|
45
|
+
Example:
|
|
46
|
+
```python
|
|
47
|
+
from uuid import uuid4
|
|
48
|
+
|
|
49
|
+
# Create with known fields
|
|
50
|
+
context = ModelPolicyContext(
|
|
51
|
+
correlation_id=uuid4(),
|
|
52
|
+
attempt=3,
|
|
53
|
+
base_delay_seconds=1.0,
|
|
54
|
+
max_delay_seconds=60.0,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
# Access with get (dict-like API)
|
|
58
|
+
attempt = context.get("attempt", 0)
|
|
59
|
+
|
|
60
|
+
# Access as attribute
|
|
61
|
+
corr_id = context.correlation_id
|
|
62
|
+
|
|
63
|
+
# Create from dict
|
|
64
|
+
context = ModelPolicyContext.model_validate({"attempt": 3, "error_type": "timeout"})
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Policy-Specific Fields:
|
|
68
|
+
For orchestrator policies:
|
|
69
|
+
- attempt: Current retry attempt number
|
|
70
|
+
- error_type: Type of error that triggered evaluation
|
|
71
|
+
- elapsed_ms: Time elapsed since operation started
|
|
72
|
+
- base_delay_seconds: Base delay for backoff calculations
|
|
73
|
+
- max_delay_seconds: Maximum delay cap
|
|
74
|
+
|
|
75
|
+
For reducer policies:
|
|
76
|
+
- current_state: Current aggregated state
|
|
77
|
+
- event: Event to process
|
|
78
|
+
- timestamp: Event timestamp
|
|
79
|
+
- sequence_number: Event sequence for ordering
|
|
80
|
+
|
|
81
|
+
Note:
|
|
82
|
+
All fields are optional due to extra="allow". Specific policies should
|
|
83
|
+
document which context fields they require for proper evaluation.
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
model_config = ConfigDict(
|
|
87
|
+
extra="allow",
|
|
88
|
+
frozen=False,
|
|
89
|
+
populate_by_name=True,
|
|
90
|
+
from_attributes=True,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
# Common context fields - all optional with defaults
|
|
94
|
+
correlation_id: UUID | None = None
|
|
95
|
+
attempt: int = 0
|
|
96
|
+
timestamp_ms: int = 0
|
|
97
|
+
metadata: dict[str, object] = Field(default_factory=dict)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
__all__: list[str] = ["ModelPolicyContext"]
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""ModelPolicyKey - Strongly-typed PolicyRegistry key.
|
|
4
|
+
|
|
5
|
+
Defines ModelPolicyKey for PolicyRegistry dict operations.
|
|
6
|
+
Replaces primitive tuple[str, str, str] pattern with named fields.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
12
|
+
|
|
13
|
+
from omnibase_infra.enums import EnumPolicyType
|
|
14
|
+
from omnibase_infra.runtime.util_version import normalize_version
|
|
15
|
+
from omnibase_infra.types import PolicyTypeInput
|
|
16
|
+
from omnibase_infra.utils import validate_policy_type_value
|
|
17
|
+
|
|
18
|
+
# NOTE: PolicyTypeInput is the INPUT type (str | EnumPolicyType) for API flexibility.
|
|
19
|
+
# The validator coerces strings to EnumPolicyType, so the actual stored value is
|
|
20
|
+
# always an enum. This ensures type-safe access after model instantiation.
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ModelPolicyKey(BaseModel):
|
|
24
|
+
"""Strongly-typed policy registry key.
|
|
25
|
+
|
|
26
|
+
Replaces tuple[str, str, str] pattern with named fields,
|
|
27
|
+
validation, and self-documenting structure.
|
|
28
|
+
|
|
29
|
+
Attributes:
|
|
30
|
+
policy_id: Unique identifier for the policy (e.g., 'exponential_backoff')
|
|
31
|
+
policy_type: Policy category (EnumPolicyType or 'orchestrator'/'reducer' string)
|
|
32
|
+
version: Semantic version string (e.g., '1.0.0')
|
|
33
|
+
|
|
34
|
+
Example:
|
|
35
|
+
>>> from omnibase_infra.enums import EnumPolicyType
|
|
36
|
+
>>> key = ModelPolicyKey(
|
|
37
|
+
... policy_id="retry_backoff",
|
|
38
|
+
... policy_type=EnumPolicyType.ORCHESTRATOR,
|
|
39
|
+
... version="1.0.0"
|
|
40
|
+
... )
|
|
41
|
+
>>> print(key.policy_id)
|
|
42
|
+
retry_backoff
|
|
43
|
+
>>> # Also accepts string policy_type
|
|
44
|
+
>>> key2 = ModelPolicyKey(
|
|
45
|
+
... policy_id="state_merger",
|
|
46
|
+
... policy_type="reducer",
|
|
47
|
+
... version="1.0.0"
|
|
48
|
+
... )
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
policy_id: str = Field(..., description="Unique policy identifier")
|
|
52
|
+
# NOTE: Field accepts PolicyTypeInput (str | EnumPolicyType) via mode="before" coercion,
|
|
53
|
+
# but the validator always coerces to EnumPolicyType. We annotate with the coerced type.
|
|
54
|
+
policy_type: EnumPolicyType = Field(
|
|
55
|
+
...,
|
|
56
|
+
description="Policy type (accepts string or enum, always stored as EnumPolicyType)",
|
|
57
|
+
)
|
|
58
|
+
version: str = Field(default="1.0.0", description="Semantic version string")
|
|
59
|
+
|
|
60
|
+
model_config = ConfigDict(
|
|
61
|
+
frozen=True, # Make hashable for dict keys
|
|
62
|
+
from_attributes=True,
|
|
63
|
+
str_strip_whitespace=True,
|
|
64
|
+
extra="forbid",
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
@field_validator("version", mode="before")
|
|
68
|
+
@classmethod
|
|
69
|
+
def validate_and_normalize_version(cls, v: str) -> str:
|
|
70
|
+
"""Normalize version string for consistent lookups.
|
|
71
|
+
|
|
72
|
+
Delegates to the shared normalize_version utility which is the
|
|
73
|
+
SINGLE SOURCE OF TRUTH for version normalization in omnibase_infra.
|
|
74
|
+
|
|
75
|
+
Converts version strings to canonical x.y.z format. This ensures consistent
|
|
76
|
+
version handling across all ONEX components, preventing lookup mismatches
|
|
77
|
+
where "1.0.0" and "1.0" might be treated as different versions.
|
|
78
|
+
|
|
79
|
+
Normalization rules:
|
|
80
|
+
1. Strip leading/trailing whitespace
|
|
81
|
+
2. Strip leading 'v' or 'V' prefix
|
|
82
|
+
3. Expand partial versions (1 -> 1.0.0, 1.0 -> 1.0.0)
|
|
83
|
+
4. Parse with ModelSemVer.parse() for validation
|
|
84
|
+
5. Preserve prerelease suffix if present
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
v: The version string to normalize
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
Normalized version string in "x.y.z" or "x.y.z-prerelease" format
|
|
91
|
+
|
|
92
|
+
Raises:
|
|
93
|
+
ValueError: If the version string is invalid and cannot be parsed
|
|
94
|
+
|
|
95
|
+
Examples:
|
|
96
|
+
>>> ModelPolicyKey(policy_id="test", policy_type="orchestrator", version="1.0")
|
|
97
|
+
ModelPolicyKey(policy_id='test', policy_type='orchestrator', version='1.0.0')
|
|
98
|
+
>>> ModelPolicyKey(policy_id="test", policy_type="orchestrator", version="v2.1")
|
|
99
|
+
ModelPolicyKey(policy_id='test', policy_type='orchestrator', version='2.1.0')
|
|
100
|
+
"""
|
|
101
|
+
return normalize_version(v)
|
|
102
|
+
|
|
103
|
+
@field_validator("policy_type", mode="before")
|
|
104
|
+
@classmethod
|
|
105
|
+
def validate_policy_type(cls, v: PolicyTypeInput) -> EnumPolicyType:
|
|
106
|
+
"""Validate and coerce policy_type to EnumPolicyType.
|
|
107
|
+
|
|
108
|
+
Delegates to shared utility for consistent validation across all models.
|
|
109
|
+
String values are coerced to EnumPolicyType, ensuring type-safe access.
|
|
110
|
+
|
|
111
|
+
Note: mode="before" allows accepting str input before Pydantic validation.
|
|
112
|
+
"""
|
|
113
|
+
return validate_policy_type_value(v)
|
|
114
|
+
|
|
115
|
+
def to_tuple(self) -> tuple[str, str, str]:
|
|
116
|
+
"""Convert to tuple representation.
|
|
117
|
+
|
|
118
|
+
Returns:
|
|
119
|
+
Tuple of (policy_id, policy_type, version)
|
|
120
|
+
"""
|
|
121
|
+
# policy_type is always EnumPolicyType after validation coercion
|
|
122
|
+
return (self.policy_id, self.policy_type.value, self.version)
|
|
123
|
+
|
|
124
|
+
@classmethod
|
|
125
|
+
def from_tuple(cls, key_tuple: tuple[str, str, str]) -> ModelPolicyKey:
|
|
126
|
+
"""Create from tuple representation.
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
key_tuple: Tuple of (policy_id, policy_type, version)
|
|
130
|
+
|
|
131
|
+
Returns:
|
|
132
|
+
ModelPolicyKey instance
|
|
133
|
+
"""
|
|
134
|
+
return cls(
|
|
135
|
+
policy_id=key_tuple[0],
|
|
136
|
+
policy_type=key_tuple[1],
|
|
137
|
+
version=key_tuple[2],
|
|
138
|
+
)
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Policy Registration Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for policy registration parameters,
|
|
6
|
+
used to register policy plugins with the RegistryPolicy.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import TYPE_CHECKING
|
|
12
|
+
|
|
13
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
14
|
+
|
|
15
|
+
from omnibase_infra.enums import EnumPolicyType
|
|
16
|
+
from omnibase_infra.runtime.util_version import normalize_version
|
|
17
|
+
from omnibase_infra.types import PolicyTypeInput
|
|
18
|
+
from omnibase_infra.utils import validate_policy_type_value
|
|
19
|
+
|
|
20
|
+
# NOTE: PolicyTypeInput is the INPUT type (str | EnumPolicyType) for API flexibility.
|
|
21
|
+
# The validator coerces strings to EnumPolicyType, so the actual stored value is
|
|
22
|
+
# always an enum. This ensures type-safe access after model instantiation.
|
|
23
|
+
|
|
24
|
+
if TYPE_CHECKING:
|
|
25
|
+
from omnibase_infra.runtime.protocol_policy import ProtocolPolicy
|
|
26
|
+
|
|
27
|
+
# Type alias for policy class - uses TYPE_CHECKING to avoid circular import
|
|
28
|
+
PolicyClass = type[ProtocolPolicy]
|
|
29
|
+
else:
|
|
30
|
+
# NOTE: At runtime we use generic type to avoid circular import.
|
|
31
|
+
# Type checkers see proper protocol type via TYPE_CHECKING block.
|
|
32
|
+
PolicyClass = type # type: ignore[assignment,misc]
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class ModelPolicyRegistration(BaseModel):
|
|
36
|
+
"""Model for policy registration parameters.
|
|
37
|
+
|
|
38
|
+
Encapsulates all parameters needed to register a policy plugin with
|
|
39
|
+
the RegistryPolicy. This model reduces the number of parameters in
|
|
40
|
+
the register() method signature.
|
|
41
|
+
|
|
42
|
+
Attributes:
|
|
43
|
+
policy_id: Unique identifier for the policy (e.g., 'exponential_backoff')
|
|
44
|
+
policy_class: Policy implementation class that implements ProtocolPolicy
|
|
45
|
+
policy_type: Policy type - either orchestrator or reducer
|
|
46
|
+
version: Semantic version string (default: "1.0.0")
|
|
47
|
+
description: Human-readable description of the policy
|
|
48
|
+
allow_async: If True, allows async interface (must be explicit)
|
|
49
|
+
|
|
50
|
+
Example:
|
|
51
|
+
>>> from omnibase_infra.runtime.models import ModelPolicyRegistration
|
|
52
|
+
>>> from omnibase_infra.enums import EnumPolicyType
|
|
53
|
+
>>> registration = ModelPolicyRegistration(
|
|
54
|
+
... policy_id="exponential_backoff",
|
|
55
|
+
... policy_class=ExponentialBackoffPolicy,
|
|
56
|
+
... policy_type=EnumPolicyType.ORCHESTRATOR,
|
|
57
|
+
... version="1.0.0",
|
|
58
|
+
... description="Calculates exponential backoff delays for retries",
|
|
59
|
+
... )
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
model_config = ConfigDict(
|
|
63
|
+
strict=False, # Allow type coercion for policy_class
|
|
64
|
+
frozen=True,
|
|
65
|
+
extra="forbid",
|
|
66
|
+
arbitrary_types_allowed=True, # Required for type[ProtocolPolicy]
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
policy_id: str = Field(
|
|
70
|
+
...,
|
|
71
|
+
description="Unique policy identifier (e.g., 'exponential_backoff')",
|
|
72
|
+
)
|
|
73
|
+
policy_class: PolicyClass = Field(
|
|
74
|
+
...,
|
|
75
|
+
description="Policy implementation class that implements ProtocolPolicy",
|
|
76
|
+
)
|
|
77
|
+
# NOTE: Field accepts PolicyTypeInput (str | EnumPolicyType) via mode="before" coercion,
|
|
78
|
+
# but the validator always coerces to EnumPolicyType. We annotate with the coerced type.
|
|
79
|
+
policy_type: EnumPolicyType = Field(
|
|
80
|
+
...,
|
|
81
|
+
description="Policy type (accepts string or enum, always stored as EnumPolicyType)",
|
|
82
|
+
)
|
|
83
|
+
version: str = Field(
|
|
84
|
+
default="1.0.0",
|
|
85
|
+
description="Semantic version string",
|
|
86
|
+
)
|
|
87
|
+
description: str = Field(
|
|
88
|
+
default="",
|
|
89
|
+
description="Human-readable description of the policy",
|
|
90
|
+
)
|
|
91
|
+
allow_async: bool = Field(
|
|
92
|
+
default=False,
|
|
93
|
+
description="If True, allows async interface (must be explicit for async policies)",
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
@field_validator("version", mode="before")
|
|
97
|
+
@classmethod
|
|
98
|
+
def validate_and_normalize_version(cls, v: str) -> str:
|
|
99
|
+
"""Normalize version string for consistent storage.
|
|
100
|
+
|
|
101
|
+
Delegates to the shared normalize_version utility which is the
|
|
102
|
+
SINGLE SOURCE OF TRUTH for version normalization in omnibase_infra.
|
|
103
|
+
|
|
104
|
+
Converts version strings to canonical x.y.z format. This ensures version
|
|
105
|
+
strings are consistent across the registry, preventing storage/lookup
|
|
106
|
+
mismatches.
|
|
107
|
+
|
|
108
|
+
Normalization rules:
|
|
109
|
+
1. Strip leading/trailing whitespace
|
|
110
|
+
2. Strip leading 'v' or 'V' prefix
|
|
111
|
+
3. Expand partial versions (1 -> 1.0.0, 1.0 -> 1.0.0)
|
|
112
|
+
4. Parse with ModelSemVer.parse() for validation
|
|
113
|
+
5. Preserve prerelease suffix if present
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
v: The version string to normalize
|
|
117
|
+
|
|
118
|
+
Returns:
|
|
119
|
+
Normalized version string in "x.y.z" or "x.y.z-prerelease" format
|
|
120
|
+
|
|
121
|
+
Raises:
|
|
122
|
+
ValueError: If the version string is invalid and cannot be parsed
|
|
123
|
+
"""
|
|
124
|
+
return normalize_version(v)
|
|
125
|
+
|
|
126
|
+
@field_validator("policy_type", mode="before")
|
|
127
|
+
@classmethod
|
|
128
|
+
def validate_policy_type(cls, v: PolicyTypeInput) -> EnumPolicyType:
|
|
129
|
+
"""Validate and coerce policy_type to EnumPolicyType.
|
|
130
|
+
|
|
131
|
+
Delegates to shared utility for consistent validation across all models.
|
|
132
|
+
String values are coerced to EnumPolicyType, ensuring type-safe access.
|
|
133
|
+
|
|
134
|
+
Note: mode="before" allows accepting str input before Pydantic validation.
|
|
135
|
+
"""
|
|
136
|
+
return validate_policy_type_value(v)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
__all__: list[str] = ["ModelPolicyRegistration"]
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Pydantic model for policy evaluation result.
|
|
4
|
+
|
|
5
|
+
This module provides the ModelPolicyResult Pydantic BaseModel for returning
|
|
6
|
+
structured results from policy evaluation methods.
|
|
7
|
+
|
|
8
|
+
Design Notes:
|
|
9
|
+
- Uses ConfigDict(extra="allow") to support arbitrary policy-specific fields
|
|
10
|
+
- Supports dict-like access via __getitem__ for flexible API usage
|
|
11
|
+
- Can be instantiated from dicts using model_validate()
|
|
12
|
+
- Follows ONEX naming convention: Model<Name>
|
|
13
|
+
|
|
14
|
+
This model replaces the former JsonType return type in ProtocolPolicy.evaluate()
|
|
15
|
+
and ProtocolPolicy.decide() method signatures, providing type safety while
|
|
16
|
+
maintaining flexibility for diverse policy results.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
22
|
+
|
|
23
|
+
from omnibase_infra.mixins import MixinDictLikeAccessors
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ModelPolicyResult(MixinDictLikeAccessors, BaseModel):
|
|
27
|
+
"""Base Pydantic model for policy evaluation results.
|
|
28
|
+
|
|
29
|
+
This model provides structured results from policy evaluation including
|
|
30
|
+
decisions, computed values, and metadata.
|
|
31
|
+
|
|
32
|
+
Common Fields:
|
|
33
|
+
success: Whether the policy evaluation succeeded
|
|
34
|
+
reason: Human-readable explanation of the decision
|
|
35
|
+
metadata: Additional metadata for observability
|
|
36
|
+
|
|
37
|
+
Configuration:
|
|
38
|
+
- extra="allow": Accepts arbitrary additional fields for policy-specific results
|
|
39
|
+
- frozen=False: Allows mutation
|
|
40
|
+
- populate_by_name=True: Allows field access by alias
|
|
41
|
+
|
|
42
|
+
Example:
|
|
43
|
+
```python
|
|
44
|
+
# Return from orchestrator policy (retry decision)
|
|
45
|
+
result = ModelPolicyResult(
|
|
46
|
+
should_retry=True,
|
|
47
|
+
delay_seconds=4.0,
|
|
48
|
+
reason="Attempt 2 of 10, exponential backoff",
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
# Return from reducer policy (merge decision)
|
|
52
|
+
result = ModelPolicyResult(
|
|
53
|
+
merged_state={"count": 5, "sum": 100},
|
|
54
|
+
conflicts=[],
|
|
55
|
+
success=True,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
# Access with get (dict-like, backwards compatible)
|
|
59
|
+
should_retry = result.get("should_retry", False)
|
|
60
|
+
|
|
61
|
+
# Access as attribute
|
|
62
|
+
delay = result.delay_seconds
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Policy-Specific Fields:
|
|
66
|
+
For orchestrator retry policies:
|
|
67
|
+
- should_retry: Whether to retry the operation
|
|
68
|
+
- delay_seconds: Delay before retry
|
|
69
|
+
- max_retries_reached: Whether max retries exceeded
|
|
70
|
+
|
|
71
|
+
For orchestrator routing policies:
|
|
72
|
+
- target_handler: Handler to route to
|
|
73
|
+
- priority: Routing priority
|
|
74
|
+
- fallback_handlers: Alternative handlers if primary fails
|
|
75
|
+
|
|
76
|
+
For reducer merge policies:
|
|
77
|
+
- merged_state: Result of state merge
|
|
78
|
+
- conflicts: List of detected conflicts
|
|
79
|
+
- resolution_strategy: How conflicts were resolved
|
|
80
|
+
|
|
81
|
+
For reducer projection policies:
|
|
82
|
+
- projection: Projected view of state
|
|
83
|
+
- projection_type: Type of projection applied
|
|
84
|
+
|
|
85
|
+
Note:
|
|
86
|
+
All fields are optional due to extra="allow". Specific policies should
|
|
87
|
+
document which result fields they return.
|
|
88
|
+
"""
|
|
89
|
+
|
|
90
|
+
model_config = ConfigDict(
|
|
91
|
+
extra="allow",
|
|
92
|
+
frozen=False,
|
|
93
|
+
populate_by_name=True,
|
|
94
|
+
from_attributes=True,
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
# Common result fields - all optional with defaults
|
|
98
|
+
success: bool = True
|
|
99
|
+
reason: str = ""
|
|
100
|
+
metadata: dict[str, object] = Field(default_factory=dict)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
__all__: list[str] = ["ModelPolicyResult"]
|