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,330 @@
|
|
|
1
|
+
# Copyright 2025 OmniNode Team. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
"""Configuration model for node introspection initialization.
|
|
4
|
+
|
|
5
|
+
This module provides the configuration model used to initialize the
|
|
6
|
+
MixinNodeIntrospection mixin. Grouping parameters into a configuration
|
|
7
|
+
model follows ONEX patterns for reducing function parameter count.
|
|
8
|
+
|
|
9
|
+
Topic Validation:
|
|
10
|
+
Topics must follow ONEX naming conventions:
|
|
11
|
+
- Must start with a lowercase letter
|
|
12
|
+
- Can contain lowercase alphanumeric characters, dots, hyphens, and underscores
|
|
13
|
+
- ONEX topics (starting with 'onex.') require a version suffix (.v1, .v2, etc.)
|
|
14
|
+
- Legacy topics (not starting with 'onex.') are allowed for flexibility
|
|
15
|
+
|
|
16
|
+
See Also:
|
|
17
|
+
- docs/architecture/EVENT_STREAMING_TOPICS.md: Topic naming conventions
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import logging
|
|
23
|
+
import re
|
|
24
|
+
from typing import TYPE_CHECKING
|
|
25
|
+
from uuid import UUID
|
|
26
|
+
|
|
27
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
28
|
+
|
|
29
|
+
from omnibase_core.enums import EnumNodeKind
|
|
30
|
+
from omnibase_core.models.contracts import ModelContractBase
|
|
31
|
+
from omnibase_infra.topics import (
|
|
32
|
+
SUFFIX_NODE_HEARTBEAT,
|
|
33
|
+
SUFFIX_NODE_INTROSPECTION,
|
|
34
|
+
SUFFIX_REQUEST_INTROSPECTION,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
if TYPE_CHECKING:
|
|
38
|
+
from omnibase_core.protocols.event_bus.protocol_event_bus import ProtocolEventBus
|
|
39
|
+
|
|
40
|
+
# Type alias for event_bus field - provides proper type during static analysis
|
|
41
|
+
type _EventBusType = ProtocolEventBus | None
|
|
42
|
+
else:
|
|
43
|
+
# At runtime, use object | None for duck typing compatibility with Pydantic
|
|
44
|
+
# Pydantic cannot resolve TYPE_CHECKING-only imports, so we use object
|
|
45
|
+
# The mixin enforces protocol compliance at initialization
|
|
46
|
+
type _EventBusType = object | None
|
|
47
|
+
|
|
48
|
+
logger = logging.getLogger(__name__)
|
|
49
|
+
|
|
50
|
+
# Default topic constants using ONEX platform suffix constants
|
|
51
|
+
# These are the canonical source for introspection-related topic defaults
|
|
52
|
+
DEFAULT_INTROSPECTION_TOPIC = SUFFIX_NODE_INTROSPECTION
|
|
53
|
+
DEFAULT_HEARTBEAT_TOPIC = SUFFIX_NODE_HEARTBEAT
|
|
54
|
+
DEFAULT_REQUEST_INTROSPECTION_TOPIC = SUFFIX_REQUEST_INTROSPECTION
|
|
55
|
+
|
|
56
|
+
# Topic validation patterns
|
|
57
|
+
# Matches valid topic characters: lowercase alphanumeric, dots, hyphens, underscores
|
|
58
|
+
TOPIC_PATTERN = re.compile(r"^[a-z][a-z0-9._-]*[a-z0-9]$|^[a-z]$")
|
|
59
|
+
# Invalid characters that should never appear in topic names
|
|
60
|
+
INVALID_TOPIC_CHARS = set("@#$%^&*()+=[]{}|\\:;\"'<>,?/! \t\n\r")
|
|
61
|
+
# Version suffix pattern for ONEX topics
|
|
62
|
+
VERSION_SUFFIX_PATTERN = re.compile(r"\.v[0-9]+$")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class ModelIntrospectionConfig(BaseModel):
|
|
66
|
+
"""Configuration model for introspection initialization.
|
|
67
|
+
|
|
68
|
+
This model groups all parameters required by ``initialize_introspection()``
|
|
69
|
+
into a single configuration object, following ONEX conventions for functions
|
|
70
|
+
with more than 5 parameters.
|
|
71
|
+
|
|
72
|
+
Attributes:
|
|
73
|
+
node_id: Unique identifier for this node instance (UUID).
|
|
74
|
+
node_type: Node type classification (EFFECT, COMPUTE, REDUCER, ORCHESTRATOR).
|
|
75
|
+
Cannot be empty.
|
|
76
|
+
event_bus: Optional event bus for publishing introspection events.
|
|
77
|
+
Must implement ``ProtocolEventBus`` protocol.
|
|
78
|
+
version: Node version string. Defaults to "1.0.0".
|
|
79
|
+
cache_ttl: Cache time-to-live in seconds. Defaults to 300.0 (5 minutes).
|
|
80
|
+
operation_keywords: Optional frozenset of keywords to identify operation methods.
|
|
81
|
+
Methods containing these keywords are reported as operations.
|
|
82
|
+
If None, uses MixinNodeIntrospection.DEFAULT_OPERATION_KEYWORDS.
|
|
83
|
+
exclude_prefixes: Optional frozenset of prefixes to exclude from capability
|
|
84
|
+
discovery. Methods starting with these prefixes are filtered out.
|
|
85
|
+
If None, uses MixinNodeIntrospection.DEFAULT_EXCLUDE_PREFIXES.
|
|
86
|
+
introspection_topic: Topic for publishing introspection events.
|
|
87
|
+
Defaults to SUFFIX_NODE_INTROSPECTION (onex.evt.platform.node-introspection.v1).
|
|
88
|
+
ONEX topics (onex.*) require version suffix (.v1, .v2, etc.).
|
|
89
|
+
heartbeat_topic: Topic for publishing heartbeat events.
|
|
90
|
+
Defaults to SUFFIX_NODE_HEARTBEAT (onex.evt.platform.node-heartbeat.v1).
|
|
91
|
+
ONEX topics (onex.*) require version suffix (.v1, .v2, etc.).
|
|
92
|
+
request_introspection_topic: Topic for receiving introspection requests.
|
|
93
|
+
Defaults to SUFFIX_REQUEST_INTROSPECTION (onex.cmd.platform.request-introspection.v1).
|
|
94
|
+
ONEX topics (onex.*) require version suffix (.v1, .v2, etc.).
|
|
95
|
+
contract: Optional typed contract model for capability extraction.
|
|
96
|
+
When provided, MixinNodeIntrospection extracts contract_capabilities
|
|
97
|
+
using ContractCapabilityExtractor. None for legacy nodes.
|
|
98
|
+
|
|
99
|
+
Example:
|
|
100
|
+
```python
|
|
101
|
+
from uuid import UUID, uuid4
|
|
102
|
+
from omnibase_core.enums import EnumNodeKind
|
|
103
|
+
from omnibase_infra.models.discovery import ModelIntrospectionConfig
|
|
104
|
+
from omnibase_infra.mixins import MixinNodeIntrospection
|
|
105
|
+
|
|
106
|
+
class MyNode(MixinNodeIntrospection):
|
|
107
|
+
def __init__(self, node_id: UUID, event_bus=None):
|
|
108
|
+
config = ModelIntrospectionConfig(
|
|
109
|
+
node_id=node_id,
|
|
110
|
+
node_type=EnumNodeKind.EFFECT, # Use enum directly (preferred)
|
|
111
|
+
event_bus=event_bus,
|
|
112
|
+
version="1.2.0",
|
|
113
|
+
)
|
|
114
|
+
self.initialize_introspection(config)
|
|
115
|
+
|
|
116
|
+
# With custom operation keywords
|
|
117
|
+
class MyEffectNode(MixinNodeIntrospection):
|
|
118
|
+
def __init__(self, node_id: UUID | None = None, event_bus=None):
|
|
119
|
+
config = ModelIntrospectionConfig(
|
|
120
|
+
node_id=node_id or uuid4(),
|
|
121
|
+
node_type=EnumNodeKind.EFFECT, # Use enum directly (preferred)
|
|
122
|
+
event_bus=event_bus,
|
|
123
|
+
operation_keywords=frozenset({"fetch", "upload", "download"}),
|
|
124
|
+
)
|
|
125
|
+
self.initialize_introspection(config)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
See Also:
|
|
129
|
+
MixinNodeIntrospection: The mixin that uses this configuration.
|
|
130
|
+
ModelNodeIntrospectionEvent: Event model for introspection events.
|
|
131
|
+
"""
|
|
132
|
+
|
|
133
|
+
node_id: UUID = Field(
|
|
134
|
+
...,
|
|
135
|
+
description="Unique identifier for this node instance",
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
node_type: EnumNodeKind = Field(
|
|
139
|
+
...,
|
|
140
|
+
description="Node type classification (EFFECT, COMPUTE, REDUCER, ORCHESTRATOR). "
|
|
141
|
+
"Accepts EnumNodeKind directly (preferred) or string (deprecated, will be coerced).",
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
# Event bus for publishing introspection events.
|
|
145
|
+
# Uses _EventBusType which provides:
|
|
146
|
+
# - ProtocolEventBus | None during static analysis (TYPE_CHECKING)
|
|
147
|
+
# - object | None at runtime for Pydantic compatibility
|
|
148
|
+
# Duck typing is enforced by the mixin at initialization.
|
|
149
|
+
# The model config has arbitrary_types_allowed=True to support arbitrary objects.
|
|
150
|
+
event_bus: _EventBusType = Field(
|
|
151
|
+
default=None,
|
|
152
|
+
description="Optional event bus for publishing introspection events. "
|
|
153
|
+
"Must implement ProtocolEventBus protocol (duck typed).",
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
version: str = Field(
|
|
157
|
+
default="1.0.0",
|
|
158
|
+
description="Node version string",
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
cache_ttl: float = Field(
|
|
162
|
+
default=300.0,
|
|
163
|
+
ge=0.0,
|
|
164
|
+
description="Cache time-to-live in seconds",
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
operation_keywords: frozenset[str] | None = Field(
|
|
168
|
+
default=None,
|
|
169
|
+
description="Optional frozenset of keywords to identify operation methods. "
|
|
170
|
+
"If None, uses MixinNodeIntrospection.DEFAULT_OPERATION_KEYWORDS.",
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
exclude_prefixes: frozenset[str] | None = Field(
|
|
174
|
+
default=None,
|
|
175
|
+
description="Optional frozenset of prefixes to exclude from capability discovery. "
|
|
176
|
+
"If None, uses MixinNodeIntrospection.DEFAULT_EXCLUDE_PREFIXES.",
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
introspection_topic: str = Field(
|
|
180
|
+
default=DEFAULT_INTROSPECTION_TOPIC,
|
|
181
|
+
description="Topic for publishing introspection events. "
|
|
182
|
+
"ONEX topics (onex.*) require version suffix (.v1, .v2, etc.).",
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
heartbeat_topic: str = Field(
|
|
186
|
+
default=DEFAULT_HEARTBEAT_TOPIC,
|
|
187
|
+
description="Topic for publishing heartbeat events. "
|
|
188
|
+
"ONEX topics (onex.*) require version suffix (.v1, .v2, etc.).",
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
request_introspection_topic: str = Field(
|
|
192
|
+
default=DEFAULT_REQUEST_INTROSPECTION_TOPIC,
|
|
193
|
+
description="Topic for receiving introspection request events. "
|
|
194
|
+
"ONEX topics (onex.*) require version suffix (.v1, .v2, etc.).",
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
contract: ModelContractBase | None = Field(
|
|
198
|
+
default=None,
|
|
199
|
+
description="Typed contract model for capability extraction. "
|
|
200
|
+
"When provided, MixinNodeIntrospection will extract contract_capabilities "
|
|
201
|
+
"using ContractCapabilityExtractor. None for legacy nodes without contracts.",
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
@field_validator("node_type", mode="before")
|
|
205
|
+
@classmethod
|
|
206
|
+
def validate_node_type(cls, v: object) -> EnumNodeKind:
|
|
207
|
+
"""Validate and coerce node_type to EnumNodeKind.
|
|
208
|
+
|
|
209
|
+
Args:
|
|
210
|
+
v: Node type value to validate. Accepts EnumNodeKind directly
|
|
211
|
+
(preferred) or string (deprecated).
|
|
212
|
+
|
|
213
|
+
Returns:
|
|
214
|
+
EnumNodeKind instance.
|
|
215
|
+
|
|
216
|
+
Raises:
|
|
217
|
+
ValueError: If string node type is empty or invalid.
|
|
218
|
+
"""
|
|
219
|
+
if isinstance(v, EnumNodeKind):
|
|
220
|
+
return v
|
|
221
|
+
if not isinstance(v, str):
|
|
222
|
+
raise ValueError(
|
|
223
|
+
f"node_type must be EnumNodeKind or str, got {type(v).__name__}"
|
|
224
|
+
)
|
|
225
|
+
if not v:
|
|
226
|
+
raise ValueError("node_type cannot be empty")
|
|
227
|
+
# Coerce string to EnumNodeKind (handles both "EFFECT" and "effect")
|
|
228
|
+
try:
|
|
229
|
+
return EnumNodeKind(v.lower())
|
|
230
|
+
except ValueError:
|
|
231
|
+
valid = ", ".join(e.value for e in EnumNodeKind)
|
|
232
|
+
raise ValueError(
|
|
233
|
+
f"Invalid node_type '{v}'. Must be one of: {valid}"
|
|
234
|
+
) from None
|
|
235
|
+
|
|
236
|
+
@field_validator(
|
|
237
|
+
"introspection_topic", "heartbeat_topic", "request_introspection_topic"
|
|
238
|
+
)
|
|
239
|
+
@classmethod
|
|
240
|
+
def validate_topic_name(cls, v: str) -> str:
|
|
241
|
+
"""Validate topic name follows ONEX conventions.
|
|
242
|
+
|
|
243
|
+
Args:
|
|
244
|
+
v: Topic name to validate.
|
|
245
|
+
|
|
246
|
+
Returns:
|
|
247
|
+
Validated topic name.
|
|
248
|
+
|
|
249
|
+
Raises:
|
|
250
|
+
ValueError: If topic name is invalid.
|
|
251
|
+
"""
|
|
252
|
+
if not v:
|
|
253
|
+
raise ValueError("Topic name cannot be empty")
|
|
254
|
+
|
|
255
|
+
# Check for invalid characters first
|
|
256
|
+
invalid_found = set(v) & INVALID_TOPIC_CHARS
|
|
257
|
+
if invalid_found:
|
|
258
|
+
raise ValueError(f"Topic name contains invalid characters: {invalid_found}")
|
|
259
|
+
|
|
260
|
+
# Check pattern (must start with lowercase, valid characters)
|
|
261
|
+
if not TOPIC_PATTERN.match(v):
|
|
262
|
+
if v[0].isupper():
|
|
263
|
+
raise ValueError(f"Topic name must start with a lowercase letter: {v}")
|
|
264
|
+
if v.endswith("."):
|
|
265
|
+
raise ValueError(
|
|
266
|
+
f"Topic name can only lowercase alphanumeric, dot, hyphen, "
|
|
267
|
+
f"underscore, and must not end with a dot: {v}"
|
|
268
|
+
)
|
|
269
|
+
raise ValueError(
|
|
270
|
+
f"Topic name must contain only lowercase alphanumeric, "
|
|
271
|
+
f"dot, hyphen, underscore characters: {v}"
|
|
272
|
+
)
|
|
273
|
+
|
|
274
|
+
# ONEX topics require version suffix
|
|
275
|
+
if v.startswith("onex."):
|
|
276
|
+
if not VERSION_SUFFIX_PATTERN.search(v):
|
|
277
|
+
raise ValueError(
|
|
278
|
+
f"ONEX topic must have version suffix (.v1, .v2, etc.): {v}"
|
|
279
|
+
)
|
|
280
|
+
# Legacy topics (not starting with 'onex.') are allowed without version suffix
|
|
281
|
+
|
|
282
|
+
return v
|
|
283
|
+
|
|
284
|
+
model_config = ConfigDict(
|
|
285
|
+
frozen=True,
|
|
286
|
+
extra="forbid",
|
|
287
|
+
arbitrary_types_allowed=True, # Allow arbitrary types for event_bus
|
|
288
|
+
json_schema_extra={
|
|
289
|
+
"examples": [
|
|
290
|
+
# First example: Default topic configuration using suffix constants
|
|
291
|
+
{
|
|
292
|
+
"node_id": "550e8400-e29b-41d4-a716-446655440000",
|
|
293
|
+
"node_type": "EFFECT",
|
|
294
|
+
"event_bus": None,
|
|
295
|
+
"version": "1.0.0",
|
|
296
|
+
"cache_ttl": 300.0,
|
|
297
|
+
"operation_keywords": None,
|
|
298
|
+
"exclude_prefixes": None,
|
|
299
|
+
"introspection_topic": "onex.evt.platform.node-introspection.v1",
|
|
300
|
+
"heartbeat_topic": "onex.evt.platform.node-heartbeat.v1",
|
|
301
|
+
"request_introspection_topic": "onex.cmd.platform.request-introspection.v1",
|
|
302
|
+
},
|
|
303
|
+
# Second example: Custom prefixed topics for environment isolation
|
|
304
|
+
# Demonstrates adding env/namespace prefix to suffix constants
|
|
305
|
+
{
|
|
306
|
+
"node_id": "550e8400-e29b-41d4-a716-446655440001",
|
|
307
|
+
"node_type": "COMPUTE",
|
|
308
|
+
"event_bus": None,
|
|
309
|
+
"version": "2.1.0",
|
|
310
|
+
"cache_ttl": 120.0,
|
|
311
|
+
"operation_keywords": ["process", "transform", "analyze"],
|
|
312
|
+
"exclude_prefixes": ["_internal", "_private"],
|
|
313
|
+
"introspection_topic": "prod.myapp.onex.evt.platform.node-introspection.v1",
|
|
314
|
+
"heartbeat_topic": "prod.myapp.onex.evt.platform.node-heartbeat.v1",
|
|
315
|
+
"request_introspection_topic": "prod.myapp.onex.cmd.platform.request-introspection.v1",
|
|
316
|
+
},
|
|
317
|
+
]
|
|
318
|
+
},
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
__all__ = [
|
|
323
|
+
"DEFAULT_HEARTBEAT_TOPIC",
|
|
324
|
+
"DEFAULT_INTROSPECTION_TOPIC",
|
|
325
|
+
"DEFAULT_REQUEST_INTROSPECTION_TOPIC",
|
|
326
|
+
"INVALID_TOPIC_CHARS",
|
|
327
|
+
"TOPIC_PATTERN",
|
|
328
|
+
"VERSION_SUFFIX_PATTERN",
|
|
329
|
+
"ModelIntrospectionConfig",
|
|
330
|
+
]
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Copyright 2025 OmniNode Team. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
"""Performance metrics model for node introspection operations.
|
|
4
|
+
|
|
5
|
+
This module provides a Pydantic model for capturing performance metrics from
|
|
6
|
+
introspection operations. It mirrors the dataclass IntrospectionPerformanceMetrics
|
|
7
|
+
from MixinNodeIntrospection but provides Pydantic serialization for event payloads.
|
|
8
|
+
|
|
9
|
+
The model enables:
|
|
10
|
+
- Performance monitoring of introspection operations
|
|
11
|
+
- Detection of slow operations exceeding the <50ms threshold
|
|
12
|
+
- Cache hit/miss tracking for performance optimization
|
|
13
|
+
- Serialization to JSON for event bus transmission
|
|
14
|
+
|
|
15
|
+
Related:
|
|
16
|
+
- MixinNodeIntrospection.get_performance_metrics() - Returns the dataclass version
|
|
17
|
+
- ModelNodeIntrospectionEvent - Contains this model as an optional field
|
|
18
|
+
- OMN-926 - Ticket for adding performance metrics to introspection events
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from datetime import UTC, datetime
|
|
22
|
+
|
|
23
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ModelIntrospectionPerformanceMetrics(BaseModel):
|
|
27
|
+
"""Performance metrics captured during node introspection.
|
|
28
|
+
|
|
29
|
+
This model provides timing information for introspection operations,
|
|
30
|
+
enabling observability and alerting when operations exceed the
|
|
31
|
+
<50ms target threshold defined in MixinNodeIntrospection.
|
|
32
|
+
|
|
33
|
+
Attributes:
|
|
34
|
+
get_capabilities_ms: Time taken by get_capabilities() in milliseconds.
|
|
35
|
+
discover_capabilities_ms: Time taken by _discover_capabilities() in ms.
|
|
36
|
+
get_endpoints_ms: Time taken by get_endpoints() in milliseconds.
|
|
37
|
+
get_current_state_ms: Time taken by get_current_state() in milliseconds.
|
|
38
|
+
total_introspection_ms: Total time for get_introspection_data() in ms.
|
|
39
|
+
cache_hit: Whether the result was served from cache.
|
|
40
|
+
method_count: Number of methods discovered during reflection.
|
|
41
|
+
threshold_exceeded: Whether any operation exceeded performance thresholds.
|
|
42
|
+
slow_operations: List of operation names that exceeded their thresholds.
|
|
43
|
+
captured_at: UTC timestamp when metrics were captured.
|
|
44
|
+
|
|
45
|
+
Example:
|
|
46
|
+
```python
|
|
47
|
+
from omnibase_infra.models.discovery import (
|
|
48
|
+
ModelIntrospectionPerformanceMetrics,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
metrics = ModelIntrospectionPerformanceMetrics(
|
|
52
|
+
get_capabilities_ms=12.5,
|
|
53
|
+
discover_capabilities_ms=8.2,
|
|
54
|
+
get_endpoints_ms=0.5,
|
|
55
|
+
get_current_state_ms=0.1,
|
|
56
|
+
total_introspection_ms=21.3,
|
|
57
|
+
cache_hit=False,
|
|
58
|
+
method_count=15,
|
|
59
|
+
threshold_exceeded=False,
|
|
60
|
+
slow_operations=[],
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
# Check if performance is degraded
|
|
64
|
+
if metrics.threshold_exceeded:
|
|
65
|
+
print(f"Slow operations: {metrics.slow_operations}")
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Performance Thresholds:
|
|
69
|
+
The following thresholds are used (defined in MixinNodeIntrospection):
|
|
70
|
+
- get_capabilities: <50ms
|
|
71
|
+
- discover_capabilities: <30ms
|
|
72
|
+
- total_introspection: <50ms
|
|
73
|
+
- cache_hit: <1ms
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
# Timing metrics in milliseconds
|
|
77
|
+
get_capabilities_ms: float = Field(
|
|
78
|
+
default=0.0,
|
|
79
|
+
description="Time taken by get_capabilities() in milliseconds",
|
|
80
|
+
ge=0.0,
|
|
81
|
+
)
|
|
82
|
+
discover_capabilities_ms: float = Field(
|
|
83
|
+
default=0.0,
|
|
84
|
+
description="Time taken by _discover_capabilities() in milliseconds",
|
|
85
|
+
ge=0.0,
|
|
86
|
+
)
|
|
87
|
+
get_endpoints_ms: float = Field(
|
|
88
|
+
default=0.0,
|
|
89
|
+
description="Time taken by get_endpoints() in milliseconds",
|
|
90
|
+
ge=0.0,
|
|
91
|
+
)
|
|
92
|
+
get_current_state_ms: float = Field(
|
|
93
|
+
default=0.0,
|
|
94
|
+
description="Time taken by get_current_state() in milliseconds",
|
|
95
|
+
ge=0.0,
|
|
96
|
+
)
|
|
97
|
+
total_introspection_ms: float = Field(
|
|
98
|
+
default=0.0,
|
|
99
|
+
description="Total time for get_introspection_data() in milliseconds",
|
|
100
|
+
ge=0.0,
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
# Cache and discovery information
|
|
104
|
+
cache_hit: bool = Field(
|
|
105
|
+
default=False,
|
|
106
|
+
description="Whether the result was served from cache",
|
|
107
|
+
)
|
|
108
|
+
method_count: int = Field(
|
|
109
|
+
default=0,
|
|
110
|
+
description="Number of methods discovered during reflection",
|
|
111
|
+
ge=0,
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
# Threshold violation tracking
|
|
115
|
+
threshold_exceeded: bool = Field(
|
|
116
|
+
default=False,
|
|
117
|
+
description="Whether any operation exceeded performance thresholds",
|
|
118
|
+
)
|
|
119
|
+
slow_operations: list[str] = Field(
|
|
120
|
+
default_factory=list,
|
|
121
|
+
description="List of operation names that exceeded their thresholds",
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
# Capture timestamp
|
|
125
|
+
captured_at: datetime = Field(
|
|
126
|
+
default_factory=lambda: datetime.now(UTC),
|
|
127
|
+
description="UTC timestamp when metrics were captured",
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
# Frozen for immutability - metrics are snapshots
|
|
131
|
+
model_config = ConfigDict(
|
|
132
|
+
frozen=True,
|
|
133
|
+
extra="forbid",
|
|
134
|
+
json_schema_extra={
|
|
135
|
+
"examples": [
|
|
136
|
+
{
|
|
137
|
+
"get_capabilities_ms": 12.5,
|
|
138
|
+
"discover_capabilities_ms": 8.2,
|
|
139
|
+
"get_endpoints_ms": 0.5,
|
|
140
|
+
"get_current_state_ms": 0.1,
|
|
141
|
+
"total_introspection_ms": 21.3,
|
|
142
|
+
"cache_hit": False,
|
|
143
|
+
"method_count": 15,
|
|
144
|
+
"threshold_exceeded": False,
|
|
145
|
+
"slow_operations": [],
|
|
146
|
+
"captured_at": "2025-01-15T10:30:00Z",
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"get_capabilities_ms": 55.0,
|
|
150
|
+
"discover_capabilities_ms": 45.0,
|
|
151
|
+
"get_endpoints_ms": 0.2,
|
|
152
|
+
"get_current_state_ms": 0.1,
|
|
153
|
+
"total_introspection_ms": 100.3,
|
|
154
|
+
"cache_hit": False,
|
|
155
|
+
"method_count": 42,
|
|
156
|
+
"threshold_exceeded": True,
|
|
157
|
+
"slow_operations": [
|
|
158
|
+
"get_capabilities",
|
|
159
|
+
"discover_capabilities",
|
|
160
|
+
"total_introspection",
|
|
161
|
+
],
|
|
162
|
+
"captured_at": "2025-01-15T10:31:00Z",
|
|
163
|
+
},
|
|
164
|
+
]
|
|
165
|
+
},
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
__all__ = ["ModelIntrospectionPerformanceMetrics"]
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Copyright 2025 OmniNode Team. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
"""Configuration model for introspection background tasks.
|
|
4
|
+
|
|
5
|
+
This module provides the configuration model used to control background
|
|
6
|
+
task behavior in MixinNodeIntrospection. Grouping parameters into a
|
|
7
|
+
configuration model follows ONEX patterns for reducing function parameter
|
|
8
|
+
count and union type patterns.
|
|
9
|
+
|
|
10
|
+
Background Tasks:
|
|
11
|
+
- Heartbeat task: Periodically publishes heartbeat events for liveness monitoring
|
|
12
|
+
- Registry listener: Responds to introspection request events from the registry
|
|
13
|
+
|
|
14
|
+
See Also:
|
|
15
|
+
- MixinNodeIntrospection: The mixin that uses this configuration
|
|
16
|
+
- ModelIntrospectionConfig: Main initialization configuration
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ModelIntrospectionTaskConfig(BaseModel):
|
|
23
|
+
"""Configuration model for introspection background tasks.
|
|
24
|
+
|
|
25
|
+
This model groups parameters for ``start_introspection_tasks()`` into a
|
|
26
|
+
single configuration object, following ONEX conventions for reducing
|
|
27
|
+
function parameter count and union type patterns.
|
|
28
|
+
|
|
29
|
+
Using a config model instead of individual optional parameters reduces
|
|
30
|
+
the number of union types in method signatures while providing better
|
|
31
|
+
type safety and documentation.
|
|
32
|
+
|
|
33
|
+
Attributes:
|
|
34
|
+
enable_heartbeat: Whether to start the heartbeat background task.
|
|
35
|
+
When enabled, periodically publishes heartbeat events to the
|
|
36
|
+
heartbeat topic. Default: True.
|
|
37
|
+
heartbeat_interval_seconds: Time between heartbeat publications
|
|
38
|
+
in seconds. Must be >= 1.0 to prevent excessive traffic.
|
|
39
|
+
Default: 30.0.
|
|
40
|
+
enable_registry_listener: Whether to start the registry listener
|
|
41
|
+
background task. When enabled, listens for introspection
|
|
42
|
+
request events and responds with introspection data.
|
|
43
|
+
Default: True.
|
|
44
|
+
|
|
45
|
+
Example:
|
|
46
|
+
```python
|
|
47
|
+
from omnibase_infra.models.discovery import ModelIntrospectionTaskConfig
|
|
48
|
+
from omnibase_infra.mixins import MixinNodeIntrospection
|
|
49
|
+
|
|
50
|
+
class MyNode(MixinNodeIntrospection):
|
|
51
|
+
async def startup(self):
|
|
52
|
+
# With config object
|
|
53
|
+
task_config = ModelIntrospectionTaskConfig(
|
|
54
|
+
enable_heartbeat=True,
|
|
55
|
+
heartbeat_interval_seconds=15.0,
|
|
56
|
+
enable_registry_listener=True,
|
|
57
|
+
)
|
|
58
|
+
await self.start_introspection_tasks_from_config(task_config)
|
|
59
|
+
|
|
60
|
+
async def shutdown(self):
|
|
61
|
+
await self.stop_introspection_tasks()
|
|
62
|
+
|
|
63
|
+
# Using defaults
|
|
64
|
+
class SimpleNode(MixinNodeIntrospection):
|
|
65
|
+
async def startup(self):
|
|
66
|
+
config = ModelIntrospectionTaskConfig() # All defaults
|
|
67
|
+
await self.start_introspection_tasks_from_config(config)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Configuration Guidelines:
|
|
71
|
+
- Production: 30-60 second heartbeat interval
|
|
72
|
+
- Development: 10-15 second heartbeat interval for faster feedback
|
|
73
|
+
- Disable registry listener if node discovery is not needed
|
|
74
|
+
|
|
75
|
+
See Also:
|
|
76
|
+
MixinNodeIntrospection: The mixin that uses this configuration.
|
|
77
|
+
ModelIntrospectionConfig: Main initialization configuration.
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
enable_heartbeat: bool = Field(
|
|
81
|
+
default=True,
|
|
82
|
+
description="Whether to start the heartbeat background task",
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
heartbeat_interval_seconds: float = Field(
|
|
86
|
+
default=30.0,
|
|
87
|
+
ge=1.0,
|
|
88
|
+
description="Time between heartbeat publications in seconds",
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
enable_registry_listener: bool = Field(
|
|
92
|
+
default=True,
|
|
93
|
+
description="Whether to start the registry listener background task",
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
model_config = ConfigDict(
|
|
97
|
+
frozen=True,
|
|
98
|
+
extra="forbid",
|
|
99
|
+
json_schema_extra={
|
|
100
|
+
"examples": [
|
|
101
|
+
{
|
|
102
|
+
"enable_heartbeat": True,
|
|
103
|
+
"heartbeat_interval_seconds": 30.0,
|
|
104
|
+
"enable_registry_listener": True,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"enable_heartbeat": True,
|
|
108
|
+
"heartbeat_interval_seconds": 15.0,
|
|
109
|
+
"enable_registry_listener": False,
|
|
110
|
+
},
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
__all__ = ["ModelIntrospectionTaskConfig"]
|