omnibase_infra 0.3.1__py3-none-any.whl → 0.4.0__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 (117) hide show
  1. omnibase_infra/__init__.py +1 -1
  2. omnibase_infra/enums/__init__.py +3 -0
  3. omnibase_infra/enums/enum_consumer_group_purpose.py +9 -0
  4. omnibase_infra/enums/enum_postgres_error_code.py +188 -0
  5. omnibase_infra/errors/__init__.py +4 -0
  6. omnibase_infra/errors/error_infra.py +60 -0
  7. omnibase_infra/handlers/__init__.py +3 -0
  8. omnibase_infra/handlers/handler_slack_webhook.py +426 -0
  9. omnibase_infra/handlers/models/__init__.py +14 -0
  10. omnibase_infra/handlers/models/enum_alert_severity.py +36 -0
  11. omnibase_infra/handlers/models/model_slack_alert.py +24 -0
  12. omnibase_infra/handlers/models/model_slack_alert_payload.py +77 -0
  13. omnibase_infra/handlers/models/model_slack_alert_result.py +73 -0
  14. omnibase_infra/handlers/registration_storage/handler_registration_storage_postgres.py +29 -20
  15. omnibase_infra/mixins/__init__.py +14 -0
  16. omnibase_infra/mixins/mixin_node_introspection.py +42 -20
  17. omnibase_infra/mixins/mixin_postgres_error_response.py +314 -0
  18. omnibase_infra/mixins/mixin_postgres_op_executor.py +298 -0
  19. omnibase_infra/models/__init__.py +3 -0
  20. omnibase_infra/models/discovery/model_dependency_spec.py +1 -0
  21. omnibase_infra/models/discovery/model_discovered_capabilities.py +1 -1
  22. omnibase_infra/models/discovery/model_introspection_config.py +28 -1
  23. omnibase_infra/models/discovery/model_introspection_performance_metrics.py +1 -0
  24. omnibase_infra/models/discovery/model_introspection_task_config.py +1 -0
  25. omnibase_infra/{nodes/effects/models → models}/model_backend_result.py +22 -6
  26. omnibase_infra/models/projection/__init__.py +11 -0
  27. omnibase_infra/models/projection/model_contract_projection.py +170 -0
  28. omnibase_infra/models/projection/model_topic_projection.py +148 -0
  29. omnibase_infra/models/runtime/__init__.py +4 -0
  30. omnibase_infra/models/runtime/model_resolved_dependencies.py +116 -0
  31. omnibase_infra/nodes/contract_registry_reducer/__init__.py +5 -0
  32. omnibase_infra/nodes/contract_registry_reducer/contract.yaml +6 -5
  33. omnibase_infra/nodes/contract_registry_reducer/contract_registration_event_router.py +689 -0
  34. omnibase_infra/nodes/contract_registry_reducer/reducer.py +9 -26
  35. omnibase_infra/nodes/effects/__init__.py +1 -1
  36. omnibase_infra/nodes/effects/models/__init__.py +6 -4
  37. omnibase_infra/nodes/effects/models/model_registry_response.py +1 -1
  38. omnibase_infra/nodes/effects/protocol_consul_client.py +1 -1
  39. omnibase_infra/nodes/effects/protocol_postgres_adapter.py +1 -1
  40. omnibase_infra/nodes/effects/registry_effect.py +1 -1
  41. omnibase_infra/nodes/node_contract_persistence_effect/__init__.py +101 -0
  42. omnibase_infra/nodes/node_contract_persistence_effect/contract.yaml +490 -0
  43. omnibase_infra/nodes/node_contract_persistence_effect/handlers/__init__.py +74 -0
  44. omnibase_infra/nodes/node_contract_persistence_effect/handlers/handler_postgres_cleanup_topics.py +217 -0
  45. omnibase_infra/nodes/node_contract_persistence_effect/handlers/handler_postgres_contract_upsert.py +242 -0
  46. omnibase_infra/nodes/node_contract_persistence_effect/handlers/handler_postgres_deactivate.py +194 -0
  47. omnibase_infra/nodes/node_contract_persistence_effect/handlers/handler_postgres_heartbeat.py +243 -0
  48. omnibase_infra/nodes/node_contract_persistence_effect/handlers/handler_postgres_mark_stale.py +208 -0
  49. omnibase_infra/nodes/node_contract_persistence_effect/handlers/handler_postgres_topic_update.py +298 -0
  50. omnibase_infra/nodes/node_contract_persistence_effect/models/__init__.py +15 -0
  51. omnibase_infra/nodes/node_contract_persistence_effect/models/model_persistence_result.py +52 -0
  52. omnibase_infra/nodes/node_contract_persistence_effect/node.py +131 -0
  53. omnibase_infra/nodes/node_contract_persistence_effect/registry/__init__.py +27 -0
  54. omnibase_infra/nodes/node_contract_persistence_effect/registry/registry_infra_contract_persistence_effect.py +251 -0
  55. omnibase_infra/nodes/node_registration_orchestrator/models/model_postgres_intent_payload.py +8 -12
  56. omnibase_infra/nodes/node_registry_effect/models/__init__.py +2 -2
  57. omnibase_infra/nodes/node_slack_alerter_effect/__init__.py +33 -0
  58. omnibase_infra/nodes/node_slack_alerter_effect/contract.yaml +291 -0
  59. omnibase_infra/nodes/node_slack_alerter_effect/node.py +106 -0
  60. omnibase_infra/projectors/__init__.py +6 -0
  61. omnibase_infra/projectors/projection_reader_contract.py +1301 -0
  62. omnibase_infra/runtime/__init__.py +12 -0
  63. omnibase_infra/runtime/baseline_subscriptions.py +13 -6
  64. omnibase_infra/runtime/contract_dependency_resolver.py +455 -0
  65. omnibase_infra/runtime/contract_registration_event_router.py +500 -0
  66. omnibase_infra/runtime/db/__init__.py +4 -0
  67. omnibase_infra/runtime/db/models/__init__.py +15 -10
  68. omnibase_infra/runtime/db/models/model_db_operation.py +40 -0
  69. omnibase_infra/runtime/db/models/model_db_param.py +24 -0
  70. omnibase_infra/runtime/db/models/model_db_repository_contract.py +40 -0
  71. omnibase_infra/runtime/db/models/model_db_return.py +26 -0
  72. omnibase_infra/runtime/db/models/model_db_safety_policy.py +32 -0
  73. omnibase_infra/runtime/emit_daemon/event_registry.py +34 -22
  74. omnibase_infra/runtime/event_bus_subcontract_wiring.py +63 -23
  75. omnibase_infra/runtime/intent_execution_router.py +430 -0
  76. omnibase_infra/runtime/models/__init__.py +6 -0
  77. omnibase_infra/runtime/models/model_contract_registry_config.py +41 -0
  78. omnibase_infra/runtime/models/model_intent_execution_summary.py +79 -0
  79. omnibase_infra/runtime/models/model_runtime_config.py +8 -0
  80. omnibase_infra/runtime/protocols/__init__.py +16 -0
  81. omnibase_infra/runtime/protocols/protocol_intent_executor.py +107 -0
  82. omnibase_infra/runtime/publisher_topic_scoped.py +16 -11
  83. omnibase_infra/runtime/registry_policy.py +29 -15
  84. omnibase_infra/runtime/request_response_wiring.py +793 -0
  85. omnibase_infra/runtime/service_kernel.py +295 -8
  86. omnibase_infra/runtime/service_runtime_host_process.py +149 -5
  87. omnibase_infra/runtime/util_version.py +5 -1
  88. omnibase_infra/schemas/schema_latency_baseline.sql +135 -0
  89. omnibase_infra/services/contract_publisher/config.py +4 -4
  90. omnibase_infra/services/contract_publisher/service.py +8 -5
  91. omnibase_infra/services/observability/injection_effectiveness/__init__.py +67 -0
  92. omnibase_infra/services/observability/injection_effectiveness/config.py +295 -0
  93. omnibase_infra/services/observability/injection_effectiveness/consumer.py +1461 -0
  94. omnibase_infra/services/observability/injection_effectiveness/models/__init__.py +32 -0
  95. omnibase_infra/services/observability/injection_effectiveness/models/model_agent_match.py +79 -0
  96. omnibase_infra/services/observability/injection_effectiveness/models/model_context_utilization.py +118 -0
  97. omnibase_infra/services/observability/injection_effectiveness/models/model_latency_breakdown.py +107 -0
  98. omnibase_infra/services/observability/injection_effectiveness/models/model_pattern_utilization.py +46 -0
  99. omnibase_infra/services/observability/injection_effectiveness/writer_postgres.py +596 -0
  100. omnibase_infra/services/registry_api/models/__init__.py +25 -0
  101. omnibase_infra/services/registry_api/models/model_contract_ref.py +44 -0
  102. omnibase_infra/services/registry_api/models/model_contract_view.py +81 -0
  103. omnibase_infra/services/registry_api/models/model_response_contracts.py +50 -0
  104. omnibase_infra/services/registry_api/models/model_response_topics.py +50 -0
  105. omnibase_infra/services/registry_api/models/model_topic_summary.py +57 -0
  106. omnibase_infra/services/registry_api/models/model_topic_view.py +63 -0
  107. omnibase_infra/services/registry_api/routes.py +205 -6
  108. omnibase_infra/services/registry_api/service.py +528 -1
  109. omnibase_infra/utils/__init__.py +7 -0
  110. omnibase_infra/utils/util_db_error_context.py +292 -0
  111. omnibase_infra/validation/infra_validators.py +3 -1
  112. omnibase_infra/validation/validation_exemptions.yaml +65 -0
  113. {omnibase_infra-0.3.1.dist-info → omnibase_infra-0.4.0.dist-info}/METADATA +3 -3
  114. {omnibase_infra-0.3.1.dist-info → omnibase_infra-0.4.0.dist-info}/RECORD +117 -58
  115. {omnibase_infra-0.3.1.dist-info → omnibase_infra-0.4.0.dist-info}/WHEEL +0 -0
  116. {omnibase_infra-0.3.1.dist-info → omnibase_infra-0.4.0.dist-info}/entry_points.txt +0 -0
  117. {omnibase_infra-0.3.1.dist-info → omnibase_infra-0.4.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,106 @@
1
+ # SPDX-License-Identifier: MIT
2
+ # Copyright (c) 2025 OmniNode Team
3
+ """Node Slack Alerter Effect - Declarative effect node for Slack alerting.
4
+
5
+ This node follows the ONEX declarative pattern:
6
+ - DECLARATIVE effect driven by contract.yaml
7
+ - Zero custom routing logic - all behavior from handler_routing
8
+ - Lightweight shell that delegates to handlers via container resolution
9
+ - Used for ONEX-compliant runtime execution via RuntimeHostProcess
10
+ - Pattern: "Contract-driven, handlers wired externally"
11
+
12
+ Extends NodeEffect from omnibase_core for infrastructure I/O operations.
13
+ All handler routing is 100% driven by contract.yaml, not Python code.
14
+
15
+ Handler Routing Pattern:
16
+ 1. Receive alert request (input_model in contract)
17
+ 2. Route to appropriate handler based on operation (handler_routing)
18
+ 3. Execute infrastructure I/O via handler (Slack webhook)
19
+ 4. Return structured response (output_model in contract)
20
+
21
+ Design Decisions:
22
+ - 100% Contract-Driven: All routing logic in YAML, not Python
23
+ - Zero Custom Routing: Base class handles handler dispatch via contract
24
+ - Declarative Handlers: handler_routing section defines dispatch rules
25
+ - Container DI: Handler dependencies resolved via container
26
+
27
+ Node Responsibilities:
28
+ - Define I/O model contract (ModelSlackAlert -> ModelSlackAlertResult)
29
+ - Delegate all execution to handlers via base class
30
+ - NO custom logic - pure declarative shell
31
+
32
+ The actual handler execution and routing is performed by:
33
+ - Direct handler invocation by callers
34
+ - Or orchestrator layer for workflow coordination
35
+
36
+ Handlers receive their dependencies directly via constructor injection:
37
+ - HandlerSlackWebhook(webhook_url, http_session)
38
+
39
+ Coroutine Safety:
40
+ This node is async-safe. Handler coordination is performed by the
41
+ caller or orchestrator layer, not by this effect node.
42
+
43
+ Related Modules:
44
+ - contract.yaml: Handler routing and I/O model definitions
45
+ - ../../handlers/handler_slack_webhook.py: Webhook handler implementation
46
+ - ../../handlers/models/model_slack_alert.py: Alert payload models
47
+
48
+ Related Tickets:
49
+ - OMN-1905: Add declarative Slack webhook handler to omnibase_infra
50
+ """
51
+
52
+ from __future__ import annotations
53
+
54
+ from omnibase_core.nodes.node_effect import NodeEffect
55
+
56
+
57
+ class NodeSlackAlerterEffect(NodeEffect):
58
+ """Declarative effect node for Slack webhook alerting.
59
+
60
+ This effect node is a lightweight shell that defines the I/O contract
61
+ for Slack alert operations. All routing and execution logic is driven
62
+ by contract.yaml - this class contains NO custom routing code.
63
+
64
+ Supported Operations (defined in contract.yaml handler_routing):
65
+ - send_alert: Send a formatted alert to Slack
66
+ - send_message: Send a plain text message to Slack
67
+
68
+ Dependency Injection:
69
+ The HandlerSlackWebhook is instantiated by callers with its
70
+ dependencies (webhook_url from env, optional http_session).
71
+ This node contains NO instance variables for the handler.
72
+
73
+ Example:
74
+ ```python
75
+ from omnibase_core.models.container import ModelONEXContainer
76
+ from omnibase_infra.nodes.node_slack_alerter_effect import NodeSlackAlerterEffect
77
+ from omnibase_infra.handlers import HandlerSlackWebhook
78
+ from omnibase_infra.handlers.models import ModelSlackAlert, EnumAlertSeverity
79
+
80
+ # Create effect node via container
81
+ container = ModelONEXContainer()
82
+ effect = NodeSlackAlerterEffect(container)
83
+
84
+ # Handler receives dependencies directly via constructor
85
+ handler = HandlerSlackWebhook()
86
+
87
+ # Create and send alert
88
+ alert = ModelSlackAlert(
89
+ severity=EnumAlertSeverity.ERROR,
90
+ message="Circuit breaker opened",
91
+ title="Infrastructure Alert",
92
+ details={"service": "consul", "threshold": "5"},
93
+ )
94
+ result = await handler.handle(alert)
95
+
96
+ if result.success:
97
+ print(f"Alert delivered in {result.duration_ms}ms")
98
+ else:
99
+ print(f"Alert failed: {result.error}")
100
+ ```
101
+ """
102
+
103
+ # Pure declarative shell - all behavior defined in contract.yaml
104
+
105
+
106
+ __all__ = ["NodeSlackAlerterEffect"]
@@ -8,15 +8,20 @@ outputs to storage (PostgreSQL) and by orchestrators to query current
8
8
  entity state.
9
9
 
10
10
  Exports:
11
+ ProjectionReaderContract: Contract/topic projection reader for Registry API
11
12
  ProjectionReaderRegistration: Registration projection reader implementation
12
13
  SnapshotPublisherRegistration: Registration snapshot publisher for Kafka
13
14
 
14
15
  Related Tickets:
16
+ - OMN-1845: Create ProjectionReaderContract for contract/topic queries
15
17
  - OMN-947 (F2): Snapshot Publishing
16
18
  - OMN-944 (F1): Implement Registration Projection Schema
17
19
  - OMN-940 (F0): Define Projector Execution Model
18
20
  """
19
21
 
22
+ from omnibase_infra.projectors.projection_reader_contract import (
23
+ ProjectionReaderContract,
24
+ )
20
25
  from omnibase_infra.projectors.projection_reader_registration import (
21
26
  ProjectionReaderRegistration,
22
27
  )
@@ -25,6 +30,7 @@ from omnibase_infra.projectors.snapshot_publisher_registration import (
25
30
  )
26
31
 
27
32
  __all__ = [
33
+ "ProjectionReaderContract",
28
34
  "ProjectionReaderRegistration",
29
35
  "SnapshotPublisherRegistration",
30
36
  ]