loom-kernel 2.22.0__tar.gz → 2.22.2__tar.gz

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 (693) hide show
  1. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/CHANGELOG.md +91 -0
  2. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/PKG-INFO +1 -1
  3. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/_startup.py +14 -13
  4. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/a2a/_binding.py +7 -7
  5. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/_compiler.py +6 -6
  6. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_capabilities.py +104 -53
  7. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_conversation.py +17 -10
  8. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_hook.py +10 -9
  9. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_instructions.py +7 -7
  10. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_limits.py +13 -3
  11. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_model_role.py +2 -2
  12. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_output.py +24 -28
  13. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_state.py +19 -17
  14. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/config.py +100 -57
  15. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/declarative/__init__.py +16 -11
  16. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/declarative/_envelope.py +28 -15
  17. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_capabilities.py +18 -11
  18. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_instructions.py +9 -7
  19. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_mcp.py +8 -2
  20. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_models.py +8 -2
  21. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/provider.py +4 -2
  22. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/typesafe.py +6 -2
  23. loom_kernel-2.22.2/src/loom/ai/errors.py +946 -0
  24. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/registry.py +18 -13
  25. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/remote_auth.py +28 -17
  26. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_lifecycle.py +30 -17
  27. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_mcp.py +13 -9
  28. loom_kernel-2.22.2/src/loom/core/errors/codes.py +143 -0
  29. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_binding.py +11 -16
  30. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_compiler.py +10 -4
  31. loom_kernel-2.22.2/src/loom/etl/compiler/_errors.py +300 -0
  32. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_validators_agents.py +22 -16
  33. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_validators_config.py +6 -2
  34. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_validators_plan.py +20 -8
  35. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_validators_step.py +92 -83
  36. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/auto.py +4 -4
  37. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/openapi.py +27 -5
  38. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_adapter.py +3 -2
  39. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/runner.py +5 -2
  40. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/compiler/_bindings.py +9 -11
  41. loom_kernel-2.22.2/src/loom/streaming/compiler/_errors.py +240 -0
  42. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/compiler/_plan.py +3 -2
  43. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/compiler/phases/build_plan.py +11 -14
  44. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/compiler/phases/validate.py +121 -59
  45. loom_kernel-2.22.0/src/loom/ai/errors.py +0 -1693
  46. loom_kernel-2.22.0/src/loom/core/errors/codes.py +0 -41
  47. loom_kernel-2.22.0/src/loom/etl/compiler/_errors.py +0 -473
  48. loom_kernel-2.22.0/src/loom/streaming/compiler/_errors.py +0 -477
  49. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/.gitignore +0 -0
  50. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/LICENSE +0 -0
  51. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/README.md +0 -0
  52. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/pyproject.toml +0 -0
  53. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/__init__.py +0 -0
  54. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/__init__.py +0 -0
  55. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/_concurrency.py +0 -0
  56. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/_filters.py +0 -0
  57. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/_paths.py +0 -0
  58. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/_roles.py +0 -0
  59. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/_transport.py +0 -0
  60. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/_usecase.py +0 -0
  61. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/a2a/__init__.py +0 -0
  62. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/a2a/_handlers.py +0 -0
  63. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/a2a/_rpc.py +0 -0
  64. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/a2a/card.py +0 -0
  65. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/a2a/events.py +0 -0
  66. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/a2a/server.py +0 -0
  67. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/abc.py +0 -0
  68. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/bootstrap.py +0 -0
  69. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/__init__.py +0 -0
  70. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/_fingerprint.py +0 -0
  71. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/_plan.py +0 -0
  72. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/__init__.py +0 -0
  73. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_feedable.py +0 -0
  74. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/declarative/_schema.py +0 -0
  75. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/declarative/_v1.py +0 -0
  76. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
  77. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/describe.py +0 -0
  78. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/__init__.py +0 -0
  79. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
  80. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_a2a.py +0 -0
  81. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_engine.py +0 -0
  82. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
  83. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_escape.py +0 -0
  84. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
  85. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
  86. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_history.py +0 -0
  87. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_limits.py +0 -0
  88. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_native.py +0 -0
  89. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
  90. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
  91. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
  92. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
  93. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/extras/__init__.py +0 -0
  94. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/extras/a2a.py +0 -0
  95. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/extras/handlebars.py +0 -0
  96. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/extras/mcp.py +0 -0
  97. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/extras/skills.py +0 -0
  98. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/__init__.py +0 -0
  99. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/_shared.py +0 -0
  100. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/anthropic.py +0 -0
  101. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/bedrock.py +0 -0
  102. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/gateway.py +0 -0
  103. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/openai.py +0 -0
  104. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/etl/__init__.py +0 -0
  105. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/etl/_batch.py +0 -0
  106. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/etl/_columns.py +0 -0
  107. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/etl/_frames.py +0 -0
  108. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/etl/_ledger.py +0 -0
  109. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/etl/_runner.py +0 -0
  110. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/etl/_validation.py +0 -0
  111. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/fastapi/__init__.py +0 -0
  112. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/fastapi/endpoints.py +0 -0
  113. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/fastapi/response.py +0 -0
  114. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/fastapi/streaming.py +0 -0
  115. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/inference.py +0 -0
  116. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/pricing.py +0 -0
  117. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/__init__.py +0 -0
  118. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_bounded.py +0 -0
  119. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_chain.py +0 -0
  120. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_conversation.py +0 -0
  121. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_grants.py +0 -0
  122. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_handle.py +0 -0
  123. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_health.py +0 -0
  124. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_hooks.py +0 -0
  125. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_limits.py +0 -0
  126. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/validate/__init__.py +0 -0
  127. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/validate/__main__.py +0 -0
  128. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/celery/__init__.py +0 -0
  129. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/celery/auto.py +0 -0
  130. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/celery/bootstrap.py +0 -0
  131. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/celery/config.py +0 -0
  132. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/celery/constants.py +0 -0
  133. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/celery/runner.py +0 -0
  134. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/celery/service.py +0 -0
  135. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/cli/__init__.py +0 -0
  136. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/cli/app.py +0 -0
  137. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/cli/schema.py +0 -0
  138. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/async_bridge.py +0 -0
  139. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/authz/__init__.py +0 -0
  140. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/authz/_decide.py +0 -0
  141. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/authz/_grants.py +0 -0
  142. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/authz/_roles.py +0 -0
  143. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/authz/_scope.py +0 -0
  144. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/authz/elevation.py +0 -0
  145. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/authz/product.py +0 -0
  146. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/backend/__init__.py +0 -0
  147. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/backend/core_model.py +0 -0
  148. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/backend/protocol.py +0 -0
  149. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/backend/scoped_ddl.py +0 -0
  150. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/backend/sqlalchemy.py +0 -0
  151. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/bootstrap/__init__.py +0 -0
  152. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/bootstrap/bootstrap.py +0 -0
  153. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/bootstrap/kernel.py +0 -0
  154. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/__init__.py +0 -0
  155. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/_batching.py +0 -0
  156. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/_single_flight.py +0 -0
  157. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/abc/__init__.py +0 -0
  158. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/abc/backend.py +0 -0
  159. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/abc/config.py +0 -0
  160. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/abc/dependency.py +0 -0
  161. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/calls.py +0 -0
  162. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/codec.py +0 -0
  163. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/decorators.py +0 -0
  164. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/dependency.py +0 -0
  165. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/errors.py +0 -0
  166. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/gateway.py +0 -0
  167. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/keys.py +0 -0
  168. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/memory.py +0 -0
  169. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/repository.py +0 -0
  170. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/result_codec.py +0 -0
  171. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/serializer.py +0 -0
  172. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/wiring.py +0 -0
  173. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/command/__init__.py +0 -0
  174. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/command/adapter.py +0 -0
  175. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/command/base.py +0 -0
  176. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/command/field.py +0 -0
  177. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/command/introspection.py +0 -0
  178. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/compiler.py +0 -0
  179. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/__init__.py +0 -0
  180. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/_boto3.py +0 -0
  181. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/_includes.py +0 -0
  182. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/_resolver_utils.py +0 -0
  183. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/binder.py +0 -0
  184. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/configurable.py +0 -0
  185. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/context.py +0 -0
  186. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/errors.py +0 -0
  187. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/keys.py +0 -0
  188. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/loader.py +0 -0
  189. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/model.py +0 -0
  190. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/observability.py +0 -0
  191. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/resolver.py +0 -0
  192. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/secrets.py +0 -0
  193. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/ssm.py +0 -0
  194. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/contracts/__init__.py +0 -0
  195. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/contracts/manifest.py +0 -0
  196. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/di/__init__.py +0 -0
  197. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/di/container.py +0 -0
  198. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/di/scope.py +0 -0
  199. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/discovery/__init__.py +0 -0
  200. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/discovery/_utils.py +0 -0
  201. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/discovery/base.py +0 -0
  202. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/discovery/interfaces.py +0 -0
  203. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/discovery/manifest.py +0 -0
  204. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/discovery/modules.py +0 -0
  205. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/engine/__init__.py +0 -0
  206. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/engine/compilable.py +0 -0
  207. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/engine/compiler.py +0 -0
  208. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/engine/events.py +0 -0
  209. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/engine/executor.py +0 -0
  210. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/engine/metrics.py +0 -0
  211. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/engine/plan.py +0 -0
  212. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/engine/post_commit.py +0 -0
  213. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/errors/__init__.py +0 -0
  214. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/errors/errors.py +0 -0
  215. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/expr/__init__.py +0 -0
  216. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/expr/eval.py +0 -0
  217. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/expr/nodes.py +0 -0
  218. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/expr/refs.py +0 -0
  219. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/identity/__init__.py +0 -0
  220. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/identity/context.py +0 -0
  221. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/identity/identity.py +0 -0
  222. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/identity/issuer.py +0 -0
  223. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/identity/wire.py +0 -0
  224. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/introspection/__init__.py +0 -0
  225. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/introspection/base.py +0 -0
  226. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/introspection/describe.py +0 -0
  227. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/job/__init__.py +0 -0
  228. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/job/callback.py +0 -0
  229. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/job/context.py +0 -0
  230. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/job/handle.py +0 -0
  231. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/job/job.py +0 -0
  232. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/job/service.py +0 -0
  233. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/locator.py +0 -0
  234. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/logger/__init__.py +0 -0
  235. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/logger/abc.py +0 -0
  236. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/logger/config.py +0 -0
  237. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/logger/registry.py +0 -0
  238. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/logger/structlogger.py +0 -0
  239. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/__init__.py +0 -0
  240. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/_json_schema.py +0 -0
  241. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/_loom_type.py +0 -0
  242. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/base.py +0 -0
  243. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/convert.py +0 -0
  244. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/enums.py +0 -0
  245. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/field.py +0 -0
  246. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/introspection.py +0 -0
  247. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/partition.py +0 -0
  248. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/privilege.py +0 -0
  249. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/projection.py +0 -0
  250. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/relation.py +0 -0
  251. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/scoped.py +0 -0
  252. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/struct.py +0 -0
  253. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/timestamped.py +0 -0
  254. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/types.py +0 -0
  255. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/types_postgres.py +0 -0
  256. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/__init__.py +0 -0
  257. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/config.py +0 -0
  258. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/event.py +0 -0
  259. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/observer/__init__.py +0 -0
  260. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/observer/noop.py +0 -0
  261. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/observer/otel.py +0 -0
  262. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/observer/structlog.py +0 -0
  263. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/otel_ids.py +0 -0
  264. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/protocol.py +0 -0
  265. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/runtime.py +0 -0
  266. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/span.py +0 -0
  267. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/topology.py +0 -0
  268. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/persistence/__init__.py +0 -0
  269. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/persistence/abc.py +0 -0
  270. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/persistence/none.py +0 -0
  271. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/persistence/registry.py +0 -0
  272. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/plugins/__init__.py +0 -0
  273. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/plugins/entrypoints.py +0 -0
  274. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/plugins/optional.py +0 -0
  275. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/projection/__init__.py +0 -0
  276. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/projection/loaders.py +0 -0
  277. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/projection/runtime.py +0 -0
  278. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/__init__.py +0 -0
  279. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/abc/__init__.py +0 -0
  280. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/abc/cursor.py +0 -0
  281. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/abc/errors.py +0 -0
  282. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/abc/query.py +0 -0
  283. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/abc/query_compiler.py +0 -0
  284. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/abc/repo_for.py +0 -0
  285. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/abc/repository.py +0 -0
  286. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/abc/session_scope.py +0 -0
  287. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/dynamodb/__init__.py +0 -0
  288. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/dynamodb/backend.py +0 -0
  289. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/dynamodb/registry.py +0 -0
  290. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/dynamodb/repository.py +0 -0
  291. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/dynamodb/uow.py +0 -0
  292. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/__init__.py +0 -0
  293. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/backend.py +0 -0
  294. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/ids.py +0 -0
  295. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/query_compiler.py +0 -0
  296. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/registry.py +0 -0
  297. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/repository.py +0 -0
  298. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/uow.py +0 -0
  299. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/values.py +0 -0
  300. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mutation.py +0 -0
  301. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/registration.py +0 -0
  302. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/registry.py +0 -0
  303. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
  304. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/backend.py +0 -0
  305. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
  306. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
  307. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/migrations/__init__.py +0 -0
  308. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/migrations/env_template.py +0 -0
  309. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/migrations/hook.py +0 -0
  310. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/migrations/operations.py +0 -0
  311. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/migrations/runners.py +0 -0
  312. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
  313. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/model.py +0 -0
  314. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
  315. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
  316. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
  317. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
  318. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
  319. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
  320. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
  321. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
  322. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
  323. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
  324. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
  325. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
  326. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/__init__.py +0 -0
  327. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/bootstrap.py +0 -0
  328. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/config.py +0 -0
  329. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/elevate.py +0 -0
  330. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/guard/0001.sql +0 -0
  331. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/guard/0002.sql +0 -0
  332. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/guard/preflight.sql +0 -0
  333. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/guard_manifest.py +0 -0
  334. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/integrity.py +0 -0
  335. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/partitions.py +0 -0
  336. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/provider.py +0 -0
  337. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/schema.py +0 -0
  338. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/sources.py +0 -0
  339. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/verify.py +0 -0
  340. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/session_manager.py +0 -0
  341. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/session_settings.py +0 -0
  342. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
  343. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
  344. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/response/__init__.py +0 -0
  345. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/response/base.py +0 -0
  346. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/routing/__init__.py +0 -0
  347. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/routing/ref.py +0 -0
  348. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/routing/resolver.py +0 -0
  349. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/runner.py +0 -0
  350. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/schema/__init__.py +0 -0
  351. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/schema/schema_mode.py +0 -0
  352. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/schema_names.py +0 -0
  353. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/__init__.py +0 -0
  354. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/abc/__init__.py +0 -0
  355. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/abc/contracts.py +0 -0
  356. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/abc/errors.py +0 -0
  357. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/caller_bound.py +0 -0
  358. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/clickhouse/__init__.py +0 -0
  359. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/clickhouse/_client.py +0 -0
  360. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/clickhouse/executor.py +0 -0
  361. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/clickhouse/registry.py +0 -0
  362. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/config.py +0 -0
  363. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/roles.py +0 -0
  364. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/service.py +0 -0
  365. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/symbols.py +0 -0
  366. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/tracing/__init__.py +0 -0
  367. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/tracing/context.py +0 -0
  368. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/transaction.py +0 -0
  369. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/transport/__init__.py +0 -0
  370. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/transport/adapter.py +0 -0
  371. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/uow/__init__.py +0 -0
  372. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/uow/abc.py +0 -0
  373. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/uow/context.py +0 -0
  374. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/__init__.py +0 -0
  375. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/_predicates.py +0 -0
  376. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/agent_markers.py +0 -0
  377. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/compute.py +0 -0
  378. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/constants.py +0 -0
  379. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/factory.py +0 -0
  380. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/field_ref.py +0 -0
  381. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/invoker.py +0 -0
  382. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/keys.py +0 -0
  383. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/markers.py +0 -0
  384. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/mcp_markers.py +0 -0
  385. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/outcome.py +0 -0
  386. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/registry.py +0 -0
  387. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/rule.py +0 -0
  388. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/use_case.py +0 -0
  389. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/__init__.py +0 -0
  390. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/_uri.py +0 -0
  391. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/__init__.py +0 -0
  392. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_format_registry.py +0 -0
  393. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/__init__.py +0 -0
  394. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/_common.py +0 -0
  395. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/_log.py +0 -0
  396. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/_ops.py +0 -0
  397. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
  398. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/_transform.py +0 -0
  399. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_merge.py +0 -0
  400. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_path_template.py +0 -0
  401. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_predicate.py +0 -0
  402. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
  403. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
  404. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
  405. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_write_policy.py +0 -0
  406. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/__init__.py +0 -0
  407. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_dtype.py +0 -0
  408. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_file_writer.py +0 -0
  409. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_frame.py +0 -0
  410. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_historify.py +0 -0
  411. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_predicate.py +0 -0
  412. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_reader.py +0 -0
  413. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_schema.py +0 -0
  414. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
  415. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_streaming.py +0 -0
  416. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_writer.py +0 -0
  417. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/provider.py +0 -0
  418. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/__init__.py +0 -0
  419. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_dtype.py +0 -0
  420. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_historify.py +0 -0
  421. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_reader.py +0 -0
  422. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_schema.py +0 -0
  423. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
  424. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_writer.py +0 -0
  425. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/provider.py +0 -0
  426. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/__init__.py +0 -0
  427. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
  428. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
  429. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_cleaners.py +0 -0
  430. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_options.py +0 -0
  431. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_paths.py +0 -0
  432. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_scope.py +0 -0
  433. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_store.py +0 -0
  434. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/__init__.py +0 -0
  435. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_filter.py +0 -0
  436. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_plan.py +0 -0
  437. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_validators.py +0 -0
  438. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/__init__.py +0 -0
  439. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/_format.py +0 -0
  440. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/_read_options.py +0 -0
  441. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/_utils.py +0 -0
  442. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/_with_agent.py +0 -0
  443. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/_write_options.py +0 -0
  444. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/expr/__init__.py +0 -0
  445. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/expr/_params.py +0 -0
  446. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/expr/_predicate.py +0 -0
  447. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
  448. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/expr/_refs.py +0 -0
  449. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/__init__.py +0 -0
  450. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_from.py +0 -0
  451. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
  452. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_from_config.py +0 -0
  453. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
  454. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
  455. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_specs.py +0 -0
  456. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/__init__.py +0 -0
  457. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_client.py +0 -0
  458. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_errors.py +0 -0
  459. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_file.py +0 -0
  460. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
  461. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
  462. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
  463. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
  464. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/_report.py +0 -0
  465. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
  466. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_into.py +0 -0
  467. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
  468. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_table.py +0 -0
  469. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_temp.py +0 -0
  470. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/executor/__init__.py +0 -0
  471. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/executor/_agents.py +0 -0
  472. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/executor/_dispatcher.py +0 -0
  473. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/executor/_executor.py +0 -0
  474. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/__init__.py +0 -0
  475. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/_registry.py +0 -0
  476. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/__init__.py +0 -0
  477. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_clickhouse.py +0 -0
  478. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_dynamodb.py +0 -0
  479. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
  480. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
  481. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_mongo.py +0 -0
  482. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
  483. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
  484. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
  485. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_serialization.py +0 -0
  486. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/targets/__init__.py +0 -0
  487. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/targets/_clickhouse.py +0 -0
  488. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/lineage/__init__.py +0 -0
  489. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/lineage/_config.py +0 -0
  490. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/lineage/_observer.py +0 -0
  491. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/lineage/_records.py +0 -0
  492. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/lineage/sinks/__init__.py +0 -0
  493. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
  494. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/lineage/sinks/_table.py +0 -0
  495. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/lineage/sinks/_writer.py +0 -0
  496. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/maintenance/__init__.py +0 -0
  497. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/maintenance/_builder.py +0 -0
  498. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/maintenance/_ops.py +0 -0
  499. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/maintenance/_protocol.py +0 -0
  500. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/maintenance/_runner.py +0 -0
  501. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/maintenance/_step.py +0 -0
  502. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/maintenance/backends/__init__.py +0 -0
  503. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
  504. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/__init__.py +0 -0
  505. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_generics.py +0 -0
  506. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_params.py +0 -0
  507. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_pipeline.py +0 -0
  508. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_process.py +0 -0
  509. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_sql.py +0 -0
  510. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_step.py +0 -0
  511. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_step_client.py +0 -0
  512. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_step_sql.py +0 -0
  513. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runner/__init__.py +0 -0
  514. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runner/_agents.py +0 -0
  515. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runner/_providers.py +0 -0
  516. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runner/_wiring.py +0 -0
  517. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runner/config_loader.py +0 -0
  518. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runner/core.py +0 -0
  519. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runner/errors.py +0 -0
  520. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runner/filtering.py +0 -0
  521. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runtime/__init__.py +0 -0
  522. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runtime/_config_values.py +0 -0
  523. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runtime/contracts.py +0 -0
  524. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/schema/__init__.py +0 -0
  525. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/schema/_contract.py +0 -0
  526. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/schema/_schema.py +0 -0
  527. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/storage/__init__.py +0 -0
  528. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/storage/_config.py +0 -0
  529. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/storage/_file_locator.py +0 -0
  530. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/storage/_locator.py +0 -0
  531. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/storage/routing.py +0 -0
  532. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/testing/__init__.py +0 -0
  533. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/testing/_result.py +0 -0
  534. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/testing/_runners.py +0 -0
  535. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/testing/_scenario.py +0 -0
  536. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/testing/_stubs.py +0 -0
  537. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/testing/spark.py +0 -0
  538. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/__init__.py +0 -0
  539. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/_async.py +0 -0
  540. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/_config.py +0 -0
  541. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/_ctx.py +0 -0
  542. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/_flow_yaml.py +0 -0
  543. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/_meta.py +0 -0
  544. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/_placeholders.py +0 -0
  545. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/_summary.py +0 -0
  546. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/deploy/__init__.py +0 -0
  547. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/deploy/_discovery.py +0 -0
  548. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/deploy/_schedule.py +0 -0
  549. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/deploy/_yaml_etls.py +0 -0
  550. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/deploy/entrypoint.py +0 -0
  551. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/__init__.py +0 -0
  552. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_assemble.py +0 -0
  553. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_backfill.py +0 -0
  554. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_backfill_body.py +0 -0
  555. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_body.py +0 -0
  556. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_common.py +0 -0
  557. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_factory.py +0 -0
  558. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_hooks.py +0 -0
  559. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_maintenance.py +0 -0
  560. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_params.py +0 -0
  561. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_run_name.py +0 -0
  562. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_runtime.py +0 -0
  563. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_signature.py +0 -0
  564. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_stages.py +0 -0
  565. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/manifest/__init__.py +0 -0
  566. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/manifest/_model.py +0 -0
  567. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/manifest/_s3.py +0 -0
  568. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/manifest/_store.py +0 -0
  569. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/notify/__init__.py +0 -0
  570. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/notify/_event.py +0 -0
  571. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/notify/_factory.py +0 -0
  572. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/notify/_format.py +0 -0
  573. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/notify/_port.py +0 -0
  574. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/notify/_slack.py +0 -0
  575. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/notify/_sns.py +0 -0
  576. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/observer/__init__.py +0 -0
  577. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/observer/_flow.py +0 -0
  578. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/observer/_logging_bridge.py +0 -0
  579. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/observer/_manifest.py +0 -0
  580. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/observer/_task_run.py +0 -0
  581. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prometheus/__init__.py +0 -0
  582. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prometheus/_instruments.py +0 -0
  583. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prometheus/adapter.py +0 -0
  584. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prometheus/kafka.py +0 -0
  585. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prometheus/lifecycle.py +0 -0
  586. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prometheus/middleware.py +0 -0
  587. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/py.typed +0 -0
  588. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/__init__.py +0 -0
  589. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/_body.py +0 -0
  590. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/adapter.py +0 -0
  591. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/auth/__init__.py +0 -0
  592. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/auth/abc.py +0 -0
  593. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/auth/config.py +0 -0
  594. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/auth/jwt.py +0 -0
  595. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/auth/middleware.py +0 -0
  596. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/autocrud.py +0 -0
  597. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/compiler.py +0 -0
  598. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/config.py +0 -0
  599. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/constants.py +0 -0
  600. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/cors.py +0 -0
  601. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/errors.py +0 -0
  602. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/__init__.py +0 -0
  603. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/_errors.py +0 -0
  604. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/_exclusions.py +0 -0
  605. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/app.py +0 -0
  606. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/health.py +0 -0
  607. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/response.py +0 -0
  608. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/router_runtime.py +0 -0
  609. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/sql.py +0 -0
  610. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/middleware.py +0 -0
  611. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/model.py +0 -0
  612. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/rest_adapter.py +0 -0
  613. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/__init__.py +0 -0
  614. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/__init__.py +0 -0
  615. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
  616. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
  617. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_dlq.py +0 -0
  618. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
  619. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_errors.py +0 -0
  620. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_operators.py +0 -0
  621. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
  622. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
  623. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
  624. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
  625. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
  626. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
  627. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
  628. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
  629. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
  630. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
  631. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
  632. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
  633. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/compiler/__init__.py +0 -0
  634. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/compiler/_compiler.py +0 -0
  635. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/core/__init__.py +0 -0
  636. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/core/_errors.py +0 -0
  637. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/core/_exceptions.py +0 -0
  638. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/core/_message.py +0 -0
  639. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/core/_tracing.py +0 -0
  640. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/core/_typing.py +0 -0
  641. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/graph/__init__.py +0 -0
  642. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/graph/_flow.py +0 -0
  643. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/__init__.py +0 -0
  644. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_codec.py +0 -0
  645. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_config.py +0 -0
  646. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_errors.py +0 -0
  647. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_key_resolver.py +0 -0
  648. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_message.py +0 -0
  649. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_record.py +0 -0
  650. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_wire.py +0 -0
  651. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/client/__init__.py +0 -0
  652. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/client/_consumer.py +0 -0
  653. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/client/_producer.py +0 -0
  654. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/client/_protocol.py +0 -0
  655. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/client/_retry.py +0 -0
  656. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/message/__init__.py +0 -0
  657. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/message/_consumer.py +0 -0
  658. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/message/_producer.py +0 -0
  659. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/message/_protocol.py +0 -0
  660. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/mongo/__init__.py +0 -0
  661. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
  662. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/mongo/_config.py +0 -0
  663. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/mongo/_event.py +0 -0
  664. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/mongo/_normalize.py +0 -0
  665. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/__init__.py +0 -0
  666. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_boundary.py +0 -0
  667. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_branches.py +0 -0
  668. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_broadcast.py +0 -0
  669. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_capabilities.py +0 -0
  670. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_decompose.py +0 -0
  671. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_expand_routes.py +0 -0
  672. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_expr_eval.py +0 -0
  673. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_fork.py +0 -0
  674. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_helpers.py +0 -0
  675. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_mongo.py +0 -0
  676. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_protocols.py +0 -0
  677. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_router.py +0 -0
  678. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_shape.py +0 -0
  679. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_sink.py +0 -0
  680. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_step.py +0 -0
  681. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_table/__init__.py +0 -0
  682. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_table/common.py +0 -0
  683. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_table/config.py +0 -0
  684. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_with.py +0 -0
  685. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/refs.py +0 -0
  686. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/testing.py +0 -0
  687. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/testing/__init__.py +0 -0
  688. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/testing/agents.py +0 -0
  689. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/testing/golden.py +0 -0
  690. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/testing/http_harness.py +0 -0
  691. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/testing/in_memory.py +0 -0
  692. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/testing/repository_harness.py +0 -0
  693. {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/testing/runner.py +0 -0
@@ -88,6 +88,18 @@
88
88
  naming a scalar leaf (`"api.token"`) and convert that value; before, they
89
89
  failed on anything but a mapping.
90
90
 
91
+ - **core:** compile-issue catalogues as data (ADR 0003, part B).
92
+ `loom.core.errors.codes` gains `IssueCode`, `Template` and `CompileIssue`.
93
+ An `IssueCode` member is declared as `NAME = "NAME", Template(text,
94
+ field=..., component=...)`, and `Code.NAME.issue(**params)` builds its
95
+ `CompileIssue` (`code`, `message`, `component`, `field`). Each part of the
96
+ template is a `str.format` template. A sequence parameter is joined with
97
+ `", "` and renders `none` when empty, a set is ordered by the text of its
98
+ items, and a type renders as its `__qualname__`. A missing or unknown
99
+ parameter raises a `TypeError` naming the code. `AgentErrorCode`,
100
+ `StreamingErrorCode` and `ETLErrorCode` are such catalogues, and
101
+ `ETLCompilationError.from_issue(issue)` raises the ETL error for an issue.
102
+
91
103
  ### ai
92
104
 
93
105
  - **ai:** `AiConfig` logs a warning for every key of `ai.prices` that no
@@ -493,6 +505,24 @@
493
505
 
494
506
  ### ai
495
507
 
508
+ - **ai:** compile issues come from the code catalogue, and the 89 issue
509
+ factory functions of `loom.ai.errors` are removed, without aliases: for
510
+ example `spec_malformed`, `engine_not_found` and `mcp_server_unreachable`.
511
+ Build an issue with `AgentErrorCode.X.issue(...)` and keyword arguments,
512
+ such as `AgentErrorCode.ENGINE_NOT_FOUND.issue(component="openai-agents",
513
+ available=["pydantic-ai"])`. `loom.ai.errors.from_message` is removed too:
514
+ `AgentCompilationError` still turns a bare string into an `UNSPECIFIED`
515
+ issue. Messages keep their text; a list that is empty renders `none`.
516
+ - **ai:** `AgentCompilationIssue` is a type alias of
517
+ `CompileIssue[AgentErrorCode]` from `loom.core.errors.codes`, not a class.
518
+ It has the same fields, but `isinstance` against it raises `TypeError`
519
+ (check `CompileIssue` instead), and it no longer derives from
520
+ `LoomFrozenStruct`, so `loom_message_type()` is gone.
521
+ - **ai:** an `Mcp()` include filter on a use case that matches no tool aborts
522
+ start-up with the new code `USECASE_TOOL_FILTER_MATCHES_NOTHING` instead of
523
+ `TOOL_FILTER_MATCHES_NOTHING`, which is now raised only by an agent
524
+ artifact's filter. The message and the `parameters.<name>` field are
525
+ unchanged.
496
526
  - **ai:** `AgentPlan.fingerprint`, and so the ETL `agent_version` column,
497
527
  changes once for every existing agent. It no longer covers any policy, so
498
528
  changing `retries`, a timeout, `max_iterations`, `max_tool_calls`,
@@ -646,6 +676,25 @@
646
676
 
647
677
  ### etl
648
678
 
679
+ - **etl:** compile errors come from the code catalogue, and the 34
680
+ class-method factories of `ETLCompilationError` are removed, without
681
+ aliases: for example `upsert_no_keys`, `missing_target` and
682
+ `unknown_source_table`. Raise
683
+ `ETLCompilationError.from_issue(ETLErrorCode.X.issue(...))`; the
684
+ `ETLCompilationError(code, component, message, field)` constructor is
685
+ unchanged. Messages keep their text.
686
+ - **etl:** each `IntoHistory` compile check has its own code instead of
687
+ `INVALID_TARGET_TYPE`: `HISTORIFY_KEYS_EMPTY`, `HISTORIFY_KEYS_TRACK_OVERLAP`,
688
+ `HISTORIFY_EFFECTIVE_DATE_IN_TRACK`, `HISTORIFY_BOUNDARY_IN_KEYS`,
689
+ `HISTORIFY_BOUNDARY_IN_TRACK`, `HISTORIFY_LOG_EFFECTIVE_DATE_NOT_COLUMN`,
690
+ `HISTORIFY_DELETE_MARKER_REQUIRES_LOG` and
691
+ `HISTORIFY_DELETE_MARKER_DECLARED_COLUMN`. Messages and fields are unchanged;
692
+ code that matched `INVALID_TARGET_TYPE` for these checks must match the new
693
+ codes. `INVALID_TARGET_TYPE` now means only a `target` that is not an
694
+ `IntoTable`, `IntoFile` or `IntoTemp`.
695
+ - **etl:** `ETLErrorCode.INVALID_SOURCES_TYPE` is removed. No step could raise
696
+ it: a step's sources are grouped only when `sources` is a `Sources` or a
697
+ `SourceSet`, and both are valid.
649
698
  - **etl:** a `WithAgent` compiled by a runner whose config has no `ai:`
650
699
  section fails with the new code `AGENT_RUNNER_NOT_CONFIGURED` instead of
651
700
  `AGENT_NOT_FOUND`, which now means only that no artifact declares the name.
@@ -692,6 +741,20 @@
692
741
  `sNaN` used to raise `decimal.InvalidOperation`, and a `Decimal`
693
742
  `Infinity`, a `float` `inf` and a `float` `nan` were accepted.
694
743
 
744
+ ### streaming
745
+
746
+ - **streaming:** compile issues come from the code catalogue
747
+ (`StreamingErrorCode.X.issue(...)`), and the compiler's private issue
748
+ factories are removed. `loom.streaming.compiler.CompilationIssue` is a type
749
+ alias of `CompileIssue[StreamingErrorCode]`, not a class: it has the same
750
+ fields, but `isinstance` against it raises `TypeError` (check
751
+ `CompileIssue` instead), `loom_message_type()` is gone, and
752
+ `CompilationIssue.prefixed()` is removed. Messages keep their text.
753
+ - **streaming:** a `Broadcast` followed by another node reports
754
+ `BROADCAST_NOT_LAST` with component `broadcast`, at the top level, in a
755
+ branch and in a Router branch. It used to report `TERMINAL_NOT_LAST` with
756
+ component `Broadcast`.
757
+
695
758
  ## 🐛 Fixes
696
759
 
697
760
  ### core
@@ -908,6 +971,34 @@
908
971
  and cause are logged at `WARNING`, never sent. `ErrorCode` gains
909
972
  `SERVICE_UNAVAILABLE`, which `HttpErrorMapper` maps to `503`. Any other
910
973
  exception from the authenticator, and the `401` refusal, are unchanged.
974
+ - **rest:** the OpenAPI document of a route whose request or response holds a
975
+ tagged union published `discriminator.mapping` values as `#/$defs/<Name>`,
976
+ which the document does not contain, while each `$ref` already pointed at
977
+ `#/components/schemas/<Name>`, so code generators and OpenAPI validators
978
+ could not resolve them. Mapping values now follow the same rewrite as
979
+ `$ref` wherever they occur, for msgspec tagged structs and pydantic
980
+ discriminated unions alike, an optional (`X | Y | None`) union included.
981
+
982
+ ### streaming
983
+
984
+ - **streaming:** a `Broadcast` is validated as a `Broadcast`. The compiler
985
+ treated it as a plain terminal, so the nodes of its branches were never
986
+ shape-checked. A branch with a shape mismatch, such as a record step after
987
+ `CollectBatch`, now fails compilation with `SHAPE_MISMATCH` scoped under
988
+ `broadcast branch <n>`; such flows used to compile. The code a misplaced
989
+ `Broadcast` reports is under Behaviour changes.
990
+ - **streaming:** a bare `ErrorEnvelope` among the `payloads` of
991
+ `FromMultiTypeTopic` is refused with `ERROR_ENVELOPE_UNPARAMETERIZED`. The
992
+ check only matched `ErrorEnvelope[X]`, which always has a parameter, so the
993
+ bare class compiled as a plain payload and its messages never reached the
994
+ error dispatch. Declare `ErrorEnvelope[OrderEvent]` instead; such flows used
995
+ to compile.
996
+ - **streaming:** an `ExpandRoutes` is validated. Its routes were never
997
+ shape-checked and nothing stopped a node from following it, although the
998
+ node is terminal and hands the expanded payloads, not rows, to whatever
999
+ follows. Each route is now checked on the record stream it receives, with
1000
+ issues scoped under `expand_routes branch <type>`, and a node after an
1001
+ `ExpandRoutes` fails with `TERMINAL_NOT_LAST`; such flows used to compile.
911
1002
 
912
1003
  ### prefect
913
1004
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: loom-kernel
3
- Version: 2.22.0
3
+ Version: 2.22.2
4
4
  Summary: Loom Python project
5
5
  License-File: LICENSE
6
6
  Classifier: Programming Language :: Python :: 3
@@ -25,13 +25,7 @@ from typing import get_args
25
25
 
26
26
  from loom.ai.compiler import AgentPlan
27
27
  from loom.ai.config import McpServerConfig
28
- from loom.ai.errors import (
29
- AgentCompilationError,
30
- AgentCompilationIssue,
31
- agent_marker_output_mismatch,
32
- agent_marker_unknown,
33
- mcp_marker_unknown,
34
- )
28
+ from loom.ai.errors import AgentCompilationError, AgentCompilationIssue, AgentErrorCode
35
29
  from loom.core.engine.compilable import Compilable
36
30
  from loom.core.engine.plan import AgentBinding, McpBinding
37
31
  from loom.core.use_case.registry import UseCaseRegistry
@@ -85,7 +79,9 @@ def _agent_binding_issues(
85
79
  for binding in agent_bindings:
86
80
  agent_plan = plans_by_name.get(binding.agent)
87
81
  if agent_plan is None:
88
- yield agent_marker_unknown(uc_name, binding.name, binding.agent, available)
82
+ yield AgentErrorCode.AGENT_MARKER_UNKNOWN.issue(
83
+ component=uc_name, parameter=binding.name, agent=binding.agent, available=available
84
+ )
89
85
  continue
90
86
  expected_args = get_args(binding.annotation)
91
87
  if not expected_args:
@@ -97,10 +93,10 @@ def _agent_binding_issues(
97
93
  declared = agent_plan.output.loom_type.type
98
94
  if expected is declared:
99
95
  continue
100
- yield agent_marker_output_mismatch(
101
- uc_name,
102
- binding.name,
103
- binding.agent,
96
+ yield AgentErrorCode.AGENT_MARKER_OUTPUT_MISMATCH.issue(
97
+ component=uc_name,
98
+ parameter=binding.name,
99
+ agent=binding.agent,
104
100
  expected=getattr(expected, "__name__", str(expected)),
105
101
  declared=getattr(declared, "__name__", str(declared)),
106
102
  )
@@ -159,7 +155,12 @@ def _mcp_binding_issues(
159
155
  available = tuple(servers)
160
156
  for binding in mcp_bindings:
161
157
  if binding.server not in servers:
162
- yield mcp_marker_unknown(uc_name, binding.name, binding.server, available)
158
+ yield AgentErrorCode.MCP_MARKER_UNKNOWN.issue(
159
+ component=uc_name,
160
+ parameter=binding.name,
161
+ server=binding.server,
162
+ available=available,
163
+ )
163
164
 
164
165
 
165
166
  __all__ = ["verify_agent_markers", "verify_mcp_markers"]
@@ -25,11 +25,7 @@ from starlette.middleware import Middleware
25
25
  from loom.ai.a2a.card import build_agent_card, card_path
26
26
  from loom.ai.compiler import AgentPlan
27
27
  from loom.ai.config import AgentEndpointConfig, AiConfig
28
- from loom.ai.errors import (
29
- AgentCompilationError,
30
- auth_exclusion_overlaps_agents,
31
- state_surface_unsupported,
32
- )
28
+ from loom.ai.errors import AgentCompilationError, AgentErrorCode
33
29
  from loom.ai.fastapi.response import ENCODER
34
30
  from loom.ai.runtime import AgentRuntime
35
31
  from loom.core.config.errors import ConfigError
@@ -98,7 +94,9 @@ def published_agents(
98
94
  )
99
95
  continue
100
96
  if plan.state is not None:
101
- raise AgentCompilationError([state_surface_unsupported(name, "a2a")])
97
+ raise AgentCompilationError(
98
+ [AgentErrorCode.STATE_SURFACE_UNSUPPORTED.issue(component=name, surface="a2a")]
99
+ )
102
100
  card = ENCODER.encode(build_agent_card(plan, a2a, mechanism=mechanism, prefix=prefix))
103
101
  published.append(
104
102
  PublishedAgent(
@@ -180,7 +178,9 @@ def verify_exclusions(
180
178
  and any(path == root or path.startswith(f"{root}/") for root in guarded)
181
179
  ]
182
180
  if offending:
183
- raise AgentCompilationError([auth_exclusion_overlaps_agents(offending)])
181
+ raise AgentCompilationError(
182
+ [AgentErrorCode.AUTH_EXCLUSION_OVERLAPS_AGENTS.issue(paths=offending)]
183
+ )
184
184
 
185
185
 
186
186
  def _is_auth_middleware(entry: Middleware) -> bool:
@@ -31,11 +31,7 @@ from loom.ai.compiler.phases._output import compile_output, compile_output_check
31
31
  from loom.ai.compiler.phases._state import compile_state
32
32
  from loom.ai.config import AiConfig
33
33
  from loom.ai.declarative import AgentSpecV1, DecodedSpec
34
- from loom.ai.errors import (
35
- AgentCompilationError,
36
- AgentCompilationIssue,
37
- agent_name_duplicate,
38
- )
34
+ from loom.ai.errors import AgentCompilationError, AgentCompilationIssue, AgentErrorCode
39
35
  from loom.ai.inference import InferenceTarget
40
36
  from loom.ai.pricing import ModelPrice
41
37
  from loom.core.sql.config import SqlConfig
@@ -240,4 +236,8 @@ def _duplicate_name_issues(
240
236
  sources: dict[str, list[str]] = defaultdict(list)
241
237
  for spec, source_path in entries:
242
238
  sources[spec.name].append(source_path if source_path is not None else _UNNAMED_SOURCE)
243
- return [agent_name_duplicate(name, paths) for name, paths in sources.items() if len(paths) > 1]
239
+ return [
240
+ AgentErrorCode.AGENT_NAME_DUPLICATE.issue(component=name, sources=paths)
241
+ for name, paths in sources.items()
242
+ if len(paths) > 1
243
+ ]
@@ -46,31 +46,7 @@ from loom.ai.declarative import (
46
46
  SqlCapability,
47
47
  UsecaseCapability,
48
48
  )
49
- from loom.ai.errors import (
50
- AgentCompilationError,
51
- AgentCompilationIssue,
52
- a2a_agent_unknown,
53
- anonymous_with_data_capability,
54
- capability_empty,
55
- capability_kind_unsupported,
56
- mcp_server_unknown,
57
- native_tool_duplicate,
58
- native_tool_unsupported,
59
- python_factory_not_callable,
60
- python_factory_params_rejected,
61
- python_factory_unresolvable,
62
- skills_library_escapes,
63
- skills_library_invalid,
64
- skills_name_collision,
65
- skills_root_missing,
66
- sql_config_missing,
67
- sql_connection_not_readonly,
68
- sql_connection_roles_unbound,
69
- sql_connection_unknown,
70
- sql_result_bound_missing,
71
- usecase_declares_query,
72
- usecase_key_unknown,
73
- )
49
+ from loom.ai.errors import AgentCompilationError, AgentCompilationIssue, AgentErrorCode
74
50
  from loom.ai.inference import InferenceTarget
75
51
  from loom.core.engine.compilable import Compilable
76
52
  from loom.core.sql.config import SqlConfig, roles_need_identity_binding
@@ -171,10 +147,16 @@ def compile_capabilities(
171
147
  for capability in spec.capabilities:
172
148
  kind = str(capability.__struct_config__.tag)
173
149
  if kind not in supported_kinds:
174
- issues.append(capability_kind_unsupported(component, kind, config.engine))
150
+ issues.append(
151
+ AgentErrorCode.CAPABILITY_KIND_UNSUPPORTED.issue(
152
+ component=component, kind=kind, engine=config.engine
153
+ )
154
+ )
175
155
  continue
176
156
  if context.anonymous and kind in _DATA_OR_REMOTE_KINDS:
177
- issues.append(anonymous_with_data_capability(component, kind))
157
+ issues.append(
158
+ AgentErrorCode.ANONYMOUS_WITH_DATA_CAPABILITY.issue(component=component, kind=kind)
159
+ )
178
160
  item, item_issues = _HANDLERS[type(capability)](capability, context)
179
161
  issues.extend(item_issues)
180
162
  if item is not None:
@@ -195,7 +177,11 @@ def _native_duplicate_issues(
195
177
  if not isinstance(capability, CompiledNativeCapability):
196
178
  continue
197
179
  if capability.tool in seen:
198
- issues.append(native_tool_duplicate(component, capability.tool))
180
+ issues.append(
181
+ AgentErrorCode.NATIVE_TOOL_DUPLICATE.issue(
182
+ component=component, tool=capability.tool
183
+ )
184
+ )
199
185
  continue
200
186
  seen.add(capability.tool)
201
187
  return issues
@@ -214,7 +200,14 @@ def _skill_collision_issues(
214
200
  for name in capability.names:
215
201
  first = owner.setdefault(name, capability.library)
216
202
  if first != capability.library:
217
- issues.append(skills_name_collision(component, name, first, capability.library))
203
+ issues.append(
204
+ AgentErrorCode.SKILLS_NAME_COLLISION.issue(
205
+ component=component,
206
+ skill=name,
207
+ first_library=first,
208
+ second_library=capability.library,
209
+ )
210
+ )
218
211
  return issues
219
212
 
220
213
 
@@ -230,11 +223,15 @@ def _compile_usecase(capability: UsecaseCapability, context: _Context) -> _Handl
230
223
  try:
231
224
  use_case = context.registry.resolve(key)
232
225
  except KeyError:
233
- issues.append(usecase_key_unknown(context.component, key))
226
+ issues.append(
227
+ AgentErrorCode.USECASE_KEY_UNKNOWN.issue(component=context.component, key=key)
228
+ )
234
229
  continue
235
230
  execution = getattr(use_case, "__execution_plan__", None)
236
231
  if execution is not None and execution.query_binding is not None:
237
- issues.append(usecase_declares_query(context.component, key))
232
+ issues.append(
233
+ AgentErrorCode.USECASE_DECLARES_QUERY.issue(component=context.component, key=key)
234
+ )
238
235
  use_cases.append(use_case)
239
236
  if issues:
240
237
  return None, issues
@@ -243,20 +240,36 @@ def _compile_usecase(capability: UsecaseCapability, context: _Context) -> _Handl
243
240
 
244
241
  def _compile_sql(capability: SqlCapability, context: _Context) -> _HandlerResult:
245
242
  if context.sql is None:
246
- return None, [sql_config_missing(context.component)]
243
+ return None, [AgentErrorCode.SQL_CONFIG_MISSING.issue(component=context.component)]
247
244
  connection = context.sql.connections.get(capability.connection)
248
245
  if connection is None:
249
- return None, [sql_connection_unknown(context.component, capability.connection)]
246
+ return None, [
247
+ AgentErrorCode.SQL_CONNECTION_UNKNOWN.issue(
248
+ component=context.component, connection=capability.connection
249
+ )
250
+ ]
250
251
  issues: list[AgentCompilationIssue] = []
251
252
  if not connection.readonly:
252
- issues.append(sql_connection_not_readonly(context.component, capability.connection))
253
+ issues.append(
254
+ AgentErrorCode.SQL_CONNECTION_NOT_READONLY.issue(
255
+ component=context.component, connection=capability.connection
256
+ )
257
+ )
253
258
  binds_roles = not context.anonymous
254
259
  if roles_need_identity_binding(connection.allowed_roles, mechanism_binds_roles=binds_roles):
255
- issues.append(sql_connection_roles_unbound(context.component, capability.connection))
260
+ issues.append(
261
+ AgentErrorCode.SQL_CONNECTION_ROLES_UNBOUND.issue(
262
+ component=context.component, connection=capability.connection
263
+ )
264
+ )
256
265
  # Defensive: the v1 struct already makes absent or non-positive bounds
257
266
  # unrepresentable, but a spec built through another path must not pass.
258
267
  if capability.max_rows < 1 or capability.max_result_bytes < 1:
259
- issues.append(sql_result_bound_missing(context.component, capability.connection))
268
+ issues.append(
269
+ AgentErrorCode.SQL_RESULT_BOUND_MISSING.issue(
270
+ component=context.component, connection=capability.connection
271
+ )
272
+ )
260
273
  if issues:
261
274
  return None, issues
262
275
  return (
@@ -294,12 +307,14 @@ def compile_mcp_capability(
294
307
 
295
308
  Returns:
296
309
  The compiled capability, or ``None`` with one
297
- :func:`~loom.ai.errors.mcp_server_unknown` issue when ``server_name``
298
- is not in ``servers``.
310
+ :attr:`~loom.ai.errors.AgentErrorCode.MCP_SERVER_UNKNOWN` issue when
311
+ ``server_name`` is not in ``servers``.
299
312
  """
300
313
  server = servers.get(server_name)
301
314
  if server is None:
302
- return None, [mcp_server_unknown(component, server_name)]
315
+ return None, [
316
+ AgentErrorCode.MCP_SERVER_UNKNOWN.issue(component=component, server=server_name)
317
+ ]
303
318
  return (
304
319
  CompiledMcpCapability(
305
320
  server=server_name,
@@ -347,7 +362,11 @@ def _compile_auth(auth: Mapping[str, str] | None) -> CompiledRemoteAuth | None:
347
362
  def _compile_a2a(capability: A2ACapability, context: _Context) -> _HandlerResult:
348
363
  agent = context.a2a_agents.get(capability.agent)
349
364
  if agent is None:
350
- return None, [a2a_agent_unknown(context.component, capability.agent)]
365
+ return None, [
366
+ AgentErrorCode.A2A_AGENT_UNKNOWN.issue(
367
+ component=context.component, agent=capability.agent
368
+ )
369
+ ]
351
370
  return (
352
371
  CompiledA2ACapability(
353
372
  agent=capability.agent,
@@ -366,22 +385,34 @@ def _library_base(library: str, context: _Context) -> _ResolveResult:
366
385
  if library.startswith(_LOCAL_LIBRARY_PREFIX):
367
386
  if context.source_path is None:
368
387
  reason = "a './' library needs a known artifact path"
369
- return None, [skills_library_invalid(context.component, library, reason)]
388
+ return None, [
389
+ AgentErrorCode.SKILLS_LIBRARY_INVALID.issue(
390
+ component=context.component, library=library, reason=reason
391
+ )
392
+ ]
370
393
  return Path(context.source_path).parent, []
371
394
  if context.skills_root is None:
372
- return None, [skills_root_missing(context.component)]
395
+ return None, [AgentErrorCode.SKILLS_ROOT_MISSING.issue(component=context.component)]
373
396
  return Path(context.skills_root), []
374
397
 
375
398
 
376
399
  def _resolve_library(library: str, context: _Context) -> _ResolveResult:
377
400
  if escapes(library.removeprefix(_LOCAL_LIBRARY_PREFIX)):
378
- return None, [skills_library_escapes(context.component, library)]
401
+ return None, [
402
+ AgentErrorCode.SKILLS_LIBRARY_ESCAPES.issue(
403
+ component=context.component, library=library
404
+ )
405
+ ]
379
406
  base, issues = _library_base(library, context)
380
407
  if base is None:
381
408
  return None, issues
382
409
  resolved = base / library.removeprefix(_LOCAL_LIBRARY_PREFIX)
383
410
  if not is_within(resolved, base):
384
- return None, [skills_library_escapes(context.component, library)]
411
+ return None, [
412
+ AgentErrorCode.SKILLS_LIBRARY_ESCAPES.issue(
413
+ component=context.component, library=library
414
+ )
415
+ ]
385
416
  return resolved.resolve(), []
386
417
 
387
418
 
@@ -413,14 +444,20 @@ def _compile_skills(capability: SkillsCapability, context: _Context) -> _Handler
413
444
  return None, issues
414
445
  discovered, reason = _discover_skills(directory)
415
446
  if reason is not None:
416
- return None, [skills_library_invalid(context.component, library, reason)]
447
+ return None, [
448
+ AgentErrorCode.SKILLS_LIBRARY_INVALID.issue(
449
+ component=context.component, library=library, reason=reason
450
+ )
451
+ ]
417
452
  selected = select_names(
418
453
  discovered,
419
454
  include=capability.include,
420
455
  exclude=capability.exclude,
421
456
  )
422
457
  if not selected:
423
- return None, [capability_empty(context.component, "skills")]
458
+ return None, [
459
+ AgentErrorCode.CAPABILITY_EMPTY.issue(component=context.component, kind="skills")
460
+ ]
424
461
  return (
425
462
  CompiledSkillsCapability(library=library, directory=str(directory), names=selected),
426
463
  [],
@@ -431,9 +468,17 @@ def _compile_python(capability: PythonCapability, context: _Context) -> _Handler
431
468
  try:
432
469
  factory = import_symbol(capability.factory)
433
470
  except (ImportError, AttributeError, ValueError) as exc:
434
- return None, [python_factory_unresolvable(context.component, capability.factory, str(exc))]
471
+ return None, [
472
+ AgentErrorCode.PYTHON_FACTORY_UNRESOLVABLE.issue(
473
+ component=context.component, factory=capability.factory, reason=str(exc)
474
+ )
475
+ ]
435
476
  if not callable(factory):
436
- return None, [python_factory_not_callable(context.component, capability.factory)]
477
+ return None, [
478
+ AgentErrorCode.PYTHON_FACTORY_NOT_CALLABLE.issue(
479
+ component=context.component, factory=capability.factory
480
+ )
481
+ ]
437
482
  issue = _rejected_params(factory, capability.params, context.component, capability.factory)
438
483
  if issue is not None:
439
484
  return None, [issue]
@@ -460,11 +505,13 @@ def _rejected_params(
460
505
  try:
461
506
  signature.bind_partial(_FIRST_POSITIONAL)
462
507
  except TypeError:
463
- return python_factory_not_callable(component, ref)
508
+ return AgentErrorCode.PYTHON_FACTORY_NOT_CALLABLE.issue(component=component, factory=ref)
464
509
  try:
465
510
  signature.bind(_FIRST_POSITIONAL, **params)
466
511
  except TypeError as exc:
467
- return python_factory_params_rejected(component, ref, str(exc))
512
+ return AgentErrorCode.PYTHON_FACTORY_PARAMS_REJECTED.issue(
513
+ component=component, factory=ref, reason=str(exc)
514
+ )
468
515
  return None
469
516
 
470
517
 
@@ -477,15 +524,19 @@ def _compile_native(capability: NativeCapability, context: _Context) -> _Handler
477
524
  if context.inference is None:
478
525
  return None, []
479
526
  if context.native_tools is None:
480
- return None, [capability_kind_unsupported(context.component, "native", context.engine)]
527
+ return None, [
528
+ AgentErrorCode.CAPABILITY_KIND_UNSUPPORTED.issue(
529
+ component=context.component, kind="native", engine=context.engine
530
+ )
531
+ ]
481
532
  try:
482
533
  supported = context.native_tools(context.inference)
483
534
  except AgentCompilationError as exc:
484
535
  return None, list(exc.issues)
485
536
  if capability.tool not in supported:
486
537
  return None, [
487
- native_tool_unsupported(
488
- context.component,
538
+ AgentErrorCode.NATIVE_TOOL_UNSUPPORTED.issue(
539
+ component=context.component,
489
540
  tool=capability.tool,
490
541
  role=context.model_role,
491
542
  provider=context.inference.provider,
@@ -18,12 +18,7 @@ from __future__ import annotations
18
18
  from loom.ai.compiler._plan import CONVERSATION_CONTEXT_FIELDS, CompiledConversation
19
19
  from loom.ai.compiler.phases._feedable import feedable_input, is_granted
20
20
  from loom.ai.declarative import AgentSpecV1
21
- from loom.ai.errors import (
22
- AgentCompilationIssue,
23
- conversation_input_unsatisfied,
24
- conversation_usecase_also_granted,
25
- conversation_usecase_unknown,
26
- )
21
+ from loom.ai.errors import AgentCompilationIssue, AgentErrorCode
27
22
  from loom.core.use_case.registry import UseCaseRegistry
28
23
 
29
24
  _ConversationResult = tuple[CompiledConversation | None, list[AgentCompilationIssue]]
@@ -59,17 +54,29 @@ def compile_conversation(
59
54
  key = spec.conversation.usecase
60
55
  issues: list[AgentCompilationIssue] = []
61
56
  if is_granted(spec.capabilities, key):
62
- issues.append(conversation_usecase_also_granted(component, key))
57
+ issues.append(
58
+ AgentErrorCode.CONVERSATION_USECASE_ALSO_GRANTED.issue(component=component, key=key)
59
+ )
63
60
  try:
64
61
  use_case = registry.resolve(key)
65
62
  except KeyError:
66
- issues.append(conversation_usecase_unknown(component, key))
63
+ issues.append(
64
+ AgentErrorCode.CONVERSATION_USECASE_UNKNOWN.issue(component=component, key=key)
65
+ )
67
66
  return None, issues
68
67
  accepted, reason = feedable_input(use_case, _OFFERED)
69
68
  if reason is not None:
70
- issues.append(conversation_input_unsatisfied(component, key, reason))
69
+ issues.append(
70
+ AgentErrorCode.CONVERSATION_INPUT_UNSATISFIED.issue(
71
+ component=component, key=key, reason=reason
72
+ )
73
+ )
71
74
  elif _CONVERSATION_ID not in accepted:
72
- issues.append(conversation_input_unsatisfied(component, key, _MISSING_CONVERSATION_ID))
75
+ issues.append(
76
+ AgentErrorCode.CONVERSATION_INPUT_UNSATISFIED.issue(
77
+ component=component, key=key, reason=_MISSING_CONVERSATION_ID
78
+ )
79
+ )
73
80
  if issues:
74
81
  return None, issues
75
82
  return CompiledConversation(usecase=key, use_case=use_case, accepted=accepted), []
@@ -20,12 +20,7 @@ from loom.ai.compiler._plan import (
20
20
  )
21
21
  from loom.ai.compiler.phases._feedable import feedable_input, is_granted
22
22
  from loom.ai.declarative import AgentSpecV1
23
- from loom.ai.errors import (
24
- AgentCompilationIssue,
25
- on_output_input_unsatisfied,
26
- on_output_usecase_also_granted,
27
- on_output_usecase_unknown,
28
- )
23
+ from loom.ai.errors import AgentCompilationIssue, AgentErrorCode
29
24
  from loom.core.use_case.registry import UseCaseRegistry
30
25
 
31
26
  _HookResult = tuple[CompiledOutputHook | None, list[AgentCompilationIssue]]
@@ -55,15 +50,21 @@ def compile_output_hook(
55
50
  key = spec.on_output.usecase
56
51
  issues: list[AgentCompilationIssue] = []
57
52
  if is_granted(spec.capabilities, key):
58
- issues.append(on_output_usecase_also_granted(component, key))
53
+ issues.append(
54
+ AgentErrorCode.ON_OUTPUT_USECASE_ALSO_GRANTED.issue(component=component, key=key)
55
+ )
59
56
  try:
60
57
  use_case = registry.resolve(key)
61
58
  except KeyError:
62
- issues.append(on_output_usecase_unknown(component, key))
59
+ issues.append(AgentErrorCode.ON_OUTPUT_USECASE_UNKNOWN.issue(component=component, key=key))
63
60
  return None, issues
64
61
  accepted, reason = feedable_input(use_case, _OFFERED)
65
62
  if reason is not None:
66
- issues.append(on_output_input_unsatisfied(component, key, reason))
63
+ issues.append(
64
+ AgentErrorCode.ON_OUTPUT_INPUT_UNSATISFIED.issue(
65
+ component=component, key=key, reason=reason
66
+ )
67
+ )
67
68
  if issues:
68
69
  return None, issues
69
70
  return CompiledOutputHook(usecase=key, use_case=use_case, accepted=accepted), []
@@ -17,7 +17,7 @@ from collections.abc import Sequence
17
17
  from loom.ai.abc import StateShape
18
18
  from loom.ai.compiler._plan import CompiledInstruction
19
19
  from loom.ai.declarative import InstructionBlock
20
- from loom.ai.errors import AgentCompilationIssue, instruction_block_invalid
20
+ from loom.ai.errors import AgentCompilationIssue, AgentErrorCode
21
21
 
22
22
  _CompileResult = tuple[tuple[CompiledInstruction, ...], list[AgentCompilationIssue]]
23
23
 
@@ -61,9 +61,9 @@ def _duplicate_name_issues(
61
61
  if block.name is not None:
62
62
  positions[block.name].append(index)
63
63
  return [
64
- instruction_block_invalid(
65
- component,
66
- f"name '{name}' is declared twice, at positions "
64
+ AgentErrorCode.INSTRUCTION_BLOCK_INVALID.issue(
65
+ component=component,
66
+ reason=f"name '{name}' is declared twice, at positions "
67
67
  f"{', '.join(str(position) for position in dupes)}",
68
68
  )
69
69
  for name, dupes in positions.items()
@@ -77,9 +77,9 @@ def _missing_state_issues(
77
77
  if state is not None:
78
78
  return []
79
79
  return [
80
- instruction_block_invalid(
81
- component,
82
- f"block {_block_label(block, index)} declares template "
80
+ AgentErrorCode.INSTRUCTION_BLOCK_INVALID.issue(
81
+ component=component,
82
+ reason=f"block {_block_label(block, index)} declares template "
83
83
  f"'{block.template}' but the artifact declares no state "
84
84
  "(add deps_type or deps_schema)",
85
85
  )