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,8 @@
1
+ # SPDX-License-Identifier: MIT
2
+ # Copyright (c) 2025 OmniNode Team
3
+ """ONEX Infrastructure Shared Module.
4
+
5
+ Provides shared utilities and components used across infrastructure services.
6
+ """
7
+
8
+ __all__: list[str] = []
@@ -0,0 +1,10 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ """Testing utilities for omnibase_infra.
3
+
4
+ This module provides shared testing utilities for the infrastructure layer,
5
+ including CI environment detection and other common test helpers.
6
+ """
7
+
8
+ from omnibase_infra.testing.utils import is_ci_environment
9
+
10
+ __all__ = ["is_ci_environment"]
@@ -0,0 +1,23 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ """Shared testing utilities for omnibase_infra.
3
+
4
+ This module provides utility functions commonly needed across test files,
5
+ such as environment detection and test configuration helpers.
6
+ """
7
+
8
+ import os
9
+
10
+
11
+ def is_ci_environment() -> bool:
12
+ """Detect if running in CI environment.
13
+
14
+ Checks common CI environment variables:
15
+ - CI: Generic CI flag used by most CI systems
16
+ - GITHUB_ACTIONS: GitHub Actions specific
17
+
18
+ Returns:
19
+ True if running in a CI environment, False otherwise.
20
+ """
21
+ ci_value = os.getenv("CI", "").lower()
22
+ github_actions = os.getenv("GITHUB_ACTIONS", "").lower()
23
+ return ci_value in ("true", "1", "yes") or github_actions in ("true", "1", "yes")
@@ -0,0 +1,48 @@
1
+ # SPDX-License-Identifier: MIT
2
+ # Copyright (c) 2025 OmniNode Team
3
+ """Types module for omnibase_infra.
4
+
5
+ This module re-exports commonly used types for external consumption.
6
+ Types are organized into categories:
7
+
8
+ Top-level exports (this module):
9
+ - ModelParsedDSN: Pydantic model for parsed DSN components
10
+ - TypeCacheInfo: NamedTuple for cache hit/miss statistics
11
+ - TypedDictCapabilities: TypedDict for node capability introspection
12
+
13
+ Type aliases (from type_infra_aliases):
14
+ - ASTFunctionDef: ast.AsyncFunctionDef | ast.FunctionDef
15
+ - MessageOutputCategory: EnumMessageCategory | EnumNodeOutputType
16
+ - PathInput: Path | str (named to avoid collision with stdlib os.PathLike)
17
+ - PolicyTypeInput: EnumPolicyType | str
18
+
19
+ Note on cache-related TypedDicts:
20
+ TypedDictIntrospectionCache and TypedDictPerformanceMetricsCache are NOT
21
+ re-exported here because they are internal implementation details of the
22
+ MixinNodeIntrospection mixin. These types are tightly coupled to the mixin's
23
+ caching implementation and should not be used directly by external consumers.
24
+ If needed for testing or advanced use cases, import from the typed_dict submodule:
25
+ from omnibase_infra.types.typed_dict import TypedDictIntrospectionCache
26
+ """
27
+
28
+ from omnibase_infra.types.type_cache_info import TypeCacheInfo
29
+ from omnibase_infra.types.type_dsn import ModelParsedDSN
30
+ from omnibase_infra.types.type_infra_aliases import (
31
+ ASTFunctionDef,
32
+ MessageOutputCategory,
33
+ PathInput,
34
+ PolicyTypeInput,
35
+ )
36
+ from omnibase_infra.types.typed_dict_capabilities import TypedDictCapabilities
37
+
38
+ __all__: list[str] = [
39
+ # Type aliases
40
+ "ASTFunctionDef",
41
+ "MessageOutputCategory",
42
+ "PathInput",
43
+ "PolicyTypeInput",
44
+ # Models and TypedDicts
45
+ "ModelParsedDSN",
46
+ "TypeCacheInfo",
47
+ "TypedDictCapabilities",
48
+ ]
@@ -0,0 +1,49 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2025 OmniNode Team
3
+
4
+ """Cache information type for topic parser caching statistics.
5
+
6
+ This module provides a type-safe NamedTuple for representing cache statistics,
7
+ mirroring the structure of functools._CacheInfo for compatibility with LRU
8
+ cache implementations.
9
+
10
+ Example:
11
+ >>> from omnibase_infra.types import TypeCacheInfo
12
+ >>> info = TypeCacheInfo(hits=100, misses=10, maxsize=128, currsize=50)
13
+ >>> print(f"Hit rate: {info.hits / (info.hits + info.misses):.2%}")
14
+ Hit rate: 90.91%
15
+ """
16
+
17
+ from typing import NamedTuple
18
+
19
+ __all__ = ["TypeCacheInfo"]
20
+
21
+
22
+ class TypeCacheInfo(NamedTuple):
23
+ """Cache statistics for topic parsing operations.
24
+
25
+ This mirrors functools._CacheInfo structure for type safety when
26
+ exposing cache statistics from LRU-cached parsing functions.
27
+
28
+ Attributes:
29
+ hits: Number of cache hits (requests served from cache).
30
+ misses: Number of cache misses (requests requiring computation).
31
+ maxsize: Maximum cache size, or None for unlimited cache.
32
+ currsize: Current number of entries in the cache.
33
+
34
+ Example:
35
+ >>> info = TypeCacheInfo(hits=50, misses=5, maxsize=128, currsize=30)
36
+ >>> info.hits
37
+ 50
38
+ >>> info.maxsize
39
+ 128
40
+
41
+ Note:
42
+ This type is intentionally compatible with functools._CacheInfo
43
+ to allow seamless interoperability with standard library caching.
44
+ """
45
+
46
+ hits: int
47
+ misses: int
48
+ maxsize: int | None
49
+ currsize: int
@@ -0,0 +1,173 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ # Copyright 2025 OmniNode Team
3
+
4
+ """Strongly-typed DSN parse result model.
5
+
6
+ This module provides a Pydantic model for representing parsed PostgreSQL
7
+ Data Source Name (DSN) connection strings with full type safety and
8
+ validation.
9
+
10
+ The model replaces loose dict[str, object] return types with a structured,
11
+ immutable, and validated representation of DSN components.
12
+
13
+ Example:
14
+ >>> from omnibase_infra.types import ModelParsedDSN
15
+ >>> dsn = ModelParsedDSN(
16
+ ... scheme="postgresql",
17
+ ... username="admin",
18
+ ... password="secret",
19
+ ... hostname="localhost",
20
+ ... port=5432,
21
+ ... database="mydb",
22
+ ... )
23
+ >>> dsn.hostname
24
+ 'localhost'
25
+ >>> dsn.port
26
+ 5432
27
+
28
+ Note:
29
+ The model is frozen (immutable) to ensure DSN components cannot be
30
+ accidentally modified after parsing. This provides safety when passing
31
+ DSN information through multiple layers of the application.
32
+ """
33
+
34
+ from typing import Literal
35
+
36
+ from pydantic import BaseModel, ConfigDict, Field
37
+
38
+ __all__ = ["ModelParsedDSN"]
39
+
40
+
41
+ class ModelParsedDSN(BaseModel):
42
+ """Strongly-typed DSN parse result for PostgreSQL connection strings.
43
+
44
+ This model provides a structured representation of parsed DSN components
45
+ with validation for port ranges and scheme restrictions. The model is
46
+ immutable (frozen) to prevent accidental modification of connection
47
+ parameters.
48
+
49
+ Attributes:
50
+ scheme: The database scheme/protocol. Must be 'postgresql' or 'postgres'.
51
+ username: The database username for authentication. None if not specified.
52
+ password: The database password for authentication. None if not specified.
53
+ Note: Handle with care as this contains sensitive credentials.
54
+ hostname: The database server hostname or IP address. None if not specified.
55
+ port: The database server port number (1-65535). None if not specified.
56
+ database: The name of the database to connect to.
57
+ query: Additional connection parameters as key-value pairs. Values may be
58
+ strings or lists of strings for multi-value parameters.
59
+
60
+ Example:
61
+ >>> dsn = ModelParsedDSN(
62
+ ... scheme="postgresql",
63
+ ... username="app_user",
64
+ ... hostname="db.example.com",
65
+ ... port=5432,
66
+ ... database="production",
67
+ ... query={"sslmode": "require"},
68
+ ... )
69
+ >>> dsn.scheme
70
+ 'postgresql'
71
+ >>> dsn.query
72
+ {'sslmode': 'require'}
73
+
74
+ Note:
75
+ The password field should be handled carefully in logging and
76
+ error messages to avoid credential exposure. Use the sanitization
77
+ utilities from util_dsn_validation for safe string representations.
78
+ """
79
+
80
+ scheme: Literal["postgresql", "postgres"] = Field(
81
+ description="Database scheme/protocol. Must be 'postgresql' or 'postgres'."
82
+ )
83
+ username: str | None = Field(
84
+ default=None,
85
+ description="Database username for authentication.",
86
+ )
87
+ password: str | None = Field(
88
+ default=None,
89
+ description="Database password for authentication. Handle with care.",
90
+ )
91
+ hostname: str | None = Field(
92
+ default=None,
93
+ description="Database server hostname or IP address.",
94
+ )
95
+ port: int | None = Field(
96
+ default=None,
97
+ ge=1,
98
+ le=65535,
99
+ description="Database server port number (valid range: 1-65535).",
100
+ )
101
+ database: str = Field(
102
+ description="Name of the database to connect to.",
103
+ )
104
+ query: dict[str, str | list[str]] = Field(
105
+ default_factory=dict,
106
+ description="Additional connection parameters as key-value pairs.",
107
+ )
108
+
109
+ model_config = ConfigDict(frozen=True, extra="forbid", from_attributes=True)
110
+
111
+ def __repr__(self) -> str:
112
+ """Return string representation with masked password.
113
+
114
+ This method overrides the default Pydantic __repr__ to prevent
115
+ credential exposure in logs, debug output, and error messages.
116
+ The actual password value remains accessible via the .password
117
+ attribute for legitimate use cases.
118
+
119
+ Returns:
120
+ String representation with password shown as '[REDACTED]' if set,
121
+ or None if not set.
122
+
123
+ Example:
124
+ >>> dsn = ModelParsedDSN(
125
+ ... scheme="postgresql",
126
+ ... username="admin",
127
+ ... password="secret123",
128
+ ... hostname="localhost",
129
+ ... port=5432,
130
+ ... database="mydb",
131
+ ... )
132
+ >>> repr(dsn) # Shows '[REDACTED]' instead of 'secret123'
133
+ "ModelParsedDSN(scheme='postgresql', username='admin', ...)"
134
+ """
135
+ password_display = "[REDACTED]" if self.password else None
136
+ return (
137
+ f"ModelParsedDSN(scheme={self.scheme!r}, username={self.username!r}, "
138
+ f"password={password_display!r}, hostname={self.hostname!r}, "
139
+ f"port={self.port!r}, database={self.database!r}, query={self.query!r})"
140
+ )
141
+
142
+ def __str__(self) -> str:
143
+ """Return string representation with masked password.
144
+
145
+ Delegates to __repr__ to ensure consistent password masking across
146
+ all string conversion contexts (str(), print(), f-strings, etc.).
147
+
148
+ Returns:
149
+ String representation with password masked.
150
+ """
151
+ return self.__repr__()
152
+
153
+ def to_sanitized_dict(self) -> dict[str, object]:
154
+ """Return a dict representation with the password masked.
155
+
156
+ Useful for logging and debugging without exposing credentials.
157
+
158
+ Returns:
159
+ dict[str, object]: Model data with password replaced by '[REDACTED]' if set.
160
+
161
+ Example:
162
+ >>> dsn = ModelParsedDSN(
163
+ ... scheme="postgresql", username="user", password="secret",
164
+ ... hostname="localhost", port=5432, database="mydb"
165
+ ... )
166
+ >>> dsn.to_sanitized_dict()
167
+ {'scheme': 'postgresql', 'username': 'user', 'password': '[REDACTED]',
168
+ 'hostname': 'localhost', 'port': 5432, 'database': 'mydb', 'query': {}}
169
+ """
170
+ data = self.model_dump()
171
+ if data.get("password"):
172
+ data["password"] = "[REDACTED]"
173
+ return data
@@ -0,0 +1,60 @@
1
+ # SPDX-License-Identifier: MIT
2
+ # Copyright (c) 2025 OmniNode Team
3
+ """
4
+ Infrastructure-specific type aliases for union complexity reduction.
5
+
6
+ These type aliases consolidate repeated union patterns found in omnibase_infra,
7
+ following the same pattern as omnibase_core.types.type_json.
8
+
9
+ When to use each alias:
10
+ MessageOutputCategory: Use for message routing, dispatcher selection,
11
+ and node output validation. Accepts both EnumMessageCategory (EVENT,
12
+ COMMAND, INTENT) and EnumNodeOutputType (includes PROJECTION).
13
+
14
+ PathInput: Use for function parameters that accept filesystem paths.
15
+ Allows callers to pass either Path objects or string paths.
16
+
17
+ PolicyTypeInput: Use for policy configuration APIs that need flexibility
18
+ between enum values and string representations.
19
+
20
+ ASTFunctionDef: Use when analyzing Python AST for function definitions,
21
+ covering both sync and async functions.
22
+
23
+ See OMN-1358 for the union reduction initiative that drove these definitions.
24
+ """
25
+
26
+ from __future__ import annotations
27
+
28
+ import ast
29
+ from pathlib import Path
30
+
31
+ from omnibase_infra.enums import EnumMessageCategory, EnumNodeOutputType, EnumPolicyType
32
+
33
+ # Message category or node output type (for routing and validation)
34
+ # Replaces 24 occurrences of: EnumMessageCategory | EnumNodeOutputType
35
+ type MessageOutputCategory = EnumMessageCategory | EnumNodeOutputType
36
+
37
+ # Filesystem path input flexibility
38
+ # Replaces 11 occurrences of: Path | str
39
+ # Note: Named PathInput (not PathLike) to avoid collision with stdlib os.PathLike Protocol.
40
+ # PathInput represents filesystem path flexibility (Path | str), whereas os.PathLike is
41
+ # a Protocol for objects implementing __fspath__().
42
+ type PathInput = Path | str
43
+
44
+ # Policy type with string fallback for API flexibility
45
+ # Replaces 8 occurrences of: EnumPolicyType | str
46
+ # NOTE: This is an INPUT type alias for API flexibility. Pydantic validators
47
+ # using validate_policy_type_value() COERCE strings to EnumPolicyType, so
48
+ # the actual stored value is always an enum, ensuring type-safe field access.
49
+ type PolicyTypeInput = EnumPolicyType | str
50
+
51
+ # AST function definition node types
52
+ # Replaces 7 occurrences of: ast.AsyncFunctionDef | ast.FunctionDef
53
+ type ASTFunctionDef = ast.AsyncFunctionDef | ast.FunctionDef
54
+
55
+ __all__ = [
56
+ "ASTFunctionDef",
57
+ "MessageOutputCategory",
58
+ "PathInput",
59
+ "PolicyTypeInput",
60
+ ]
@@ -0,0 +1,21 @@
1
+ # SPDX-License-Identifier: MIT
2
+ # Copyright (c) 2025 OmniNode Team
3
+ """TypedDict definitions for omnibase_infra.
4
+
5
+ This package contains TypedDict definitions that represent JSON-serialized
6
+ forms of Pydantic models, enabling proper type checking for cache operations
7
+ and JSON serialization/deserialization without requiring type: ignore comments.
8
+
9
+ Available TypedDicts:
10
+ - TypedDictIntrospectionCache: JSON-serialized ModelNodeIntrospectionEvent
11
+ - TypedDictPerformanceMetricsCache: JSON-serialized introspection performance metrics
12
+ """
13
+
14
+ from omnibase_infra.types.typed_dict.typed_dict_introspection_cache import (
15
+ TypedDictIntrospectionCache,
16
+ )
17
+ from omnibase_infra.types.typed_dict.typed_dict_performance_metrics_cache import (
18
+ TypedDictPerformanceMetricsCache,
19
+ )
20
+
21
+ __all__ = ["TypedDictIntrospectionCache", "TypedDictPerformanceMetricsCache"]
@@ -0,0 +1,128 @@
1
+ # SPDX-License-Identifier: MIT
2
+ # Copyright (c) 2025 OmniNode Team
3
+ """TypedDict definition for JSON-serialized introspection cache data.
4
+
5
+ This module provides a TypedDict that represents the JSON-serialized form of
6
+ ModelNodeIntrospectionEvent, enabling proper type checking for cache operations
7
+ without requiring type: ignore comments.
8
+
9
+ The TypedDictIntrospectionCache matches the output of
10
+ ModelNodeIntrospectionEvent.model_dump(mode="json"), providing a typed interface
11
+ for working with cached introspection data.
12
+
13
+ Key Features:
14
+ - Full type annotations for all introspection event fields
15
+ - Proper handling of serialized datetime (ISO string format)
16
+ - Proper handling of serialized UUID (string format)
17
+ - Integration with TypedDictCapabilities for nested capabilities structure
18
+ - Integration with TypedDictPerformanceMetricsCache for performance metrics
19
+
20
+ Usage:
21
+ This TypedDict is primarily used for:
22
+ - Typing cache storage for introspection data
23
+ - Type-safe JSON deserialization of introspection events
24
+ - Avoiding type: ignore comments in cache operations
25
+
26
+ Example:
27
+ ```python
28
+ from omnibase_infra.types.typed_dict import TypedDictIntrospectionCache
29
+
30
+ # Cache storage with proper typing
31
+ cache: TypedDictIntrospectionCache | None = None
32
+
33
+ def store_introspection(event: ModelNodeIntrospectionEvent) -> None:
34
+ global cache
35
+ # model_dump(mode="json") returns data matching TypedDictIntrospectionCache
36
+ cache = event.model_dump(mode="json")
37
+
38
+ def get_cached_node_id() -> str | None:
39
+ if cache is not None:
40
+ return cache["node_id"] # Type-safe access
41
+ return None
42
+ ```
43
+
44
+ See Also:
45
+ - TypedDictCapabilities: Nested structure for capability information
46
+ - TypedDictPerformanceMetricsCache: Nested structure for performance metrics
47
+ - ModelNodeIntrospectionEvent: Source Pydantic model for introspection events
48
+ - MixinNodeIntrospection: Primary consumer of this TypedDict
49
+ """
50
+
51
+ from __future__ import annotations
52
+
53
+ from typing import TypedDict
54
+
55
+ from omnibase_infra.types.typed_dict.typed_dict_performance_metrics_cache import (
56
+ TypedDictPerformanceMetricsCache,
57
+ )
58
+ from omnibase_infra.types.typed_dict_capabilities import TypedDictCapabilities
59
+
60
+ __all__ = ["TypedDictIntrospectionCache"]
61
+
62
+
63
+ class TypedDictIntrospectionCache(TypedDict):
64
+ """TypedDict representing the JSON-serialized ModelNodeIntrospectionEvent.
65
+
66
+ This type matches the output of ModelNodeIntrospectionEvent.model_dump(mode="json"),
67
+ enabling proper type checking for cache operations without requiring type: ignore
68
+ comments.
69
+
70
+ The TypedDict provides a typed interface for working with introspection cache data,
71
+ ensuring type safety when accessing fields from cached introspection events.
72
+
73
+ Attributes:
74
+ node_id: Unique identifier for the node (UUID serialized to string).
75
+ node_type: The type classification of the node (e.g., "EFFECT", "COMPUTE").
76
+ capabilities: Nested structure containing node capabilities information.
77
+ Uses TypedDictCapabilities which includes operations, protocols,
78
+ has_fsm flag, and method_signatures.
79
+ endpoints: Dictionary mapping endpoint names to their URLs.
80
+ Common keys include "health", "api", and "metrics".
81
+ current_state: Current FSM state if applicable, None otherwise.
82
+ Represents the node's finite state machine state.
83
+ version: Semantic version string of the node.
84
+ reason: The reason for the introspection event (e.g., "startup", "shutdown",
85
+ "heartbeat", "request").
86
+ correlation_id: Optional correlation ID for request tracing.
87
+ UUID serializes to string in JSON mode, may be None.
88
+ timestamp: ISO 8601 formatted datetime string indicating when the
89
+ introspection event was created.
90
+ performance_metrics: Optional performance metrics from the introspection
91
+ operation. Contains timing information for capability discovery,
92
+ endpoint gathering, and state retrieval. May be None if metrics
93
+ were not captured.
94
+
95
+ Note:
96
+ The capabilities field uses TypedDictCapabilities for type safety.
97
+ When serialized to JSON, the structure is:
98
+ - operations (list[str]): Discovered operation method names
99
+ - protocols (list[str]): Implemented protocol names
100
+ - has_fsm (bool): Whether the node has FSM capabilities
101
+ - method_signatures (dict[str, str]): Method name to signature mapping
102
+
103
+ Example:
104
+ ```python
105
+ # Type-safe cache access
106
+ cache: TypedDictIntrospectionCache = event.model_dump(mode="json")
107
+
108
+ # All field access is type-checked
109
+ node_id: str = cache["node_id"]
110
+ capabilities: TypedDictCapabilities = cache["capabilities"]
111
+ operations: list[str] = capabilities["operations"]
112
+
113
+ # Nullable fields properly typed
114
+ state: str | None = cache["current_state"]
115
+ metrics: TypedDictPerformanceMetricsCache | None = cache["performance_metrics"]
116
+ ```
117
+ """
118
+
119
+ node_id: str
120
+ node_type: str
121
+ capabilities: TypedDictCapabilities
122
+ endpoints: dict[str, str]
123
+ current_state: str | None
124
+ version: str
125
+ reason: str
126
+ correlation_id: str | None # UUID serializes to string in JSON mode
127
+ timestamp: str # datetime serializes to ISO string in JSON mode
128
+ performance_metrics: TypedDictPerformanceMetricsCache | None
@@ -0,0 +1,140 @@
1
+ # Copyright 2025 OmniNode Team. All rights reserved.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ """TypedDict for JSON-serialized performance metrics cache.
4
+
5
+ This module provides a TypedDict that matches the JSON output of
6
+ ModelIntrospectionPerformanceMetrics.model_dump(mode="json"), enabling
7
+ proper type checking for cached performance metrics without runtime
8
+ validation overhead.
9
+
10
+ The TypedDict is used for:
11
+ - Type-safe cache operations for performance metrics
12
+ - Avoiding type: ignore comments when working with serialized metrics
13
+ - Static type checking of JSON-structured performance data
14
+ - Documentation of the expected cache entry shape
15
+
16
+ Related Models:
17
+ - ModelIntrospectionPerformanceMetrics: The Pydantic source model
18
+ - MixinNodeIntrospection: Uses this for caching introspection metrics
19
+
20
+ Example:
21
+ ```python
22
+ from omnibase_infra.types.typed_dict import TypedDictPerformanceMetricsCache
23
+
24
+ def get_cached_metrics() -> TypedDictPerformanceMetricsCache | None:
25
+ cache_entry = cache.get("metrics")
26
+ if cache_entry is not None:
27
+ # Type checker knows the shape without runtime validation
28
+ return cache_entry
29
+ return None
30
+
31
+ metrics = get_cached_metrics()
32
+ if metrics:
33
+ print(f"Total time: {metrics['total_introspection_ms']}ms")
34
+ if metrics.get('threshold_exceeded'):
35
+ print(f"Slow ops: {metrics.get('slow_operations', [])}")
36
+ ```
37
+
38
+ Note:
39
+ This TypedDict uses `total=True` (default) because the source Pydantic
40
+ model `ModelIntrospectionPerformanceMetrics` has defaults for all fields,
41
+ ensuring that `model_dump(mode="json")` always produces complete JSON
42
+ with all fields present. Type checkers will require all fields when
43
+ constructing dict literals, which matches the actual runtime behavior.
44
+ """
45
+
46
+ from typing import TypedDict
47
+
48
+
49
+ class TypedDictPerformanceMetricsCache(TypedDict):
50
+ """TypedDict for JSON-serialized ModelIntrospectionPerformanceMetrics.
51
+
52
+ This type matches the output of ModelIntrospectionPerformanceMetrics.model_dump(mode="json"),
53
+ enabling proper type checking for cached performance metrics.
54
+
55
+ All fields are required (total=True, the default) because the source Pydantic
56
+ model has defaults for all fields, ensuring model_dump() always produces
57
+ complete JSON output with all fields present.
58
+
59
+ Attributes:
60
+ get_capabilities_ms: Time taken by get_capabilities() in milliseconds.
61
+ Threshold: <50ms for acceptable performance.
62
+ discover_capabilities_ms: Time taken by _discover_capabilities() in milliseconds.
63
+ Threshold: <30ms for acceptable performance.
64
+ get_endpoints_ms: Time taken by get_endpoints() in milliseconds.
65
+ This operation is typically fast (<1ms) as it returns static data.
66
+ get_current_state_ms: Time taken by get_current_state() in milliseconds.
67
+ This operation is typically fast (<1ms) for simple state retrieval.
68
+ total_introspection_ms: Total time for get_introspection_data() in milliseconds.
69
+ Threshold: <50ms for acceptable performance.
70
+ cache_hit: Whether the result was served from cache.
71
+ Cache hits should complete in <1ms.
72
+ method_count: Number of methods discovered during reflection.
73
+ Higher counts may correlate with longer discover_capabilities_ms times.
74
+ threshold_exceeded: Whether any operation exceeded performance thresholds.
75
+ True indicates potential performance degradation.
76
+ slow_operations: List of operation names that exceeded their thresholds.
77
+ Possible values: 'get_capabilities', 'discover_capabilities',
78
+ 'total_introspection', 'cache_hit'.
79
+ captured_at: UTC timestamp when metrics were captured (ISO 8601 string).
80
+ Datetime serializes to ISO string format in JSON mode.
81
+
82
+ Example:
83
+ ```python
84
+ from omnibase_infra.types.typed_dict import TypedDictPerformanceMetricsCache
85
+
86
+ # Type-safe cache dictionary
87
+ cache: dict[str, TypedDictPerformanceMetricsCache] = {}
88
+
89
+ # Store metrics
90
+ cache["node-123"] = {
91
+ "get_capabilities_ms": 12.5,
92
+ "discover_capabilities_ms": 8.2,
93
+ "get_endpoints_ms": 0.5,
94
+ "get_current_state_ms": 0.1,
95
+ "total_introspection_ms": 21.3,
96
+ "cache_hit": False,
97
+ "method_count": 15,
98
+ "threshold_exceeded": False,
99
+ "slow_operations": [],
100
+ "captured_at": "2025-01-15T10:30:00Z",
101
+ }
102
+
103
+ # Retrieve with full type safety
104
+ if entry := cache.get("node-123"):
105
+ total_ms = entry.get("total_introspection_ms", 0.0)
106
+ if entry.get("threshold_exceeded"):
107
+ slow_ops = entry.get("slow_operations", [])
108
+ print(f"Performance degradation: {slow_ops}")
109
+ ```
110
+
111
+ Performance Thresholds:
112
+ The following thresholds are defined as module-level constants in:
113
+ src/omnibase_infra/mixins/mixin_node_introspection.py
114
+
115
+ Constants (SOURCE OF TRUTH - update this docstring if values change):
116
+ - PERF_THRESHOLD_GET_CAPABILITIES_MS: 50.0ms
117
+ - PERF_THRESHOLD_DISCOVER_CAPABILITIES_MS: 30.0ms
118
+ - PERF_THRESHOLD_GET_INTROSPECTION_DATA_MS: 50.0ms
119
+ - PERF_THRESHOLD_CACHE_HIT_MS: 1.0ms
120
+
121
+ Summary:
122
+ - get_capabilities: <50ms
123
+ - discover_capabilities: <30ms
124
+ - total_introspection: <50ms
125
+ - cache_hit: <1ms
126
+ """
127
+
128
+ get_capabilities_ms: float
129
+ discover_capabilities_ms: float
130
+ get_endpoints_ms: float
131
+ get_current_state_ms: float
132
+ total_introspection_ms: float
133
+ cache_hit: bool
134
+ method_count: int
135
+ threshold_exceeded: bool
136
+ slow_operations: list[str]
137
+ captured_at: str # datetime serializes to ISO string in JSON mode
138
+
139
+
140
+ __all__ = ["TypedDictPerformanceMetricsCache"]