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.
Files changed (675) hide show
  1. omnibase_infra/__init__.py +101 -0
  2. omnibase_infra/cli/__init__.py +1 -0
  3. omnibase_infra/cli/commands.py +216 -0
  4. omnibase_infra/clients/__init__.py +0 -0
  5. omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +261 -0
  6. omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +138 -0
  7. omnibase_infra/decorators/__init__.py +29 -0
  8. omnibase_infra/decorators/allow_any.py +109 -0
  9. omnibase_infra/dlq/__init__.py +90 -0
  10. omnibase_infra/dlq/constants_dlq.py +57 -0
  11. omnibase_infra/dlq/models/__init__.py +26 -0
  12. omnibase_infra/dlq/models/enum_replay_status.py +37 -0
  13. omnibase_infra/dlq/models/model_dlq_replay_record.py +135 -0
  14. omnibase_infra/dlq/models/model_dlq_tracking_config.py +184 -0
  15. omnibase_infra/dlq/service_dlq_tracking.py +611 -0
  16. omnibase_infra/enums/__init__.py +123 -0
  17. omnibase_infra/enums/enum_any_type_violation.py +104 -0
  18. omnibase_infra/enums/enum_backend_type.py +27 -0
  19. omnibase_infra/enums/enum_capture_outcome.py +42 -0
  20. omnibase_infra/enums/enum_capture_state.py +88 -0
  21. omnibase_infra/enums/enum_chain_violation_type.py +119 -0
  22. omnibase_infra/enums/enum_circuit_state.py +51 -0
  23. omnibase_infra/enums/enum_confirmation_event_type.py +27 -0
  24. omnibase_infra/enums/enum_contract_type.py +84 -0
  25. omnibase_infra/enums/enum_dedupe_strategy.py +46 -0
  26. omnibase_infra/enums/enum_dispatch_status.py +191 -0
  27. omnibase_infra/enums/enum_environment.py +46 -0
  28. omnibase_infra/enums/enum_execution_shape_violation.py +103 -0
  29. omnibase_infra/enums/enum_handler_error_type.py +101 -0
  30. omnibase_infra/enums/enum_handler_loader_error.py +178 -0
  31. omnibase_infra/enums/enum_handler_source_type.py +87 -0
  32. omnibase_infra/enums/enum_handler_type.py +77 -0
  33. omnibase_infra/enums/enum_handler_type_category.py +61 -0
  34. omnibase_infra/enums/enum_infra_transport_type.py +73 -0
  35. omnibase_infra/enums/enum_introspection_reason.py +154 -0
  36. omnibase_infra/enums/enum_message_category.py +213 -0
  37. omnibase_infra/enums/enum_node_archetype.py +74 -0
  38. omnibase_infra/enums/enum_node_output_type.py +185 -0
  39. omnibase_infra/enums/enum_non_retryable_error_category.py +224 -0
  40. omnibase_infra/enums/enum_policy_type.py +32 -0
  41. omnibase_infra/enums/enum_registration_state.py +261 -0
  42. omnibase_infra/enums/enum_registration_status.py +33 -0
  43. omnibase_infra/enums/enum_registry_response_status.py +28 -0
  44. omnibase_infra/enums/enum_response_status.py +26 -0
  45. omnibase_infra/enums/enum_retry_error_category.py +98 -0
  46. omnibase_infra/enums/enum_security_rule_id.py +103 -0
  47. omnibase_infra/enums/enum_selection_strategy.py +91 -0
  48. omnibase_infra/enums/enum_topic_standard.py +42 -0
  49. omnibase_infra/enums/enum_validation_severity.py +78 -0
  50. omnibase_infra/errors/__init__.py +156 -0
  51. omnibase_infra/errors/error_architecture_violation.py +152 -0
  52. omnibase_infra/errors/error_chain_propagation.py +188 -0
  53. omnibase_infra/errors/error_compute_registry.py +92 -0
  54. omnibase_infra/errors/error_consul.py +132 -0
  55. omnibase_infra/errors/error_container_wiring.py +243 -0
  56. omnibase_infra/errors/error_event_bus_registry.py +102 -0
  57. omnibase_infra/errors/error_infra.py +608 -0
  58. omnibase_infra/errors/error_message_type_registry.py +101 -0
  59. omnibase_infra/errors/error_policy_registry.py +112 -0
  60. omnibase_infra/errors/error_vault.py +123 -0
  61. omnibase_infra/event_bus/__init__.py +72 -0
  62. omnibase_infra/event_bus/configs/kafka_event_bus_config.yaml +86 -0
  63. omnibase_infra/event_bus/event_bus_inmemory.py +743 -0
  64. omnibase_infra/event_bus/event_bus_kafka.py +1658 -0
  65. omnibase_infra/event_bus/mixin_kafka_broadcast.py +184 -0
  66. omnibase_infra/event_bus/mixin_kafka_dlq.py +765 -0
  67. omnibase_infra/event_bus/models/__init__.py +29 -0
  68. omnibase_infra/event_bus/models/config/__init__.py +20 -0
  69. omnibase_infra/event_bus/models/config/model_kafka_event_bus_config.py +725 -0
  70. omnibase_infra/event_bus/models/model_dlq_event.py +206 -0
  71. omnibase_infra/event_bus/models/model_dlq_metrics.py +304 -0
  72. omnibase_infra/event_bus/models/model_event_headers.py +115 -0
  73. omnibase_infra/event_bus/models/model_event_message.py +60 -0
  74. omnibase_infra/event_bus/topic_constants.py +376 -0
  75. omnibase_infra/handlers/__init__.py +75 -0
  76. omnibase_infra/handlers/filesystem/__init__.py +48 -0
  77. omnibase_infra/handlers/filesystem/enum_file_system_operation.py +35 -0
  78. omnibase_infra/handlers/filesystem/model_file_system_request.py +298 -0
  79. omnibase_infra/handlers/filesystem/model_file_system_result.py +166 -0
  80. omnibase_infra/handlers/handler_consul.py +787 -0
  81. omnibase_infra/handlers/handler_db.py +1039 -0
  82. omnibase_infra/handlers/handler_filesystem.py +1478 -0
  83. omnibase_infra/handlers/handler_graph.py +1154 -0
  84. omnibase_infra/handlers/handler_http.py +920 -0
  85. omnibase_infra/handlers/handler_manifest_persistence.contract.yaml +184 -0
  86. omnibase_infra/handlers/handler_manifest_persistence.py +1539 -0
  87. omnibase_infra/handlers/handler_mcp.py +748 -0
  88. omnibase_infra/handlers/handler_qdrant.py +1076 -0
  89. omnibase_infra/handlers/handler_vault.py +422 -0
  90. omnibase_infra/handlers/mcp/__init__.py +19 -0
  91. omnibase_infra/handlers/mcp/adapter_onex_to_mcp.py +446 -0
  92. omnibase_infra/handlers/mcp/protocols.py +178 -0
  93. omnibase_infra/handlers/mcp/transport_streamable_http.py +352 -0
  94. omnibase_infra/handlers/mixins/__init__.py +42 -0
  95. omnibase_infra/handlers/mixins/mixin_consul_initialization.py +349 -0
  96. omnibase_infra/handlers/mixins/mixin_consul_kv.py +337 -0
  97. omnibase_infra/handlers/mixins/mixin_consul_service.py +277 -0
  98. omnibase_infra/handlers/mixins/mixin_vault_initialization.py +338 -0
  99. omnibase_infra/handlers/mixins/mixin_vault_retry.py +412 -0
  100. omnibase_infra/handlers/mixins/mixin_vault_secrets.py +450 -0
  101. omnibase_infra/handlers/mixins/mixin_vault_token.py +365 -0
  102. omnibase_infra/handlers/models/__init__.py +286 -0
  103. omnibase_infra/handlers/models/consul/__init__.py +81 -0
  104. omnibase_infra/handlers/models/consul/enum_consul_operation_type.py +57 -0
  105. omnibase_infra/handlers/models/consul/model_consul_deregister_payload.py +51 -0
  106. omnibase_infra/handlers/models/consul/model_consul_handler_config.py +153 -0
  107. omnibase_infra/handlers/models/consul/model_consul_handler_payload.py +89 -0
  108. omnibase_infra/handlers/models/consul/model_consul_kv_get_found_payload.py +55 -0
  109. omnibase_infra/handlers/models/consul/model_consul_kv_get_not_found_payload.py +49 -0
  110. omnibase_infra/handlers/models/consul/model_consul_kv_get_recurse_payload.py +50 -0
  111. omnibase_infra/handlers/models/consul/model_consul_kv_item.py +33 -0
  112. omnibase_infra/handlers/models/consul/model_consul_kv_put_payload.py +41 -0
  113. omnibase_infra/handlers/models/consul/model_consul_register_payload.py +53 -0
  114. omnibase_infra/handlers/models/consul/model_consul_retry_config.py +66 -0
  115. omnibase_infra/handlers/models/consul/model_payload_consul.py +66 -0
  116. omnibase_infra/handlers/models/consul/registry_payload_consul.py +214 -0
  117. omnibase_infra/handlers/models/graph/__init__.py +35 -0
  118. omnibase_infra/handlers/models/graph/enum_graph_operation_type.py +20 -0
  119. omnibase_infra/handlers/models/graph/model_graph_execute_payload.py +38 -0
  120. omnibase_infra/handlers/models/graph/model_graph_handler_config.py +54 -0
  121. omnibase_infra/handlers/models/graph/model_graph_handler_payload.py +44 -0
  122. omnibase_infra/handlers/models/graph/model_graph_query_payload.py +40 -0
  123. omnibase_infra/handlers/models/graph/model_graph_record.py +22 -0
  124. omnibase_infra/handlers/models/http/__init__.py +50 -0
  125. omnibase_infra/handlers/models/http/enum_http_operation_type.py +29 -0
  126. omnibase_infra/handlers/models/http/model_http_body_content.py +45 -0
  127. omnibase_infra/handlers/models/http/model_http_get_payload.py +88 -0
  128. omnibase_infra/handlers/models/http/model_http_handler_payload.py +90 -0
  129. omnibase_infra/handlers/models/http/model_http_post_payload.py +88 -0
  130. omnibase_infra/handlers/models/http/model_payload_http.py +66 -0
  131. omnibase_infra/handlers/models/http/registry_payload_http.py +212 -0
  132. omnibase_infra/handlers/models/mcp/__init__.py +23 -0
  133. omnibase_infra/handlers/models/mcp/enum_mcp_operation_type.py +24 -0
  134. omnibase_infra/handlers/models/mcp/model_mcp_handler_config.py +40 -0
  135. omnibase_infra/handlers/models/mcp/model_mcp_tool_call.py +32 -0
  136. omnibase_infra/handlers/models/mcp/model_mcp_tool_result.py +45 -0
  137. omnibase_infra/handlers/models/model_consul_handler_response.py +96 -0
  138. omnibase_infra/handlers/models/model_db_describe_response.py +83 -0
  139. omnibase_infra/handlers/models/model_db_query_payload.py +95 -0
  140. omnibase_infra/handlers/models/model_db_query_response.py +60 -0
  141. omnibase_infra/handlers/models/model_filesystem_config.py +98 -0
  142. omnibase_infra/handlers/models/model_filesystem_delete_payload.py +54 -0
  143. omnibase_infra/handlers/models/model_filesystem_delete_result.py +77 -0
  144. omnibase_infra/handlers/models/model_filesystem_directory_entry.py +75 -0
  145. omnibase_infra/handlers/models/model_filesystem_ensure_directory_payload.py +54 -0
  146. omnibase_infra/handlers/models/model_filesystem_ensure_directory_result.py +60 -0
  147. omnibase_infra/handlers/models/model_filesystem_list_directory_payload.py +60 -0
  148. omnibase_infra/handlers/models/model_filesystem_list_directory_result.py +68 -0
  149. omnibase_infra/handlers/models/model_filesystem_read_payload.py +62 -0
  150. omnibase_infra/handlers/models/model_filesystem_read_result.py +61 -0
  151. omnibase_infra/handlers/models/model_filesystem_write_payload.py +70 -0
  152. omnibase_infra/handlers/models/model_filesystem_write_result.py +55 -0
  153. omnibase_infra/handlers/models/model_graph_handler_response.py +98 -0
  154. omnibase_infra/handlers/models/model_handler_response.py +103 -0
  155. omnibase_infra/handlers/models/model_http_handler_response.py +101 -0
  156. omnibase_infra/handlers/models/model_manifest_metadata.py +75 -0
  157. omnibase_infra/handlers/models/model_manifest_persistence_config.py +62 -0
  158. omnibase_infra/handlers/models/model_manifest_query_payload.py +90 -0
  159. omnibase_infra/handlers/models/model_manifest_query_result.py +97 -0
  160. omnibase_infra/handlers/models/model_manifest_retrieve_payload.py +44 -0
  161. omnibase_infra/handlers/models/model_manifest_retrieve_result.py +98 -0
  162. omnibase_infra/handlers/models/model_manifest_store_payload.py +47 -0
  163. omnibase_infra/handlers/models/model_manifest_store_result.py +67 -0
  164. omnibase_infra/handlers/models/model_operation_context.py +187 -0
  165. omnibase_infra/handlers/models/model_qdrant_handler_response.py +98 -0
  166. omnibase_infra/handlers/models/model_retry_state.py +162 -0
  167. omnibase_infra/handlers/models/model_vault_handler_response.py +98 -0
  168. omnibase_infra/handlers/models/qdrant/__init__.py +44 -0
  169. omnibase_infra/handlers/models/qdrant/enum_qdrant_operation_type.py +26 -0
  170. omnibase_infra/handlers/models/qdrant/model_qdrant_collection_payload.py +42 -0
  171. omnibase_infra/handlers/models/qdrant/model_qdrant_delete_payload.py +36 -0
  172. omnibase_infra/handlers/models/qdrant/model_qdrant_handler_config.py +42 -0
  173. omnibase_infra/handlers/models/qdrant/model_qdrant_handler_payload.py +54 -0
  174. omnibase_infra/handlers/models/qdrant/model_qdrant_search_payload.py +42 -0
  175. omnibase_infra/handlers/models/qdrant/model_qdrant_search_result.py +30 -0
  176. omnibase_infra/handlers/models/qdrant/model_qdrant_upsert_payload.py +36 -0
  177. omnibase_infra/handlers/models/vault/__init__.py +69 -0
  178. omnibase_infra/handlers/models/vault/enum_vault_operation_type.py +35 -0
  179. omnibase_infra/handlers/models/vault/model_payload_vault.py +66 -0
  180. omnibase_infra/handlers/models/vault/model_vault_delete_payload.py +57 -0
  181. omnibase_infra/handlers/models/vault/model_vault_handler_config.py +148 -0
  182. omnibase_infra/handlers/models/vault/model_vault_handler_payload.py +101 -0
  183. omnibase_infra/handlers/models/vault/model_vault_list_payload.py +58 -0
  184. omnibase_infra/handlers/models/vault/model_vault_renew_token_payload.py +67 -0
  185. omnibase_infra/handlers/models/vault/model_vault_retry_config.py +66 -0
  186. omnibase_infra/handlers/models/vault/model_vault_secret_payload.py +106 -0
  187. omnibase_infra/handlers/models/vault/model_vault_write_payload.py +66 -0
  188. omnibase_infra/handlers/models/vault/registry_payload_vault.py +213 -0
  189. omnibase_infra/handlers/registration_storage/__init__.py +43 -0
  190. omnibase_infra/handlers/registration_storage/handler_registration_storage_mock.py +392 -0
  191. omnibase_infra/handlers/registration_storage/handler_registration_storage_postgres.py +915 -0
  192. omnibase_infra/handlers/registration_storage/models/__init__.py +23 -0
  193. omnibase_infra/handlers/registration_storage/models/model_delete_registration_request.py +58 -0
  194. omnibase_infra/handlers/registration_storage/models/model_update_registration_request.py +73 -0
  195. omnibase_infra/handlers/registration_storage/protocol_registration_persistence.py +191 -0
  196. omnibase_infra/handlers/service_discovery/__init__.py +43 -0
  197. omnibase_infra/handlers/service_discovery/handler_service_discovery_consul.py +747 -0
  198. omnibase_infra/handlers/service_discovery/handler_service_discovery_mock.py +258 -0
  199. omnibase_infra/handlers/service_discovery/models/__init__.py +22 -0
  200. omnibase_infra/handlers/service_discovery/models/model_discovery_result.py +64 -0
  201. omnibase_infra/handlers/service_discovery/models/model_registration_result.py +138 -0
  202. omnibase_infra/handlers/service_discovery/models/model_service_info.py +99 -0
  203. omnibase_infra/handlers/service_discovery/protocol_discovery_operations.py +170 -0
  204. omnibase_infra/idempotency/__init__.py +94 -0
  205. omnibase_infra/idempotency/models/__init__.py +43 -0
  206. omnibase_infra/idempotency/models/model_idempotency_check_result.py +85 -0
  207. omnibase_infra/idempotency/models/model_idempotency_guard_config.py +130 -0
  208. omnibase_infra/idempotency/models/model_idempotency_record.py +86 -0
  209. omnibase_infra/idempotency/models/model_idempotency_store_health_check_result.py +81 -0
  210. omnibase_infra/idempotency/models/model_idempotency_store_metrics.py +140 -0
  211. omnibase_infra/idempotency/models/model_postgres_idempotency_store_config.py +299 -0
  212. omnibase_infra/idempotency/protocol_idempotency_store.py +184 -0
  213. omnibase_infra/idempotency/store_inmemory.py +265 -0
  214. omnibase_infra/idempotency/store_postgres.py +923 -0
  215. omnibase_infra/infrastructure/__init__.py +0 -0
  216. omnibase_infra/mixins/__init__.py +71 -0
  217. omnibase_infra/mixins/mixin_async_circuit_breaker.py +655 -0
  218. omnibase_infra/mixins/mixin_dict_like_accessors.py +146 -0
  219. omnibase_infra/mixins/mixin_envelope_extraction.py +119 -0
  220. omnibase_infra/mixins/mixin_node_introspection.py +2465 -0
  221. omnibase_infra/mixins/mixin_retry_execution.py +386 -0
  222. omnibase_infra/mixins/protocol_circuit_breaker_aware.py +133 -0
  223. omnibase_infra/models/__init__.py +136 -0
  224. omnibase_infra/models/corpus/__init__.py +17 -0
  225. omnibase_infra/models/corpus/model_capture_config.py +133 -0
  226. omnibase_infra/models/corpus/model_capture_result.py +86 -0
  227. omnibase_infra/models/discovery/__init__.py +42 -0
  228. omnibase_infra/models/discovery/model_dependency_spec.py +319 -0
  229. omnibase_infra/models/discovery/model_discovered_capabilities.py +50 -0
  230. omnibase_infra/models/discovery/model_introspection_config.py +311 -0
  231. omnibase_infra/models/discovery/model_introspection_performance_metrics.py +169 -0
  232. omnibase_infra/models/discovery/model_introspection_task_config.py +116 -0
  233. omnibase_infra/models/dispatch/__init__.py +147 -0
  234. omnibase_infra/models/dispatch/model_dispatch_context.py +439 -0
  235. omnibase_infra/models/dispatch/model_dispatch_error.py +336 -0
  236. omnibase_infra/models/dispatch/model_dispatch_log_context.py +400 -0
  237. omnibase_infra/models/dispatch/model_dispatch_metadata.py +228 -0
  238. omnibase_infra/models/dispatch/model_dispatch_metrics.py +496 -0
  239. omnibase_infra/models/dispatch/model_dispatch_outcome.py +317 -0
  240. omnibase_infra/models/dispatch/model_dispatch_outputs.py +231 -0
  241. omnibase_infra/models/dispatch/model_dispatch_result.py +436 -0
  242. omnibase_infra/models/dispatch/model_dispatch_route.py +279 -0
  243. omnibase_infra/models/dispatch/model_dispatcher_metrics.py +275 -0
  244. omnibase_infra/models/dispatch/model_dispatcher_registration.py +352 -0
  245. omnibase_infra/models/dispatch/model_parsed_topic.py +135 -0
  246. omnibase_infra/models/dispatch/model_topic_parser.py +725 -0
  247. omnibase_infra/models/dispatch/model_tracing_context.py +285 -0
  248. omnibase_infra/models/errors/__init__.py +45 -0
  249. omnibase_infra/models/errors/model_handler_validation_error.py +594 -0
  250. omnibase_infra/models/errors/model_infra_error_context.py +99 -0
  251. omnibase_infra/models/errors/model_message_type_registry_error_context.py +71 -0
  252. omnibase_infra/models/errors/model_timeout_error_context.py +110 -0
  253. omnibase_infra/models/handlers/__init__.py +37 -0
  254. omnibase_infra/models/handlers/model_contract_discovery_result.py +80 -0
  255. omnibase_infra/models/handlers/model_handler_descriptor.py +185 -0
  256. omnibase_infra/models/handlers/model_handler_identifier.py +215 -0
  257. omnibase_infra/models/health/__init__.py +9 -0
  258. omnibase_infra/models/health/model_health_check_result.py +40 -0
  259. omnibase_infra/models/lifecycle/__init__.py +39 -0
  260. omnibase_infra/models/logging/__init__.py +51 -0
  261. omnibase_infra/models/logging/model_log_context.py +756 -0
  262. omnibase_infra/models/model_retry_error_classification.py +78 -0
  263. omnibase_infra/models/projection/__init__.py +43 -0
  264. omnibase_infra/models/projection/model_capability_fields.py +112 -0
  265. omnibase_infra/models/projection/model_registration_projection.py +434 -0
  266. omnibase_infra/models/projection/model_registration_snapshot.py +322 -0
  267. omnibase_infra/models/projection/model_sequence_info.py +182 -0
  268. omnibase_infra/models/projection/model_snapshot_topic_config.py +590 -0
  269. omnibase_infra/models/projectors/__init__.py +41 -0
  270. omnibase_infra/models/projectors/model_projector_column.py +289 -0
  271. omnibase_infra/models/projectors/model_projector_discovery_result.py +65 -0
  272. omnibase_infra/models/projectors/model_projector_index.py +270 -0
  273. omnibase_infra/models/projectors/model_projector_schema.py +415 -0
  274. omnibase_infra/models/projectors/model_projector_validation_error.py +63 -0
  275. omnibase_infra/models/projectors/util_sql_identifiers.py +115 -0
  276. omnibase_infra/models/registration/__init__.py +59 -0
  277. omnibase_infra/models/registration/commands/__init__.py +15 -0
  278. omnibase_infra/models/registration/commands/model_node_registration_acked.py +108 -0
  279. omnibase_infra/models/registration/events/__init__.py +56 -0
  280. omnibase_infra/models/registration/events/model_node_became_active.py +103 -0
  281. omnibase_infra/models/registration/events/model_node_liveness_expired.py +103 -0
  282. omnibase_infra/models/registration/events/model_node_registration_accepted.py +98 -0
  283. omnibase_infra/models/registration/events/model_node_registration_ack_received.py +98 -0
  284. omnibase_infra/models/registration/events/model_node_registration_ack_timed_out.py +112 -0
  285. omnibase_infra/models/registration/events/model_node_registration_initiated.py +107 -0
  286. omnibase_infra/models/registration/events/model_node_registration_rejected.py +104 -0
  287. omnibase_infra/models/registration/model_introspection_metrics.py +253 -0
  288. omnibase_infra/models/registration/model_node_capabilities.py +179 -0
  289. omnibase_infra/models/registration/model_node_heartbeat_event.py +126 -0
  290. omnibase_infra/models/registration/model_node_introspection_event.py +175 -0
  291. omnibase_infra/models/registration/model_node_metadata.py +79 -0
  292. omnibase_infra/models/registration/model_node_registration.py +162 -0
  293. omnibase_infra/models/registration/model_node_registration_record.py +162 -0
  294. omnibase_infra/models/registry/__init__.py +29 -0
  295. omnibase_infra/models/registry/model_domain_constraint.py +202 -0
  296. omnibase_infra/models/registry/model_message_type_entry.py +271 -0
  297. omnibase_infra/models/resilience/__init__.py +9 -0
  298. omnibase_infra/models/resilience/model_circuit_breaker_config.py +227 -0
  299. omnibase_infra/models/routing/__init__.py +25 -0
  300. omnibase_infra/models/routing/model_routing_entry.py +52 -0
  301. omnibase_infra/models/routing/model_routing_subcontract.py +70 -0
  302. omnibase_infra/models/runtime/__init__.py +40 -0
  303. omnibase_infra/models/runtime/model_contract_security_config.py +41 -0
  304. omnibase_infra/models/runtime/model_discovery_error.py +81 -0
  305. omnibase_infra/models/runtime/model_discovery_result.py +162 -0
  306. omnibase_infra/models/runtime/model_discovery_warning.py +74 -0
  307. omnibase_infra/models/runtime/model_failed_plugin_load.py +63 -0
  308. omnibase_infra/models/runtime/model_handler_contract.py +280 -0
  309. omnibase_infra/models/runtime/model_loaded_handler.py +120 -0
  310. omnibase_infra/models/runtime/model_plugin_load_context.py +93 -0
  311. omnibase_infra/models/runtime/model_plugin_load_summary.py +124 -0
  312. omnibase_infra/models/security/__init__.py +50 -0
  313. omnibase_infra/models/security/classification_levels.py +99 -0
  314. omnibase_infra/models/security/model_environment_policy.py +145 -0
  315. omnibase_infra/models/security/model_handler_security_policy.py +107 -0
  316. omnibase_infra/models/security/model_security_error.py +81 -0
  317. omnibase_infra/models/security/model_security_validation_result.py +328 -0
  318. omnibase_infra/models/security/model_security_warning.py +67 -0
  319. omnibase_infra/models/snapshot/__init__.py +27 -0
  320. omnibase_infra/models/snapshot/model_field_change.py +65 -0
  321. omnibase_infra/models/snapshot/model_snapshot.py +270 -0
  322. omnibase_infra/models/snapshot/model_snapshot_diff.py +203 -0
  323. omnibase_infra/models/snapshot/model_subject_ref.py +81 -0
  324. omnibase_infra/models/types/__init__.py +71 -0
  325. omnibase_infra/models/validation/__init__.py +89 -0
  326. omnibase_infra/models/validation/model_any_type_validation_result.py +118 -0
  327. omnibase_infra/models/validation/model_any_type_violation.py +141 -0
  328. omnibase_infra/models/validation/model_category_match_result.py +345 -0
  329. omnibase_infra/models/validation/model_chain_violation.py +166 -0
  330. omnibase_infra/models/validation/model_coverage_metrics.py +316 -0
  331. omnibase_infra/models/validation/model_execution_shape_rule.py +159 -0
  332. omnibase_infra/models/validation/model_execution_shape_validation.py +208 -0
  333. omnibase_infra/models/validation/model_execution_shape_validation_result.py +294 -0
  334. omnibase_infra/models/validation/model_execution_shape_violation.py +122 -0
  335. omnibase_infra/models/validation/model_localhandler_validation_result.py +139 -0
  336. omnibase_infra/models/validation/model_localhandler_violation.py +100 -0
  337. omnibase_infra/models/validation/model_output_validation_params.py +74 -0
  338. omnibase_infra/models/validation/model_validate_and_raise_params.py +84 -0
  339. omnibase_infra/models/validation/model_validation_error_params.py +84 -0
  340. omnibase_infra/models/validation/model_validation_outcome.py +287 -0
  341. omnibase_infra/nodes/__init__.py +48 -0
  342. omnibase_infra/nodes/architecture_validator/__init__.py +79 -0
  343. omnibase_infra/nodes/architecture_validator/contract.yaml +252 -0
  344. omnibase_infra/nodes/architecture_validator/contract_architecture_validator.yaml +208 -0
  345. omnibase_infra/nodes/architecture_validator/mixins/__init__.py +16 -0
  346. omnibase_infra/nodes/architecture_validator/mixins/mixin_file_path_rule.py +92 -0
  347. omnibase_infra/nodes/architecture_validator/models/__init__.py +36 -0
  348. omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_request.py +56 -0
  349. omnibase_infra/nodes/architecture_validator/models/model_architecture_validation_result.py +311 -0
  350. omnibase_infra/nodes/architecture_validator/models/model_architecture_violation.py +163 -0
  351. omnibase_infra/nodes/architecture_validator/models/model_rule_check_result.py +265 -0
  352. omnibase_infra/nodes/architecture_validator/models/model_validation_request.py +105 -0
  353. omnibase_infra/nodes/architecture_validator/models/model_validation_result.py +314 -0
  354. omnibase_infra/nodes/architecture_validator/node.py +262 -0
  355. omnibase_infra/nodes/architecture_validator/node_architecture_validator.py +383 -0
  356. omnibase_infra/nodes/architecture_validator/protocols/__init__.py +9 -0
  357. omnibase_infra/nodes/architecture_validator/protocols/protocol_architecture_rule.py +225 -0
  358. omnibase_infra/nodes/architecture_validator/registry/__init__.py +28 -0
  359. omnibase_infra/nodes/architecture_validator/registry/registry_infra_architecture_validator.py +99 -0
  360. omnibase_infra/nodes/architecture_validator/validators/__init__.py +104 -0
  361. omnibase_infra/nodes/architecture_validator/validators/validator_no_direct_dispatch.py +422 -0
  362. omnibase_infra/nodes/architecture_validator/validators/validator_no_handler_publishing.py +481 -0
  363. omnibase_infra/nodes/architecture_validator/validators/validator_no_orchestrator_fsm.py +491 -0
  364. omnibase_infra/nodes/effects/README.md +358 -0
  365. omnibase_infra/nodes/effects/__init__.py +26 -0
  366. omnibase_infra/nodes/effects/contract.yaml +172 -0
  367. omnibase_infra/nodes/effects/models/__init__.py +32 -0
  368. omnibase_infra/nodes/effects/models/model_backend_result.py +190 -0
  369. omnibase_infra/nodes/effects/models/model_effect_idempotency_config.py +92 -0
  370. omnibase_infra/nodes/effects/models/model_registry_request.py +132 -0
  371. omnibase_infra/nodes/effects/models/model_registry_response.py +263 -0
  372. omnibase_infra/nodes/effects/protocol_consul_client.py +89 -0
  373. omnibase_infra/nodes/effects/protocol_effect_idempotency_store.py +143 -0
  374. omnibase_infra/nodes/effects/protocol_postgres_adapter.py +96 -0
  375. omnibase_infra/nodes/effects/registry_effect.py +525 -0
  376. omnibase_infra/nodes/effects/store_effect_idempotency_inmemory.py +425 -0
  377. omnibase_infra/nodes/node_registration_orchestrator/README.md +542 -0
  378. omnibase_infra/nodes/node_registration_orchestrator/__init__.py +120 -0
  379. omnibase_infra/nodes/node_registration_orchestrator/contract.yaml +475 -0
  380. omnibase_infra/nodes/node_registration_orchestrator/dispatchers/__init__.py +53 -0
  381. omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_introspected.py +376 -0
  382. omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_node_registration_acked.py +376 -0
  383. omnibase_infra/nodes/node_registration_orchestrator/dispatchers/dispatcher_runtime_tick.py +373 -0
  384. omnibase_infra/nodes/node_registration_orchestrator/handlers/__init__.py +62 -0
  385. omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_heartbeat.py +376 -0
  386. omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_introspected.py +609 -0
  387. omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_node_registration_acked.py +458 -0
  388. omnibase_infra/nodes/node_registration_orchestrator/handlers/handler_runtime_tick.py +364 -0
  389. omnibase_infra/nodes/node_registration_orchestrator/introspection_event_router.py +544 -0
  390. omnibase_infra/nodes/node_registration_orchestrator/models/__init__.py +75 -0
  391. omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_intent_payload.py +194 -0
  392. omnibase_infra/nodes/node_registration_orchestrator/models/model_consul_registration_intent.py +67 -0
  393. omnibase_infra/nodes/node_registration_orchestrator/models/model_intent_execution_result.py +50 -0
  394. omnibase_infra/nodes/node_registration_orchestrator/models/model_node_liveness_expired.py +107 -0
  395. omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_config.py +67 -0
  396. omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_input.py +41 -0
  397. omnibase_infra/nodes/node_registration_orchestrator/models/model_orchestrator_output.py +166 -0
  398. omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_intent_payload.py +235 -0
  399. omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_upsert_intent.py +68 -0
  400. omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_execution_result.py +384 -0
  401. omnibase_infra/nodes/node_registration_orchestrator/models/model_reducer_state.py +60 -0
  402. omnibase_infra/nodes/node_registration_orchestrator/models/model_registration_intent.py +177 -0
  403. omnibase_infra/nodes/node_registration_orchestrator/models/model_registry_intent.py +247 -0
  404. omnibase_infra/nodes/node_registration_orchestrator/node.py +195 -0
  405. omnibase_infra/nodes/node_registration_orchestrator/plugin.py +909 -0
  406. omnibase_infra/nodes/node_registration_orchestrator/protocols.py +439 -0
  407. omnibase_infra/nodes/node_registration_orchestrator/registry/__init__.py +41 -0
  408. omnibase_infra/nodes/node_registration_orchestrator/registry/registry_infra_node_registration_orchestrator.py +525 -0
  409. omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +392 -0
  410. omnibase_infra/nodes/node_registration_orchestrator/wiring.py +742 -0
  411. omnibase_infra/nodes/node_registration_reducer/__init__.py +15 -0
  412. omnibase_infra/nodes/node_registration_reducer/contract.yaml +301 -0
  413. omnibase_infra/nodes/node_registration_reducer/models/__init__.py +38 -0
  414. omnibase_infra/nodes/node_registration_reducer/models/model_validation_result.py +113 -0
  415. omnibase_infra/nodes/node_registration_reducer/node.py +139 -0
  416. omnibase_infra/nodes/node_registration_reducer/registry/__init__.py +9 -0
  417. omnibase_infra/nodes/node_registration_reducer/registry/registry_infra_node_registration_reducer.py +79 -0
  418. omnibase_infra/nodes/node_registration_storage_effect/__init__.py +41 -0
  419. omnibase_infra/nodes/node_registration_storage_effect/contract.yaml +225 -0
  420. omnibase_infra/nodes/node_registration_storage_effect/models/__init__.py +44 -0
  421. omnibase_infra/nodes/node_registration_storage_effect/models/model_delete_result.py +132 -0
  422. omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_record.py +199 -0
  423. omnibase_infra/nodes/node_registration_storage_effect/models/model_registration_update.py +155 -0
  424. omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_details.py +123 -0
  425. omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_health_check_result.py +117 -0
  426. omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_query.py +100 -0
  427. omnibase_infra/nodes/node_registration_storage_effect/models/model_storage_result.py +136 -0
  428. omnibase_infra/nodes/node_registration_storage_effect/models/model_upsert_result.py +127 -0
  429. omnibase_infra/nodes/node_registration_storage_effect/node.py +109 -0
  430. omnibase_infra/nodes/node_registration_storage_effect/protocols/__init__.py +22 -0
  431. omnibase_infra/nodes/node_registration_storage_effect/protocols/protocol_registration_persistence.py +333 -0
  432. omnibase_infra/nodes/node_registration_storage_effect/registry/__init__.py +23 -0
  433. omnibase_infra/nodes/node_registration_storage_effect/registry/registry_infra_registration_storage.py +194 -0
  434. omnibase_infra/nodes/node_registry_effect/__init__.py +85 -0
  435. omnibase_infra/nodes/node_registry_effect/contract.yaml +682 -0
  436. omnibase_infra/nodes/node_registry_effect/handlers/__init__.py +70 -0
  437. omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_deregister.py +211 -0
  438. omnibase_infra/nodes/node_registry_effect/handlers/handler_consul_register.py +212 -0
  439. omnibase_infra/nodes/node_registry_effect/handlers/handler_partial_retry.py +416 -0
  440. omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_deactivate.py +215 -0
  441. omnibase_infra/nodes/node_registry_effect/handlers/handler_postgres_upsert.py +208 -0
  442. omnibase_infra/nodes/node_registry_effect/models/__init__.py +43 -0
  443. omnibase_infra/nodes/node_registry_effect/models/model_partial_retry_request.py +92 -0
  444. omnibase_infra/nodes/node_registry_effect/node.py +165 -0
  445. omnibase_infra/nodes/node_registry_effect/registry/__init__.py +27 -0
  446. omnibase_infra/nodes/node_registry_effect/registry/registry_infra_registry_effect.py +196 -0
  447. omnibase_infra/nodes/node_service_discovery_effect/__init__.py +111 -0
  448. omnibase_infra/nodes/node_service_discovery_effect/contract.yaml +246 -0
  449. omnibase_infra/nodes/node_service_discovery_effect/models/__init__.py +67 -0
  450. omnibase_infra/nodes/node_service_discovery_effect/models/enum_health_status.py +72 -0
  451. omnibase_infra/nodes/node_service_discovery_effect/models/enum_service_discovery_operation.py +58 -0
  452. omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_query.py +99 -0
  453. omnibase_infra/nodes/node_service_discovery_effect/models/model_discovery_result.py +98 -0
  454. omnibase_infra/nodes/node_service_discovery_effect/models/model_health_check_config.py +121 -0
  455. omnibase_infra/nodes/node_service_discovery_effect/models/model_query_metadata.py +63 -0
  456. omnibase_infra/nodes/node_service_discovery_effect/models/model_registration_result.py +130 -0
  457. omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_details.py +111 -0
  458. omnibase_infra/nodes/node_service_discovery_effect/models/model_service_discovery_health_check_result.py +119 -0
  459. omnibase_infra/nodes/node_service_discovery_effect/models/model_service_info.py +106 -0
  460. omnibase_infra/nodes/node_service_discovery_effect/models/model_service_registration.py +121 -0
  461. omnibase_infra/nodes/node_service_discovery_effect/node.py +111 -0
  462. omnibase_infra/nodes/node_service_discovery_effect/protocols/__init__.py +14 -0
  463. omnibase_infra/nodes/node_service_discovery_effect/protocols/protocol_discovery_operations.py +279 -0
  464. omnibase_infra/nodes/node_service_discovery_effect/registry/__init__.py +13 -0
  465. omnibase_infra/nodes/node_service_discovery_effect/registry/registry_infra_service_discovery.py +214 -0
  466. omnibase_infra/nodes/reducers/__init__.py +30 -0
  467. omnibase_infra/nodes/reducers/models/__init__.py +32 -0
  468. omnibase_infra/nodes/reducers/models/model_payload_consul_register.py +76 -0
  469. omnibase_infra/nodes/reducers/models/model_payload_postgres_upsert_registration.py +60 -0
  470. omnibase_infra/nodes/reducers/models/model_registration_confirmation.py +166 -0
  471. omnibase_infra/nodes/reducers/models/model_registration_state.py +433 -0
  472. omnibase_infra/nodes/reducers/registration_reducer.py +1137 -0
  473. omnibase_infra/observability/__init__.py +143 -0
  474. omnibase_infra/observability/constants_metrics.py +91 -0
  475. omnibase_infra/observability/factory_observability_sink.py +525 -0
  476. omnibase_infra/observability/handlers/__init__.py +118 -0
  477. omnibase_infra/observability/handlers/handler_logging_structured.py +967 -0
  478. omnibase_infra/observability/handlers/handler_metrics_prometheus.py +1120 -0
  479. omnibase_infra/observability/handlers/model_logging_handler_config.py +71 -0
  480. omnibase_infra/observability/handlers/model_logging_handler_response.py +77 -0
  481. omnibase_infra/observability/handlers/model_metrics_handler_config.py +172 -0
  482. omnibase_infra/observability/handlers/model_metrics_handler_payload.py +135 -0
  483. omnibase_infra/observability/handlers/model_metrics_handler_response.py +101 -0
  484. omnibase_infra/observability/hooks/__init__.py +74 -0
  485. omnibase_infra/observability/hooks/hook_observability.py +1223 -0
  486. omnibase_infra/observability/models/__init__.py +30 -0
  487. omnibase_infra/observability/models/enum_required_log_context_key.py +77 -0
  488. omnibase_infra/observability/models/model_buffered_log_entry.py +117 -0
  489. omnibase_infra/observability/models/model_logging_sink_config.py +73 -0
  490. omnibase_infra/observability/models/model_metrics_sink_config.py +156 -0
  491. omnibase_infra/observability/sinks/__init__.py +69 -0
  492. omnibase_infra/observability/sinks/sink_logging_structured.py +809 -0
  493. omnibase_infra/observability/sinks/sink_metrics_prometheus.py +710 -0
  494. omnibase_infra/plugins/__init__.py +27 -0
  495. omnibase_infra/plugins/examples/__init__.py +28 -0
  496. omnibase_infra/plugins/examples/plugin_json_normalizer.py +271 -0
  497. omnibase_infra/plugins/examples/plugin_json_normalizer_error_handling.py +210 -0
  498. omnibase_infra/plugins/models/__init__.py +21 -0
  499. omnibase_infra/plugins/models/model_plugin_context.py +76 -0
  500. omnibase_infra/plugins/models/model_plugin_input_data.py +58 -0
  501. omnibase_infra/plugins/models/model_plugin_output_data.py +62 -0
  502. omnibase_infra/plugins/plugin_compute_base.py +435 -0
  503. omnibase_infra/projectors/__init__.py +30 -0
  504. omnibase_infra/projectors/contracts/__init__.py +63 -0
  505. omnibase_infra/projectors/contracts/registration_projector.yaml +370 -0
  506. omnibase_infra/projectors/projection_reader_registration.py +1559 -0
  507. omnibase_infra/projectors/snapshot_publisher_registration.py +1329 -0
  508. omnibase_infra/protocols/__init__.py +99 -0
  509. omnibase_infra/protocols/protocol_capability_projection.py +253 -0
  510. omnibase_infra/protocols/protocol_capability_query.py +251 -0
  511. omnibase_infra/protocols/protocol_event_bus_like.py +127 -0
  512. omnibase_infra/protocols/protocol_event_projector.py +96 -0
  513. omnibase_infra/protocols/protocol_idempotency_store.py +142 -0
  514. omnibase_infra/protocols/protocol_message_dispatcher.py +247 -0
  515. omnibase_infra/protocols/protocol_message_type_registry.py +306 -0
  516. omnibase_infra/protocols/protocol_plugin_compute.py +368 -0
  517. omnibase_infra/protocols/protocol_projector_schema_validator.py +82 -0
  518. omnibase_infra/protocols/protocol_registry_metrics.py +215 -0
  519. omnibase_infra/protocols/protocol_snapshot_publisher.py +396 -0
  520. omnibase_infra/protocols/protocol_snapshot_store.py +567 -0
  521. omnibase_infra/runtime/__init__.py +296 -0
  522. omnibase_infra/runtime/binding_config_resolver.py +2706 -0
  523. omnibase_infra/runtime/chain_aware_dispatch.py +467 -0
  524. omnibase_infra/runtime/contract_handler_discovery.py +582 -0
  525. omnibase_infra/runtime/contract_loaders/__init__.py +42 -0
  526. omnibase_infra/runtime/contract_loaders/handler_routing_loader.py +464 -0
  527. omnibase_infra/runtime/dispatch_context_enforcer.py +427 -0
  528. omnibase_infra/runtime/enums/__init__.py +18 -0
  529. omnibase_infra/runtime/enums/enum_config_ref_scheme.py +33 -0
  530. omnibase_infra/runtime/enums/enum_scheduler_status.py +170 -0
  531. omnibase_infra/runtime/envelope_validator.py +179 -0
  532. omnibase_infra/runtime/handler_contract_source.py +669 -0
  533. omnibase_infra/runtime/handler_plugin_loader.py +2029 -0
  534. omnibase_infra/runtime/handler_registry.py +321 -0
  535. omnibase_infra/runtime/invocation_security_enforcer.py +427 -0
  536. omnibase_infra/runtime/kernel.py +40 -0
  537. omnibase_infra/runtime/mixin_policy_validation.py +522 -0
  538. omnibase_infra/runtime/mixin_semver_cache.py +378 -0
  539. omnibase_infra/runtime/mixins/__init__.py +17 -0
  540. omnibase_infra/runtime/mixins/mixin_projector_sql_operations.py +757 -0
  541. omnibase_infra/runtime/models/__init__.py +192 -0
  542. omnibase_infra/runtime/models/model_batch_lifecycle_result.py +217 -0
  543. omnibase_infra/runtime/models/model_binding_config.py +168 -0
  544. omnibase_infra/runtime/models/model_binding_config_cache_stats.py +135 -0
  545. omnibase_infra/runtime/models/model_binding_config_resolver_config.py +329 -0
  546. omnibase_infra/runtime/models/model_cached_secret.py +138 -0
  547. omnibase_infra/runtime/models/model_compute_key.py +138 -0
  548. omnibase_infra/runtime/models/model_compute_registration.py +97 -0
  549. omnibase_infra/runtime/models/model_config_cache_entry.py +61 -0
  550. omnibase_infra/runtime/models/model_config_ref.py +331 -0
  551. omnibase_infra/runtime/models/model_config_ref_parse_result.py +125 -0
  552. omnibase_infra/runtime/models/model_domain_plugin_config.py +92 -0
  553. omnibase_infra/runtime/models/model_domain_plugin_result.py +270 -0
  554. omnibase_infra/runtime/models/model_duplicate_response.py +54 -0
  555. omnibase_infra/runtime/models/model_enabled_protocols_config.py +61 -0
  556. omnibase_infra/runtime/models/model_event_bus_config.py +54 -0
  557. omnibase_infra/runtime/models/model_failed_component.py +55 -0
  558. omnibase_infra/runtime/models/model_health_check_response.py +168 -0
  559. omnibase_infra/runtime/models/model_health_check_result.py +228 -0
  560. omnibase_infra/runtime/models/model_lifecycle_result.py +245 -0
  561. omnibase_infra/runtime/models/model_logging_config.py +42 -0
  562. omnibase_infra/runtime/models/model_optional_correlation_id.py +167 -0
  563. omnibase_infra/runtime/models/model_optional_string.py +94 -0
  564. omnibase_infra/runtime/models/model_optional_uuid.py +110 -0
  565. omnibase_infra/runtime/models/model_policy_context.py +100 -0
  566. omnibase_infra/runtime/models/model_policy_key.py +138 -0
  567. omnibase_infra/runtime/models/model_policy_registration.py +139 -0
  568. omnibase_infra/runtime/models/model_policy_result.py +103 -0
  569. omnibase_infra/runtime/models/model_policy_type_filter.py +157 -0
  570. omnibase_infra/runtime/models/model_projector_plugin_loader_config.py +47 -0
  571. omnibase_infra/runtime/models/model_protocol_registration_config.py +65 -0
  572. omnibase_infra/runtime/models/model_retry_policy.py +105 -0
  573. omnibase_infra/runtime/models/model_runtime_config.py +150 -0
  574. omnibase_infra/runtime/models/model_runtime_scheduler_config.py +624 -0
  575. omnibase_infra/runtime/models/model_runtime_scheduler_metrics.py +233 -0
  576. omnibase_infra/runtime/models/model_runtime_tick.py +193 -0
  577. omnibase_infra/runtime/models/model_secret_cache_stats.py +82 -0
  578. omnibase_infra/runtime/models/model_secret_mapping.py +63 -0
  579. omnibase_infra/runtime/models/model_secret_resolver_config.py +107 -0
  580. omnibase_infra/runtime/models/model_secret_resolver_metrics.py +111 -0
  581. omnibase_infra/runtime/models/model_secret_source_info.py +72 -0
  582. omnibase_infra/runtime/models/model_secret_source_spec.py +66 -0
  583. omnibase_infra/runtime/models/model_shutdown_batch_result.py +75 -0
  584. omnibase_infra/runtime/models/model_shutdown_config.py +94 -0
  585. omnibase_infra/runtime/projector_plugin_loader.py +1462 -0
  586. omnibase_infra/runtime/projector_schema_manager.py +565 -0
  587. omnibase_infra/runtime/projector_shell.py +1102 -0
  588. omnibase_infra/runtime/protocol_contract_descriptor.py +92 -0
  589. omnibase_infra/runtime/protocol_contract_source.py +92 -0
  590. omnibase_infra/runtime/protocol_domain_plugin.py +474 -0
  591. omnibase_infra/runtime/protocol_handler_discovery.py +221 -0
  592. omnibase_infra/runtime/protocol_handler_plugin_loader.py +327 -0
  593. omnibase_infra/runtime/protocol_lifecycle_executor.py +435 -0
  594. omnibase_infra/runtime/protocol_policy.py +366 -0
  595. omnibase_infra/runtime/protocols/__init__.py +27 -0
  596. omnibase_infra/runtime/protocols/protocol_runtime_scheduler.py +468 -0
  597. omnibase_infra/runtime/registry/__init__.py +93 -0
  598. omnibase_infra/runtime/registry/mixin_message_type_query.py +326 -0
  599. omnibase_infra/runtime/registry/mixin_message_type_registration.py +354 -0
  600. omnibase_infra/runtime/registry/registry_event_bus_binding.py +268 -0
  601. omnibase_infra/runtime/registry/registry_message_type.py +542 -0
  602. omnibase_infra/runtime/registry/registry_protocol_binding.py +444 -0
  603. omnibase_infra/runtime/registry_compute.py +1143 -0
  604. omnibase_infra/runtime/registry_dispatcher.py +678 -0
  605. omnibase_infra/runtime/registry_policy.py +1502 -0
  606. omnibase_infra/runtime/runtime_scheduler.py +1070 -0
  607. omnibase_infra/runtime/secret_resolver.py +2110 -0
  608. omnibase_infra/runtime/security_metadata_validator.py +776 -0
  609. omnibase_infra/runtime/service_kernel.py +1573 -0
  610. omnibase_infra/runtime/service_message_dispatch_engine.py +1805 -0
  611. omnibase_infra/runtime/service_runtime_host_process.py +2260 -0
  612. omnibase_infra/runtime/util_container_wiring.py +1123 -0
  613. omnibase_infra/runtime/util_validation.py +314 -0
  614. omnibase_infra/runtime/util_version.py +98 -0
  615. omnibase_infra/runtime/util_wiring.py +566 -0
  616. omnibase_infra/schemas/schema_registration_projection.sql +320 -0
  617. omnibase_infra/services/__init__.py +68 -0
  618. omnibase_infra/services/corpus_capture.py +678 -0
  619. omnibase_infra/services/service_capability_query.py +945 -0
  620. omnibase_infra/services/service_health.py +897 -0
  621. omnibase_infra/services/service_node_selector.py +530 -0
  622. omnibase_infra/services/service_timeout_emitter.py +682 -0
  623. omnibase_infra/services/service_timeout_scanner.py +390 -0
  624. omnibase_infra/services/snapshot/__init__.py +31 -0
  625. omnibase_infra/services/snapshot/service_snapshot.py +647 -0
  626. omnibase_infra/services/snapshot/store_inmemory.py +637 -0
  627. omnibase_infra/services/snapshot/store_postgres.py +1279 -0
  628. omnibase_infra/shared/__init__.py +8 -0
  629. omnibase_infra/testing/__init__.py +10 -0
  630. omnibase_infra/testing/utils.py +23 -0
  631. omnibase_infra/types/__init__.py +48 -0
  632. omnibase_infra/types/type_cache_info.py +49 -0
  633. omnibase_infra/types/type_dsn.py +173 -0
  634. omnibase_infra/types/type_infra_aliases.py +60 -0
  635. omnibase_infra/types/typed_dict/__init__.py +21 -0
  636. omnibase_infra/types/typed_dict/typed_dict_introspection_cache.py +128 -0
  637. omnibase_infra/types/typed_dict/typed_dict_performance_metrics_cache.py +140 -0
  638. omnibase_infra/types/typed_dict_capabilities.py +64 -0
  639. omnibase_infra/utils/__init__.py +89 -0
  640. omnibase_infra/utils/correlation.py +208 -0
  641. omnibase_infra/utils/util_datetime.py +372 -0
  642. omnibase_infra/utils/util_dsn_validation.py +333 -0
  643. omnibase_infra/utils/util_env_parsing.py +264 -0
  644. omnibase_infra/utils/util_error_sanitization.py +457 -0
  645. omnibase_infra/utils/util_pydantic_validators.py +477 -0
  646. omnibase_infra/utils/util_semver.py +233 -0
  647. omnibase_infra/validation/__init__.py +307 -0
  648. omnibase_infra/validation/enums/__init__.py +11 -0
  649. omnibase_infra/validation/enums/enum_contract_violation_severity.py +13 -0
  650. omnibase_infra/validation/infra_validators.py +1486 -0
  651. omnibase_infra/validation/linter_contract.py +907 -0
  652. omnibase_infra/validation/mixin_any_type_classification.py +120 -0
  653. omnibase_infra/validation/mixin_any_type_exemption.py +580 -0
  654. omnibase_infra/validation/mixin_any_type_reporting.py +106 -0
  655. omnibase_infra/validation/mixin_execution_shape_violation_checks.py +596 -0
  656. omnibase_infra/validation/mixin_node_archetype_detection.py +254 -0
  657. omnibase_infra/validation/models/__init__.py +15 -0
  658. omnibase_infra/validation/models/model_contract_lint_result.py +101 -0
  659. omnibase_infra/validation/models/model_contract_violation.py +41 -0
  660. omnibase_infra/validation/service_validation_aggregator.py +395 -0
  661. omnibase_infra/validation/validation_exemptions.yaml +1710 -0
  662. omnibase_infra/validation/validator_any_type.py +715 -0
  663. omnibase_infra/validation/validator_chain_propagation.py +839 -0
  664. omnibase_infra/validation/validator_execution_shape.py +465 -0
  665. omnibase_infra/validation/validator_localhandler.py +261 -0
  666. omnibase_infra/validation/validator_registration_security.py +410 -0
  667. omnibase_infra/validation/validator_routing_coverage.py +1020 -0
  668. omnibase_infra/validation/validator_runtime_shape.py +915 -0
  669. omnibase_infra/validation/validator_security.py +410 -0
  670. omnibase_infra/validation/validator_topic_category.py +1152 -0
  671. omnibase_infra-0.2.1.dist-info/METADATA +197 -0
  672. omnibase_infra-0.2.1.dist-info/RECORD +675 -0
  673. omnibase_infra-0.2.1.dist-info/WHEEL +4 -0
  674. omnibase_infra-0.2.1.dist-info/entry_points.txt +4 -0
  675. omnibase_infra-0.2.1.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,624 @@
1
+ # SPDX-License-Identifier: MIT
2
+ # Copyright (c) 2025 OmniNode Team
3
+ """Runtime Scheduler Configuration Model.
4
+
5
+ Provides a Pydantic configuration model for the runtime tick scheduler that emits
6
+ RuntimeTick events at configurable intervals. Supports environment variable overrides
7
+ for deployment flexibility and restart-safe behavior through sequence number tracking.
8
+
9
+ Features:
10
+ - Strong typing with comprehensive validation
11
+ - Environment variable override support with type conversion
12
+ - Sensible defaults for production deployment
13
+ - Circuit breaker configuration for publish failure resilience
14
+ - Restart-safe sequence number persistence
15
+
16
+ Environment Variables:
17
+ All environment variables are optional and fall back to defaults if not set
18
+ or if parsing fails. Invalid values log warnings and use defaults.
19
+
20
+ Core Settings:
21
+ ONEX_RUNTIME_SCHEDULER_TICK_INTERVAL_MS: Tick interval in milliseconds (integer, 10-60000)
22
+ Default: 1000 (1 second)
23
+ Example: "5000" (5 seconds)
24
+ Warning: Logs warning if not a valid integer, uses default
25
+
26
+ ONEX_RUNTIME_SCHEDULER_ID: Unique scheduler identifier
27
+ Default: "runtime-scheduler-default"
28
+ Example: "runtime-scheduler-prod-1"
29
+
30
+ ONEX_RUNTIME_SCHEDULER_TICK_TOPIC: Kafka topic for publishing ticks
31
+ Default: "runtime.tick.v1"
32
+ Example: "prod.runtime.tick.v1"
33
+
34
+ Restart-Safety Settings:
35
+ ONEX_RUNTIME_SCHEDULER_PERSIST_SEQUENCE: Enable sequence number persistence (boolean)
36
+ Default: true
37
+ True values: "true", "1", "yes", "on" (case-insensitive)
38
+ False values: "false", "0", "no", "off" (case-insensitive)
39
+
40
+ ONEX_RUNTIME_SCHEDULER_SEQUENCE_KEY: Key for sequence number storage
41
+ Default: "runtime_scheduler_sequence"
42
+ Example: "scheduler_seq_prod"
43
+
44
+ Performance Settings:
45
+ ONEX_RUNTIME_SCHEDULER_MAX_JITTER_MS: Maximum jitter in milliseconds (integer, 0-10000)
46
+ Default: 100
47
+ Example: "50"
48
+ Warning: Logs warning if not a valid integer, uses default
49
+
50
+ Circuit Breaker Settings:
51
+ ONEX_RUNTIME_SCHEDULER_CB_THRESHOLD: Failures before circuit opens (integer, 1-100)
52
+ Default: 5
53
+ Example: "10"
54
+ Warning: Logs warning if not a valid integer, uses default
55
+
56
+ ONEX_RUNTIME_SCHEDULER_CB_RESET_TIMEOUT: Reset timeout in seconds (float, 1.0-3600.0)
57
+ Default: 60.0
58
+ Example: "120.0"
59
+ Warning: Logs warning if not a valid float, uses default
60
+
61
+ Metrics Settings:
62
+ ONEX_RUNTIME_SCHEDULER_ENABLE_METRICS: Enable metrics collection (boolean)
63
+ Default: true
64
+ True values: "true", "1", "yes", "on" (case-insensitive)
65
+ False values: "false", "0", "no", "off" (case-insensitive)
66
+
67
+ ONEX_RUNTIME_SCHEDULER_METRICS_PREFIX: Prefix for metrics names
68
+ Default: "runtime_scheduler"
69
+ Example: "prod_runtime_scheduler"
70
+
71
+ Valkey (Redis-compatible) Settings:
72
+ REDIS_HOST: Valkey host for sequence number persistence
73
+ Default: "localhost"
74
+ Example: "omninode-bridge-valkey" or use REDIS_HOST env var
75
+
76
+ REDIS_PORT: Valkey port (integer, 1-65535)
77
+ Default: 6379
78
+
79
+ REDIS_PASSWORD: Valkey password (optional)
80
+ Default: None (no authentication)
81
+
82
+ ONEX_RUNTIME_SCHEDULER_VALKEY_TIMEOUT: Timeout for Valkey ops (float)
83
+ Default: 5.0 seconds
84
+ Range: 0.1-60.0
85
+
86
+ ONEX_RUNTIME_SCHEDULER_VALKEY_RETRIES: Connection retries (integer)
87
+ Default: 3
88
+ Range: 0-10
89
+
90
+ Parsing Behavior:
91
+ - Integer/Float fields: Logs warning and uses default if parsing fails
92
+ - Boolean fields: Logs warning if value not in expected set, treats as False
93
+ - String fields: No validation, accepts any string value
94
+ - All warnings include the environment variable name, invalid value, and
95
+ the field name that will use the default value
96
+ """
97
+
98
+ from __future__ import annotations
99
+
100
+ import logging
101
+ import os
102
+ import re
103
+ from uuid import uuid4
104
+
105
+ from pydantic import BaseModel, ConfigDict, Field, field_validator
106
+
107
+ from omnibase_infra.enums import EnumInfraTransportType
108
+ from omnibase_infra.errors import ModelInfraErrorContext, ProtocolConfigurationError
109
+
110
+ logger = logging.getLogger(__name__)
111
+
112
+
113
+ class ModelRuntimeSchedulerConfig(BaseModel):
114
+ """Configuration model for the runtime tick scheduler.
115
+
116
+ Controls how frequently RuntimeTick events are emitted and provides
117
+ restart-safe behavior through sequence number persistence.
118
+
119
+ Attributes:
120
+ tick_interval_ms: Interval between ticks in milliseconds (10-60000)
121
+ scheduler_id: Unique identifier for this scheduler instance
122
+ tick_topic: Kafka topic for publishing tick events
123
+ persist_sequence_number: Whether to persist sequence numbers for restart safety
124
+ sequence_number_key: Key used for sequence number storage
125
+ max_tick_jitter_ms: Maximum jitter to prevent thundering herd (0-10000)
126
+ circuit_breaker_threshold: Failures before circuit opens (1-100)
127
+ circuit_breaker_reset_timeout_seconds: Reset timeout in seconds (1.0-3600.0)
128
+ enable_metrics: Whether to collect scheduler metrics
129
+ metrics_prefix: Prefix for metrics names
130
+ valkey_host: Valkey host for sequence number persistence
131
+ valkey_port: Valkey port for sequence number persistence (1-65535)
132
+ valkey_password: Valkey password (optional)
133
+ valkey_timeout_seconds: Timeout for Valkey operations (0.1-60.0)
134
+ valkey_connection_retries: Connection retries before fallback (0-10)
135
+
136
+ Example:
137
+ ```python
138
+ # Using defaults with environment overrides
139
+ config = ModelRuntimeSchedulerConfig.default()
140
+
141
+ # Manual construction with custom values
142
+ config = ModelRuntimeSchedulerConfig(
143
+ tick_interval_ms=5000, # 5 seconds
144
+ scheduler_id="prod-scheduler-1",
145
+ tick_topic="prod.runtime.tick.v1",
146
+ )
147
+ ```
148
+ """
149
+
150
+ model_config = ConfigDict(
151
+ frozen=True,
152
+ extra="forbid",
153
+ from_attributes=True,
154
+ )
155
+
156
+ # Core scheduling configuration
157
+ tick_interval_ms: int = Field(
158
+ default=1000,
159
+ description="Interval between ticks in milliseconds",
160
+ ge=10,
161
+ le=60000,
162
+ )
163
+ scheduler_id: str = Field(
164
+ default="runtime-scheduler-default",
165
+ description="Unique identifier for this scheduler instance",
166
+ min_length=1,
167
+ max_length=255,
168
+ )
169
+ tick_topic: str = Field(
170
+ default="runtime.tick.v1",
171
+ description="Kafka topic for publishing tick events",
172
+ min_length=1,
173
+ max_length=255,
174
+ )
175
+
176
+ # Restart-safety configuration
177
+ persist_sequence_number: bool = Field(
178
+ default=True,
179
+ description="Whether to persist sequence numbers for restart safety",
180
+ )
181
+ sequence_number_key: str = Field(
182
+ default="runtime_scheduler_sequence",
183
+ description="Key used for sequence number storage",
184
+ min_length=1,
185
+ max_length=255,
186
+ )
187
+
188
+ # Performance tuning
189
+ max_tick_jitter_ms: int = Field(
190
+ default=100,
191
+ description="Maximum jitter in milliseconds to prevent thundering herd",
192
+ ge=0,
193
+ le=10000,
194
+ )
195
+
196
+ # Circuit breaker configuration
197
+ circuit_breaker_threshold: int = Field(
198
+ default=5,
199
+ description="Number of consecutive failures before circuit opens",
200
+ ge=1,
201
+ le=100,
202
+ )
203
+ circuit_breaker_reset_timeout_seconds: float = Field(
204
+ default=60.0,
205
+ description="Seconds before circuit breaker resets to half-open state",
206
+ ge=1.0,
207
+ le=3600.0,
208
+ )
209
+
210
+ # Metrics configuration
211
+ enable_metrics: bool = Field(
212
+ default=True,
213
+ description="Whether to collect scheduler metrics",
214
+ )
215
+ metrics_prefix: str = Field(
216
+ default="runtime_scheduler",
217
+ description="Prefix for metrics names",
218
+ min_length=1,
219
+ max_length=255,
220
+ )
221
+
222
+ # Valkey (Redis-compatible) configuration for sequence number persistence
223
+ valkey_host: str = Field(
224
+ default="localhost",
225
+ description="Valkey host for sequence number persistence",
226
+ min_length=1,
227
+ max_length=255,
228
+ )
229
+ valkey_port: int = Field(
230
+ default=6379,
231
+ description="Valkey port for sequence number persistence",
232
+ ge=1,
233
+ le=65535,
234
+ )
235
+ valkey_password: str | None = Field(
236
+ default=None,
237
+ description="Valkey password (optional, from REDIS_PASSWORD env var)",
238
+ )
239
+ valkey_timeout_seconds: float = Field(
240
+ default=5.0,
241
+ description="Timeout for Valkey operations in seconds",
242
+ ge=0.1,
243
+ le=60.0,
244
+ )
245
+ valkey_connection_retries: int = Field(
246
+ default=3,
247
+ description="Number of connection retries before fallback",
248
+ ge=0,
249
+ le=10,
250
+ )
251
+
252
+ @field_validator("scheduler_id", mode="before")
253
+ @classmethod
254
+ def validate_scheduler_id(cls, v: object) -> str:
255
+ """Validate scheduler identifier.
256
+
257
+ Args:
258
+ v: Scheduler ID value (any type before Pydantic conversion)
259
+
260
+ Returns:
261
+ Validated scheduler ID string
262
+
263
+ Raises:
264
+ ProtocolConfigurationError: If scheduler ID is empty, invalid type,
265
+ or contains invalid characters
266
+ """
267
+ context = ModelInfraErrorContext(
268
+ transport_type=EnumInfraTransportType.KAFKA,
269
+ operation="validate_config",
270
+ target_name="runtime_scheduler_config",
271
+ correlation_id=uuid4(),
272
+ )
273
+
274
+ if v is None:
275
+ raise ProtocolConfigurationError(
276
+ "scheduler_id cannot be None",
277
+ context=context,
278
+ parameter="scheduler_id",
279
+ value=None,
280
+ )
281
+ if not isinstance(v, str):
282
+ raise ProtocolConfigurationError(
283
+ f"scheduler_id must be a string, got {type(v).__name__}",
284
+ context=context,
285
+ parameter="scheduler_id",
286
+ value=type(v).__name__,
287
+ )
288
+
289
+ scheduler_id = v.strip()
290
+ if not scheduler_id:
291
+ raise ProtocolConfigurationError(
292
+ "scheduler_id cannot be empty",
293
+ context=context,
294
+ parameter="scheduler_id",
295
+ value=v,
296
+ )
297
+
298
+ # Check for invalid characters (control characters, null bytes)
299
+ for char in scheduler_id:
300
+ if ord(char) < 32 or char == "\x7f":
301
+ raise ProtocolConfigurationError(
302
+ f"scheduler_id '{scheduler_id}' contains invalid control character",
303
+ context=context,
304
+ parameter="scheduler_id",
305
+ value=scheduler_id,
306
+ )
307
+
308
+ return scheduler_id
309
+
310
+ @field_validator("tick_topic", mode="before")
311
+ @classmethod
312
+ def validate_tick_topic(cls, v: object) -> str:
313
+ """Validate tick topic name.
314
+
315
+ Args:
316
+ v: Topic name value (any type before Pydantic conversion)
317
+
318
+ Returns:
319
+ Validated topic name string
320
+
321
+ Raises:
322
+ ProtocolConfigurationError: If topic name is empty, invalid type,
323
+ or contains invalid characters
324
+ """
325
+ context = ModelInfraErrorContext(
326
+ transport_type=EnumInfraTransportType.KAFKA,
327
+ operation="validate_config",
328
+ target_name="runtime_scheduler_config",
329
+ correlation_id=uuid4(),
330
+ )
331
+
332
+ if v is None:
333
+ raise ProtocolConfigurationError(
334
+ "tick_topic cannot be None",
335
+ context=context,
336
+ parameter="tick_topic",
337
+ value=None,
338
+ )
339
+ if not isinstance(v, str):
340
+ raise ProtocolConfigurationError(
341
+ f"tick_topic must be a string, got {type(v).__name__}",
342
+ context=context,
343
+ parameter="tick_topic",
344
+ value=type(v).__name__,
345
+ )
346
+
347
+ topic_name = v.strip()
348
+ if not topic_name:
349
+ raise ProtocolConfigurationError(
350
+ "tick_topic cannot be empty",
351
+ context=context,
352
+ parameter="tick_topic",
353
+ value=v,
354
+ )
355
+
356
+ # Kafka topic naming rules: alphanumeric, dots, underscores, hyphens
357
+ if not re.match(r"^[a-zA-Z0-9._-]+$", topic_name):
358
+ raise ProtocolConfigurationError(
359
+ f"tick_topic '{topic_name}' contains invalid characters. "
360
+ "Only alphanumeric characters, dots, underscores, and hyphens are allowed",
361
+ context=context,
362
+ parameter="tick_topic",
363
+ value=topic_name,
364
+ )
365
+
366
+ return topic_name
367
+
368
+ @field_validator("sequence_number_key", mode="before")
369
+ @classmethod
370
+ def validate_sequence_number_key(cls, v: object) -> str:
371
+ """Validate sequence number storage key.
372
+
373
+ Args:
374
+ v: Key value (any type before Pydantic conversion)
375
+
376
+ Returns:
377
+ Validated key string
378
+
379
+ Raises:
380
+ ProtocolConfigurationError: If key is empty or invalid type
381
+ """
382
+ context = ModelInfraErrorContext(
383
+ transport_type=EnumInfraTransportType.KAFKA,
384
+ operation="validate_config",
385
+ target_name="runtime_scheduler_config",
386
+ correlation_id=uuid4(),
387
+ )
388
+
389
+ if v is None:
390
+ raise ProtocolConfigurationError(
391
+ "sequence_number_key cannot be None",
392
+ context=context,
393
+ parameter="sequence_number_key",
394
+ value=None,
395
+ )
396
+ if not isinstance(v, str):
397
+ raise ProtocolConfigurationError(
398
+ f"sequence_number_key must be a string, got {type(v).__name__}",
399
+ context=context,
400
+ parameter="sequence_number_key",
401
+ value=type(v).__name__,
402
+ )
403
+
404
+ key = v.strip()
405
+ if not key:
406
+ raise ProtocolConfigurationError(
407
+ "sequence_number_key cannot be empty",
408
+ context=context,
409
+ parameter="sequence_number_key",
410
+ value=v,
411
+ )
412
+
413
+ return key
414
+
415
+ @field_validator("metrics_prefix", mode="before")
416
+ @classmethod
417
+ def validate_metrics_prefix(cls, v: object) -> str:
418
+ """Validate metrics prefix.
419
+
420
+ Args:
421
+ v: Prefix value (any type before Pydantic conversion)
422
+
423
+ Returns:
424
+ Validated prefix string
425
+
426
+ Raises:
427
+ ProtocolConfigurationError: If prefix is empty, invalid type,
428
+ or contains invalid characters
429
+ """
430
+ context = ModelInfraErrorContext(
431
+ transport_type=EnumInfraTransportType.KAFKA,
432
+ operation="validate_config",
433
+ target_name="runtime_scheduler_config",
434
+ correlation_id=uuid4(),
435
+ )
436
+
437
+ if v is None:
438
+ raise ProtocolConfigurationError(
439
+ "metrics_prefix cannot be None",
440
+ context=context,
441
+ parameter="metrics_prefix",
442
+ value=None,
443
+ )
444
+ if not isinstance(v, str):
445
+ raise ProtocolConfigurationError(
446
+ f"metrics_prefix must be a string, got {type(v).__name__}",
447
+ context=context,
448
+ parameter="metrics_prefix",
449
+ value=type(v).__name__,
450
+ )
451
+
452
+ prefix = v.strip()
453
+ if not prefix:
454
+ raise ProtocolConfigurationError(
455
+ "metrics_prefix cannot be empty",
456
+ context=context,
457
+ parameter="metrics_prefix",
458
+ value=v,
459
+ )
460
+
461
+ # Metrics prefixes should be alphanumeric with underscores only
462
+ if not re.match(r"^[a-zA-Z][a-zA-Z0-9_]*$", prefix):
463
+ raise ProtocolConfigurationError(
464
+ f"metrics_prefix '{prefix}' is invalid. "
465
+ "Must start with a letter and contain only alphanumeric characters "
466
+ "and underscores",
467
+ context=context,
468
+ parameter="metrics_prefix",
469
+ value=prefix,
470
+ )
471
+
472
+ return prefix
473
+
474
+ def apply_environment_overrides(self) -> ModelRuntimeSchedulerConfig:
475
+ """Apply environment variable overrides to configuration.
476
+
477
+ Environment variables are mapped as follows:
478
+ - ONEX_RUNTIME_SCHEDULER_TICK_INTERVAL_MS -> tick_interval_ms
479
+ - ONEX_RUNTIME_SCHEDULER_ID -> scheduler_id
480
+ - ONEX_RUNTIME_SCHEDULER_TICK_TOPIC -> tick_topic
481
+ - ONEX_RUNTIME_SCHEDULER_PERSIST_SEQUENCE -> persist_sequence_number
482
+ - ONEX_RUNTIME_SCHEDULER_SEQUENCE_KEY -> sequence_number_key
483
+ - ONEX_RUNTIME_SCHEDULER_MAX_JITTER_MS -> max_tick_jitter_ms
484
+ - ONEX_RUNTIME_SCHEDULER_CB_THRESHOLD -> circuit_breaker_threshold
485
+ - ONEX_RUNTIME_SCHEDULER_CB_RESET_TIMEOUT -> circuit_breaker_reset_timeout_seconds
486
+ - ONEX_RUNTIME_SCHEDULER_ENABLE_METRICS -> enable_metrics
487
+ - ONEX_RUNTIME_SCHEDULER_METRICS_PREFIX -> metrics_prefix
488
+
489
+ Returns:
490
+ New configuration instance with environment overrides applied
491
+ """
492
+ overrides: dict[str, object] = {}
493
+
494
+ env_mappings: dict[str, str] = {
495
+ "ONEX_RUNTIME_SCHEDULER_TICK_INTERVAL_MS": "tick_interval_ms",
496
+ "ONEX_RUNTIME_SCHEDULER_ID": "scheduler_id",
497
+ "ONEX_RUNTIME_SCHEDULER_TICK_TOPIC": "tick_topic",
498
+ "ONEX_RUNTIME_SCHEDULER_PERSIST_SEQUENCE": "persist_sequence_number",
499
+ "ONEX_RUNTIME_SCHEDULER_SEQUENCE_KEY": "sequence_number_key",
500
+ "ONEX_RUNTIME_SCHEDULER_MAX_JITTER_MS": "max_tick_jitter_ms",
501
+ "ONEX_RUNTIME_SCHEDULER_CB_THRESHOLD": "circuit_breaker_threshold",
502
+ "ONEX_RUNTIME_SCHEDULER_CB_RESET_TIMEOUT": "circuit_breaker_reset_timeout_seconds",
503
+ "ONEX_RUNTIME_SCHEDULER_ENABLE_METRICS": "enable_metrics",
504
+ "ONEX_RUNTIME_SCHEDULER_METRICS_PREFIX": "metrics_prefix",
505
+ # Valkey configuration from Redis environment variables
506
+ "REDIS_HOST": "valkey_host",
507
+ "REDIS_PORT": "valkey_port",
508
+ "REDIS_PASSWORD": "valkey_password",
509
+ "ONEX_RUNTIME_SCHEDULER_VALKEY_TIMEOUT": "valkey_timeout_seconds",
510
+ "ONEX_RUNTIME_SCHEDULER_VALKEY_RETRIES": "valkey_connection_retries",
511
+ }
512
+
513
+ # Integer fields for type conversion
514
+ int_fields = {
515
+ "tick_interval_ms",
516
+ "max_tick_jitter_ms",
517
+ "circuit_breaker_threshold",
518
+ "valkey_port",
519
+ "valkey_connection_retries",
520
+ }
521
+
522
+ # Float fields for type conversion
523
+ float_fields = {
524
+ "circuit_breaker_reset_timeout_seconds",
525
+ "valkey_timeout_seconds",
526
+ }
527
+
528
+ # Boolean fields for type conversion
529
+ bool_fields = {
530
+ "persist_sequence_number",
531
+ "enable_metrics",
532
+ }
533
+
534
+ for env_var, field_name in env_mappings.items():
535
+ env_value = os.environ.get(env_var)
536
+ if env_value is not None:
537
+ if field_name in int_fields:
538
+ try:
539
+ overrides[field_name] = int(env_value)
540
+ except ValueError:
541
+ logger.warning(
542
+ "Failed to parse integer environment variable %s='%s', "
543
+ "using default value for %s",
544
+ env_var,
545
+ env_value,
546
+ field_name,
547
+ )
548
+ continue
549
+ elif field_name in float_fields:
550
+ try:
551
+ overrides[field_name] = float(env_value)
552
+ except ValueError:
553
+ logger.warning(
554
+ "Failed to parse float environment variable %s='%s', "
555
+ "using default value for %s",
556
+ env_var,
557
+ env_value,
558
+ field_name,
559
+ )
560
+ continue
561
+ elif field_name in bool_fields:
562
+ # Boolean conversion with explicit falsy value handling
563
+ # True values: "true", "1", "yes", "on" (case-insensitive)
564
+ # False values: All other values (including "false", "0", "no", "off")
565
+ parsed_value = env_value.lower() in ("true", "1", "yes", "on")
566
+ if env_value.lower() not in (
567
+ "true",
568
+ "1",
569
+ "yes",
570
+ "on",
571
+ "false",
572
+ "0",
573
+ "no",
574
+ "off",
575
+ ):
576
+ logger.warning(
577
+ "Boolean environment variable %s='%s' has unexpected value. "
578
+ "Valid values are: true/1/yes/on (True) or false/0/no/off (False). "
579
+ "Treating as False.",
580
+ env_var,
581
+ env_value,
582
+ )
583
+ overrides[field_name] = parsed_value
584
+ else:
585
+ overrides[field_name] = env_value
586
+
587
+ if overrides:
588
+ current_data = self.model_dump()
589
+ current_data.update(overrides)
590
+ return ModelRuntimeSchedulerConfig(**current_data)
591
+
592
+ return self
593
+
594
+ @classmethod
595
+ def default(cls) -> ModelRuntimeSchedulerConfig:
596
+ """Create default configuration with environment overrides.
597
+
598
+ Returns a canonical default configuration for development, testing,
599
+ and CLI fallback use, with environment variable overrides applied.
600
+
601
+ Returns:
602
+ Default configuration instance with environment overrides
603
+ """
604
+ base_config = cls(
605
+ tick_interval_ms=1000,
606
+ scheduler_id="runtime-scheduler-default",
607
+ tick_topic="runtime.tick.v1",
608
+ persist_sequence_number=True,
609
+ sequence_number_key="runtime_scheduler_sequence",
610
+ max_tick_jitter_ms=100,
611
+ circuit_breaker_threshold=5,
612
+ circuit_breaker_reset_timeout_seconds=60.0,
613
+ enable_metrics=True,
614
+ metrics_prefix="runtime_scheduler",
615
+ valkey_host="localhost",
616
+ valkey_port=6379,
617
+ valkey_password=None,
618
+ valkey_timeout_seconds=5.0,
619
+ valkey_connection_retries=3,
620
+ )
621
+ return base_config.apply_environment_overrides()
622
+
623
+
624
+ __all__: list[str] = ["ModelRuntimeSchedulerConfig"]