Coverage for src / lexigram / contracts / __init__.py: 0%

23 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-08-15 18:57 +0800

1"""Lexigram Unified Types. 

2 

3This package provides a centralized location for all framework-wide 

4type definitions, protocols, and data classes. 

5""" 

6 

7from __future__ import annotations 

8 

9import pkgutil 

10from typing import TYPE_CHECKING, Any 

11 

12__path__ = pkgutil.extend_path(__path__, __name__) 

13 

14# -- Version --------------------------------------------------------------- 

15 

16import importlib.metadata 

17 

18from lexigram.contracts.core.constants import __version__ as __version__ 

19 

20# --------------------------------------------------------------------------- 

21# Lazy Imports (deferred until first attribute access) 

22# --------------------------------------------------------------------------- 

23if TYPE_CHECKING: 

24 from lexigram.contracts import ( 

25 admin, 

26 ai, 

27 auth, 

28 core, 

29 data, 

30 domain, 

31 events, 

32 exceptions, 

33 feature_flags, 

34 graphql, 

35 infra, 

36 mapping, 

37 mcp, 

38 monitor, 

39 observability, 

40 search, 

41 security, 

42 tenancy, 

43 web, 

44 workflow, 

45 ) 

46 from lexigram.contracts.ai import ( 

47 AgentError, 

48 AgentExecutorProtocol, 

49 AgentProtocol, 

50 AgentResponse, 

51 AIProviderProtocol, 

52 ChatMessage, 

53 ContextPrunerProtocol, 

54 DocumentVectorStoreProtocol, 

55 EmbeddingClientProtocol, 

56 EpisodicMemoryProtocol, 

57 LLMClientProtocol, 

58 MemoryConsolidatorProtocol, 

59 MemoryProtocol, 

60 MemoryStoreProtocol, 

61 PromptAssemblerProtocol, 

62 PromptCompressorProtocol, 

63 SemanticCacheProtocol, 

64 SemanticMemoryProtocol, 

65 StrategyError, 

66 StrategyProtocol, 

67 TokenBudget, 

68 TokenCounterProtocol, 

69 ToolError, 

70 ToolProtocol, 

71 ToolRegistryProtocol, 

72 WorkingMemoryProtocol, 

73 ) 

74 from lexigram.contracts.ai.workflow import AIWorkflowNodeProtocol 

75 from lexigram.contracts.audit import AuditEntry 

76 from lexigram.contracts.auth import ( 

77 AuthenticatedUserProtocol, 

78 AuthorizerProtocol, 

79 AuthProviderProtocol, 

80 PasswordHasherProtocol, 

81 TokenManagerProtocol, 

82 UserProtocol, 

83 ) 

84 from lexigram.contracts.cli import ( 

85 CliContributorProtocol, 

86 GeneratorDefinition, 

87 GeneratorOption, 

88 ) 

89 from lexigram.contracts.core import ( 

90 JSON, 

91 AggregateHealthResult, 

92 AsyncStringSerializerProtocol, 

93 ClockProtocol, 

94 ConfigProtocol, 

95 ContainerProtocol, 

96 ContainerRegistrarProtocol, 

97 ContainerResolverProtocol, 

98 Duration, 

99 GracefulShutdownProtocol, 

100 HealthCheckAggregatorProtocol, 

101 HealthCheckProtocol, 

102 HealthCheckResult, 

103 HealthStatus, 

104 IdGeneratorProtocol, 

105 IdStrategy, 

106 Lifecycle, 

107 LockStoreProtocol, 

108 Metadata, 

109 OnApplicationBootstrapProtocol, 

110 OnApplicationShutdownProtocol, 

111 OnBeforeShutdownProtocol, 

112 OnModuleInitProtocol, 

113 ProviderPriority, 

114 ProviderProtocol, 

115 Result, 

116 SerializerProtocol, 

117 ServiceScope, 

118 TokenPayload, 

119 ) 

120 from lexigram.contracts.core.idempotency import ( 

121 IdempotencyMiddlewareProtocol, 

122 IdempotencyStoreProtocol, 

123 ) 

124 from lexigram.contracts.core.lock import ( 

125 AsyncLockProtocol, 

126 DistributedLockProtocol, 

127 LockInfo, 

128 LockManagerProtocol, 

129 ) 

130 from lexigram.contracts.core.validation import ValidationError 

131 from lexigram.contracts.data import ( 

132 ConnectionPoolProtocol, 

133 ConnectionProtocol, 

134 DatabaseProviderProtocol, 

135 DeleteResult, 

136 InsertResult, 

137 MigrationManagerProtocol, 

138 MigrationRecord, 

139 QueryLogEntry, 

140 QueryLoggerProtocol, 

141 QueryResult, 

142 ReadOnlyRepositoryProtocol, 

143 RepositoryProtocol, 

144 UnitOfWorkProtocol, 

145 UpdateResult, 

146 ) 

147 from lexigram.contracts.data.sql.migrations import MigrationRunnerProtocol 

148 from lexigram.contracts.data.vector.protocols import VectorStoreProtocol 

149 from lexigram.contracts.domain.aggregates import AggregateRootProtocol 

150 from lexigram.contracts.domain.events import DomainEvent 

151 from lexigram.contracts.domain.pagination import ( 

152 CursorPage, 

153 CursorPageProtocol, 

154 OffsetPageProtocol, 

155 ) 

156 from lexigram.contracts.domain.specification import SpecificationProtocol 

157 from lexigram.contracts.events import ( 

158 CommandBusProtocol, 

159 DomainEventPublisherProtocol, 

160 EventBusProtocol, 

161 EventHandlerProtocol, 

162 EventStoreProtocol, 

163 QueryBusProtocol, 

164 WebhookSignatureVerifierProtocol, 

165 ) 

166 from lexigram.contracts.exceptions.components import ( 

167 SecretNotFoundError, 

168 ) 

169 from lexigram.contracts.exceptions.events import ( 

170 DuplicateHandlerError, 

171 HandlerNotFoundError, 

172 ) 

173 from lexigram.contracts.exceptions.security import ( 

174 SecretAccessError, 

175 ) 

176 from lexigram.contracts.feature_flags import ( 

177 FlagEvaluation, 

178 FlagType, 

179 FlagValue, 

180 ) 

181 from lexigram.contracts.infra.cache import ( 

182 CacheBackendProtocol, 

183 CacheProviderProtocol, 

184 ) 

185 from lexigram.contracts.infra.resilience import ( 

186 CircuitBreakerConfig, 

187 RetryConfig, 

188 ) 

189 from lexigram.contracts.infra.resources import ( 

190 PoolManagerProtocol, 

191 PoolProtocol, 

192 PoolStatsProtocol, 

193 ) 

194 from lexigram.contracts.infra.state import StateStoreProtocol 

195 from lexigram.contracts.infra.storage import BlobStoreProtocol 

196 from lexigram.contracts.infra.tasks import ( 

197 JobProtocol, 

198 JobStatus, 

199 TaskExecutorProtocol, 

200 TaskProviderProtocol, 

201 TaskQueueProtocol, 

202 ) 

203 from lexigram.contracts.mapping import ObjectMapperProtocol 

204 from lexigram.contracts.mcp import ( 

205 MCPError, 

206 MCPInitializationError, 

207 MCPMethodNotFoundError, 

208 MCPPromptError, 

209 MCPProtocolError, 

210 MCPResourceError, 

211 MCPServerProtocol, 

212 MCPToolCallError, 

213 MCPToolProviderProtocol, 

214 MCPTransportProtocol, 

215 ) 

216 from lexigram.contracts.observability.metrics import HealthCheckRegistryProtocol 

217 from lexigram.contracts.search import SearchEngineProtocol 

218 from lexigram.contracts.security import ( 

219 AsyncSecretStoreProtocol, 

220 HasherProtocol, 

221 KeyDerivationProtocol, 

222 ) 

223 from lexigram.contracts.security.secrets import SecretStoreProtocol 

224 from lexigram.contracts.tenancy import ( 

225 TenantConfigError, 

226 TenantConfigProviderProtocol, 

227 TenantError, 

228 TenantInactiveError, 

229 TenantInfo, 

230 TenantIsolationStrategyProtocol, 

231 TenantNotFoundError, 

232 TenantProviderProtocol, 

233 TenantProvisioningError, 

234 TenantResolutionContext, 

235 TenantResolutionError, 

236 TenantResolverProtocol, 

237 TenantSlugConflictError, 

238 TenantStatus, 

239 TenantSuspendedError, 

240 ) 

241 from lexigram.contracts.web import ( 

242 CORSPolicyProtocol, 

243 ErrorDetail, 

244 ErrorResponseDTO, 

245 HttpRequestLoggerProtocol, 

246 PaginatedResponseDTO, 

247 ) 

248 from lexigram.contracts.workflow import ( 

249 SagaManagerProtocol, 

250 SagaProtocol, 

251 ) 

252 

253_SUBMODULE_NAMES: frozenset[str] = frozenset( 

254 { 

255 "admin", 

256 "ai", 

257 "auth", 

258 "cli", 

259 "codegen", 

260 "core", 

261 "data", 

262 "domain", 

263 "events", 

264 "exceptions", 

265 "feature_flags", 

266 "graphql", 

267 "infra", 

268 "lib", 

269 "lifecycle", 

270 "mailer", 

271 "mapping", 

272 "mcp", 

273 "monitor", 

274 "notification", 

275 "observability", 

276 "search", 

277 "security", 

278 "tenancy", 

279 "web", 

280 "workflow", 

281 } 

282) 

283 

284_LAZY_IMPORTS: dict[str, tuple[str, str]] = { 

285 # lifecycle 

286 "AuditableProtocol": ("lexigram.contracts.lifecycle", "AuditableProtocol"), 

287 "CacheAwareProtocol": ("lexigram.contracts.lifecycle", "CacheAwareProtocol"), 

288 "ExportableProtocol": ("lexigram.contracts.lifecycle", "ExportableProtocol"), 

289 "TransactionalProtocol": ("lexigram.contracts.lifecycle", "TransactionalProtocol"), 

290 "ValidatableProtocol": ("lexigram.contracts.lifecycle", "ValidatableProtocol"), 

291 # cli 

292 "CliContributorProtocol": ("lexigram.contracts.cli", "CliContributorProtocol"), 

293 "GeneratorDefinition": ("lexigram.contracts.cli", "GeneratorDefinition"), 

294 "GeneratorOption": ("lexigram.contracts.cli", "GeneratorOption"), 

295 # agents (merged into ai/) 

296 "AgentError": ("lexigram.contracts.ai", "AgentError"), 

297 "AgentExecutorProtocol": ("lexigram.contracts.ai", "AgentExecutorProtocol"), 

298 "AgentProtocol": ("lexigram.contracts.ai", "AgentProtocol"), 

299 "AgentResponse": ("lexigram.contracts.ai", "AgentResponse"), 

300 "StrategyError": ("lexigram.contracts.ai", "StrategyError"), 

301 "StrategyProtocol": ("lexigram.contracts.ai", "StrategyProtocol"), 

302 "ToolError": ("lexigram.contracts.ai", "ToolError"), 

303 "ToolProtocol": ("lexigram.contracts.ai", "ToolProtocol"), 

304 "ToolRegistryProtocol": ("lexigram.contracts.ai", "ToolRegistryProtocol"), 

305 # ai 

306 "AIProviderProtocol": ("lexigram.contracts.ai", "AIProviderProtocol"), 

307 "ChatMessage": ("lexigram.contracts.ai.llm", "ChatMessage"), 

308 "ContextPrunerProtocol": ("lexigram.contracts.ai.session", "ContextPrunerProtocol"), 

309 "EmbeddingClientProtocol": ("lexigram.contracts.ai", "EmbeddingClientProtocol"), 

310 "EpisodicMemoryProtocol": ("lexigram.contracts.ai", "EpisodicMemoryProtocol"), 

311 "LLMClientProtocol": ("lexigram.contracts.ai", "LLMClientProtocol"), 

312 "MemoryConsolidatorProtocol": ( 

313 "lexigram.contracts.ai", 

314 "MemoryConsolidatorProtocol", 

315 ), 

316 "MemoryProtocol": ("lexigram.contracts.ai", "MemoryProtocol"), 

317 "MemoryStoreProtocol": ("lexigram.contracts.ai", "MemoryStoreProtocol"), 

318 "PromptAssemblerProtocol": ("lexigram.contracts.ai.llm", "PromptAssemblerProtocol"), 

319 "PromptCompressorProtocol": ( 

320 "lexigram.contracts.ai.rag", 

321 "PromptCompressorProtocol", 

322 ), 

323 "SemanticCacheProtocol": ("lexigram.contracts.ai.llm", "SemanticCacheProtocol"), 

324 "SemanticMemoryProtocol": ("lexigram.contracts.ai", "SemanticMemoryProtocol"), 

325 "TokenBudget": ("lexigram.contracts.ai.llm", "TokenBudget"), 

326 "TokenCounterProtocol": ("lexigram.contracts.ai.llm", "TokenCounterProtocol"), 

327 "DocumentVectorStoreProtocol": ( 

328 "lexigram.contracts.ai.vector", 

329 "DocumentVectorStoreProtocol", 

330 ), 

331 "VectorStoreProtocol": ( 

332 "lexigram.contracts.data.vector.protocols", 

333 "VectorStoreProtocol", 

334 ), 

335 "WorkingMemoryProtocol": ("lexigram.contracts.ai", "WorkingMemoryProtocol"), 

336 # auth 

337 "AuthProviderProtocol": ("lexigram.contracts.auth", "AuthProviderProtocol"), 

338 "AuthenticatedUserProtocol": ( 

339 "lexigram.contracts.auth", 

340 "AuthenticatedUserProtocol", 

341 ), 

342 "AuthorizerProtocol": ("lexigram.contracts.auth", "AuthorizerProtocol"), 

343 "PasswordHasherProtocol": ("lexigram.contracts.auth", "PasswordHasherProtocol"), 

344 "TokenManagerProtocol": ("lexigram.contracts.auth", "TokenManagerProtocol"), 

345 "UserProtocol": ("lexigram.contracts.auth", "UserProtocol"), 

346 # cache 

347 "CacheBackendProtocol": ("lexigram.contracts.infra.cache", "CacheBackendProtocol"), 

348 "CacheProviderProtocol": ( 

349 "lexigram.contracts.infra.cache", 

350 "CacheProviderProtocol", 

351 ), 

352 # core 

353 "AggregateHealthResult": ("lexigram.contracts.core", "AggregateHealthResult"), 

354 "ConfigProtocol": ("lexigram.contracts.core", "ConfigProtocol"), 

355 "ClockProtocol": ("lexigram.contracts.core", "ClockProtocol"), 

356 "ContainerProtocol": ("lexigram.contracts.core", "ContainerProtocol"), 

357 "ContainerRegistrarProtocol": ( 

358 "lexigram.contracts.core", 

359 "ContainerRegistrarProtocol", 

360 ), 

361 "ContainerResolverProtocol": ( 

362 "lexigram.contracts.core", 

363 "ContainerResolverProtocol", 

364 ), 

365 "GracefulShutdownProtocol": ("lexigram.contracts.core", "GracefulShutdownProtocol"), 

366 "HealthCheckAggregatorProtocol": ( 

367 "lexigram.contracts.core", 

368 "HealthCheckAggregatorProtocol", 

369 ), 

370 "HealthCheckProtocol": ("lexigram.contracts.core", "HealthCheckProtocol"), 

371 "HealthCheckRegistryProtocol": ( 

372 "lexigram.contracts.observability.metrics", 

373 "HealthCheckRegistryProtocol", 

374 ), 

375 "HealthCheckResult": ("lexigram.contracts.core", "HealthCheckResult"), 

376 "HealthStatus": ("lexigram.contracts.core", "HealthStatus"), 

377 "Duration": ("lexigram.contracts.core", "Duration"), 

378 "IdGeneratorProtocol": ("lexigram.contracts.core", "IdGeneratorProtocol"), 

379 "IdStrategy": ("lexigram.contracts.core", "IdStrategy"), 

380 "JSON": ("lexigram.contracts.core", "JSON"), 

381 "Lifecycle": ("lexigram.contracts.core", "Lifecycle"), 

382 "LockStoreProtocol": ("lexigram.contracts.core", "LockStoreProtocol"), 

383 "Metadata": ("lexigram.contracts.core", "Metadata"), 

384 "OnApplicationBootstrapProtocol": ( 

385 "lexigram.contracts.core", 

386 "OnApplicationBootstrapProtocol", 

387 ), 

388 "OnApplicationShutdownProtocol": ( 

389 "lexigram.contracts.core", 

390 "OnApplicationShutdownProtocol", 

391 ), 

392 "OnBeforeShutdownProtocol": ("lexigram.contracts.core", "OnBeforeShutdownProtocol"), 

393 "OnModuleInitProtocol": ("lexigram.contracts.core", "OnModuleInitProtocol"), 

394 "ProviderPriority": ("lexigram.contracts.core", "ProviderPriority"), 

395 "ProviderProtocol": ("lexigram.contracts.core", "ProviderProtocol"), 

396 "Result": ("lexigram.contracts.core", "Result"), 

397 "AsyncStringSerializerProtocol": ( 

398 "lexigram.contracts.core", 

399 "AsyncStringSerializerProtocol", 

400 ), 

401 "SerializerProtocol": ("lexigram.contracts.core", "SerializerProtocol"), 

402 "ServiceScope": ("lexigram.contracts.core", "ServiceScope"), 

403 "TokenPayload": ("lexigram.contracts.core", "TokenPayload"), 

404 # idempotency 

405 "IdempotencyMiddlewareProtocol": ( 

406 "lexigram.contracts.core.idempotency", 

407 "IdempotencyMiddlewareProtocol", 

408 ), 

409 "IdempotencyStoreProtocol": ( 

410 "lexigram.contracts.core.idempotency", 

411 "IdempotencyStoreProtocol", 

412 ), 

413 # lock 

414 "AsyncLockProtocol": ("lexigram.contracts.core.lock", "AsyncLockProtocol"), 

415 "DistributedLockProtocol": ( 

416 "lexigram.contracts.core.lock", 

417 "DistributedLockProtocol", 

418 ), 

419 "LockInfo": ("lexigram.contracts.core.lock", "LockInfo"), 

420 "LockManagerProtocol": ("lexigram.contracts.core.lock", "LockManagerProtocol"), 

421 # validation 

422 "ValidationError": ("lexigram.contracts.core.validation", "ValidationError"), 

423 # data 

424 "ConnectionPoolProtocol": ("lexigram.contracts.data", "ConnectionPoolProtocol"), 

425 "ConnectionProtocol": ("lexigram.contracts.data", "ConnectionProtocol"), 

426 "DatabaseProviderProtocol": ("lexigram.contracts.data", "DatabaseProviderProtocol"), 

427 "DeleteResult": ("lexigram.contracts.data", "DeleteResult"), 

428 "InsertResult": ("lexigram.contracts.data", "InsertResult"), 

429 "MigrationManagerProtocol": ("lexigram.contracts.data", "MigrationManagerProtocol"), 

430 "MigrationRecord": ("lexigram.contracts.data", "MigrationRecord"), 

431 "QueryLogEntry": ("lexigram.contracts.data", "QueryLogEntry"), 

432 "QueryLoggerProtocol": ("lexigram.contracts.data", "QueryLoggerProtocol"), 

433 "QueryResult": ("lexigram.contracts.data", "QueryResult"), 

434 "ReadOnlyRepositoryProtocol": ( 

435 "lexigram.contracts.data", 

436 "ReadOnlyRepositoryProtocol", 

437 ), 

438 "RepositoryProtocol": ("lexigram.contracts.data", "RepositoryProtocol"), 

439 "UnitOfWorkProtocol": ("lexigram.contracts.data", "UnitOfWorkProtocol"), 

440 "UpdateResult": ("lexigram.contracts.data", "UpdateResult"), 

441 # migrations 

442 "MigrationRunnerProtocol": ( 

443 "lexigram.contracts.data.sql.migrations", 

444 "MigrationRunnerProtocol", 

445 ), 

446 # aggregates 

447 "AggregateRootProtocol": ( 

448 "lexigram.contracts.domain.aggregates", 

449 "AggregateRootProtocol", 

450 ), 

451 # events 

452 "DomainEvent": ("lexigram.contracts.domain.events", "DomainEvent"), 

453 # specification 

454 "SpecificationProtocol": ( 

455 "lexigram.contracts.domain.specification", 

456 "SpecificationProtocol", 

457 ), 

458 # state 

459 "StateStoreProtocol": ("lexigram.contracts.infra.state", "StateStoreProtocol"), 

460 # events 

461 "CommandBusProtocol": ("lexigram.contracts.events", "CommandBusProtocol"), 

462 "DomainEventPublisherProtocol": ( 

463 "lexigram.contracts.events", 

464 "DomainEventPublisherProtocol", 

465 ), 

466 "EventBusProtocol": ("lexigram.contracts.events", "EventBusProtocol"), 

467 "EventHandlerProtocol": ("lexigram.contracts.events", "EventHandlerProtocol"), 

468 "EventStoreProtocol": ("lexigram.contracts.events", "EventStoreProtocol"), 

469 "QueryBusProtocol": ("lexigram.contracts.events", "QueryBusProtocol"), 

470 # components 

471 "SecretNotFoundError": ( 

472 "lexigram.contracts.exceptions.components", 

473 "SecretNotFoundError", 

474 ), 

475 # security 

476 "SecretAccessError": ( 

477 "lexigram.contracts.exceptions.security", 

478 "SecretAccessError", 

479 ), 

480 # events 

481 "DuplicateHandlerError": ( 

482 "lexigram.contracts.exceptions.events", 

483 "DuplicateHandlerError", 

484 ), 

485 "HandlerNotFoundError": ( 

486 "lexigram.contracts.exceptions.events", 

487 "HandlerNotFoundError", 

488 ), 

489 # mapping 

490 "ObjectMapperProtocol": ("lexigram.contracts.mapping", "ObjectMapperProtocol"), 

491 # mcp 

492 "MCPError": ("lexigram.contracts.mcp", "MCPError"), 

493 "MCPInitializationError": ("lexigram.contracts.mcp", "MCPInitializationError"), 

494 "MCPMethodNotFoundError": ("lexigram.contracts.mcp", "MCPMethodNotFoundError"), 

495 "MCPPromptError": ("lexigram.contracts.mcp", "MCPPromptError"), 

496 "MCPProtocolError": ("lexigram.contracts.mcp", "MCPProtocolError"), 

497 "MCPResourceError": ("lexigram.contracts.mcp", "MCPResourceError"), 

498 "MCPServerProtocol": ("lexigram.contracts.mcp", "MCPServerProtocol"), 

499 "MCPToolCallError": ("lexigram.contracts.mcp", "MCPToolCallError"), 

500 "MCPToolProviderProtocol": ("lexigram.contracts.mcp", "MCPToolProviderProtocol"), 

501 "MCPTransportProtocol": ("lexigram.contracts.mcp", "MCPTransportProtocol"), 

502 # monitor 

503 "ProjectionTier": ("lexigram.contracts.monitor", "ProjectionTier"), 

504 "WebhookSignatureVerifierProtocol": ( 

505 "lexigram.contracts.events", 

506 "WebhookSignatureVerifierProtocol", 

507 ), 

508 # resilience 

509 "CircuitBreakerConfig": ( 

510 "lexigram.contracts.infra.resilience", 

511 "CircuitBreakerConfig", 

512 ), 

513 "RetryConfig": ("lexigram.contracts.infra.resilience", "RetryConfig"), 

514 # search 

515 "SearchEngineProtocol": ("lexigram.contracts.search", "SearchEngineProtocol"), 

516 # security 

517 "AsyncSecretStoreProtocol": ( 

518 "lexigram.contracts.security", 

519 "AsyncSecretStoreProtocol", 

520 ), 

521 "HasherProtocol": ("lexigram.contracts.security", "HasherProtocol"), 

522 "KeyDerivationProtocol": ( 

523 "lexigram.contracts.security", 

524 "KeyDerivationProtocol", 

525 ), 

526 # secrets 

527 "SecretStoreProtocol": ( 

528 "lexigram.contracts.security.secrets", 

529 "SecretStoreProtocol", 

530 ), 

531 # resources 

532 "PoolProtocol": ("lexigram.contracts.infra.resources", "PoolProtocol"), 

533 "PoolManagerProtocol": ( 

534 "lexigram.contracts.infra.resources", 

535 "PoolManagerProtocol", 

536 ), 

537 "PoolStatsProtocol": ("lexigram.contracts.infra.resources", "PoolStatsProtocol"), 

538 # storage 

539 "BlobStoreProtocol": ("lexigram.contracts.infra.storage", "BlobStoreProtocol"), 

540 # tasks 

541 "JobProtocol": ("lexigram.contracts.infra.tasks", "JobProtocol"), 

542 "JobStatus": ("lexigram.contracts.infra.tasks", "JobStatus"), 

543 "TaskExecutorProtocol": ("lexigram.contracts.infra.tasks", "TaskExecutorProtocol"), 

544 "TaskProviderProtocol": ("lexigram.contracts.infra.tasks", "TaskProviderProtocol"), 

545 "TaskQueueProtocol": ("lexigram.contracts.infra.tasks", "TaskQueueProtocol"), 

546 # web 

547 "CORSPolicyProtocol": ("lexigram.contracts.web", "CORSPolicyProtocol"), 

548 "ErrorDetail": ("lexigram.contracts.web", "ErrorDetail"), 

549 "ErrorResponseDTO": ("lexigram.contracts.web", "ErrorResponseDTO"), 

550 "HttpRequestLoggerProtocol": ( 

551 "lexigram.contracts.web", 

552 "HttpRequestLoggerProtocol", 

553 ), 

554 "PaginatedResponseDTO": ("lexigram.contracts.web", "PaginatedResponseDTO"), 

555 # workflow 

556 "SagaProtocol": ("lexigram.contracts.workflow", "SagaProtocol"), 

557 "SagaManagerProtocol": ("lexigram.contracts.workflow", "SagaManagerProtocol"), 

558 "WorkflowNodeProtocol": ( 

559 "lexigram.contracts.workflow.protocols", 

560 "WorkflowNodeProtocol", 

561 ), 

562 "AIWorkflowNodeProtocol": ( 

563 "lexigram.contracts.ai.workflow", 

564 "AIWorkflowNodeProtocol", 

565 ), 

566 # audit 

567 "AuditEntry": ("lexigram.contracts.audit", "AuditEntry"), 

568 # feature_flags 

569 "FlagEvaluation": ("lexigram.contracts.feature_flags", "FlagEvaluation"), 

570 "FlagType": ("lexigram.contracts.feature_flags", "FlagType"), 

571 "FlagValue": ("lexigram.contracts.feature_flags", "FlagValue"), 

572 # pagination 

573 "CursorPage": ("lexigram.contracts.domain.pagination", "CursorPage"), 

574 "CursorPageProtocol": ( 

575 "lexigram.contracts.domain.pagination", 

576 "CursorPageProtocol", 

577 ), 

578 "OffsetPageProtocol": ( 

579 "lexigram.contracts.domain.pagination", 

580 "OffsetPageProtocol", 

581 ), 

582 # tenancy 

583 "TenantConfigError": ("lexigram.contracts.tenancy", "TenantConfigError"), 

584 "TenantConfigProviderProtocol": ( 

585 "lexigram.contracts.tenancy", 

586 "TenantConfigProviderProtocol", 

587 ), 

588 "TenantError": ("lexigram.contracts.tenancy", "TenantError"), 

589 "TenantInactiveError": ("lexigram.contracts.tenancy", "TenantInactiveError"), 

590 "TenantInfo": ("lexigram.contracts.tenancy", "TenantInfo"), 

591 "TenantIsolationStrategyProtocol": ( 

592 "lexigram.contracts.tenancy", 

593 "TenantIsolationStrategyProtocol", 

594 ), 

595 "TenantNotFoundError": ("lexigram.contracts.tenancy", "TenantNotFoundError"), 

596 "TenantProviderProtocol": ("lexigram.contracts.tenancy", "TenantProviderProtocol"), 

597 "TenantProvisioningError": ( 

598 "lexigram.contracts.tenancy", 

599 "TenantProvisioningError", 

600 ), 

601 "TenantResolutionContext": ( 

602 "lexigram.contracts.tenancy", 

603 "TenantResolutionContext", 

604 ), 

605 "TenantResolutionError": ("lexigram.contracts.tenancy", "TenantResolutionError"), 

606 "TenantResolverProtocol": ("lexigram.contracts.tenancy", "TenantResolverProtocol"), 

607 "TenantSlugConflictError": ( 

608 "lexigram.contracts.tenancy", 

609 "TenantSlugConflictError", 

610 ), 

611 "TenantStatus": ("lexigram.contracts.tenancy", "TenantStatus"), 

612 "TenantSuspendedError": ("lexigram.contracts.tenancy", "TenantSuspendedError"), 

613} 

614 

615 

616def __getattr__(name: str) -> Any: 

617 """Lazy-load public symbols on first access.""" 

618 if name in _LAZY_IMPORTS: 

619 import importlib 

620 

621 module_path, attr_name = _LAZY_IMPORTS[name] 

622 module = importlib.import_module(module_path) 

623 value = getattr(module, attr_name) 

624 globals()[name] = value 

625 return value 

626 if name in _SUBMODULE_NAMES: 

627 import importlib 

628 

629 return importlib.import_module(f"lexigram.contracts.{name}") 

630 raise AttributeError(f"module {__name__!r} has no attribute {name!r}") 

631 

632 

633def __dir__() -> list[str]: 

634 return sorted(set(__all__) | set(_LAZY_IMPORTS.keys())) 

635 

636 

637__all__ = list(_LAZY_IMPORTS)