omnibase_infra 0.2.2__py3-none-any.whl → 0.2.3__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 (77) hide show
  1. omnibase_infra/__init__.py +1 -1
  2. omnibase_infra/adapters/adapter_onex_tool_execution.py +6 -1
  3. omnibase_infra/capabilities/__init__.py +15 -0
  4. omnibase_infra/capabilities/capability_inference_rules.py +211 -0
  5. omnibase_infra/capabilities/contract_capability_extractor.py +221 -0
  6. omnibase_infra/capabilities/intent_type_extractor.py +160 -0
  7. omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +1 -1
  8. omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +1 -1
  9. omnibase_infra/enums/__init__.py +6 -0
  10. omnibase_infra/enums/enum_handler_error_type.py +10 -0
  11. omnibase_infra/enums/enum_handler_source_mode.py +72 -0
  12. omnibase_infra/enums/enum_kafka_acks.py +99 -0
  13. omnibase_infra/event_bus/event_bus_kafka.py +1 -1
  14. omnibase_infra/event_bus/models/config/model_kafka_event_bus_config.py +59 -10
  15. omnibase_infra/handlers/__init__.py +8 -1
  16. omnibase_infra/handlers/handler_consul.py +7 -1
  17. omnibase_infra/handlers/handler_db.py +8 -2
  18. omnibase_infra/handlers/handler_http.py +8 -2
  19. omnibase_infra/handlers/handler_intent.py +387 -0
  20. omnibase_infra/handlers/handler_mcp.py +10 -1
  21. omnibase_infra/handlers/handler_vault.py +11 -5
  22. omnibase_infra/handlers/registration_storage/handler_registration_storage_postgres.py +7 -0
  23. omnibase_infra/handlers/service_discovery/handler_service_discovery_consul.py +7 -0
  24. omnibase_infra/mixins/mixin_node_introspection.py +18 -0
  25. omnibase_infra/models/discovery/model_introspection_config.py +11 -0
  26. omnibase_infra/models/handlers/__init__.py +38 -5
  27. omnibase_infra/models/handlers/model_bootstrap_handler_descriptor.py +4 -4
  28. omnibase_infra/models/handlers/model_contract_discovery_result.py +6 -4
  29. omnibase_infra/models/handlers/model_handler_source_config.py +220 -0
  30. omnibase_infra/models/registration/model_node_introspection_event.py +9 -0
  31. omnibase_infra/models/runtime/model_handler_contract.py +25 -9
  32. omnibase_infra/models/runtime/model_loaded_handler.py +9 -0
  33. omnibase_infra/nodes/node_registration_orchestrator/plugin.py +1 -1
  34. omnibase_infra/nodes/node_registration_orchestrator/registry/registry_infra_node_registration_orchestrator.py +7 -7
  35. omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +4 -3
  36. omnibase_infra/nodes/node_registration_storage_effect/node.py +4 -1
  37. omnibase_infra/nodes/node_registration_storage_effect/registry/registry_infra_registration_storage.py +1 -1
  38. omnibase_infra/nodes/node_service_discovery_effect/registry/registry_infra_service_discovery.py +4 -1
  39. omnibase_infra/protocols/__init__.py +2 -0
  40. omnibase_infra/protocols/protocol_container_aware.py +200 -0
  41. omnibase_infra/runtime/__init__.py +39 -0
  42. omnibase_infra/runtime/handler_bootstrap_source.py +26 -33
  43. omnibase_infra/runtime/handler_contract_config_loader.py +1 -1
  44. omnibase_infra/runtime/handler_contract_source.py +10 -51
  45. omnibase_infra/runtime/handler_identity.py +81 -0
  46. omnibase_infra/runtime/handler_plugin_loader.py +15 -0
  47. omnibase_infra/runtime/handler_registry.py +11 -3
  48. omnibase_infra/runtime/handler_source_resolver.py +326 -0
  49. omnibase_infra/runtime/protocol_lifecycle_executor.py +6 -6
  50. omnibase_infra/runtime/registry/registry_protocol_binding.py +13 -13
  51. omnibase_infra/runtime/registry_contract_source.py +693 -0
  52. omnibase_infra/runtime/service_kernel.py +1 -1
  53. omnibase_infra/runtime/service_runtime_host_process.py +463 -190
  54. omnibase_infra/runtime/util_wiring.py +12 -3
  55. omnibase_infra/services/__init__.py +21 -0
  56. omnibase_infra/services/corpus_capture.py +7 -1
  57. omnibase_infra/services/mcp/mcp_server_lifecycle.py +9 -3
  58. omnibase_infra/services/registry_api/main.py +31 -13
  59. omnibase_infra/services/registry_api/service.py +10 -19
  60. omnibase_infra/services/service_timeout_emitter.py +7 -1
  61. omnibase_infra/services/service_timeout_scanner.py +7 -3
  62. omnibase_infra/services/session/__init__.py +56 -0
  63. omnibase_infra/services/session/config_consumer.py +120 -0
  64. omnibase_infra/services/session/config_store.py +139 -0
  65. omnibase_infra/services/session/consumer.py +1007 -0
  66. omnibase_infra/services/session/protocol_session_aggregator.py +117 -0
  67. omnibase_infra/services/session/store.py +997 -0
  68. omnibase_infra/utils/__init__.py +19 -0
  69. omnibase_infra/utils/util_atomic_file.py +261 -0
  70. omnibase_infra/utils/util_db_transaction.py +239 -0
  71. omnibase_infra/utils/util_retry_optimistic.py +281 -0
  72. omnibase_infra/validation/validation_exemptions.yaml +27 -0
  73. {omnibase_infra-0.2.2.dist-info → omnibase_infra-0.2.3.dist-info}/METADATA +3 -3
  74. {omnibase_infra-0.2.2.dist-info → omnibase_infra-0.2.3.dist-info}/RECORD +77 -56
  75. {omnibase_infra-0.2.2.dist-info → omnibase_infra-0.2.3.dist-info}/WHEEL +0 -0
  76. {omnibase_infra-0.2.2.dist-info → omnibase_infra-0.2.3.dist-info}/entry_points.txt +0 -0
  77. {omnibase_infra-0.2.2.dist-info → omnibase_infra-0.2.3.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,139 @@
1
+ """Configuration for session snapshot storage.
2
+
3
+ Loads from environment variables with OMNIBASE_INFRA_SESSION_STORAGE_ prefix.
4
+
5
+ Moved from omniclaude as part of OMN-1526 architectural cleanup.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from pydantic import Field, SecretStr, model_validator
11
+ from pydantic_settings import BaseSettings, SettingsConfigDict
12
+
13
+
14
+ class ConfigSessionStorage(BaseSettings):
15
+ """Configuration for session snapshot PostgreSQL storage.
16
+
17
+ Environment variables use the OMNIBASE_INFRA_SESSION_STORAGE_ prefix.
18
+ Example: OMNIBASE_INFRA_SESSION_STORAGE_POSTGRES_HOST=192.168.86.200
19
+ """
20
+
21
+ model_config = SettingsConfigDict(
22
+ env_prefix="OMNIBASE_INFRA_SESSION_STORAGE_",
23
+ env_file=".env",
24
+ env_file_encoding="utf-8",
25
+ case_sensitive=False,
26
+ extra="ignore",
27
+ )
28
+
29
+ # PostgreSQL connection
30
+ postgres_host: str = Field(
31
+ default="192.168.86.200",
32
+ description="PostgreSQL host",
33
+ )
34
+ postgres_port: int = Field(
35
+ default=5436,
36
+ ge=1,
37
+ le=65535,
38
+ description="PostgreSQL port",
39
+ )
40
+ postgres_database: str = Field(
41
+ default="omninode_bridge",
42
+ description="PostgreSQL database name",
43
+ )
44
+ postgres_user: str = Field(
45
+ default="postgres",
46
+ description="PostgreSQL user",
47
+ )
48
+ postgres_password: SecretStr = Field(
49
+ ..., # Required
50
+ description="PostgreSQL password - set via OMNIBASE_INFRA_SESSION_STORAGE_POSTGRES_PASSWORD env var",
51
+ )
52
+
53
+ # Connection pool
54
+ pool_min_size: int = Field(
55
+ default=2,
56
+ ge=1,
57
+ le=100,
58
+ description="Minimum connection pool size",
59
+ )
60
+ pool_max_size: int = Field(
61
+ default=10,
62
+ ge=1,
63
+ le=100,
64
+ description="Maximum connection pool size",
65
+ )
66
+
67
+ # Query timeouts
68
+ query_timeout_seconds: int = Field(
69
+ default=30,
70
+ ge=1,
71
+ le=300,
72
+ description="Query timeout in seconds",
73
+ )
74
+
75
+ @model_validator(mode="after")
76
+ def validate_pool_sizes(self) -> ConfigSessionStorage:
77
+ """Validate that pool_min_size <= pool_max_size.
78
+
79
+ Returns:
80
+ Self if validation passes.
81
+
82
+ Raises:
83
+ ValueError: If pool_min_size > pool_max_size.
84
+ """
85
+ if self.pool_min_size > self.pool_max_size:
86
+ raise ValueError(
87
+ f"pool_min_size ({self.pool_min_size}) must be <= "
88
+ f"pool_max_size ({self.pool_max_size})"
89
+ )
90
+ return self
91
+
92
+ @property
93
+ def dsn(self) -> str:
94
+ """Build PostgreSQL DSN from components.
95
+
96
+ Returns:
97
+ PostgreSQL connection string.
98
+ """
99
+ password = self.postgres_password.get_secret_value()
100
+ return (
101
+ f"postgresql://{self.postgres_user}:{password}"
102
+ f"@{self.postgres_host}:{self.postgres_port}"
103
+ f"/{self.postgres_database}"
104
+ )
105
+
106
+ @property
107
+ def dsn_async(self) -> str:
108
+ """Build async PostgreSQL DSN for asyncpg.
109
+
110
+ Returns:
111
+ PostgreSQL connection string with postgresql+asyncpg scheme.
112
+ """
113
+ password = self.postgres_password.get_secret_value()
114
+ return (
115
+ f"postgresql+asyncpg://{self.postgres_user}:{password}"
116
+ f"@{self.postgres_host}:{self.postgres_port}"
117
+ f"/{self.postgres_database}"
118
+ )
119
+
120
+ @property
121
+ def dsn_safe(self) -> str:
122
+ """Build PostgreSQL DSN with password masked (safe for logging).
123
+
124
+ Returns:
125
+ PostgreSQL connection string with password replaced by ***.
126
+ """
127
+ return (
128
+ f"postgresql://{self.postgres_user}:***"
129
+ f"@{self.postgres_host}:{self.postgres_port}"
130
+ f"/{self.postgres_database}"
131
+ )
132
+
133
+ def __repr__(self) -> str:
134
+ """Safe string representation that doesn't expose credentials.
135
+
136
+ Returns:
137
+ String representation with masked password.
138
+ """
139
+ return f"ConfigSessionStorage(dsn={self.dsn_safe!r})"