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,742 @@
1
+ # SPDX-License-Identifier: MIT
2
+ # Copyright (c) 2025 OmniNode Team
3
+ """Registration domain wiring for MessageDispatchEngine integration.
4
+
5
+ This module provides domain-specific wiring functions for the Registration
6
+ orchestrator, enabling dispatchers to be registered with MessageDispatchEngine.
7
+
8
+ The wiring follows the domain-driven design principle where Registration-specific
9
+ code (dispatchers, route IDs, handlers) lives in the Registration domain rather
10
+ than the generic runtime layer.
11
+
12
+ Design Pattern:
13
+ The container_wiring.py module in runtime/ delegates to this domain wiring
14
+ module for Registration-specific wiring. This keeps the generic runtime
15
+ layer clean while allowing domain-specific customization.
16
+
17
+ ```python
18
+ # In container_wiring.py (generic runtime)
19
+ from omnibase_infra.nodes.node_registration_orchestrator.wiring import (
20
+ wire_registration_dispatchers,
21
+ )
22
+
23
+ # Delegation pattern - no Registration-specific logic in runtime
24
+ result = await wire_registration_dispatchers(container, engine)
25
+ ```
26
+
27
+ Route ID Constants:
28
+ This module defines Registration-specific route IDs used for topic-based
29
+ routing in the MessageDispatchEngine:
30
+ - ROUTE_ID_NODE_INTROSPECTION: route.registration.node-introspection
31
+ - ROUTE_ID_RUNTIME_TICK: route.registration.runtime-tick
32
+ - ROUTE_ID_NODE_REGISTRATION_ACKED: route.registration.node-registration-acked
33
+
34
+ Related:
35
+ - OMN-888: Registration Orchestrator
36
+ - OMN-892: 2-way Registration E2E Integration Test
37
+ - OMN-934: Message Dispatch Engine
38
+ - OMN-1346: Registration Code Extraction
39
+ """
40
+
41
+ from __future__ import annotations
42
+
43
+ import logging
44
+ from typing import TYPE_CHECKING, TypedDict, cast
45
+ from uuid import UUID
46
+
47
+ from omnibase_infra.enums import EnumInfraTransportType
48
+ from omnibase_infra.errors import (
49
+ ContainerValidationError,
50
+ ContainerWiringError,
51
+ ServiceResolutionError,
52
+ )
53
+ from omnibase_infra.models.errors.model_infra_error_context import (
54
+ ModelInfraErrorContext,
55
+ )
56
+
57
+
58
+ class WiringResult(TypedDict):
59
+ """Result of wire_registration_handlers operation.
60
+
61
+ This TypedDict provides precise typing for the return value,
62
+ eliminating the need for type narrowing in callers.
63
+ """
64
+
65
+ services: list[str]
66
+ status: str
67
+
68
+
69
+ if TYPE_CHECKING:
70
+ import asyncpg
71
+
72
+ from omnibase_core.container import ModelONEXContainer
73
+ from omnibase_infra.handlers.handler_consul import HandlerConsul
74
+ from omnibase_infra.nodes.node_registration_orchestrator.handlers import (
75
+ HandlerNodeIntrospected,
76
+ HandlerNodeRegistrationAcked,
77
+ HandlerRuntimeTick,
78
+ )
79
+ from omnibase_infra.projectors import ProjectionReaderRegistration
80
+ from omnibase_infra.runtime import MessageDispatchEngine, ProjectorShell
81
+
82
+ logger = logging.getLogger(__name__)
83
+
84
+ # =============================================================================
85
+ # Registration Domain Route IDs
86
+ # =============================================================================
87
+ # These route IDs are Registration-specific and belong in this domain module
88
+ # rather than the generic runtime layer.
89
+
90
+ ROUTE_ID_NODE_INTROSPECTION = "route.registration.node-introspection"
91
+ """Route ID for node introspection events.
92
+
93
+ Topic pattern: *.node.introspection.events.*
94
+ Message type: ModelNodeIntrospectionEvent
95
+ Category: EVENT
96
+ """
97
+
98
+ ROUTE_ID_RUNTIME_TICK = "route.registration.runtime-tick"
99
+ """Route ID for runtime tick events.
100
+
101
+ Topic pattern: *.runtime.tick.events.*
102
+ Message type: ModelRuntimeTick
103
+ Category: EVENT
104
+ """
105
+
106
+ ROUTE_ID_NODE_REGISTRATION_ACKED = "route.registration.node-registration-acked"
107
+ """Route ID for node registration ack commands.
108
+
109
+ Topic pattern: *.node.registration.commands.*
110
+ Message type: ModelNodeRegistrationAcked
111
+ Category: COMMAND
112
+ """
113
+
114
+
115
+ def _validate_service_registry(
116
+ container: ModelONEXContainer,
117
+ operation: str,
118
+ ) -> None:
119
+ """Validate that container.service_registry is not None.
120
+
121
+ This validation should be called before any operation that uses
122
+ container.service_registry to provide clear error messages when
123
+ the service registry is unavailable.
124
+
125
+ Note:
126
+ This is a local copy of the validation function to avoid circular
127
+ imports between this module and container_wiring.py.
128
+
129
+ Args:
130
+ container: The ONEX container to validate.
131
+ operation: Description of the operation being attempted.
132
+
133
+ Raises:
134
+ ServiceRegistryUnavailableError: If service_registry is None.
135
+ """
136
+ # Import here to avoid circular import at module level
137
+ from omnibase_infra.errors import ServiceRegistryUnavailableError
138
+
139
+ if not hasattr(container, "service_registry"):
140
+ raise ServiceRegistryUnavailableError(
141
+ "Container missing 'service_registry' attribute",
142
+ operation=operation,
143
+ hint=(
144
+ "Expected ModelONEXContainer from omnibase_core. "
145
+ "Check that omnibase_core is properly installed."
146
+ ),
147
+ )
148
+
149
+ if container.service_registry is None:
150
+ raise ServiceRegistryUnavailableError(
151
+ "Container service_registry is None",
152
+ operation=operation,
153
+ hint=(
154
+ "ModelONEXContainer.service_registry returns None when:\n"
155
+ " 1. enable_service_registry=False was passed to constructor\n"
156
+ " 2. ServiceRegistry module is not available/installed\n"
157
+ " 3. Container initialization encountered an import error\n"
158
+ "Check container logs for 'ServiceRegistry not available' warnings."
159
+ ),
160
+ )
161
+
162
+
163
+ async def wire_registration_dispatchers(
164
+ container: ModelONEXContainer,
165
+ engine: MessageDispatchEngine,
166
+ correlation_id: UUID | None = None,
167
+ ) -> dict[str, list[str] | str]:
168
+ """Wire registration dispatchers into MessageDispatchEngine.
169
+
170
+ Creates dispatcher adapters for the registration handlers and registers
171
+ them with the MessageDispatchEngine. This enables the engine to route
172
+ introspection events to the appropriate handlers.
173
+
174
+ Prerequisites:
175
+ - wire_registration_handlers() must be called first to register
176
+ the underlying handlers in the container.
177
+ - MessageDispatchEngine must not be frozen yet. If the engine is already
178
+ frozen, dispatcher registration will fail with a RuntimeError from the
179
+ engine's register_dispatcher() method.
180
+
181
+ Args:
182
+ container: ONEX container with registered handlers.
183
+ engine: MessageDispatchEngine instance to register dispatchers with.
184
+ correlation_id: Optional correlation ID for error tracking. If not provided,
185
+ one will be auto-generated when errors are raised.
186
+
187
+ Returns:
188
+ Summary dict with diagnostic information:
189
+ - dispatchers: List of registered dispatcher IDs (e.g.,
190
+ ['dispatcher.node-introspected', 'dispatcher.runtime-tick',
191
+ 'dispatcher.node-registration-acked'])
192
+ - routes: List of registered route IDs (e.g.,
193
+ ['route.registration.node-introspection', 'route.registration.runtime-tick',
194
+ 'route.registration.node-registration-acked'])
195
+ - status: Always "success" (errors raise exceptions)
196
+
197
+ This diagnostic output can be logged or used to verify correct wiring.
198
+
199
+ Raises:
200
+ ServiceRegistryUnavailableError: If service_registry is missing or None.
201
+ ContainerWiringError: If required handlers are not registered in the container,
202
+ or if the engine is already frozen (cannot register new dispatchers).
203
+
204
+ Engine Frozen Behavior:
205
+ If engine.freeze() has been called before this function, the engine
206
+ will reject new dispatcher registrations. Ensure this function is called
207
+ during the wiring phase before engine.freeze() is invoked.
208
+
209
+ Example:
210
+ >>> from omnibase_core.container import ModelONEXContainer
211
+ >>> from omnibase_infra.runtime import MessageDispatchEngine
212
+ >>> import asyncpg
213
+ >>>
214
+ >>> container = ModelONEXContainer()
215
+ >>> pool = await asyncpg.create_pool(dsn)
216
+ >>> await wire_registration_handlers(container, pool)
217
+ >>>
218
+ >>> engine = MessageDispatchEngine()
219
+ >>> summary = await wire_registration_dispatchers(container, engine)
220
+ >>> print(summary)
221
+ {'dispatchers': [...], 'routes': [...]}
222
+ >>> engine.freeze() # Must freeze after wiring
223
+ """
224
+ # Validate service_registry is available and has required methods.
225
+ # NOTE: Validation is done BEFORE imports for fail-fast behavior - no point loading
226
+ # heavy infrastructure modules if service_registry is unavailable.
227
+ _validate_service_registry(container, "wire_registration_dispatchers")
228
+
229
+ # Deferred imports: These imports are placed inside the function to avoid circular
230
+ # import issues and to delay loading dispatcher infrastructure until this function
231
+ # is actually called.
232
+ from omnibase_infra.enums import EnumMessageCategory
233
+ from omnibase_infra.models.dispatch.model_dispatch_route import ModelDispatchRoute
234
+ from omnibase_infra.nodes.node_registration_orchestrator.dispatchers import (
235
+ DispatcherNodeIntrospected,
236
+ DispatcherNodeRegistrationAcked,
237
+ DispatcherRuntimeTick,
238
+ )
239
+ from omnibase_infra.nodes.node_registration_orchestrator.handlers import (
240
+ HandlerNodeIntrospected,
241
+ HandlerNodeRegistrationAcked,
242
+ HandlerRuntimeTick,
243
+ )
244
+
245
+ dispatchers_registered: list[str] = []
246
+ routes_registered: list[str] = []
247
+
248
+ try:
249
+ # 1. Resolve handlers from container
250
+ handler_introspected: HandlerNodeIntrospected = (
251
+ await container.service_registry.resolve_service(HandlerNodeIntrospected)
252
+ )
253
+ handler_runtime_tick: HandlerRuntimeTick = (
254
+ await container.service_registry.resolve_service(HandlerRuntimeTick)
255
+ )
256
+ handler_acked: HandlerNodeRegistrationAcked = (
257
+ await container.service_registry.resolve_service(
258
+ HandlerNodeRegistrationAcked
259
+ )
260
+ )
261
+
262
+ # 2. Create dispatcher adapters
263
+ dispatcher_introspected = DispatcherNodeIntrospected(handler_introspected)
264
+ dispatcher_runtime_tick = DispatcherRuntimeTick(handler_runtime_tick)
265
+ dispatcher_acked = DispatcherNodeRegistrationAcked(handler_acked)
266
+
267
+ # 3. Register dispatchers with engine
268
+ # Note: Using the function-based API rather than protocol-based API
269
+ # because MessageDispatchEngine.register_dispatcher() takes a callable
270
+
271
+ # 3a. Register DispatcherNodeIntrospected
272
+ engine.register_dispatcher(
273
+ dispatcher_id=dispatcher_introspected.dispatcher_id,
274
+ dispatcher=dispatcher_introspected.handle,
275
+ category=dispatcher_introspected.category,
276
+ message_types=dispatcher_introspected.message_types,
277
+ node_kind=dispatcher_introspected.node_kind,
278
+ )
279
+ dispatchers_registered.append(dispatcher_introspected.dispatcher_id)
280
+
281
+ # 3b. Register DispatcherRuntimeTick
282
+ engine.register_dispatcher(
283
+ dispatcher_id=dispatcher_runtime_tick.dispatcher_id,
284
+ dispatcher=dispatcher_runtime_tick.handle,
285
+ category=dispatcher_runtime_tick.category,
286
+ message_types=dispatcher_runtime_tick.message_types,
287
+ node_kind=dispatcher_runtime_tick.node_kind,
288
+ )
289
+ dispatchers_registered.append(dispatcher_runtime_tick.dispatcher_id)
290
+
291
+ # 3c. Register DispatcherNodeRegistrationAcked
292
+ engine.register_dispatcher(
293
+ dispatcher_id=dispatcher_acked.dispatcher_id,
294
+ dispatcher=dispatcher_acked.handle,
295
+ category=dispatcher_acked.category,
296
+ message_types=dispatcher_acked.message_types,
297
+ node_kind=dispatcher_acked.node_kind,
298
+ )
299
+ dispatchers_registered.append(dispatcher_acked.dispatcher_id)
300
+
301
+ # 4. Register routes for topic-based routing
302
+ # 4a. Route for introspection events
303
+ route_introspection = ModelDispatchRoute(
304
+ route_id=ROUTE_ID_NODE_INTROSPECTION,
305
+ topic_pattern="*.node.introspection.events.*",
306
+ message_category=EnumMessageCategory.EVENT,
307
+ dispatcher_id=dispatcher_introspected.dispatcher_id,
308
+ message_type="ModelNodeIntrospectionEvent",
309
+ )
310
+ engine.register_route(route_introspection)
311
+ routes_registered.append(route_introspection.route_id)
312
+
313
+ # 4b. Route for runtime tick events
314
+ route_runtime_tick = ModelDispatchRoute(
315
+ route_id=ROUTE_ID_RUNTIME_TICK,
316
+ topic_pattern="*.runtime.tick.events.*",
317
+ message_category=EnumMessageCategory.EVENT,
318
+ dispatcher_id=dispatcher_runtime_tick.dispatcher_id,
319
+ message_type="ModelRuntimeTick",
320
+ )
321
+ engine.register_route(route_runtime_tick)
322
+ routes_registered.append(route_runtime_tick.route_id)
323
+
324
+ # 4c. Route for registration ack commands
325
+ route_acked = ModelDispatchRoute(
326
+ route_id=ROUTE_ID_NODE_REGISTRATION_ACKED,
327
+ topic_pattern="*.node.registration.commands.*",
328
+ message_category=EnumMessageCategory.COMMAND,
329
+ dispatcher_id=dispatcher_acked.dispatcher_id,
330
+ message_type="ModelNodeRegistrationAcked",
331
+ )
332
+ engine.register_route(route_acked)
333
+ routes_registered.append(route_acked.route_id)
334
+
335
+ logger.info(
336
+ "Registration dispatchers wired successfully",
337
+ extra={
338
+ "dispatcher_count": len(dispatchers_registered),
339
+ "dispatchers": dispatchers_registered,
340
+ "route_count": len(routes_registered),
341
+ "routes": routes_registered,
342
+ },
343
+ )
344
+
345
+ except Exception as e:
346
+ logger.exception(
347
+ "Failed to wire registration dispatchers",
348
+ extra={"error": str(e), "error_type": type(e).__name__},
349
+ )
350
+ context = ModelInfraErrorContext.with_correlation(
351
+ correlation_id=correlation_id,
352
+ transport_type=EnumInfraTransportType.RUNTIME,
353
+ operation="wire_registration_dispatchers",
354
+ )
355
+ raise ContainerWiringError(
356
+ f"Failed to wire registration dispatchers: {e}\n"
357
+ f"Fix: Ensure wire_registration_handlers(container, pool) "
358
+ f"was called first.",
359
+ context=context,
360
+ ) from e
361
+
362
+ return {
363
+ "dispatchers": dispatchers_registered,
364
+ "routes": routes_registered,
365
+ "status": "success",
366
+ }
367
+
368
+
369
+ # =============================================================================
370
+ # Handler Wiring (OMN-1346)
371
+ # =============================================================================
372
+
373
+
374
+ async def wire_registration_handlers(
375
+ container: ModelONEXContainer,
376
+ pool: asyncpg.Pool,
377
+ liveness_interval_seconds: int | None = None,
378
+ projector: ProjectorShell | None = None,
379
+ consul_handler: HandlerConsul | None = None,
380
+ correlation_id: UUID | None = None,
381
+ ) -> WiringResult:
382
+ """Register registration orchestrator handlers with the container.
383
+
384
+ Registers ProjectionReaderRegistration and the three registration handlers:
385
+ - HandlerNodeIntrospected
386
+ - HandlerRuntimeTick
387
+ - HandlerNodeRegistrationAcked
388
+
389
+ All handlers depend on ProjectionReaderRegistration, which is registered first.
390
+
391
+ Args:
392
+ container: ONEX container instance to register services in.
393
+ pool: asyncpg connection pool for database access.
394
+ liveness_interval_seconds: Liveness deadline interval for ack handler.
395
+ If None, uses ONEX_LIVENESS_INTERVAL_SECONDS env var or default (60s).
396
+ projector: Optional ProjectorShell for persisting state transitions.
397
+ consul_handler: Optional HandlerConsul for dual registration with Consul.
398
+ correlation_id: Optional correlation ID for error tracking. If not provided,
399
+ one will be auto-generated when errors are raised.
400
+
401
+ Returns:
402
+ WiringResult TypedDict with:
403
+ - services: List of registered service names
404
+ - status: Always "success" (errors raise exceptions)
405
+
406
+ Raises:
407
+ ServiceRegistryUnavailableError: If service_registry is missing or None.
408
+ ContainerValidationError: If container missing required service_registry API.
409
+ ContainerWiringError: If service registration fails.
410
+
411
+ Note:
412
+ Services are registered with scope="global" and may conflict if multiple
413
+ plugins register the same interface type. This is acceptable for the
414
+ Registration domain as these handlers are singletons by design. If you
415
+ need to register multiple implementations of the same interface, use
416
+ domain-specific interface types or scoped registrations to ensure isolation.
417
+ """
418
+ _validate_service_registry(container, "wire_registration_handlers")
419
+
420
+ from omnibase_core.models.primitives import ModelSemVer
421
+ from omnibase_infra.nodes.node_registration_orchestrator.handlers import (
422
+ HandlerNodeIntrospected,
423
+ HandlerNodeRegistrationAcked,
424
+ HandlerRuntimeTick,
425
+ )
426
+ from omnibase_infra.nodes.node_registration_orchestrator.handlers.handler_node_registration_acked import (
427
+ get_liveness_interval_seconds,
428
+ )
429
+ from omnibase_infra.projectors import ProjectionReaderRegistration
430
+ from omnibase_infra.runtime.projector_shell import ProjectorShell
431
+
432
+ semver_default = ModelSemVer.parse("1.0.0")
433
+ resolved_liveness_interval = get_liveness_interval_seconds(
434
+ liveness_interval_seconds
435
+ )
436
+ services_registered: list[str] = []
437
+
438
+ try:
439
+ projection_reader = ProjectionReaderRegistration(pool)
440
+ await container.service_registry.register_instance(
441
+ interface=ProjectionReaderRegistration,
442
+ instance=projection_reader,
443
+ scope="global",
444
+ metadata={
445
+ "description": "Registration projection reader",
446
+ "version": str(semver_default),
447
+ },
448
+ )
449
+ services_registered.append("ProjectionReaderRegistration")
450
+ logger.debug("Registered ProjectionReaderRegistration in container")
451
+
452
+ if projector is not None:
453
+ await container.service_registry.register_instance(
454
+ interface=ProjectorShell,
455
+ instance=projector,
456
+ scope="global",
457
+ metadata={
458
+ "description": "Registration projector",
459
+ "version": str(semver_default),
460
+ },
461
+ )
462
+ services_registered.append("ProjectorShell")
463
+ logger.debug("Registered ProjectorShell in container")
464
+
465
+ handler_introspected = HandlerNodeIntrospected(
466
+ projection_reader,
467
+ projector=projector,
468
+ consul_handler=consul_handler,
469
+ )
470
+ await container.service_registry.register_instance(
471
+ interface=HandlerNodeIntrospected,
472
+ instance=handler_introspected,
473
+ scope="global",
474
+ metadata={
475
+ "description": "Handler for NodeIntrospectionEvent",
476
+ "version": str(semver_default),
477
+ "has_projector": projector is not None,
478
+ "has_consul_handler": consul_handler is not None,
479
+ },
480
+ )
481
+ services_registered.append("HandlerNodeIntrospected")
482
+ logger.debug("Registered HandlerNodeIntrospected in container")
483
+
484
+ handler_runtime_tick = HandlerRuntimeTick(projection_reader)
485
+ await container.service_registry.register_instance(
486
+ interface=HandlerRuntimeTick,
487
+ instance=handler_runtime_tick,
488
+ scope="global",
489
+ metadata={
490
+ "description": "Handler for RuntimeTick",
491
+ "version": str(semver_default),
492
+ },
493
+ )
494
+ services_registered.append("HandlerRuntimeTick")
495
+ logger.debug("Registered HandlerRuntimeTick in container")
496
+
497
+ handler_acked = HandlerNodeRegistrationAcked(
498
+ projection_reader,
499
+ liveness_interval_seconds=resolved_liveness_interval,
500
+ )
501
+ await container.service_registry.register_instance(
502
+ interface=HandlerNodeRegistrationAcked,
503
+ instance=handler_acked,
504
+ scope="global",
505
+ metadata={
506
+ "description": "Handler for NodeRegistrationAcked",
507
+ "version": str(semver_default),
508
+ "liveness_interval_seconds": resolved_liveness_interval,
509
+ },
510
+ )
511
+ services_registered.append("HandlerNodeRegistrationAcked")
512
+ logger.debug("Registered HandlerNodeRegistrationAcked in container")
513
+
514
+ except AttributeError as e:
515
+ error_str = str(e)
516
+ hint = (
517
+ "Container.service_registry missing 'register_instance' method."
518
+ if "register_instance" in error_str
519
+ else f"Missing attribute: {e}"
520
+ )
521
+ logger.exception("Failed to register handlers", extra={"hint": hint})
522
+ context = ModelInfraErrorContext.with_correlation(
523
+ correlation_id=correlation_id,
524
+ transport_type=EnumInfraTransportType.RUNTIME,
525
+ operation="wire_registration_handlers",
526
+ )
527
+ raise ContainerValidationError(
528
+ f"Handler wiring failed - {hint}\nOriginal: {e}",
529
+ context=context,
530
+ missing_attribute="register_instance"
531
+ if "register_instance" in error_str
532
+ else str(e),
533
+ ) from e
534
+ except Exception as e:
535
+ logger.exception("Failed to register handlers", extra={"error": str(e)})
536
+ context = ModelInfraErrorContext.with_correlation(
537
+ correlation_id=correlation_id,
538
+ transport_type=EnumInfraTransportType.RUNTIME,
539
+ operation="wire_registration_handlers",
540
+ )
541
+ raise ContainerWiringError(
542
+ f"Failed to wire registration handlers: {e}",
543
+ context=context,
544
+ ) from e
545
+
546
+ logger.info(
547
+ "Registration handlers wired successfully",
548
+ extra={
549
+ "service_count": len(services_registered),
550
+ "services": services_registered,
551
+ },
552
+ )
553
+ return {"services": services_registered, "status": "success"}
554
+
555
+
556
+ # =============================================================================
557
+ # Handler Getters (OMN-1346)
558
+ # =============================================================================
559
+
560
+
561
+ async def get_projection_reader_from_container(
562
+ container: ModelONEXContainer,
563
+ correlation_id: UUID | None = None,
564
+ ) -> ProjectionReaderRegistration:
565
+ """Get ProjectionReaderRegistration from container.
566
+
567
+ Args:
568
+ container: ONEX container with registered services.
569
+ correlation_id: Optional correlation ID for error tracking.
570
+
571
+ Returns:
572
+ ProjectionReaderRegistration instance from container.
573
+
574
+ Raises:
575
+ ServiceResolutionError: If service is not registered.
576
+ """
577
+ from omnibase_infra.projectors import ProjectionReaderRegistration
578
+
579
+ _validate_service_registry(container, "resolve ProjectionReaderRegistration")
580
+ try:
581
+ return cast(
582
+ ProjectionReaderRegistration,
583
+ await container.service_registry.resolve_service(
584
+ ProjectionReaderRegistration
585
+ ),
586
+ )
587
+ except Exception as e:
588
+ logger.exception("Failed to resolve ProjectionReaderRegistration")
589
+ context = ModelInfraErrorContext.with_correlation(
590
+ correlation_id=correlation_id,
591
+ transport_type=EnumInfraTransportType.RUNTIME,
592
+ operation="resolve_ProjectionReaderRegistration",
593
+ )
594
+ raise ServiceResolutionError(
595
+ f"ProjectionReaderRegistration not registered. "
596
+ f"Call wire_registration_handlers first. Error: {e}",
597
+ service_name="ProjectionReaderRegistration",
598
+ context=context,
599
+ ) from e
600
+
601
+
602
+ async def get_handler_node_introspected_from_container(
603
+ container: ModelONEXContainer,
604
+ correlation_id: UUID | None = None,
605
+ ) -> HandlerNodeIntrospected:
606
+ """Get HandlerNodeIntrospected from container.
607
+
608
+ Args:
609
+ container: ONEX container with registered services.
610
+ correlation_id: Optional correlation ID for error tracking.
611
+
612
+ Returns:
613
+ HandlerNodeIntrospected instance from container.
614
+
615
+ Raises:
616
+ ServiceResolutionError: If service is not registered.
617
+ """
618
+ from omnibase_infra.nodes.node_registration_orchestrator.handlers import (
619
+ HandlerNodeIntrospected,
620
+ )
621
+
622
+ _validate_service_registry(container, "resolve HandlerNodeIntrospected")
623
+ try:
624
+ return cast(
625
+ HandlerNodeIntrospected,
626
+ await container.service_registry.resolve_service(HandlerNodeIntrospected),
627
+ )
628
+ except Exception as e:
629
+ logger.exception("Failed to resolve HandlerNodeIntrospected")
630
+ context = ModelInfraErrorContext.with_correlation(
631
+ correlation_id=correlation_id,
632
+ transport_type=EnumInfraTransportType.RUNTIME,
633
+ operation="resolve_HandlerNodeIntrospected",
634
+ )
635
+ raise ServiceResolutionError(
636
+ f"HandlerNodeIntrospected not registered. "
637
+ f"Call wire_registration_handlers first. Error: {e}",
638
+ service_name="HandlerNodeIntrospected",
639
+ context=context,
640
+ ) from e
641
+
642
+
643
+ async def get_handler_runtime_tick_from_container(
644
+ container: ModelONEXContainer,
645
+ correlation_id: UUID | None = None,
646
+ ) -> HandlerRuntimeTick:
647
+ """Get HandlerRuntimeTick from container.
648
+
649
+ Args:
650
+ container: ONEX container with registered services.
651
+ correlation_id: Optional correlation ID for error tracking.
652
+
653
+ Returns:
654
+ HandlerRuntimeTick instance from container.
655
+
656
+ Raises:
657
+ ServiceResolutionError: If service is not registered.
658
+ """
659
+ from omnibase_infra.nodes.node_registration_orchestrator.handlers import (
660
+ HandlerRuntimeTick,
661
+ )
662
+
663
+ _validate_service_registry(container, "resolve HandlerRuntimeTick")
664
+ try:
665
+ return cast(
666
+ HandlerRuntimeTick,
667
+ await container.service_registry.resolve_service(HandlerRuntimeTick),
668
+ )
669
+ except Exception as e:
670
+ logger.exception("Failed to resolve HandlerRuntimeTick")
671
+ context = ModelInfraErrorContext.with_correlation(
672
+ correlation_id=correlation_id,
673
+ transport_type=EnumInfraTransportType.RUNTIME,
674
+ operation="resolve_HandlerRuntimeTick",
675
+ )
676
+ raise ServiceResolutionError(
677
+ f"HandlerRuntimeTick not registered. "
678
+ f"Call wire_registration_handlers first. Error: {e}",
679
+ service_name="HandlerRuntimeTick",
680
+ context=context,
681
+ ) from e
682
+
683
+
684
+ async def get_handler_node_registration_acked_from_container(
685
+ container: ModelONEXContainer,
686
+ correlation_id: UUID | None = None,
687
+ ) -> HandlerNodeRegistrationAcked:
688
+ """Get HandlerNodeRegistrationAcked from container.
689
+
690
+ Args:
691
+ container: ONEX container with registered services.
692
+ correlation_id: Optional correlation ID for error tracking.
693
+
694
+ Returns:
695
+ HandlerNodeRegistrationAcked instance from container.
696
+
697
+ Raises:
698
+ ServiceResolutionError: If service is not registered.
699
+ """
700
+ from omnibase_infra.nodes.node_registration_orchestrator.handlers import (
701
+ HandlerNodeRegistrationAcked,
702
+ )
703
+
704
+ _validate_service_registry(container, "resolve HandlerNodeRegistrationAcked")
705
+ try:
706
+ return cast(
707
+ HandlerNodeRegistrationAcked,
708
+ await container.service_registry.resolve_service(
709
+ HandlerNodeRegistrationAcked
710
+ ),
711
+ )
712
+ except Exception as e:
713
+ logger.exception("Failed to resolve HandlerNodeRegistrationAcked")
714
+ context = ModelInfraErrorContext.with_correlation(
715
+ correlation_id=correlation_id,
716
+ transport_type=EnumInfraTransportType.RUNTIME,
717
+ operation="resolve_HandlerNodeRegistrationAcked",
718
+ )
719
+ raise ServiceResolutionError(
720
+ f"HandlerNodeRegistrationAcked not registered. "
721
+ f"Call wire_registration_handlers first. Error: {e}",
722
+ service_name="HandlerNodeRegistrationAcked",
723
+ context=context,
724
+ ) from e
725
+
726
+
727
+ __all__: list[str] = [
728
+ # Route ID constants
729
+ "ROUTE_ID_NODE_INTROSPECTION",
730
+ "ROUTE_ID_NODE_REGISTRATION_ACKED",
731
+ "ROUTE_ID_RUNTIME_TICK",
732
+ # Dispatcher wiring
733
+ "wire_registration_dispatchers",
734
+ # Handler wiring (OMN-1346)
735
+ "wire_registration_handlers",
736
+ "WiringResult",
737
+ # Handler getters (OMN-1346)
738
+ "get_projection_reader_from_container",
739
+ "get_handler_node_introspected_from_container",
740
+ "get_handler_runtime_tick_from_container",
741
+ "get_handler_node_registration_acked_from_container",
742
+ ]