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,24 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""MCP operation type enumeration."""
|
|
4
|
+
|
|
5
|
+
from enum import Enum
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class EnumMcpOperationType(str, Enum):
|
|
9
|
+
"""Operation types for MCP handler.
|
|
10
|
+
|
|
11
|
+
The MCP handler supports three primary operations:
|
|
12
|
+
- LIST_TOOLS: Discover available tools from registered ONEX nodes
|
|
13
|
+
- CALL_TOOL: Invoke a specific tool with parameters
|
|
14
|
+
- DESCRIBE: Return handler metadata and capabilities
|
|
15
|
+
|
|
16
|
+
These map to the MCP protocol's tools/list and tools/call methods.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
LIST_TOOLS = "mcp.list_tools"
|
|
20
|
+
CALL_TOOL = "mcp.call_tool"
|
|
21
|
+
DESCRIBE = "mcp.describe"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
__all__ = ["EnumMcpOperationType"]
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
# ruff: noqa: S104
|
|
4
|
+
# S104 disabled: Binding to 0.0.0.0 is intentional for container networking
|
|
5
|
+
"""MCP handler configuration model."""
|
|
6
|
+
|
|
7
|
+
from pydantic import BaseModel, Field
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ModelMcpHandlerConfig(BaseModel):
|
|
11
|
+
"""Configuration for MCP handler initialization.
|
|
12
|
+
|
|
13
|
+
Attributes:
|
|
14
|
+
host: Host to bind the MCP server to.
|
|
15
|
+
port: Port for the MCP streamable HTTP endpoint.
|
|
16
|
+
path: URL path for the MCP endpoint (default: "/mcp").
|
|
17
|
+
stateless: Enable stateless mode for horizontal scaling.
|
|
18
|
+
json_response: Return JSON responses instead of SSE streaming.
|
|
19
|
+
timeout_seconds: Default timeout for tool execution.
|
|
20
|
+
max_tools: Maximum number of tools to expose.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
host: str = Field(default="0.0.0.0", description="Host to bind MCP server to")
|
|
24
|
+
port: int = Field(default=8090, description="Port for MCP streamable HTTP endpoint")
|
|
25
|
+
path: str = Field(default="/mcp", description="URL path for MCP endpoint")
|
|
26
|
+
stateless: bool = Field(
|
|
27
|
+
default=True, description="Enable stateless mode for horizontal scaling"
|
|
28
|
+
)
|
|
29
|
+
json_response: bool = Field(
|
|
30
|
+
default=True, description="Return JSON responses instead of SSE streaming"
|
|
31
|
+
)
|
|
32
|
+
timeout_seconds: float = Field(
|
|
33
|
+
default=30.0, description="Default timeout for tool execution"
|
|
34
|
+
)
|
|
35
|
+
max_tools: int = Field(default=100, description="Maximum number of tools to expose")
|
|
36
|
+
|
|
37
|
+
model_config = {"frozen": True}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
__all__ = ["ModelMcpHandlerConfig"]
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""MCP tool call request model."""
|
|
4
|
+
|
|
5
|
+
from uuid import UUID
|
|
6
|
+
|
|
7
|
+
from pydantic import BaseModel, Field
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ModelMcpToolCall(BaseModel):
|
|
11
|
+
"""Request model for MCP tool invocation.
|
|
12
|
+
|
|
13
|
+
Represents an incoming tool call from an AI agent via MCP protocol.
|
|
14
|
+
|
|
15
|
+
Attributes:
|
|
16
|
+
tool_name: Name of the tool to invoke.
|
|
17
|
+
arguments: Tool parameters as key-value pairs.
|
|
18
|
+
correlation_id: Optional correlation ID for request tracing.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
tool_name: str = Field(..., description="Name of the tool to invoke")
|
|
22
|
+
arguments: dict[str, object] = Field(
|
|
23
|
+
default_factory=dict, description="Tool parameters as key-value pairs"
|
|
24
|
+
)
|
|
25
|
+
correlation_id: UUID | None = Field(
|
|
26
|
+
default=None, description="Optional correlation ID for request tracing"
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
model_config = {"frozen": True}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
__all__ = ["ModelMcpToolCall"]
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""MCP tool result model."""
|
|
4
|
+
|
|
5
|
+
from uuid import UUID
|
|
6
|
+
|
|
7
|
+
from pydantic import BaseModel, Field
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ModelMcpToolResult(BaseModel):
|
|
11
|
+
"""Result model for MCP tool invocation.
|
|
12
|
+
|
|
13
|
+
Represents the response from a tool invocation to be returned via MCP.
|
|
14
|
+
|
|
15
|
+
Attributes:
|
|
16
|
+
success: Whether the tool execution succeeded.
|
|
17
|
+
content: The result content (string or structured data).
|
|
18
|
+
is_error: Whether this result represents an error.
|
|
19
|
+
error_message: Error details if is_error is True.
|
|
20
|
+
correlation_id: Correlation ID from the original request.
|
|
21
|
+
execution_time_ms: Execution duration in milliseconds.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
success: bool = Field(..., description="Whether the tool execution succeeded")
|
|
25
|
+
content: str | dict[str, object] | list[object] = Field(
|
|
26
|
+
..., description="The result content (string or structured data)"
|
|
27
|
+
)
|
|
28
|
+
is_error: bool = Field(
|
|
29
|
+
default=False, description="Whether this result represents an error"
|
|
30
|
+
)
|
|
31
|
+
error_message: str | None = Field(
|
|
32
|
+
default=None, description="Error details if is_error is True"
|
|
33
|
+
)
|
|
34
|
+
correlation_id: UUID | None = Field(
|
|
35
|
+
default=None, description="Correlation ID from the original request"
|
|
36
|
+
)
|
|
37
|
+
execution_time_ms: float | None = Field(
|
|
38
|
+
default=None,
|
|
39
|
+
description="Execution duration in milliseconds (sub-ms precision)",
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
model_config = {"frozen": True}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
__all__ = ["ModelMcpToolResult"]
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Consul Handler Response Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for Consul handler response envelopes
|
|
6
|
+
used by the HandlerConsul.
|
|
7
|
+
|
|
8
|
+
This model provides type consistency with ModelDbQueryResponse, ensuring
|
|
9
|
+
both handlers return strongly-typed Pydantic models with consistent
|
|
10
|
+
interfaces (status, payload, correlation_id).
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
from uuid import UUID
|
|
16
|
+
|
|
17
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
18
|
+
|
|
19
|
+
from omnibase_infra.enums import EnumResponseStatus
|
|
20
|
+
from omnibase_infra.handlers.models.consul import (
|
|
21
|
+
ModelConsulHandlerPayload,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class ModelConsulHandlerResponse(BaseModel):
|
|
26
|
+
"""Full Consul handler response envelope.
|
|
27
|
+
|
|
28
|
+
Provides a standardized response format for Consul operations
|
|
29
|
+
with status, payload, and correlation tracking.
|
|
30
|
+
|
|
31
|
+
This model mirrors ModelDbQueryResponse to ensure consistent
|
|
32
|
+
interfaces across infrastructure handlers.
|
|
33
|
+
|
|
34
|
+
Attributes:
|
|
35
|
+
status: Operation status (EnumResponseStatus.SUCCESS or EnumResponseStatus.ERROR)
|
|
36
|
+
payload: Consul operation result payload containing operation-specific data
|
|
37
|
+
correlation_id: UUID for request/response correlation
|
|
38
|
+
|
|
39
|
+
Example:
|
|
40
|
+
>>> from uuid import uuid4
|
|
41
|
+
>>> from omnibase_infra.enums import EnumResponseStatus
|
|
42
|
+
>>> from omnibase_infra.handlers.models.consul import ModelConsulRegisterPayload
|
|
43
|
+
>>> response = ModelConsulHandlerResponse(
|
|
44
|
+
... status=EnumResponseStatus.SUCCESS,
|
|
45
|
+
... payload=ModelConsulHandlerPayload(
|
|
46
|
+
... data=ModelConsulRegisterPayload(
|
|
47
|
+
... registered=True,
|
|
48
|
+
... name="my-service",
|
|
49
|
+
... consul_service_id="my-service-1",
|
|
50
|
+
... ),
|
|
51
|
+
... ),
|
|
52
|
+
... correlation_id=uuid4(),
|
|
53
|
+
... )
|
|
54
|
+
>>> print(response.status)
|
|
55
|
+
<EnumResponseStatus.SUCCESS: 'success'>
|
|
56
|
+
>>> print(response.payload.data.operation_type)
|
|
57
|
+
'register'
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
model_config = ConfigDict(
|
|
61
|
+
strict=True,
|
|
62
|
+
frozen=True,
|
|
63
|
+
extra="forbid",
|
|
64
|
+
from_attributes=True, # Support pytest-xdist compatibility
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
status: EnumResponseStatus = Field(
|
|
68
|
+
description="Operation status indicator",
|
|
69
|
+
)
|
|
70
|
+
payload: ModelConsulHandlerPayload = Field(
|
|
71
|
+
description="Consul operation result payload",
|
|
72
|
+
)
|
|
73
|
+
correlation_id: UUID = Field(
|
|
74
|
+
description="UUID for request/response correlation",
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
@property
|
|
78
|
+
def is_success(self) -> bool:
|
|
79
|
+
"""Check if the response indicates a successful operation.
|
|
80
|
+
|
|
81
|
+
Returns:
|
|
82
|
+
True if status is SUCCESS, False otherwise.
|
|
83
|
+
"""
|
|
84
|
+
return self.status == EnumResponseStatus.SUCCESS
|
|
85
|
+
|
|
86
|
+
@property
|
|
87
|
+
def is_error(self) -> bool:
|
|
88
|
+
"""Check if the response indicates an error.
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
True if status is ERROR, False otherwise.
|
|
92
|
+
"""
|
|
93
|
+
return self.status == EnumResponseStatus.ERROR
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
__all__: list[str] = ["ModelConsulHandlerResponse"]
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Database Describe Response Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for database handler metadata
|
|
6
|
+
and capabilities responses.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
from omnibase_core.types import JsonType
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ModelDbDescribeResponse(BaseModel):
|
|
17
|
+
"""Database handler metadata and capabilities response.
|
|
18
|
+
|
|
19
|
+
Provides handler metadata including supported operations,
|
|
20
|
+
configuration, and version information.
|
|
21
|
+
|
|
22
|
+
Attributes:
|
|
23
|
+
handler_type: Architectural role of handler (e.g., "infra_handler")
|
|
24
|
+
handler_category: Behavioral classification (e.g., "effect")
|
|
25
|
+
supported_operations: List of supported operation types
|
|
26
|
+
pool_size: Connection pool size
|
|
27
|
+
timeout_seconds: Query timeout in seconds
|
|
28
|
+
initialized: Whether the handler has been initialized
|
|
29
|
+
version: Handler version string
|
|
30
|
+
circuit_breaker: Circuit breaker state information (optional)
|
|
31
|
+
|
|
32
|
+
Example:
|
|
33
|
+
>>> describe = ModelDbDescribeResponse(
|
|
34
|
+
... handler_type="infra_handler",
|
|
35
|
+
... handler_category="effect",
|
|
36
|
+
... supported_operations=["db.query", "db.execute"],
|
|
37
|
+
... pool_size=5,
|
|
38
|
+
... timeout_seconds=30.0,
|
|
39
|
+
... initialized=True,
|
|
40
|
+
... version="0.1.0-mvp",
|
|
41
|
+
... circuit_breaker={"state": "closed", "failures": 0},
|
|
42
|
+
... )
|
|
43
|
+
>>> print(describe.supported_operations)
|
|
44
|
+
['db.query', 'db.execute']
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
model_config = ConfigDict(
|
|
48
|
+
strict=True,
|
|
49
|
+
frozen=True,
|
|
50
|
+
extra="forbid",
|
|
51
|
+
from_attributes=True, # Support pytest-xdist compatibility
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
handler_type: str = Field(
|
|
55
|
+
description="Architectural role of handler (e.g., 'infra_handler')",
|
|
56
|
+
)
|
|
57
|
+
handler_category: str = Field(
|
|
58
|
+
description="Behavioral classification (e.g., 'effect')",
|
|
59
|
+
)
|
|
60
|
+
supported_operations: list[str] = Field(
|
|
61
|
+
description="List of supported operation types",
|
|
62
|
+
)
|
|
63
|
+
pool_size: int = Field(
|
|
64
|
+
ge=1,
|
|
65
|
+
description="Connection pool size",
|
|
66
|
+
)
|
|
67
|
+
timeout_seconds: float = Field(
|
|
68
|
+
gt=0,
|
|
69
|
+
description="Query timeout in seconds",
|
|
70
|
+
)
|
|
71
|
+
initialized: bool = Field(
|
|
72
|
+
description="Whether the handler has been initialized",
|
|
73
|
+
)
|
|
74
|
+
version: str = Field(
|
|
75
|
+
description="Handler version string",
|
|
76
|
+
)
|
|
77
|
+
circuit_breaker: dict[str, JsonType] | None = Field(
|
|
78
|
+
default=None,
|
|
79
|
+
description="Circuit breaker state information (state, failures, threshold, etc.)",
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
__all__: list[str] = ["ModelDbDescribeResponse"]
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Database Query Payload Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for database query result payloads.
|
|
6
|
+
|
|
7
|
+
Note on row typing:
|
|
8
|
+
Database rows are typed as ``list[dict[str, object]]`` because:
|
|
9
|
+
|
|
10
|
+
1. Column names are dynamic (determined by SQL query)
|
|
11
|
+
2. Column types are heterogeneous (str, int, float, datetime, etc.)
|
|
12
|
+
3. The handler returns generic rows that callers must interpret
|
|
13
|
+
|
|
14
|
+
For strongly-typed domain models, callers should map these generic
|
|
15
|
+
rows to their specific Pydantic models after retrieval.
|
|
16
|
+
|
|
17
|
+
JsonType Recursion Fix (OMN-1274):
|
|
18
|
+
This module uses ``dict[str, object]`` instead of the recursive ``JsonType``
|
|
19
|
+
type alias from omnibase_core. Here is why:
|
|
20
|
+
|
|
21
|
+
**The Original Problem:**
|
|
22
|
+
``JsonType`` was defined as a recursive type alias::
|
|
23
|
+
|
|
24
|
+
JsonType = dict[str, "JsonType"] | list["JsonType"] | str | int | float | bool | None
|
|
25
|
+
|
|
26
|
+
Pydantic 2.x processes model fields at **class definition time** (not runtime).
|
|
27
|
+
When building JSON schemas for validation, it recursively expands type aliases::
|
|
28
|
+
|
|
29
|
+
JsonType -> dict[str, JsonType] | list[JsonType] | ...
|
|
30
|
+
-> dict[str, dict[str, JsonType] | list[JsonType] | ...] | ...
|
|
31
|
+
-> ... (infinite expansion)
|
|
32
|
+
|
|
33
|
+
This causes ``RecursionError: maximum recursion depth exceeded`` during
|
|
34
|
+
Pydantic's schema generation in ``_generate_schema.py``.
|
|
35
|
+
|
|
36
|
+
**Why dict[str, object] is Correct Here:**
|
|
37
|
+
For database rows, we specifically need dictionaries with string keys and
|
|
38
|
+
heterogeneous values. We do NOT need to support arrays or primitives at the
|
|
39
|
+
root level (unlike HTTP response bodies which can be any JSON value).
|
|
40
|
+
|
|
41
|
+
Using ``dict[str, object]`` provides:
|
|
42
|
+
- Correct semantics: DB rows are always dictionaries
|
|
43
|
+
- Type safety: Pydantic validates the structure
|
|
44
|
+
- No recursion: ``object`` is not a recursive type alias
|
|
45
|
+
|
|
46
|
+
**Caveats:**
|
|
47
|
+
- ``object`` provides no static type checking on values (use runtime validation)
|
|
48
|
+
- Callers should map to strongly-typed models for domain logic
|
|
49
|
+
- For fields needing full JSON support (any JSON value), use ``JsonType``
|
|
50
|
+
from ``omnibase_core.types`` (now fixed via TypeAlias pattern)
|
|
51
|
+
|
|
52
|
+
See Also:
|
|
53
|
+
- ADR: ``docs/decisions/adr-any-type-pydantic-workaround.md`` (historical)
|
|
54
|
+
- Pydantic issue: https://github.com/pydantic/pydantic/issues/3278
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
from __future__ import annotations
|
|
58
|
+
|
|
59
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class ModelDbQueryPayload(BaseModel):
|
|
63
|
+
"""Payload containing database query results.
|
|
64
|
+
|
|
65
|
+
Attributes:
|
|
66
|
+
rows: List of result rows as column->value dictionaries.
|
|
67
|
+
Column types are preserved from database (str, int, float, etc.).
|
|
68
|
+
row_count: Number of rows returned or affected.
|
|
69
|
+
|
|
70
|
+
Example:
|
|
71
|
+
>>> payload = ModelDbQueryPayload(
|
|
72
|
+
... rows=[{"id": 1, "name": "test"}, {"id": 2, "name": "example"}],
|
|
73
|
+
... row_count=2,
|
|
74
|
+
... )
|
|
75
|
+
>>> print(len(payload.rows))
|
|
76
|
+
2
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
model_config = ConfigDict(
|
|
80
|
+
strict=True,
|
|
81
|
+
frozen=True,
|
|
82
|
+
extra="forbid",
|
|
83
|
+
from_attributes=True, # Support pytest-xdist compatibility
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
rows: list[dict[str, object]] = Field(
|
|
87
|
+
description="Result rows as column->value dictionaries",
|
|
88
|
+
)
|
|
89
|
+
row_count: int = Field(
|
|
90
|
+
ge=0,
|
|
91
|
+
description="Number of rows returned or affected",
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
__all__: list[str] = ["ModelDbQueryPayload"]
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Database Query Response Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for database query response envelopes
|
|
6
|
+
used by the HandlerDb.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from uuid import UUID
|
|
12
|
+
|
|
13
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
14
|
+
|
|
15
|
+
from omnibase_infra.enums import EnumResponseStatus
|
|
16
|
+
from omnibase_infra.handlers.models.model_db_query_payload import ModelDbQueryPayload
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ModelDbQueryResponse(BaseModel):
|
|
20
|
+
"""Full database query response envelope.
|
|
21
|
+
|
|
22
|
+
Provides a standardized response format for database operations
|
|
23
|
+
with status, payload, and correlation tracking.
|
|
24
|
+
|
|
25
|
+
Attributes:
|
|
26
|
+
status: Operation status (EnumResponseStatus.SUCCESS or EnumResponseStatus.ERROR)
|
|
27
|
+
payload: Query result payload containing rows and count
|
|
28
|
+
correlation_id: UUID for request/response correlation
|
|
29
|
+
|
|
30
|
+
Example:
|
|
31
|
+
>>> from uuid import uuid4
|
|
32
|
+
>>> from omnibase_infra.enums import EnumResponseStatus
|
|
33
|
+
>>> response = ModelDbQueryResponse(
|
|
34
|
+
... status=EnumResponseStatus.SUCCESS,
|
|
35
|
+
... payload=ModelDbQueryPayload(rows=[], row_count=0),
|
|
36
|
+
... correlation_id=uuid4(),
|
|
37
|
+
... )
|
|
38
|
+
>>> print(response.status)
|
|
39
|
+
<EnumResponseStatus.SUCCESS: 'success'>
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
model_config = ConfigDict(
|
|
43
|
+
strict=True,
|
|
44
|
+
frozen=True,
|
|
45
|
+
extra="forbid",
|
|
46
|
+
from_attributes=True, # Support pytest-xdist compatibility
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
status: EnumResponseStatus = Field(
|
|
50
|
+
description="Operation status indicator",
|
|
51
|
+
)
|
|
52
|
+
payload: ModelDbQueryPayload = Field(
|
|
53
|
+
description="Query result payload",
|
|
54
|
+
)
|
|
55
|
+
correlation_id: UUID = Field(
|
|
56
|
+
description="UUID for request/response correlation",
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
__all__: list[str] = ["ModelDbQueryResponse"]
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Filesystem Handler Configuration Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for HandlerFileSystem initialization
|
|
6
|
+
configuration, replacing the untyped dict[str, object] pattern.
|
|
7
|
+
|
|
8
|
+
Security:
|
|
9
|
+
The allowed_paths field defines the whitelist of directories that the
|
|
10
|
+
filesystem handler can access. This is a critical security boundary.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
from uuid import UUID
|
|
16
|
+
|
|
17
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ModelFileSystemConfig(BaseModel):
|
|
21
|
+
"""Configuration for HandlerFileSystem initialization.
|
|
22
|
+
|
|
23
|
+
This model defines the configuration parameters required to initialize
|
|
24
|
+
the filesystem handler, including the security-critical path whitelist
|
|
25
|
+
and optional size limits.
|
|
26
|
+
|
|
27
|
+
Attributes:
|
|
28
|
+
allowed_paths: Immutable tuple of directory paths that the handler is
|
|
29
|
+
allowed to access. This is a required security boundary - operations
|
|
30
|
+
on paths outside these directories will be rejected. Uses tuple
|
|
31
|
+
instead of list to prevent runtime mutation of the whitelist.
|
|
32
|
+
max_read_size: Maximum file size in bytes for read operations.
|
|
33
|
+
If None, the default from environment or code will be used.
|
|
34
|
+
max_write_size: Maximum content size in bytes for write operations.
|
|
35
|
+
If None, the default from environment or code will be used.
|
|
36
|
+
correlation_id: Optional correlation ID for initialization tracing.
|
|
37
|
+
|
|
38
|
+
Example:
|
|
39
|
+
>>> config = ModelFileSystemConfig(
|
|
40
|
+
... allowed_paths=["/tmp/test", "/data/output"],
|
|
41
|
+
... max_read_size=10 * 1024 * 1024, # 10 MB
|
|
42
|
+
... )
|
|
43
|
+
>>> print(config.allowed_paths)
|
|
44
|
+
('/tmp/test', '/data/output')
|
|
45
|
+
>>> # List input is automatically coerced to immutable tuple
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
model_config = ConfigDict(
|
|
49
|
+
strict=True,
|
|
50
|
+
frozen=True,
|
|
51
|
+
extra="forbid",
|
|
52
|
+
from_attributes=True,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
allowed_paths: tuple[str, ...] = Field(
|
|
56
|
+
min_length=1,
|
|
57
|
+
description="Immutable tuple of allowed directory paths for filesystem operations. "
|
|
58
|
+
"Required for security - must not be empty. List inputs are coerced to tuple.",
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
@field_validator("allowed_paths", mode="before")
|
|
62
|
+
@classmethod
|
|
63
|
+
def coerce_to_tuple(cls, v: list[str] | tuple[str, ...]) -> tuple[str, ...]:
|
|
64
|
+
"""Coerce list inputs to immutable tuple for security.
|
|
65
|
+
|
|
66
|
+
This ensures the allowed_paths whitelist cannot be mutated after
|
|
67
|
+
model construction, even though Python's frozen=True only prevents
|
|
68
|
+
reassignment of the attribute, not mutation of mutable objects.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
v: Input value, either a list or tuple of strings.
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
Immutable tuple of path strings.
|
|
75
|
+
"""
|
|
76
|
+
if isinstance(v, list):
|
|
77
|
+
return tuple(v)
|
|
78
|
+
return v
|
|
79
|
+
|
|
80
|
+
max_read_size: int | None = Field(
|
|
81
|
+
default=None,
|
|
82
|
+
gt=0,
|
|
83
|
+
description="Maximum file size in bytes for read operations. "
|
|
84
|
+
"If None, uses default (100 MB from env or code).",
|
|
85
|
+
)
|
|
86
|
+
max_write_size: int | None = Field(
|
|
87
|
+
default=None,
|
|
88
|
+
gt=0,
|
|
89
|
+
description="Maximum content size in bytes for write operations. "
|
|
90
|
+
"If None, uses default (50 MB from env or code).",
|
|
91
|
+
)
|
|
92
|
+
correlation_id: UUID | str | None = Field(
|
|
93
|
+
default=None,
|
|
94
|
+
description="Optional correlation ID for initialization tracing.",
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
__all__: list[str] = ["ModelFileSystemConfig"]
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# SPDX-License-Identifier: MIT
|
|
2
|
+
# Copyright (c) 2025 OmniNode Team
|
|
3
|
+
"""Filesystem Delete File Payload Model.
|
|
4
|
+
|
|
5
|
+
This module provides the Pydantic model for the filesystem.delete_file operation
|
|
6
|
+
payload, replacing untyped dict[str, object] patterns.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ModelDeleteFilePayload(BaseModel):
|
|
15
|
+
"""Payload for filesystem.delete_file operation.
|
|
16
|
+
|
|
17
|
+
Specifies the file to delete and options.
|
|
18
|
+
|
|
19
|
+
Attributes:
|
|
20
|
+
path: Absolute or relative path to the file to delete.
|
|
21
|
+
The path will be validated against the allowed_paths whitelist.
|
|
22
|
+
Note: This operation only deletes files, not directories.
|
|
23
|
+
missing_ok: If True, don't raise an error if the file doesn't exist.
|
|
24
|
+
If False (default), raise an error if the file is missing.
|
|
25
|
+
|
|
26
|
+
Example:
|
|
27
|
+
>>> payload = ModelDeleteFilePayload(path="/data/temp.txt")
|
|
28
|
+
>>> print(payload.missing_ok)
|
|
29
|
+
False
|
|
30
|
+
|
|
31
|
+
>>> safe_payload = ModelDeleteFilePayload(
|
|
32
|
+
... path="/data/maybe_exists.txt",
|
|
33
|
+
... missing_ok=True,
|
|
34
|
+
... )
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
model_config = ConfigDict(
|
|
38
|
+
strict=True,
|
|
39
|
+
frozen=True,
|
|
40
|
+
extra="forbid",
|
|
41
|
+
from_attributes=True,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
path: str = Field(
|
|
45
|
+
min_length=1,
|
|
46
|
+
description="Path to the file to delete. Validated against allowed_paths.",
|
|
47
|
+
)
|
|
48
|
+
missing_ok: bool = Field(
|
|
49
|
+
default=False,
|
|
50
|
+
description="If True, don't error if file doesn't exist.",
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
__all__: list[str] = ["ModelDeleteFilePayload"]
|