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.
- omnibase_infra/__init__.py +1 -1
- omnibase_infra/adapters/adapter_onex_tool_execution.py +6 -1
- omnibase_infra/capabilities/__init__.py +15 -0
- omnibase_infra/capabilities/capability_inference_rules.py +211 -0
- omnibase_infra/capabilities/contract_capability_extractor.py +221 -0
- omnibase_infra/capabilities/intent_type_extractor.py +160 -0
- omnibase_infra/contracts/handlers/filesystem/handler_contract.yaml +1 -1
- omnibase_infra/contracts/handlers/mcp/handler_contract.yaml +1 -1
- omnibase_infra/enums/__init__.py +6 -0
- omnibase_infra/enums/enum_handler_error_type.py +10 -0
- omnibase_infra/enums/enum_handler_source_mode.py +72 -0
- omnibase_infra/enums/enum_kafka_acks.py +99 -0
- omnibase_infra/event_bus/event_bus_kafka.py +1 -1
- omnibase_infra/event_bus/models/config/model_kafka_event_bus_config.py +59 -10
- omnibase_infra/handlers/__init__.py +8 -1
- omnibase_infra/handlers/handler_consul.py +7 -1
- omnibase_infra/handlers/handler_db.py +8 -2
- omnibase_infra/handlers/handler_http.py +8 -2
- omnibase_infra/handlers/handler_intent.py +387 -0
- omnibase_infra/handlers/handler_mcp.py +10 -1
- omnibase_infra/handlers/handler_vault.py +11 -5
- omnibase_infra/handlers/registration_storage/handler_registration_storage_postgres.py +7 -0
- omnibase_infra/handlers/service_discovery/handler_service_discovery_consul.py +7 -0
- omnibase_infra/mixins/mixin_node_introspection.py +18 -0
- omnibase_infra/models/discovery/model_introspection_config.py +11 -0
- omnibase_infra/models/handlers/__init__.py +38 -5
- omnibase_infra/models/handlers/model_bootstrap_handler_descriptor.py +4 -4
- omnibase_infra/models/handlers/model_contract_discovery_result.py +6 -4
- omnibase_infra/models/handlers/model_handler_source_config.py +220 -0
- omnibase_infra/models/registration/model_node_introspection_event.py +9 -0
- omnibase_infra/models/runtime/model_handler_contract.py +25 -9
- omnibase_infra/models/runtime/model_loaded_handler.py +9 -0
- omnibase_infra/nodes/node_registration_orchestrator/plugin.py +1 -1
- omnibase_infra/nodes/node_registration_orchestrator/registry/registry_infra_node_registration_orchestrator.py +7 -7
- omnibase_infra/nodes/node_registration_orchestrator/timeout_coordinator.py +4 -3
- omnibase_infra/nodes/node_registration_storage_effect/node.py +4 -1
- omnibase_infra/nodes/node_registration_storage_effect/registry/registry_infra_registration_storage.py +1 -1
- omnibase_infra/nodes/node_service_discovery_effect/registry/registry_infra_service_discovery.py +4 -1
- omnibase_infra/protocols/__init__.py +2 -0
- omnibase_infra/protocols/protocol_container_aware.py +200 -0
- omnibase_infra/runtime/__init__.py +39 -0
- omnibase_infra/runtime/handler_bootstrap_source.py +26 -33
- omnibase_infra/runtime/handler_contract_config_loader.py +1 -1
- omnibase_infra/runtime/handler_contract_source.py +10 -51
- omnibase_infra/runtime/handler_identity.py +81 -0
- omnibase_infra/runtime/handler_plugin_loader.py +15 -0
- omnibase_infra/runtime/handler_registry.py +11 -3
- omnibase_infra/runtime/handler_source_resolver.py +326 -0
- omnibase_infra/runtime/protocol_lifecycle_executor.py +6 -6
- omnibase_infra/runtime/registry/registry_protocol_binding.py +13 -13
- omnibase_infra/runtime/registry_contract_source.py +693 -0
- omnibase_infra/runtime/service_kernel.py +1 -1
- omnibase_infra/runtime/service_runtime_host_process.py +463 -190
- omnibase_infra/runtime/util_wiring.py +12 -3
- omnibase_infra/services/__init__.py +21 -0
- omnibase_infra/services/corpus_capture.py +7 -1
- omnibase_infra/services/mcp/mcp_server_lifecycle.py +9 -3
- omnibase_infra/services/registry_api/main.py +31 -13
- omnibase_infra/services/registry_api/service.py +10 -19
- omnibase_infra/services/service_timeout_emitter.py +7 -1
- omnibase_infra/services/service_timeout_scanner.py +7 -3
- omnibase_infra/services/session/__init__.py +56 -0
- omnibase_infra/services/session/config_consumer.py +120 -0
- omnibase_infra/services/session/config_store.py +139 -0
- omnibase_infra/services/session/consumer.py +1007 -0
- omnibase_infra/services/session/protocol_session_aggregator.py +117 -0
- omnibase_infra/services/session/store.py +997 -0
- omnibase_infra/utils/__init__.py +19 -0
- omnibase_infra/utils/util_atomic_file.py +261 -0
- omnibase_infra/utils/util_db_transaction.py +239 -0
- omnibase_infra/utils/util_retry_optimistic.py +281 -0
- omnibase_infra/validation/validation_exemptions.yaml +27 -0
- {omnibase_infra-0.2.2.dist-info → omnibase_infra-0.2.3.dist-info}/METADATA +3 -3
- {omnibase_infra-0.2.2.dist-info → omnibase_infra-0.2.3.dist-info}/RECORD +77 -56
- {omnibase_infra-0.2.2.dist-info → omnibase_infra-0.2.3.dist-info}/WHEEL +0 -0
- {omnibase_infra-0.2.2.dist-info → omnibase_infra-0.2.3.dist-info}/entry_points.txt +0 -0
- {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})"
|