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,1123 @@
1
+ # SPDX-License-Identifier: MIT
2
+ # Copyright (c) 2025 OmniNode Team
3
+ """Container wiring for omnibase_infra services.
4
+
5
+ This module provides functions to register infrastructure services
6
+ with ModelONEXContainer from omnibase_core. It establishes container-based
7
+ dependency injection for RegistryPolicy and other infrastructure components.
8
+
9
+ Design Principles:
10
+ - Explicit registration: All services registered explicitly
11
+ - Singleton per container: Each container gets its own service instances
12
+ - Type-safe resolution: Services registered with proper type interfaces
13
+ - Testability: Easy to mock services via container
14
+
15
+ Service Keys:
16
+ - RegistryPolicy: Registered as interface=RegistryPolicy
17
+ - RegistryProtocolBinding: Registered as interface=RegistryProtocolBinding
18
+ - RegistryCompute: Registered as interface=RegistryCompute
19
+
20
+ Example Usage:
21
+ ```python
22
+ from omnibase_core.container import ModelONEXContainer
23
+ from omnibase_infra.runtime.util_container_wiring import wire_infrastructure_services
24
+ from omnibase_infra.runtime.registry_policy import RegistryPolicy
25
+
26
+ # Bootstrap container
27
+ container = ModelONEXContainer()
28
+
29
+ # Wire infrastructure services
30
+ summary = await wire_infrastructure_services(container)
31
+ print(f"Registered {len(summary['services'])} services")
32
+
33
+ # Resolve services using type interface
34
+ policy_registry = await container.service_registry.resolve_service(RegistryPolicy)
35
+
36
+ # Use the registry
37
+ policy_registry.register_policy(
38
+ policy_id="exponential_backoff",
39
+ policy_class=ExponentialBackoffPolicy,
40
+ policy_type=EnumPolicyType.ORCHESTRATOR,
41
+ )
42
+ ```
43
+
44
+ Integration Notes:
45
+ - Uses ModelONEXContainer.service_registry for registration
46
+ - Services registered as global scope (singleton per container)
47
+ - Type-safe resolution via interface types
48
+ - Compatible with omnibase_core v0.5.6 and later (async service registry)
49
+ - For omnibase_core v0.6.2+: Validates service_registry availability before operations
50
+ """
51
+
52
+ from __future__ import annotations
53
+
54
+ import logging
55
+ from typing import TYPE_CHECKING
56
+
57
+ from omnibase_core.models.primitives import ModelSemVer
58
+ from omnibase_infra.enums import EnumInfraTransportType
59
+ from omnibase_infra.errors import (
60
+ ModelInfraErrorContext,
61
+ ServiceRegistrationError,
62
+ ServiceRegistryUnavailableError,
63
+ ServiceResolutionError,
64
+ )
65
+ from omnibase_infra.runtime.handler_registry import RegistryProtocolBinding
66
+ from omnibase_infra.runtime.registry_compute import RegistryCompute
67
+ from omnibase_infra.runtime.registry_policy import RegistryPolicy
68
+
69
+ if TYPE_CHECKING:
70
+ import asyncpg
71
+
72
+ from omnibase_core.container import ModelONEXContainer
73
+ from omnibase_infra.handlers import HandlerConsul
74
+ from omnibase_infra.nodes.node_registration_orchestrator.handlers import (
75
+ HandlerNodeIntrospected,
76
+ HandlerNodeRegistrationAcked,
77
+ HandlerRuntimeTick,
78
+ )
79
+ from omnibase_infra.nodes.node_registration_orchestrator.wiring import WiringResult
80
+ from omnibase_infra.projectors import ProjectionReaderRegistration
81
+ from omnibase_infra.runtime.projector_shell import ProjectorShell
82
+ from omnibase_infra.runtime.service_message_dispatch_engine import (
83
+ MessageDispatchEngine,
84
+ )
85
+
86
+ # Default semantic version for infrastructure components (from omnibase_core)
87
+ SEMVER_DEFAULT = ModelSemVer.parse("1.0.0")
88
+
89
+ logger = logging.getLogger(__name__)
90
+
91
+
92
+ def _validate_service_registry(
93
+ container: ModelONEXContainer,
94
+ operation: str,
95
+ ) -> None:
96
+ """Validate that container.service_registry is not None.
97
+
98
+ This validation should be called before any operation that uses
99
+ container.service_registry to provide clear error messages when
100
+ the service registry is unavailable.
101
+
102
+ Args:
103
+ container: The ONEX container to validate.
104
+ operation: Description of the operation being attempted.
105
+
106
+ Raises:
107
+ ServiceRegistryUnavailableError: If service_registry is None.
108
+
109
+ Example:
110
+ >>> _validate_service_registry(container, "register RegistryPolicy")
111
+ >>> # Proceed with registration...
112
+ """
113
+ if not hasattr(container, "service_registry"):
114
+ raise ServiceRegistryUnavailableError(
115
+ "Container missing 'service_registry' attribute",
116
+ operation=operation,
117
+ hint=(
118
+ "Expected ModelONEXContainer from omnibase_core. "
119
+ "Check that omnibase_core is properly installed."
120
+ ),
121
+ )
122
+
123
+ if container.service_registry is None:
124
+ # TODO(OMN-1265): Request upstream API - add public method
125
+ # `container.initialize_service_registry(config)` in omnibase_core.
126
+ # Current behavior: service_registry returns None under several conditions, requiring
127
+ # downstream validation. Proposed improvement: provide a factory method or builder pattern
128
+ # that ensures service_registry is always initialized with clear diagnostics.
129
+ raise ServiceRegistryUnavailableError(
130
+ "Container service_registry is None",
131
+ operation=operation,
132
+ hint=(
133
+ "ModelONEXContainer.service_registry returns None when:\n"
134
+ " 1. enable_service_registry=False was passed to constructor\n"
135
+ " 2. ServiceRegistry module is not available/installed\n"
136
+ " 3. Container initialization encountered an import error\n"
137
+ "Check container logs for 'ServiceRegistry not available' warnings."
138
+ ),
139
+ )
140
+
141
+
142
+ def _analyze_attribute_error(error_str: str) -> tuple[str, str]:
143
+ """Analyze AttributeError and return (missing_attribute, hint).
144
+
145
+ Extracts the missing attribute name from the error string and provides
146
+ a user-friendly hint for common container API issues.
147
+
148
+ Note: service_registry missing/None cases are handled by _validate_service_registry()
149
+ which is called before operations. This function handles other AttributeErrors
150
+ (e.g., missing register_instance method).
151
+
152
+ Args:
153
+ error_str: The string representation of the AttributeError.
154
+
155
+ Returns:
156
+ Tuple of (missing_attribute, hint) for error context.
157
+ """
158
+ missing_attr = error_str.split("'")[-2] if "'" in error_str else "unknown"
159
+
160
+ if "register_instance" in error_str:
161
+ hint = (
162
+ "Container.service_registry missing 'register_instance' method. "
163
+ "Check omnibase_core version compatibility (requires v0.5.6 or later)."
164
+ )
165
+ else:
166
+ hint = f"Missing attribute: '{missing_attr}'"
167
+
168
+ return missing_attr, hint
169
+
170
+
171
+ def _analyze_type_error(error_str: str) -> tuple[str, str]:
172
+ """Analyze TypeError and return (invalid_argument, hint).
173
+
174
+ Extracts which argument caused the type error and provides
175
+ a user-friendly hint for fixing registration issues.
176
+
177
+ Args:
178
+ error_str: The string representation of the TypeError.
179
+
180
+ Returns:
181
+ Tuple of (invalid_argument, hint) for error context.
182
+ """
183
+ if "interface" in error_str:
184
+ return "interface", (
185
+ "Invalid 'interface' argument. "
186
+ "Expected a type class (e.g., RegistryPolicy), not an instance."
187
+ )
188
+ if "instance" in error_str:
189
+ return "instance", (
190
+ "Invalid 'instance' argument. Expected an instance of the interface type."
191
+ )
192
+ if "scope" in error_str:
193
+ return "scope", (
194
+ "Invalid 'scope' argument. Expected 'global', 'request', or 'transient'."
195
+ )
196
+ if "metadata" in error_str:
197
+ return "metadata", "Invalid 'metadata' argument. Expected dict[str, object]."
198
+ if "positional" in error_str or "argument" in error_str:
199
+ return "signature", (
200
+ "Argument count mismatch. "
201
+ "Check register_instance() signature compatibility with omnibase_core version."
202
+ )
203
+ return "unknown", "Check register_instance() signature compatibility."
204
+
205
+
206
+ async def wire_infrastructure_services(
207
+ container: ModelONEXContainer,
208
+ ) -> dict[str, list[str] | str]:
209
+ """Register infrastructure services with the container.
210
+
211
+ Registers RegistryPolicy, RegistryProtocolBinding, and RegistryCompute as global
212
+ singleton services in the container. Uses ModelONEXContainer.service_registry.register_instance()
213
+ with the respective class as the interface type.
214
+
215
+ Note: This function is async because ModelONEXContainer.service_registry.register_instance()
216
+ is async in omnibase_core v0.5.6 and later (see omnibase_core.container.ModelONEXContainer).
217
+
218
+ Args:
219
+ container: ONEX container instance to register services in.
220
+
221
+ Returns:
222
+ Summary dict with:
223
+ - services: List of registered service class names
224
+ - status: Always "success" (errors raise exceptions)
225
+
226
+ Raises:
227
+ ServiceRegistryUnavailableError: If service_registry is missing or None.
228
+ ServiceRegistrationError: If service registration fails.
229
+
230
+ Example:
231
+ >>> from omnibase_core.container import ModelONEXContainer
232
+ >>> container = ModelONEXContainer()
233
+ >>> summary = await wire_infrastructure_services(container)
234
+ >>> print(summary)
235
+ {'services': ['RegistryPolicy', 'RegistryProtocolBinding', 'RegistryCompute'], 'status': 'success'}
236
+ >>> policy_reg = await container.service_registry.resolve_service(RegistryPolicy)
237
+ >>> handler_reg = await container.service_registry.resolve_service(RegistryProtocolBinding)
238
+ >>> compute_reg = await container.service_registry.resolve_service(RegistryCompute)
239
+ >>> # Verify via duck typing (per ONEX conventions)
240
+ >>> hasattr(policy_reg, 'register_policy') and callable(policy_reg.register_policy)
241
+ True
242
+ >>> hasattr(handler_reg, 'register') and callable(handler_reg.register)
243
+ True
244
+ >>> hasattr(compute_reg, 'register_plugin') and callable(compute_reg.register_plugin)
245
+ True
246
+ """
247
+ # Validate service_registry is available and has required methods
248
+ _validate_service_registry(container, "wire_infrastructure_services")
249
+
250
+ services_registered: list[str] = []
251
+
252
+ try:
253
+ # Create RegistryPolicy instance
254
+ policy_registry = RegistryPolicy()
255
+
256
+ # Register with container using type interface (global scope = singleton)
257
+ await container.service_registry.register_instance(
258
+ interface=RegistryPolicy,
259
+ instance=policy_registry,
260
+ scope="global",
261
+ metadata={
262
+ "description": "ONEX policy plugin registry",
263
+ "version": str(SEMVER_DEFAULT),
264
+ },
265
+ )
266
+
267
+ services_registered.append("RegistryPolicy")
268
+ logger.debug("Registered RegistryPolicy in container (global scope)")
269
+
270
+ # Create RegistryProtocolBinding instance
271
+ handler_registry = RegistryProtocolBinding()
272
+
273
+ # Register with container using type interface (global scope = singleton)
274
+ await container.service_registry.register_instance(
275
+ interface=RegistryProtocolBinding,
276
+ instance=handler_registry,
277
+ scope="global",
278
+ metadata={
279
+ "description": "ONEX protocol handler binding registry",
280
+ "version": str(SEMVER_DEFAULT),
281
+ },
282
+ )
283
+
284
+ services_registered.append("RegistryProtocolBinding")
285
+ logger.debug("Registered RegistryProtocolBinding in container (global scope)")
286
+
287
+ # Create RegistryCompute instance
288
+ compute_registry = RegistryCompute()
289
+
290
+ # Register with container using type interface (global scope = singleton)
291
+ await container.service_registry.register_instance(
292
+ interface=RegistryCompute,
293
+ instance=compute_registry,
294
+ scope="global",
295
+ metadata={
296
+ "description": "ONEX compute plugin registry",
297
+ "version": str(SEMVER_DEFAULT),
298
+ },
299
+ )
300
+
301
+ services_registered.append("RegistryCompute")
302
+ logger.debug("Registered RegistryCompute in container (global scope)")
303
+
304
+ except AttributeError as e:
305
+ # Container missing service_registry or registration method
306
+ error_str = str(e)
307
+ missing_attr, hint = _analyze_attribute_error(error_str)
308
+
309
+ logger.exception(
310
+ "Container missing required service_registry API",
311
+ extra={
312
+ "error": error_str,
313
+ "error_type": "AttributeError",
314
+ "missing_attribute": missing_attr,
315
+ "hint": hint,
316
+ },
317
+ )
318
+ context = ModelInfraErrorContext.with_correlation(
319
+ transport_type=EnumInfraTransportType.RUNTIME,
320
+ operation="wire_infrastructure_services",
321
+ )
322
+ raise ServiceRegistrationError(
323
+ f"Container wiring failed - {hint}",
324
+ context=context,
325
+ missing_attribute=missing_attr,
326
+ required_api="container.service_registry.register_instance(interface, instance, scope, metadata)",
327
+ original_error=str(e),
328
+ ) from e
329
+ except TypeError as e:
330
+ # Invalid arguments to register_instance
331
+ error_str = str(e)
332
+ invalid_arg, hint = _analyze_type_error(error_str)
333
+
334
+ logger.exception(
335
+ "Invalid arguments during service registration",
336
+ extra={
337
+ "error": error_str,
338
+ "error_type": "TypeError",
339
+ "invalid_argument": invalid_arg,
340
+ "hint": hint,
341
+ },
342
+ )
343
+ context = ModelInfraErrorContext.with_correlation(
344
+ transport_type=EnumInfraTransportType.RUNTIME,
345
+ operation="wire_infrastructure_services",
346
+ )
347
+ raise ServiceRegistrationError(
348
+ f"Container wiring failed - {hint}",
349
+ context=context,
350
+ invalid_argument=invalid_arg,
351
+ expected_signature="register_instance(interface=Type, instance=obj, scope='global'|'request'|'transient', metadata=dict)",
352
+ original_error=str(e),
353
+ ) from e
354
+ except Exception as e:
355
+ # Generic fallback for unexpected errors
356
+ logger.exception(
357
+ "Failed to register infrastructure services",
358
+ extra={"error": str(e), "error_type": type(e).__name__},
359
+ )
360
+ context = ModelInfraErrorContext.with_correlation(
361
+ transport_type=EnumInfraTransportType.RUNTIME,
362
+ operation="wire_infrastructure_services",
363
+ )
364
+ raise ServiceRegistrationError(
365
+ f"Failed to wire infrastructure services: {e}",
366
+ context=context,
367
+ original_error=str(e),
368
+ error_type=type(e).__name__,
369
+ ) from e
370
+
371
+ logger.info(
372
+ "Infrastructure services wired successfully",
373
+ extra={
374
+ "service_count": len(services_registered),
375
+ "services": services_registered,
376
+ },
377
+ )
378
+
379
+ return {"services": services_registered, "status": "success"}
380
+
381
+
382
+ async def get_policy_registry_from_container(
383
+ container: ModelONEXContainer,
384
+ ) -> RegistryPolicy:
385
+ """Get RegistryPolicy from container.
386
+
387
+ Resolves RegistryPolicy using ModelONEXContainer.service_registry.resolve_service().
388
+ This is the preferred method for accessing RegistryPolicy in container-based code.
389
+
390
+ Note: This function is async because ModelONEXContainer.service_registry.resolve_service()
391
+ is async in omnibase_core v0.5.6 and later (see omnibase_core.container.ModelONEXContainer).
392
+
393
+ Args:
394
+ container: ONEX container instance with registered RegistryPolicy.
395
+
396
+ Returns:
397
+ RegistryPolicy instance from container.
398
+
399
+ Raises:
400
+ ServiceRegistryUnavailableError: If service_registry is missing or None.
401
+ ServiceResolutionError: If RegistryPolicy not registered in container.
402
+
403
+ Example:
404
+ >>> from omnibase_core.container import ModelONEXContainer
405
+ >>> container = ModelONEXContainer()
406
+ >>> await wire_infrastructure_services(container)
407
+ >>> registry = await get_policy_registry_from_container(container)
408
+ >>> isinstance(registry, RegistryPolicy)
409
+ True
410
+
411
+ Note:
412
+ This function assumes RegistryPolicy was registered via
413
+ wire_infrastructure_services(). If not, it will raise ServiceResolutionError.
414
+ For auto-registration, use get_or_create_policy_registry() instead.
415
+ """
416
+ # Validate service_registry is available
417
+ _validate_service_registry(container, "resolve RegistryPolicy")
418
+
419
+ try:
420
+ registry: RegistryPolicy = await container.service_registry.resolve_service(
421
+ RegistryPolicy
422
+ )
423
+ return registry
424
+ except AttributeError as e:
425
+ # Note: service_registry case is now handled by _validate_service_registry
426
+ # This block handles other AttributeErrors like missing resolve_service
427
+ error_str = str(e)
428
+ if "resolve_service" in error_str:
429
+ hint = (
430
+ "Container.service_registry missing 'resolve_service' method. "
431
+ "Check omnibase_core version compatibility (requires v0.5.6 or later)."
432
+ )
433
+ else:
434
+ hint = f"Missing attribute in resolution chain: {e}"
435
+
436
+ logger.exception(
437
+ "Failed to resolve RegistryPolicy from container",
438
+ extra={
439
+ "error": error_str,
440
+ "error_type": "AttributeError",
441
+ "service_type": "RegistryPolicy",
442
+ "hint": hint,
443
+ },
444
+ )
445
+ context = ModelInfraErrorContext.with_correlation(
446
+ transport_type=EnumInfraTransportType.RUNTIME,
447
+ operation="resolve_policy_registry",
448
+ )
449
+ raise ServiceResolutionError(
450
+ f"Failed to resolve RegistryPolicy - {hint}",
451
+ service_name="RegistryPolicy",
452
+ context=context,
453
+ required_api="container.service_registry.resolve_service(RegistryPolicy)",
454
+ original_error=str(e),
455
+ ) from e
456
+ except Exception as e:
457
+ logger.exception(
458
+ "Failed to resolve RegistryPolicy from container",
459
+ extra={
460
+ "error": str(e),
461
+ "error_type": type(e).__name__,
462
+ "service_type": "RegistryPolicy",
463
+ },
464
+ )
465
+ context = ModelInfraErrorContext.with_correlation(
466
+ transport_type=EnumInfraTransportType.RUNTIME,
467
+ operation="resolve_policy_registry",
468
+ )
469
+ raise ServiceResolutionError(
470
+ "RegistryPolicy not registered in container",
471
+ service_name="RegistryPolicy",
472
+ context=context,
473
+ fix="Call wire_infrastructure_services(container) first",
474
+ original_error=str(e),
475
+ ) from e
476
+
477
+
478
+ async def get_or_create_policy_registry(
479
+ container: ModelONEXContainer,
480
+ ) -> RegistryPolicy:
481
+ """Get RegistryPolicy from container, creating if not registered.
482
+
483
+ Convenience function that provides lazy initialization semantics.
484
+ Attempts to resolve RegistryPolicy from container, and if not found,
485
+ creates and registers a new instance.
486
+
487
+ This function is useful when code paths may not have called
488
+ wire_infrastructure_services() yet or when lazy initialization is desired.
489
+
490
+ Note: This function is async because ModelONEXContainer.service_registry methods
491
+ (resolve_service and register_instance) are async in omnibase_core v0.5.6 and later.
492
+
493
+ Args:
494
+ container: ONEX container instance.
495
+
496
+ Returns:
497
+ RegistryPolicy instance from container (existing or newly created).
498
+
499
+ Example:
500
+ >>> container = ModelONEXContainer()
501
+ >>> # No wiring yet, but this still works
502
+ >>> registry = await get_or_create_policy_registry(container)
503
+ >>> isinstance(registry, RegistryPolicy)
504
+ True
505
+ >>> # Second call returns same instance
506
+ >>> registry2 = await get_or_create_policy_registry(container)
507
+ >>> registry is registry2
508
+ True
509
+
510
+ Note:
511
+ While this function provides convenience, prefer explicit wiring via
512
+ wire_infrastructure_services() for production code to ensure proper
513
+ initialization order and error handling.
514
+ """
515
+ # Validate service_registry is available
516
+ _validate_service_registry(container, "get_or_create RegistryPolicy")
517
+
518
+ try:
519
+ # Try to resolve existing RegistryPolicy
520
+ registry: RegistryPolicy = await container.service_registry.resolve_service(
521
+ RegistryPolicy
522
+ )
523
+ return registry
524
+ except Exception:
525
+ # RegistryPolicy not registered, create and register it
526
+ logger.debug("RegistryPolicy not found in container, auto-registering")
527
+
528
+ try:
529
+ policy_registry = RegistryPolicy()
530
+ await container.service_registry.register_instance(
531
+ interface=RegistryPolicy,
532
+ instance=policy_registry,
533
+ scope="global",
534
+ metadata={
535
+ "description": "ONEX policy plugin registry (auto-registered)",
536
+ "version": str(SEMVER_DEFAULT),
537
+ "auto_registered": True,
538
+ },
539
+ )
540
+ logger.debug("Auto-registered RegistryPolicy in container (lazy init)")
541
+ return policy_registry
542
+
543
+ except Exception as e:
544
+ logger.exception(
545
+ "Failed to auto-register RegistryPolicy",
546
+ extra={"error": str(e), "error_type": type(e).__name__},
547
+ )
548
+ context = ModelInfraErrorContext.with_correlation(
549
+ transport_type=EnumInfraTransportType.RUNTIME,
550
+ operation="auto_register_policy_registry",
551
+ )
552
+ raise ServiceRegistrationError(
553
+ "Failed to create and register RegistryPolicy",
554
+ service_name="RegistryPolicy",
555
+ context=context,
556
+ original_error=str(e),
557
+ ) from e
558
+
559
+
560
+ async def get_handler_registry_from_container(
561
+ container: ModelONEXContainer,
562
+ ) -> RegistryProtocolBinding:
563
+ """Get RegistryProtocolBinding from container.
564
+
565
+ Resolves RegistryProtocolBinding using ModelONEXContainer.service_registry.resolve_service().
566
+ This is the preferred method for accessing RegistryProtocolBinding in container-based code.
567
+
568
+ Note: This function is async because ModelONEXContainer.service_registry.resolve_service()
569
+ is async in omnibase_core v0.5.6 and later (see omnibase_core.container.ModelONEXContainer).
570
+
571
+ Args:
572
+ container: ONEX container instance with registered RegistryProtocolBinding.
573
+
574
+ Returns:
575
+ RegistryProtocolBinding instance from container.
576
+
577
+ Raises:
578
+ ServiceRegistryUnavailableError: If service_registry is missing or None.
579
+ ServiceResolutionError: If RegistryProtocolBinding not registered in container.
580
+
581
+ Example:
582
+ >>> from omnibase_core.container import ModelONEXContainer
583
+ >>> container = ModelONEXContainer()
584
+ >>> await wire_infrastructure_services(container)
585
+ >>> registry = await get_handler_registry_from_container(container)
586
+ >>> # Verify via duck typing (per ONEX conventions)
587
+ >>> hasattr(registry, 'register') and callable(registry.register)
588
+ True
589
+
590
+ Note:
591
+ This function assumes RegistryProtocolBinding was registered via
592
+ wire_infrastructure_services(). If not, it will raise ServiceResolutionError.
593
+ """
594
+ # Validate service_registry is available
595
+ _validate_service_registry(container, "resolve RegistryProtocolBinding")
596
+
597
+ try:
598
+ registry: RegistryProtocolBinding = (
599
+ await container.service_registry.resolve_service(RegistryProtocolBinding)
600
+ )
601
+ return registry
602
+ except AttributeError as e:
603
+ # Note: service_registry case is now handled by _validate_service_registry
604
+ # This block handles other AttributeErrors like missing resolve_service
605
+ error_str = str(e)
606
+ if "resolve_service" in error_str:
607
+ hint = (
608
+ "Container.service_registry missing 'resolve_service' method. "
609
+ "Check omnibase_core version compatibility (requires v0.5.6 or later)."
610
+ )
611
+ else:
612
+ hint = f"Missing attribute in resolution chain: {e}"
613
+
614
+ logger.exception(
615
+ "Failed to resolve RegistryProtocolBinding from container",
616
+ extra={
617
+ "error": error_str,
618
+ "error_type": "AttributeError",
619
+ "service_type": "RegistryProtocolBinding",
620
+ "hint": hint,
621
+ },
622
+ )
623
+ context = ModelInfraErrorContext.with_correlation(
624
+ transport_type=EnumInfraTransportType.RUNTIME,
625
+ operation="resolve_handler_registry",
626
+ )
627
+ raise ServiceResolutionError(
628
+ f"Failed to resolve RegistryProtocolBinding - {hint}",
629
+ service_name="RegistryProtocolBinding",
630
+ context=context,
631
+ required_api="container.service_registry.resolve_service(RegistryProtocolBinding)",
632
+ original_error=str(e),
633
+ ) from e
634
+ except Exception as e:
635
+ logger.exception(
636
+ "Failed to resolve RegistryProtocolBinding from container",
637
+ extra={
638
+ "error": str(e),
639
+ "error_type": type(e).__name__,
640
+ "service_type": "RegistryProtocolBinding",
641
+ },
642
+ )
643
+ context = ModelInfraErrorContext.with_correlation(
644
+ transport_type=EnumInfraTransportType.RUNTIME,
645
+ operation="resolve_handler_registry",
646
+ )
647
+ raise ServiceResolutionError(
648
+ "RegistryProtocolBinding not registered in container",
649
+ service_name="RegistryProtocolBinding",
650
+ context=context,
651
+ fix="Call wire_infrastructure_services(container) first",
652
+ original_error=str(e),
653
+ ) from e
654
+
655
+
656
+ async def get_compute_registry_from_container(
657
+ container: ModelONEXContainer,
658
+ ) -> RegistryCompute:
659
+ """Get RegistryCompute from container.
660
+
661
+ Resolves RegistryCompute using ModelONEXContainer.service_registry.resolve_service().
662
+ This is the preferred method for accessing RegistryCompute in container-based code.
663
+
664
+ Note: This function is async because ModelONEXContainer.service_registry.resolve_service()
665
+ is async in omnibase_core v0.5.6 and later (see omnibase_core.container.ModelONEXContainer).
666
+
667
+ Args:
668
+ container: ONEX container instance with registered RegistryCompute.
669
+
670
+ Returns:
671
+ RegistryCompute instance from container.
672
+
673
+ Raises:
674
+ ServiceRegistryUnavailableError: If service_registry is missing or None.
675
+ ServiceResolutionError: If RegistryCompute not registered in container.
676
+
677
+ Example:
678
+ >>> from omnibase_core.container import ModelONEXContainer
679
+ >>> container = ModelONEXContainer()
680
+ >>> await wire_infrastructure_services(container)
681
+ >>> registry = await get_compute_registry_from_container(container)
682
+ >>> isinstance(registry, RegistryCompute)
683
+ True
684
+
685
+ Note:
686
+ This function assumes RegistryCompute was registered via
687
+ wire_infrastructure_services(). If not, it will raise ServiceResolutionError.
688
+ For auto-registration, use get_or_create_compute_registry() instead.
689
+ """
690
+ # Validate service_registry is available
691
+ _validate_service_registry(container, "resolve RegistryCompute")
692
+
693
+ try:
694
+ registry: RegistryCompute = await container.service_registry.resolve_service(
695
+ RegistryCompute
696
+ )
697
+ return registry
698
+ except AttributeError as e:
699
+ # Note: service_registry case is now handled by _validate_service_registry
700
+ # This block handles other AttributeErrors like missing resolve_service
701
+ error_str = str(e)
702
+ if "resolve_service" in error_str:
703
+ hint = (
704
+ "Container.service_registry missing 'resolve_service' method. "
705
+ "Check omnibase_core version compatibility (requires v0.5.6 or later)."
706
+ )
707
+ else:
708
+ hint = f"Missing attribute in resolution chain: {e}"
709
+
710
+ logger.exception(
711
+ "Failed to resolve RegistryCompute from container",
712
+ extra={
713
+ "error": error_str,
714
+ "error_type": "AttributeError",
715
+ "service_type": "RegistryCompute",
716
+ "hint": hint,
717
+ },
718
+ )
719
+ context = ModelInfraErrorContext.with_correlation(
720
+ transport_type=EnumInfraTransportType.RUNTIME,
721
+ operation="resolve_compute_registry",
722
+ )
723
+ raise ServiceResolutionError(
724
+ f"Failed to resolve RegistryCompute - {hint}",
725
+ service_name="RegistryCompute",
726
+ context=context,
727
+ required_api="container.service_registry.resolve_service(RegistryCompute)",
728
+ original_error=str(e),
729
+ ) from e
730
+ except Exception as e:
731
+ logger.exception(
732
+ "Failed to resolve RegistryCompute from container",
733
+ extra={
734
+ "error": str(e),
735
+ "error_type": type(e).__name__,
736
+ "service_type": "RegistryCompute",
737
+ },
738
+ )
739
+ context = ModelInfraErrorContext.with_correlation(
740
+ transport_type=EnumInfraTransportType.RUNTIME,
741
+ operation="resolve_compute_registry",
742
+ )
743
+ raise ServiceResolutionError(
744
+ "RegistryCompute not registered in container",
745
+ service_name="RegistryCompute",
746
+ context=context,
747
+ fix="Call wire_infrastructure_services(container) first",
748
+ original_error=str(e),
749
+ ) from e
750
+
751
+
752
+ async def get_or_create_compute_registry(
753
+ container: ModelONEXContainer,
754
+ ) -> RegistryCompute:
755
+ """Get RegistryCompute from container, creating if not registered.
756
+
757
+ Convenience function that provides lazy initialization semantics.
758
+ Attempts to resolve RegistryCompute from container, and if not found,
759
+ creates and registers a new instance.
760
+
761
+ This function is useful when code paths may not have called
762
+ wire_infrastructure_services() yet or when lazy initialization is desired.
763
+
764
+ Note: This function is async because ModelONEXContainer.service_registry methods
765
+ (resolve_service and register_instance) are async in omnibase_core v0.5.6 and later.
766
+
767
+ Args:
768
+ container: ONEX container instance.
769
+
770
+ Returns:
771
+ RegistryCompute instance from container (existing or newly created).
772
+
773
+ Example:
774
+ >>> container = ModelONEXContainer()
775
+ >>> # No wiring yet, but this still works
776
+ >>> registry = await get_or_create_compute_registry(container)
777
+ >>> isinstance(registry, RegistryCompute)
778
+ True
779
+ >>> # Second call returns same instance
780
+ >>> registry2 = await get_or_create_compute_registry(container)
781
+ >>> registry is registry2
782
+ True
783
+
784
+ Note:
785
+ While this function provides convenience, prefer explicit wiring via
786
+ wire_infrastructure_services() for production code to ensure proper
787
+ initialization order and error handling.
788
+ """
789
+ # Validate service_registry is available
790
+ _validate_service_registry(container, "get_or_create RegistryCompute")
791
+
792
+ try:
793
+ # Try to resolve existing RegistryCompute
794
+ registry: RegistryCompute = await container.service_registry.resolve_service(
795
+ RegistryCompute
796
+ )
797
+ return registry
798
+ except Exception:
799
+ # RegistryCompute not registered, create and register it
800
+ logger.debug("RegistryCompute not found in container, auto-registering")
801
+
802
+ try:
803
+ compute_registry = RegistryCompute()
804
+ await container.service_registry.register_instance(
805
+ interface=RegistryCompute,
806
+ instance=compute_registry,
807
+ scope="global",
808
+ metadata={
809
+ "description": "ONEX compute plugin registry (auto-registered)",
810
+ "version": str(SEMVER_DEFAULT),
811
+ "auto_registered": True,
812
+ },
813
+ )
814
+ logger.debug("Auto-registered RegistryCompute in container (lazy init)")
815
+ return compute_registry
816
+
817
+ except Exception as e:
818
+ logger.exception(
819
+ "Failed to auto-register RegistryCompute",
820
+ extra={"error": str(e), "error_type": type(e).__name__},
821
+ )
822
+ context = ModelInfraErrorContext.with_correlation(
823
+ transport_type=EnumInfraTransportType.RUNTIME,
824
+ operation="auto_register_compute_registry",
825
+ )
826
+ raise ServiceRegistrationError(
827
+ "Failed to create and register RegistryCompute",
828
+ service_name="RegistryCompute",
829
+ context=context,
830
+ original_error=str(e),
831
+ ) from e
832
+
833
+
834
+ async def wire_registration_handlers(
835
+ container: ModelONEXContainer,
836
+ pool: asyncpg.Pool,
837
+ liveness_interval_seconds: int | None = None,
838
+ projector: ProjectorShell | None = None,
839
+ consul_handler: HandlerConsul | None = None,
840
+ ) -> WiringResult:
841
+ """Register registration orchestrator handlers with the container.
842
+
843
+ This function delegates to the Registration domain wiring module,
844
+ following the domain-driven design principle where Registration-specific
845
+ code lives in the Registration domain rather than the generic runtime layer.
846
+
847
+ Registers ProjectionReaderRegistration and the three registration handlers:
848
+ - HandlerNodeIntrospected
849
+ - HandlerRuntimeTick
850
+ - HandlerNodeRegistrationAcked
851
+
852
+ All handlers depend on ProjectionReaderRegistration, which is registered first.
853
+ This enables declarative dependency resolution when constructing the
854
+ NodeRegistrationOrchestrator.
855
+
856
+ Args:
857
+ container: ONEX container instance to register services in.
858
+ pool: asyncpg connection pool for database access.
859
+ liveness_interval_seconds: Liveness deadline interval for ack handler.
860
+ If None, uses ONEX_LIVENESS_INTERVAL_SECONDS env var or default (60s).
861
+ projector: Optional ProjectorShell for persisting state transitions.
862
+ If provided, HandlerNodeIntrospected will persist projections to the
863
+ database using ProjectorShell.partial_update() and upsert_partial().
864
+ If None, the handler operates in read-only mode (useful for testing
865
+ or when projection persistence is handled elsewhere).
866
+ consul_handler: Optional HandlerConsul for dual registration with Consul.
867
+ If provided, HandlerNodeIntrospected will register nodes with Consul
868
+ for service discovery. If None, only PostgreSQL registration occurs.
869
+
870
+ Returns:
871
+ Summary dict with:
872
+ - services: List of registered service class names
873
+ - status: Always "success" (errors raise exceptions)
874
+
875
+ Raises:
876
+ ServiceRegistryUnavailableError: If service_registry is missing or None.
877
+ ContainerWiringError: If service registration fails.
878
+
879
+ Example:
880
+ >>> from omnibase_core.container import ModelONEXContainer
881
+ >>> from omnibase_infra.runtime.projector_shell import ProjectorShell
882
+ >>> from omnibase_infra.runtime.projector_plugin_loader import ProjectorPluginLoader
883
+ >>> import asyncpg
884
+ >>> container = ModelONEXContainer()
885
+ >>> pool = await asyncpg.create_pool(dsn)
886
+ >>> # Load projector from contract
887
+ >>> loader = ProjectorPluginLoader()
888
+ >>> projector = await loader.load_from_contract("registration_projector", pool)
889
+ >>> summary = await wire_registration_handlers(container, pool, projector=projector)
890
+ >>> print(summary)
891
+ {'services': ['ProjectionReaderRegistration', 'HandlerNodeIntrospected', ...], 'status': 'success'}
892
+ >>> # Resolve handlers from container
893
+ >>> handler = await container.service_registry.resolve_service(HandlerNodeIntrospected)
894
+
895
+ Note:
896
+ This function delegates to the Registration domain wiring module
897
+ (omnibase_infra.nodes.node_registration_orchestrator.wiring) to keep
898
+ Registration-specific code in its own domain. See OMN-1346.
899
+ """
900
+ # Delegate to the Registration domain wiring module
901
+ # This keeps Registration-specific logic (handlers, projectors) in its domain
902
+ from omnibase_infra.nodes.node_registration_orchestrator.wiring import (
903
+ wire_registration_handlers as _wire_registration_handlers,
904
+ )
905
+
906
+ return await _wire_registration_handlers(
907
+ container,
908
+ pool,
909
+ liveness_interval_seconds=liveness_interval_seconds,
910
+ projector=projector,
911
+ consul_handler=consul_handler,
912
+ )
913
+
914
+
915
+ async def get_projection_reader_from_container(
916
+ container: ModelONEXContainer,
917
+ ) -> ProjectionReaderRegistration:
918
+ """Get ProjectionReaderRegistration from container.
919
+
920
+ This function delegates to the Registration domain wiring module.
921
+
922
+ Args:
923
+ container: ONEX container instance with registered ProjectionReaderRegistration.
924
+
925
+ Returns:
926
+ ProjectionReaderRegistration instance from container.
927
+
928
+ Raises:
929
+ ServiceRegistryUnavailableError: If service_registry is missing or None.
930
+ ServiceResolutionError: If ProjectionReaderRegistration not registered in container.
931
+
932
+ Example:
933
+ >>> pool = await asyncpg.create_pool(dsn)
934
+ >>> await wire_registration_handlers(container, pool)
935
+ >>> reader = await get_projection_reader_from_container(container)
936
+
937
+ Note:
938
+ This function delegates to the Registration domain wiring module
939
+ (omnibase_infra.nodes.node_registration_orchestrator.wiring). See OMN-1346.
940
+ """
941
+ from omnibase_infra.nodes.node_registration_orchestrator.wiring import (
942
+ get_projection_reader_from_container as _get_projection_reader,
943
+ )
944
+
945
+ return await _get_projection_reader(container)
946
+
947
+
948
+ async def get_handler_node_introspected_from_container(
949
+ container: ModelONEXContainer,
950
+ ) -> HandlerNodeIntrospected:
951
+ """Get HandlerNodeIntrospected from container.
952
+
953
+ This function delegates to the Registration domain wiring module.
954
+
955
+ Args:
956
+ container: ONEX container instance with registered handlers.
957
+
958
+ Returns:
959
+ HandlerNodeIntrospected instance from container.
960
+
961
+ Raises:
962
+ ServiceRegistryUnavailableError: If service_registry is missing or None.
963
+ ServiceResolutionError: If handler not registered in container.
964
+
965
+ Note:
966
+ This function delegates to the Registration domain wiring module
967
+ (omnibase_infra.nodes.node_registration_orchestrator.wiring). See OMN-1346.
968
+ """
969
+ from omnibase_infra.nodes.node_registration_orchestrator.wiring import (
970
+ get_handler_node_introspected_from_container as _get_handler,
971
+ )
972
+
973
+ return await _get_handler(container)
974
+
975
+
976
+ async def get_handler_runtime_tick_from_container(
977
+ container: ModelONEXContainer,
978
+ ) -> HandlerRuntimeTick:
979
+ """Get HandlerRuntimeTick from container.
980
+
981
+ This function delegates to the Registration domain wiring module.
982
+
983
+ Args:
984
+ container: ONEX container instance with registered handlers.
985
+
986
+ Returns:
987
+ HandlerRuntimeTick instance from container.
988
+
989
+ Raises:
990
+ ServiceRegistryUnavailableError: If service_registry is missing or None.
991
+ ServiceResolutionError: If handler not registered in container.
992
+
993
+ Note:
994
+ This function delegates to the Registration domain wiring module
995
+ (omnibase_infra.nodes.node_registration_orchestrator.wiring). See OMN-1346.
996
+ """
997
+ from omnibase_infra.nodes.node_registration_orchestrator.wiring import (
998
+ get_handler_runtime_tick_from_container as _get_handler,
999
+ )
1000
+
1001
+ return await _get_handler(container)
1002
+
1003
+
1004
+ async def get_handler_node_registration_acked_from_container(
1005
+ container: ModelONEXContainer,
1006
+ ) -> HandlerNodeRegistrationAcked:
1007
+ """Get HandlerNodeRegistrationAcked from container.
1008
+
1009
+ This function delegates to the Registration domain wiring module.
1010
+
1011
+ Args:
1012
+ container: ONEX container instance with registered handlers.
1013
+
1014
+ Returns:
1015
+ HandlerNodeRegistrationAcked instance from container.
1016
+
1017
+ Raises:
1018
+ ServiceRegistryUnavailableError: If service_registry is missing or None.
1019
+ ServiceResolutionError: If handler not registered in container.
1020
+
1021
+ Note:
1022
+ This function delegates to the Registration domain wiring module
1023
+ (omnibase_infra.nodes.node_registration_orchestrator.wiring). See OMN-1346.
1024
+ """
1025
+ from omnibase_infra.nodes.node_registration_orchestrator.wiring import (
1026
+ get_handler_node_registration_acked_from_container as _get_handler,
1027
+ )
1028
+
1029
+ return await _get_handler(container)
1030
+
1031
+
1032
+ async def wire_registration_dispatchers(
1033
+ container: ModelONEXContainer,
1034
+ engine: MessageDispatchEngine,
1035
+ ) -> dict[str, list[str] | str]:
1036
+ """Wire registration dispatchers into MessageDispatchEngine.
1037
+
1038
+ This function delegates to the Registration domain wiring module,
1039
+ following the domain-driven design principle where Registration-specific
1040
+ code lives in the Registration domain rather than the generic runtime layer.
1041
+
1042
+ Creates dispatcher adapters for the registration handlers and registers
1043
+ them with the MessageDispatchEngine. This enables the engine to route
1044
+ introspection events to the appropriate handlers.
1045
+
1046
+ Prerequisites:
1047
+ - wire_registration_handlers() must be called first to register
1048
+ the underlying handlers in the container.
1049
+ - MessageDispatchEngine must not be frozen yet. If the engine is already
1050
+ frozen, dispatcher registration will fail with a ContainerWiringError.
1051
+
1052
+ Args:
1053
+ container: ONEX container with registered handlers.
1054
+ engine: MessageDispatchEngine instance to register dispatchers with.
1055
+
1056
+ Returns:
1057
+ Summary dict with diagnostic information:
1058
+ - dispatchers: List of registered dispatcher IDs (e.g.,
1059
+ ['dispatcher.node-introspected', 'dispatcher.runtime-tick',
1060
+ 'dispatcher.node-registration-acked'])
1061
+ - routes: List of registered route IDs (e.g.,
1062
+ ['route.registration.node-introspection', 'route.registration.runtime-tick',
1063
+ 'route.registration.node-registration-acked'])
1064
+ - status: Always "success" (errors raise exceptions)
1065
+
1066
+ This diagnostic output can be logged or used to verify correct wiring.
1067
+
1068
+ Raises:
1069
+ ServiceRegistryUnavailableError: If service_registry is missing or None.
1070
+ ContainerWiringError: If required handlers are not registered in the container,
1071
+ or if the engine is already frozen (cannot register new dispatchers).
1072
+
1073
+ Engine Frozen Behavior:
1074
+ If engine.freeze() has been called before this function, the engine
1075
+ will reject new dispatcher registrations. Ensure this function is called
1076
+ during the wiring phase before engine.freeze() is invoked.
1077
+
1078
+ Example:
1079
+ >>> from omnibase_core.container import ModelONEXContainer
1080
+ >>> from omnibase_infra.runtime.service_message_dispatch_engine import MessageDispatchEngine
1081
+ >>> import asyncpg
1082
+ >>>
1083
+ >>> container = ModelONEXContainer()
1084
+ >>> pool = await asyncpg.create_pool(dsn)
1085
+ >>> await wire_registration_handlers(container, pool)
1086
+ >>>
1087
+ >>> engine = MessageDispatchEngine()
1088
+ >>> summary = await wire_registration_dispatchers(container, engine)
1089
+ >>> print(summary)
1090
+ {'dispatchers': [...], 'routes': [...]}
1091
+ >>> engine.freeze() # Must freeze after wiring
1092
+
1093
+ Note:
1094
+ This function delegates to the Registration domain wiring module
1095
+ (omnibase_infra.nodes.node_registration_orchestrator.wiring) to keep
1096
+ Registration-specific code in its own domain. See OMN-1346.
1097
+ """
1098
+ # Delegate to the Registration domain wiring module
1099
+ # This keeps Registration-specific logic (route IDs, dispatchers) in its domain
1100
+ from omnibase_infra.nodes.node_registration_orchestrator.wiring import (
1101
+ wire_registration_dispatchers as _wire_registration_dispatchers,
1102
+ )
1103
+
1104
+ return await _wire_registration_dispatchers(container, engine)
1105
+
1106
+
1107
+ __all__: list[str] = [
1108
+ # Container wiring functions
1109
+ "get_compute_registry_from_container",
1110
+ "get_handler_node_introspected_from_container",
1111
+ "get_handler_node_registration_acked_from_container",
1112
+ "get_handler_registry_from_container",
1113
+ "get_handler_runtime_tick_from_container",
1114
+ "get_or_create_compute_registry",
1115
+ "get_or_create_policy_registry",
1116
+ "get_policy_registry_from_container",
1117
+ "get_projection_reader_from_container",
1118
+ "wire_infrastructure_services",
1119
+ # Registration handlers (OMN-888)
1120
+ "wire_registration_handlers",
1121
+ # Registration dispatchers (OMN-892)
1122
+ "wire_registration_dispatchers",
1123
+ ]