loom-kernel 9.2.0__tar.gz → 10.0.0__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 (790) hide show
  1. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/CHANGELOG.md +254 -0
  2. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/PKG-INFO +24 -7
  3. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/README.md +15 -6
  4. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/pyproject.toml +16 -0
  5. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/_concurrency.py +5 -8
  6. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/_startup.py +1 -1
  7. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/a2a/_rpc.py +6 -6
  8. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/compiler/phases/_capabilities.py +1 -1
  9. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/config.py +1 -5
  10. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_instructions.py +1 -1
  11. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/fastapi/endpoints.py +14 -4
  12. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/runtime/_bounded.py +5 -9
  13. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/runtime/_lifecycle.py +1 -1
  14. loom_kernel-10.0.0/src/loom/celery/__init__.py +52 -0
  15. loom_kernel-10.0.0/src/loom/celery/_discovery.py +45 -0
  16. loom_kernel-10.0.0/src/loom/celery/adapter.py +421 -0
  17. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/celery/auto.py +3 -1
  18. loom_kernel-10.0.0/src/loom/celery/bootstrap.py +203 -0
  19. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/celery/config.py +5 -82
  20. loom_kernel-10.0.0/src/loom/celery/constants.py +10 -0
  21. loom_kernel-10.0.0/src/loom/celery/errors.py +45 -0
  22. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/celery/runner.py +138 -150
  23. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/celery/service.py +27 -13
  24. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/cli/app.py +2 -0
  25. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/cli/check.py +45 -19
  26. loom_kernel-10.0.0/src/loom/cli/deploy.py +60 -0
  27. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/cli/schema.py +21 -6
  28. loom_kernel-10.0.0/src/loom/composition/__init__.py +46 -0
  29. loom_kernel-9.2.0/src/loom/rest/fastapi/_auto_ai.py → loom_kernel-10.0.0/src/loom/composition/_ai.py +97 -153
  30. loom_kernel-10.0.0/src/loom/composition/_jobs.py +225 -0
  31. loom_kernel-10.0.0/src/loom/composition/_reserved.py +73 -0
  32. loom_kernel-10.0.0/src/loom/composition/_sql.py +118 -0
  33. loom_kernel-10.0.0/src/loom/composition/application.py +177 -0
  34. loom_kernel-10.0.0/src/loom/composition/build.py +574 -0
  35. loom_kernel-10.0.0/src/loom/composition/errors.py +144 -0
  36. loom_kernel-10.0.0/src/loom/composition/host.py +242 -0
  37. loom_kernel-10.0.0/src/loom/composition/recipe.py +72 -0
  38. loom_kernel-10.0.0/src/loom/composition/resources.py +80 -0
  39. loom_kernel-10.0.0/src/loom/composition/source.py +82 -0
  40. loom_kernel-10.0.0/src/loom/core/_async.py +63 -0
  41. loom_kernel-10.0.0/src/loom/core/authz/elevation.py +274 -0
  42. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/backend/scoped_ddl.py +12 -2
  43. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/backend/sqlalchemy.py +25 -15
  44. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/bootstrap/kernel.py +5 -4
  45. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/repository.py +25 -37
  46. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/wiring.py +3 -3
  47. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/__init__.py +3 -2
  48. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/_resolver_utils.py +64 -37
  49. loom_kernel-10.0.0/src/loom/core/config/aws.py +48 -0
  50. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/checks.py +1 -12
  51. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/context.py +11 -7
  52. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/keys.py +6 -2
  53. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/loader.py +9 -5
  54. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/overrides.py +50 -22
  55. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/resolver.py +3 -2
  56. loom_kernel-10.0.0/src/loom/core/config/retired.py +107 -0
  57. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/secrets.py +25 -39
  58. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/ssm.py +24 -38
  59. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/connections/aws/__init__.py +2 -2
  60. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/connections/aws/config.py +28 -2
  61. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/connections/clickhouse/config.py +3 -3
  62. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/connections/mongo/config.py +1 -1
  63. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/contracts/manifest.py +3 -0
  64. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/di/container.py +29 -0
  65. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/discovery/base.py +11 -2
  66. loom_kernel-10.0.0/src/loom/core/discovery/config.py +116 -0
  67. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/discovery/manifest.py +7 -3
  68. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/discovery/modules.py +4 -1
  69. loom_kernel-10.0.0/src/loom/core/discovery/worker.py +394 -0
  70. loom_kernel-10.0.0/src/loom/core/discovery/worker_manifest.py +15 -0
  71. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/engine/compiler.py +66 -2
  72. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/engine/executor.py +236 -109
  73. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/engine/plan.py +7 -0
  74. loom_kernel-10.0.0/src/loom/core/engine/post_commit.py +353 -0
  75. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/errors/__init__.py +6 -0
  76. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/errors/codes.py +10 -0
  77. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/errors/errors.py +71 -1
  78. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/identity/context.py +3 -1
  79. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/job/__init__.py +3 -0
  80. loom_kernel-10.0.0/src/loom/core/job/config.py +92 -0
  81. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/job/context.py +41 -17
  82. loom_kernel-10.0.0/src/loom/core/job/envelope.py +80 -0
  83. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/job/job.py +5 -0
  84. loom_kernel-10.0.0/src/loom/core/job/outcome.py +15 -0
  85. loom_kernel-10.0.0/src/loom/core/job/router.py +126 -0
  86. loom_kernel-10.0.0/src/loom/core/job/run.py +40 -0
  87. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/job/service.py +17 -3
  88. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/locator.py +94 -88
  89. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/base.py +4 -1
  90. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/scoped.py +11 -0
  91. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/persistence/__init__.py +2 -0
  92. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/persistence/abc.py +29 -6
  93. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/persistence/database.py +53 -39
  94. loom_kernel-10.0.0/src/loom/core/persistence/elevation.py +219 -0
  95. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/persistence/none.py +15 -4
  96. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/persistence/profile.py +38 -3
  97. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/persistence/registry.py +19 -8
  98. loom_kernel-10.0.0/src/loom/core/persistence/stores.py +371 -0
  99. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/plugins/entrypoints.py +4 -2
  100. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/abc/checks.py +9 -4
  101. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/abc/cursor.py +3 -3
  102. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/abc/session_scope.py +0 -3
  103. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/dynamodb/backend.py +67 -25
  104. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/dynamodb/registry.py +11 -19
  105. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/dynamodb/repository.py +45 -13
  106. loom_kernel-10.0.0/src/loom/core/repository/mongo/backend.py +208 -0
  107. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/mongo/registry.py +9 -7
  108. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/mongo/repository.py +33 -28
  109. loom_kernel-10.0.0/src/loom/core/repository/mongo/uow.py +301 -0
  110. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/registration.py +15 -6
  111. loom_kernel-10.0.0/src/loom/core/repository/sqlalchemy/backend.py +469 -0
  112. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/integrity.py +1 -1
  113. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/migrations/runners.py +2 -6
  114. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/mixins.py +19 -17
  115. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/registry.py +21 -15
  116. loom_kernel-10.0.0/src/loom/core/repository/sqlalchemy/repository.py +197 -0
  117. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/rls/__init__.py +5 -6
  118. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/rls/bootstrap.py +6 -1
  119. loom_kernel-10.0.0/src/loom/core/repository/sqlalchemy/rls/elevate.py +88 -0
  120. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/rls/partitions.py +1 -10
  121. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/rls/provider.py +26 -23
  122. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/rls/schema.py +2 -1
  123. loom_kernel-10.0.0/src/loom/core/repository/sqlalchemy/rls/sources.py +78 -0
  124. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/session_manager.py +81 -6
  125. loom_kernel-10.0.0/src/loom/core/repository/sqlalchemy/transactional.py +206 -0
  126. loom_kernel-10.0.0/src/loom/core/repository/sqlalchemy/uow.py +203 -0
  127. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/schema_names.py +1 -1
  128. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/sql/clickhouse/registry.py +69 -16
  129. loom_kernel-10.0.0/src/loom/core/sql/loader.py +36 -0
  130. loom_kernel-10.0.0/src/loom/core/uow/__init__.py +30 -0
  131. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/uow/abc.py +1 -2
  132. loom_kernel-10.0.0/src/loom/core/uow/alone.py +135 -0
  133. loom_kernel-10.0.0/src/loom/core/uow/coordinator.py +711 -0
  134. loom_kernel-10.0.0/src/loom/core/uow/scope.py +693 -0
  135. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/use_case/__init__.py +5 -0
  136. loom_kernel-10.0.0/src/loom/core/use_case/errors.py +130 -0
  137. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/use_case/factory.py +37 -4
  138. loom_kernel-10.0.0/src/loom/core/use_case/joined.py +57 -0
  139. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/runner/config_loader.py +8 -2
  140. loom_kernel-10.0.0/src/loom/jobs/__init__.py +1 -0
  141. loom_kernel-10.0.0/src/loom/jobs/aws/__init__.py +3 -0
  142. loom_kernel-10.0.0/src/loom/jobs/aws/sqs.py +422 -0
  143. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/flow/_assemble.py +1 -1
  144. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/notify/_factory.py +9 -4
  145. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/notify/_sns.py +11 -5
  146. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/auth/abc.py +4 -4
  147. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/checks.py +30 -7
  148. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/compiler.py +60 -19
  149. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/config.py +1 -1
  150. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/errors.py +23 -3
  151. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/fastapi/__init__.py +3 -0
  152. loom_kernel-10.0.0/src/loom/rest/fastapi/_auto_ai.py +128 -0
  153. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/fastapi/_auto_auth.py +5 -6
  154. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/fastapi/_auto_sql.py +7 -105
  155. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/fastapi/_errors.py +23 -6
  156. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/fastapi/_exclusions.py +3 -3
  157. loom_kernel-10.0.0/src/loom/rest/fastapi/adapter.py +772 -0
  158. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/fastapi/app.py +43 -13
  159. loom_kernel-10.0.0/src/loom/rest/fastapi/auto.py +207 -0
  160. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/fastapi/health.py +11 -13
  161. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/fastapi/router_runtime.py +12 -1
  162. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/fastapi/sql.py +21 -6
  163. loom_kernel-10.0.0/src/loom/serverless/__init__.py +1 -0
  164. loom_kernel-10.0.0/src/loom/serverless/aws/__init__.py +1 -0
  165. loom_kernel-10.0.0/src/loom/serverless/aws/lambda_/__init__.py +46 -0
  166. loom_kernel-10.0.0/src/loom/serverless/aws/lambda_/_refusals.py +69 -0
  167. loom_kernel-10.0.0/src/loom/serverless/aws/lambda_/functions.py +203 -0
  168. loom_kernel-10.0.0/src/loom/serverless/aws/lambda_/http.py +268 -0
  169. loom_kernel-10.0.0/src/loom/serverless/aws/lambda_/manifest.py +266 -0
  170. loom_kernel-10.0.0/src/loom/serverless/aws/lambda_/sqs.py +316 -0
  171. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/compiler/_compiler.py +5 -2
  172. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/compiler/phases/build_plan.py +21 -9
  173. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/compiler/phases/validate.py +28 -12
  174. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_table/common.py +31 -17
  175. loom_kernel-10.0.0/src/loom/streaming/nodes/_table/config.py +208 -0
  176. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/testing/__init__.py +26 -0
  177. loom_kernel-10.0.0/src/loom/testing/jobs.py +187 -0
  178. loom_kernel-10.0.0/src/loom/testing/lambda_http.py +128 -0
  179. loom_kernel-9.2.0/src/loom/celery/__init__.py +0 -20
  180. loom_kernel-9.2.0/src/loom/celery/bootstrap.py +0 -1039
  181. loom_kernel-9.2.0/src/loom/celery/constants.py +0 -22
  182. loom_kernel-9.2.0/src/loom/core/authz/elevation.py +0 -158
  183. loom_kernel-9.2.0/src/loom/core/config/retired.py +0 -35
  184. loom_kernel-9.2.0/src/loom/core/engine/post_commit.py +0 -201
  185. loom_kernel-9.2.0/src/loom/core/repository/mongo/backend.py +0 -156
  186. loom_kernel-9.2.0/src/loom/core/repository/mongo/uow.py +0 -257
  187. loom_kernel-9.2.0/src/loom/core/repository/sqlalchemy/backend.py +0 -330
  188. loom_kernel-9.2.0/src/loom/core/repository/sqlalchemy/repository.py +0 -150
  189. loom_kernel-9.2.0/src/loom/core/repository/sqlalchemy/rls/elevate.py +0 -84
  190. loom_kernel-9.2.0/src/loom/core/repository/sqlalchemy/rls/sources.py +0 -68
  191. loom_kernel-9.2.0/src/loom/core/repository/sqlalchemy/transactional.py +0 -269
  192. loom_kernel-9.2.0/src/loom/core/repository/sqlalchemy/uow.py +0 -240
  193. loom_kernel-9.2.0/src/loom/core/transaction.py +0 -83
  194. loom_kernel-9.2.0/src/loom/core/uow/__init__.py +0 -14
  195. loom_kernel-9.2.0/src/loom/core/uow/context.py +0 -27
  196. loom_kernel-9.2.0/src/loom/rest/fastapi/auto.py +0 -1085
  197. loom_kernel-9.2.0/src/loom/streaming/nodes/_table/config.py +0 -197
  198. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/.gitignore +0 -0
  199. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/LICENSE +0 -0
  200. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/__init__.py +0 -0
  201. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/__init__.py +0 -0
  202. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/_filters.py +0 -0
  203. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/_paths.py +0 -0
  204. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/_roles.py +0 -0
  205. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/_transport.py +0 -0
  206. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/_usecase.py +0 -0
  207. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/a2a/__init__.py +0 -0
  208. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/a2a/_binding.py +0 -0
  209. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/a2a/_handlers.py +0 -0
  210. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/a2a/card.py +0 -0
  211. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/a2a/events.py +0 -0
  212. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/a2a/server.py +0 -0
  213. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/abc.py +0 -0
  214. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/bootstrap.py +0 -0
  215. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/compiler/__init__.py +0 -0
  216. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/compiler/_compiler.py +0 -0
  217. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/compiler/_fingerprint.py +0 -0
  218. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/compiler/_plan.py +0 -0
  219. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/compiler/phases/__init__.py +0 -0
  220. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/compiler/phases/_conversation.py +0 -0
  221. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/compiler/phases/_feedable.py +0 -0
  222. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/compiler/phases/_hook.py +0 -0
  223. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/compiler/phases/_instructions.py +0 -0
  224. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/compiler/phases/_limits.py +0 -0
  225. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/compiler/phases/_model_role.py +0 -0
  226. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/compiler/phases/_output.py +0 -0
  227. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/compiler/phases/_state.py +0 -0
  228. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/declarative/__init__.py +0 -0
  229. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/declarative/_envelope.py +0 -0
  230. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/declarative/_schema.py +0 -0
  231. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/declarative/_v1.py +0 -0
  232. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
  233. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/describe.py +0 -0
  234. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/__init__.py +0 -0
  235. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
  236. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_a2a.py +0 -0
  237. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_capabilities.py +0 -0
  238. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_engine.py +0 -0
  239. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
  240. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_escape.py +0 -0
  241. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
  242. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
  243. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_history.py +0 -0
  244. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_limits.py +0 -0
  245. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_mcp.py +0 -0
  246. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_models.py +0 -0
  247. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_native.py +0 -0
  248. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
  249. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
  250. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
  251. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
  252. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/extras/__init__.py +0 -0
  253. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/extras/a2a.py +0 -0
  254. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/extras/handlebars.py +0 -0
  255. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/extras/mcp.py +0 -0
  256. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/extras/skills.py +0 -0
  257. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/provider.py +0 -0
  258. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/providers/__init__.py +0 -0
  259. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/providers/_shared.py +0 -0
  260. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/providers/anthropic.py +0 -0
  261. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/providers/bedrock.py +0 -0
  262. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/providers/gateway.py +0 -0
  263. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/providers/openai.py +0 -0
  264. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/engines/pydantic_ai/providers/typesafe.py +0 -0
  265. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/errors.py +0 -0
  266. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/etl/__init__.py +0 -0
  267. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/etl/_batch.py +0 -0
  268. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/etl/_columns.py +0 -0
  269. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/etl/_frames.py +0 -0
  270. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/etl/_ledger.py +0 -0
  271. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/etl/_runner.py +0 -0
  272. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/etl/_validation.py +0 -0
  273. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/fastapi/__init__.py +0 -0
  274. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/fastapi/response.py +0 -0
  275. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/fastapi/streaming.py +0 -0
  276. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/inference.py +0 -0
  277. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/pricing.py +0 -0
  278. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/registry.py +0 -0
  279. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/remote_auth.py +0 -0
  280. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/runtime/__init__.py +0 -0
  281. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/runtime/_chain.py +0 -0
  282. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/runtime/_conversation.py +0 -0
  283. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/runtime/_grants.py +0 -0
  284. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/runtime/_handle.py +0 -0
  285. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/runtime/_health.py +0 -0
  286. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/runtime/_hooks.py +0 -0
  287. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/runtime/_limits.py +0 -0
  288. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/runtime/_mcp.py +0 -0
  289. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/validate/__init__.py +0 -0
  290. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/ai/validate/__main__.py +0 -0
  291. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/cli/__init__.py +0 -0
  292. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/async_bridge.py +0 -0
  293. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/authz/__init__.py +0 -0
  294. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/authz/_decide.py +0 -0
  295. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/authz/_grants.py +0 -0
  296. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/authz/_roles.py +0 -0
  297. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/authz/_scope.py +0 -0
  298. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/authz/product.py +0 -0
  299. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/backend/__init__.py +0 -0
  300. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/backend/core_model.py +0 -0
  301. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/backend/protocol.py +0 -0
  302. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/bootstrap/__init__.py +0 -0
  303. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/bootstrap/bootstrap.py +0 -0
  304. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/__init__.py +0 -0
  305. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/_batching.py +0 -0
  306. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/_single_flight.py +0 -0
  307. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/abc/__init__.py +0 -0
  308. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/abc/backend.py +0 -0
  309. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/abc/config.py +0 -0
  310. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/abc/dependency.py +0 -0
  311. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/calls.py +0 -0
  312. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/codec.py +0 -0
  313. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/decorators.py +0 -0
  314. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/dependency.py +0 -0
  315. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/errors.py +0 -0
  316. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/gateway.py +0 -0
  317. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/keys.py +0 -0
  318. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/memory.py +0 -0
  319. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/result_codec.py +0 -0
  320. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/cache/serializer.py +0 -0
  321. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/checks.py +0 -0
  322. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/command/__init__.py +0 -0
  323. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/command/adapter.py +0 -0
  324. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/command/base.py +0 -0
  325. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/command/field.py +0 -0
  326. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/command/introspection.py +0 -0
  327. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/compiler.py +0 -0
  328. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/_includes.py +0 -0
  329. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/binder.py +0 -0
  330. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/configurable.py +0 -0
  331. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/convert.py +0 -0
  332. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/errors.py +0 -0
  333. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/model.py +0 -0
  334. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/config/observability.py +0 -0
  335. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/connections/__init__.py +0 -0
  336. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/connections/_base.py +0 -0
  337. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/connections/aws/client.py +0 -0
  338. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/connections/aws/loader.py +0 -0
  339. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/connections/clickhouse/__init__.py +0 -0
  340. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/connections/clickhouse/client.py +0 -0
  341. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/connections/clickhouse/loader.py +0 -0
  342. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/connections/mongo/__init__.py +0 -0
  343. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/connections/mongo/client.py +0 -0
  344. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/connections/mongo/loader.py +0 -0
  345. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/connections/relational.py +0 -0
  346. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/contracts/__init__.py +0 -0
  347. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/di/__init__.py +0 -0
  348. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/di/scope.py +0 -0
  349. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/discovery/__init__.py +0 -0
  350. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/discovery/_utils.py +0 -0
  351. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/discovery/interfaces.py +0 -0
  352. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/engine/__init__.py +0 -0
  353. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/engine/compilable.py +0 -0
  354. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/engine/events.py +0 -0
  355. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/engine/metrics.py +0 -0
  356. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/environment.py +0 -0
  357. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/expr/__init__.py +0 -0
  358. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/expr/eval.py +0 -0
  359. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/expr/nodes.py +0 -0
  360. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/expr/refs.py +0 -0
  361. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/identity/__init__.py +0 -0
  362. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/identity/identity.py +0 -0
  363. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/identity/issuer.py +0 -0
  364. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/identity/wire.py +0 -0
  365. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/introspection/__init__.py +0 -0
  366. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/introspection/base.py +0 -0
  367. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/introspection/describe.py +0 -0
  368. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/job/callback.py +0 -0
  369. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/job/handle.py +0 -0
  370. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/logger/__init__.py +0 -0
  371. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/logger/abc.py +0 -0
  372. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/logger/checks.py +0 -0
  373. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/logger/config.py +0 -0
  374. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/logger/context.py +0 -0
  375. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/logger/registry.py +0 -0
  376. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/logger/structlogger.py +0 -0
  377. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/__init__.py +0 -0
  378. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/_json_schema.py +0 -0
  379. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/_loom_type.py +0 -0
  380. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/convert.py +0 -0
  381. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/enums.py +0 -0
  382. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/field.py +0 -0
  383. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/introspection.py +0 -0
  384. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/partition.py +0 -0
  385. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/privilege.py +0 -0
  386. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/projection.py +0 -0
  387. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/redaction.py +0 -0
  388. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/relation.py +0 -0
  389. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/struct.py +0 -0
  390. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/timestamped.py +0 -0
  391. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/types.py +0 -0
  392. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/model/types_postgres.py +0 -0
  393. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/observability/__init__.py +0 -0
  394. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/observability/config.py +0 -0
  395. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/observability/event.py +0 -0
  396. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/observability/observer/__init__.py +0 -0
  397. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/observability/observer/noop.py +0 -0
  398. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/observability/observer/otel.py +0 -0
  399. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/observability/observer/structlog.py +0 -0
  400. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/observability/otel_ids.py +0 -0
  401. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/observability/protocol.py +0 -0
  402. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/observability/runtime.py +0 -0
  403. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/observability/span.py +0 -0
  404. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/observability/topology.py +0 -0
  405. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/plugins/__init__.py +0 -0
  406. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/plugins/optional.py +0 -0
  407. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/projection/__init__.py +0 -0
  408. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/projection/loaders.py +0 -0
  409. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/projection/runtime.py +0 -0
  410. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/__init__.py +0 -0
  411. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/abc/__init__.py +0 -0
  412. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/abc/errors.py +0 -0
  413. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/abc/query.py +0 -0
  414. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/abc/query_compiler.py +0 -0
  415. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/abc/repo_for.py +0 -0
  416. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/abc/repository.py +0 -0
  417. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/dynamodb/__init__.py +0 -0
  418. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/dynamodb/uow.py +0 -0
  419. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/mongo/__init__.py +0 -0
  420. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/mongo/ids.py +0 -0
  421. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/mongo/query_compiler.py +0 -0
  422. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/mongo/values.py +0 -0
  423. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/mutation.py +0 -0
  424. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/registry.py +0 -0
  425. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
  426. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/_pool_metrics.py +0 -0
  427. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
  428. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/migrations/__init__.py +0 -0
  429. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/migrations/env_template.py +0 -0
  430. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/migrations/hook.py +0 -0
  431. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/migrations/operations.py +0 -0
  432. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/model.py +0 -0
  433. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
  434. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
  435. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
  436. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
  437. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
  438. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
  439. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
  440. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
  441. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
  442. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
  443. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/rls/config.py +0 -0
  444. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/rls/guard/0001.sql +0 -0
  445. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/rls/guard/0002.sql +0 -0
  446. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/rls/guard/preflight.sql +0 -0
  447. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/rls/guard_manifest.py +0 -0
  448. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/rls/integrity.py +0 -0
  449. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/rls/verify.py +0 -0
  450. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/session_settings.py +0 -0
  451. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/repository/sqlalchemy/values.py +0 -0
  452. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/response/__init__.py +0 -0
  453. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/response/base.py +0 -0
  454. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/routing/__init__.py +0 -0
  455. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/routing/ref.py +0 -0
  456. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/routing/resolver.py +0 -0
  457. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/runner.py +0 -0
  458. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/schema/__init__.py +0 -0
  459. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/schema/schema_mode.py +0 -0
  460. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/sql/__init__.py +0 -0
  461. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/sql/abc/__init__.py +0 -0
  462. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/sql/abc/contracts.py +0 -0
  463. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/sql/abc/errors.py +0 -0
  464. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/sql/caller_bound.py +0 -0
  465. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/sql/clickhouse/__init__.py +0 -0
  466. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/sql/clickhouse/_client.py +0 -0
  467. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/sql/clickhouse/executor.py +0 -0
  468. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/sql/config.py +0 -0
  469. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/sql/roles.py +0 -0
  470. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/sql/service.py +0 -0
  471. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/symbols.py +0 -0
  472. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/tracing/__init__.py +0 -0
  473. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/tracing/context.py +0 -0
  474. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/transport/__init__.py +0 -0
  475. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/transport/adapter.py +0 -0
  476. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/use_case/_predicates.py +0 -0
  477. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/use_case/agent_markers.py +0 -0
  478. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/use_case/compute.py +0 -0
  479. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/use_case/constants.py +0 -0
  480. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/use_case/field_ref.py +0 -0
  481. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/use_case/invoker.py +0 -0
  482. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/use_case/keys.py +0 -0
  483. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/use_case/markers.py +0 -0
  484. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/use_case/mcp_markers.py +0 -0
  485. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/use_case/outcome.py +0 -0
  486. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/use_case/registry.py +0 -0
  487. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/use_case/rule.py +0 -0
  488. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/core/use_case/use_case.py +0 -0
  489. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/__init__.py +0 -0
  490. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/_uri.py +0 -0
  491. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/__init__.py +0 -0
  492. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/_format_registry.py +0 -0
  493. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/_historify/__init__.py +0 -0
  494. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/_historify/_common.py +0 -0
  495. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/_historify/_log.py +0 -0
  496. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/_historify/_ops.py +0 -0
  497. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
  498. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/_historify/_transform.py +0 -0
  499. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/_merge.py +0 -0
  500. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/_path_template.py +0 -0
  501. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/_predicate.py +0 -0
  502. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
  503. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
  504. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
  505. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/_write_policy.py +0 -0
  506. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/polars/__init__.py +0 -0
  507. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/polars/_dtype.py +0 -0
  508. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/polars/_file_writer.py +0 -0
  509. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/polars/_frame.py +0 -0
  510. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/polars/_historify.py +0 -0
  511. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/polars/_predicate.py +0 -0
  512. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/polars/_reader.py +0 -0
  513. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/polars/_schema.py +0 -0
  514. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
  515. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/polars/_streaming.py +0 -0
  516. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/polars/_writer.py +0 -0
  517. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/polars/provider.py +0 -0
  518. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/spark/__init__.py +0 -0
  519. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/spark/_dtype.py +0 -0
  520. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/spark/_historify.py +0 -0
  521. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/spark/_reader.py +0 -0
  522. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/spark/_schema.py +0 -0
  523. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
  524. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/spark/_writer.py +0 -0
  525. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/backends/spark/provider.py +0 -0
  526. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/checkpoint/__init__.py +0 -0
  527. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/checkpoint/_backends/_memory.py +0 -0
  528. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
  529. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
  530. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/checkpoint/_cleaners.py +0 -0
  531. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/checkpoint/_options.py +0 -0
  532. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/checkpoint/_paths.py +0 -0
  533. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/checkpoint/_scope.py +0 -0
  534. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/checkpoint/_store.py +0 -0
  535. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/compiler/__init__.py +0 -0
  536. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/compiler/_binding.py +0 -0
  537. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/compiler/_compiler.py +0 -0
  538. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/compiler/_errors.py +0 -0
  539. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/compiler/_filter.py +0 -0
  540. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/compiler/_plan.py +0 -0
  541. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/compiler/_validators.py +0 -0
  542. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/compiler/_validators_agents.py +0 -0
  543. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/compiler/_validators_config.py +0 -0
  544. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/compiler/_validators_plan.py +0 -0
  545. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/compiler/_validators_step.py +0 -0
  546. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/__init__.py +0 -0
  547. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/_format.py +0 -0
  548. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/_read_options.py +0 -0
  549. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/_utils.py +0 -0
  550. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/_with_agent.py +0 -0
  551. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/_write_options.py +0 -0
  552. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/expr/__init__.py +0 -0
  553. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/expr/_params.py +0 -0
  554. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/expr/_predicate.py +0 -0
  555. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
  556. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/expr/_refs.py +0 -0
  557. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/source/__init__.py +0 -0
  558. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/source/_from.py +0 -0
  559. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
  560. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/source/_from_config.py +0 -0
  561. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
  562. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
  563. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/source/_specs.py +0 -0
  564. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/target/__init__.py +0 -0
  565. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/target/_client.py +0 -0
  566. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/target/_errors.py +0 -0
  567. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/target/_file.py +0 -0
  568. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
  569. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
  570. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
  571. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
  572. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/target/_history/_report.py +0 -0
  573. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
  574. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/target/_into.py +0 -0
  575. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/target/_table.py +0 -0
  576. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/declarative/target/_temp.py +0 -0
  577. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/executor/__init__.py +0 -0
  578. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/executor/_agents.py +0 -0
  579. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/executor/_dispatcher.py +0 -0
  580. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/executor/_executor.py +0 -0
  581. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/io/__init__.py +0 -0
  582. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/io/_clickhouse_connection.py +0 -0
  583. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/io/_registry.py +0 -0
  584. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/io/sources/__init__.py +0 -0
  585. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/io/sources/_clickhouse.py +0 -0
  586. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/io/sources/_dynamodb.py +0 -0
  587. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
  588. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
  589. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/io/sources/_mongo.py +0 -0
  590. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
  591. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
  592. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
  593. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/io/sources/_serialization.py +0 -0
  594. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/io/targets/__init__.py +0 -0
  595. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/io/targets/_clickhouse.py +0 -0
  596. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/lineage/__init__.py +0 -0
  597. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/lineage/_config.py +0 -0
  598. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/lineage/_observer.py +0 -0
  599. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/lineage/_records.py +0 -0
  600. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/lineage/sinks/__init__.py +0 -0
  601. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
  602. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/lineage/sinks/_table.py +0 -0
  603. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/lineage/sinks/_writer.py +0 -0
  604. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/maintenance/__init__.py +0 -0
  605. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/maintenance/_builder.py +0 -0
  606. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/maintenance/_ops.py +0 -0
  607. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/maintenance/_protocol.py +0 -0
  608. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/maintenance/_runner.py +0 -0
  609. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/maintenance/_step.py +0 -0
  610. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/maintenance/backends/__init__.py +0 -0
  611. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
  612. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/pipeline/__init__.py +0 -0
  613. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/pipeline/_generics.py +0 -0
  614. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/pipeline/_params.py +0 -0
  615. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/pipeline/_pipeline.py +0 -0
  616. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/pipeline/_process.py +0 -0
  617. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/pipeline/_sql.py +0 -0
  618. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/pipeline/_step.py +0 -0
  619. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/pipeline/_step_client.py +0 -0
  620. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/pipeline/_step_sql.py +0 -0
  621. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/runner/__init__.py +0 -0
  622. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/runner/_agents.py +0 -0
  623. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/runner/_providers.py +0 -0
  624. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/runner/_wiring.py +0 -0
  625. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/runner/core.py +0 -0
  626. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/runtime/__init__.py +0 -0
  627. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/runtime/_config_values.py +0 -0
  628. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/runtime/contracts.py +0 -0
  629. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/schema/__init__.py +0 -0
  630. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/schema/_contract.py +0 -0
  631. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/schema/_schema.py +0 -0
  632. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/storage/__init__.py +0 -0
  633. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/storage/_config.py +0 -0
  634. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/storage/_file_locator.py +0 -0
  635. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/storage/_locator.py +0 -0
  636. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/storage/routing.py +0 -0
  637. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/testing/__init__.py +0 -0
  638. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/testing/_delta.py +0 -0
  639. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/testing/_result.py +0 -0
  640. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/testing/_runners.py +0 -0
  641. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/testing/_scenario.py +0 -0
  642. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/testing/_stubs.py +0 -0
  643. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/etl/testing/spark.py +0 -0
  644. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/__init__.py +0 -0
  645. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/_async.py +0 -0
  646. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/_config.py +0 -0
  647. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/_ctx.py +0 -0
  648. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/_flow_yaml.py +0 -0
  649. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/_meta.py +0 -0
  650. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/_placeholders.py +0 -0
  651. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/_summary.py +0 -0
  652. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/deploy/__init__.py +0 -0
  653. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/deploy/_discovery.py +0 -0
  654. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/deploy/_schedule.py +0 -0
  655. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/deploy/_yaml_etls.py +0 -0
  656. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/deploy/entrypoint.py +0 -0
  657. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/flow/__init__.py +0 -0
  658. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/flow/_backfill.py +0 -0
  659. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/flow/_backfill_body.py +0 -0
  660. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/flow/_body.py +0 -0
  661. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/flow/_common.py +0 -0
  662. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/flow/_factory.py +0 -0
  663. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/flow/_hooks.py +0 -0
  664. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/flow/_maintenance.py +0 -0
  665. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/flow/_params.py +0 -0
  666. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/flow/_run_name.py +0 -0
  667. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/flow/_runtime.py +0 -0
  668. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/flow/_signature.py +0 -0
  669. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/flow/_stages.py +0 -0
  670. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/manifest/__init__.py +0 -0
  671. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/manifest/_model.py +0 -0
  672. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/manifest/_s3.py +0 -0
  673. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/manifest/_store.py +0 -0
  674. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/notify/__init__.py +0 -0
  675. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/notify/_event.py +0 -0
  676. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/notify/_format.py +0 -0
  677. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/notify/_port.py +0 -0
  678. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/notify/_slack.py +0 -0
  679. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/observer/__init__.py +0 -0
  680. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/observer/_flow.py +0 -0
  681. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/observer/_logging_bridge.py +0 -0
  682. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/observer/_manifest.py +0 -0
  683. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prefect/observer/_task_run.py +0 -0
  684. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prometheus/__init__.py +0 -0
  685. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prometheus/_instruments.py +0 -0
  686. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prometheus/adapter.py +0 -0
  687. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prometheus/db_pool.py +0 -0
  688. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prometheus/kafka.py +0 -0
  689. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prometheus/lifecycle.py +0 -0
  690. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/prometheus/middleware.py +0 -0
  691. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/py.typed +0 -0
  692. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/__init__.py +0 -0
  693. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/_body.py +0 -0
  694. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/adapter.py +0 -0
  695. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/auth/__init__.py +0 -0
  696. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/auth/config.py +0 -0
  697. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/auth/jwt.py +0 -0
  698. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/auth/middleware.py +0 -0
  699. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/autocrud.py +0 -0
  700. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/constants.py +0 -0
  701. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/cors.py +0 -0
  702. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/fastapi/openapi.py +0 -0
  703. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/fastapi/response.py +0 -0
  704. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/middleware.py +0 -0
  705. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/model.py +0 -0
  706. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/rest/rest_adapter.py +0 -0
  707. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/__init__.py +0 -0
  708. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/__init__.py +0 -0
  709. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/_adapter.py +0 -0
  710. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
  711. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
  712. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
  713. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/_errors.py +0 -0
  714. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/_operators.py +0 -0
  715. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
  716. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
  717. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
  718. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
  719. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
  720. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
  721. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
  722. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
  723. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
  724. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
  725. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
  726. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
  727. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/bytewax/runner.py +0 -0
  728. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/compiler/__init__.py +0 -0
  729. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/compiler/_bindings.py +0 -0
  730. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/compiler/_errors.py +0 -0
  731. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/compiler/_plan.py +0 -0
  732. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/core/__init__.py +0 -0
  733. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/core/_errors.py +0 -0
  734. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/core/_exceptions.py +0 -0
  735. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/core/_message.py +0 -0
  736. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/core/_tracing.py +0 -0
  737. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/core/_typing.py +0 -0
  738. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/graph/__init__.py +0 -0
  739. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/graph/_flow.py +0 -0
  740. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/__init__.py +0 -0
  741. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/_codec.py +0 -0
  742. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/_config.py +0 -0
  743. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/_errors.py +0 -0
  744. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/_key_resolver.py +0 -0
  745. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/_message.py +0 -0
  746. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/_record.py +0 -0
  747. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/_wire.py +0 -0
  748. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/client/__init__.py +0 -0
  749. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/client/_consumer.py +0 -0
  750. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/client/_producer.py +0 -0
  751. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/client/_protocol.py +0 -0
  752. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/client/_retry.py +0 -0
  753. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/message/__init__.py +0 -0
  754. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/message/_consumer.py +0 -0
  755. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/message/_producer.py +0 -0
  756. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/kafka/message/_protocol.py +0 -0
  757. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/mongo/__init__.py +0 -0
  758. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
  759. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/mongo/_config.py +0 -0
  760. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/mongo/_event.py +0 -0
  761. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/mongo/_normalize.py +0 -0
  762. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/__init__.py +0 -0
  763. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_boundary.py +0 -0
  764. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_branches.py +0 -0
  765. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_broadcast.py +0 -0
  766. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_capabilities.py +0 -0
  767. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_decompose.py +0 -0
  768. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_expand_routes.py +0 -0
  769. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_expr_eval.py +0 -0
  770. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_fork.py +0 -0
  771. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_helpers.py +0 -0
  772. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_mongo.py +0 -0
  773. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_protocols.py +0 -0
  774. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_router.py +0 -0
  775. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_shape.py +0 -0
  776. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_sink.py +0 -0
  777. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_step.py +0 -0
  778. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_table/__init__.py +0 -0
  779. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_table/_clickhouse.py +0 -0
  780. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_table/_delta.py +0 -0
  781. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_table/_sqlalchemy.py +0 -0
  782. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/_with.py +0 -0
  783. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/nodes/refs.py +0 -0
  784. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/streaming/testing.py +0 -0
  785. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/testing/agents.py +0 -0
  786. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/testing/golden.py +0 -0
  787. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/testing/http_harness.py +0 -0
  788. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/testing/in_memory.py +0 -0
  789. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/testing/repository_harness.py +0 -0
  790. {loom_kernel-9.2.0 → loom_kernel-10.0.0}/src/loom/testing/runner.py +0 -0
@@ -2,6 +2,95 @@
2
2
 
3
3
  ## ✨ Features
4
4
 
5
+ ### jobs
6
+
7
+ - **jobs:** `app.job_service` (`inline`, `celery` or `module:Class` built with
8
+ a `JobBackendContext`) names the job backend; queues listed in
9
+ `celery.queues`, but Celery's default queue, go to Celery through the new
10
+ `JobRouter`. Use cases keep
11
+ injecting `JobService`.
12
+ - **jobs:** `app.job_service: sqs` (extra `loom[sqs]`) sends each job to the
13
+ SQS queue `sqs.queues` maps its queue to, after the commit, as the
14
+ `JobEnvelope` the Lambda SQS adapter runs. `sqs:` inherits `aws:`.
15
+ FIFO queues take the SHA-256 of the new `Job.__group_by__` payload field as
16
+ `MessageGroupId`. Callbacks, priorities, delays SQS cannot honour and bodies
17
+ over 256 KiB raise `SQSDispatchError`; unmapped queues stop startup.
18
+ - **jobs:** an execution's SQS jobs leave after the commit in
19
+ `SendMessageBatch` calls per queue, in dispatch order (`sqs.batch`,
20
+ `sqs.batch_size`, `sqs.max_concurrent_sends`); a standard queue resends the
21
+ entries SQS refuses once, a FIFO queue stops at its first failure. `lambda.functions.<name>` with `sqs: true` declares `batch_size`,
22
+ `batching_window_s`, `max_concurrency` and `report_batch_item_failures`;
23
+ `false` makes the SQS handler fail the whole batch.
24
+
25
+ ### lambda
26
+
27
+ - **lambda:** `loom deploy manifest <config> [--function x]` prints a
28
+ versioned JSON manifest (`manifest_version: 1`) of each function of
29
+ `lambda.functions` for a deployment tool: the handler, code path and
30
+ queues once, then per function its http routes and `auth` or its sqs queue
31
+ and event source mapping, and the secret and SSM parameter names it
32
+ resolves (never values; no resolver runs). It runs the deploy
33
+ checks of `loom check --deploy` first, prints their findings to stderr and
34
+ no manifest when one fails. New keys: `lambda.handler` and
35
+ `lambda.functions.<name>.queue` (a key of `sqs.queues`), both required by
36
+ the manifest only.
37
+ - **rest:** `loom.rest.E001` also fails a `lambda.functions.<name>.auth`
38
+ that names no mechanism (`{}`, `jwt: null`, `custom: false`): it replaces
39
+ `app.rest.auth` for that function.
40
+
41
+ ### testing
42
+
43
+ - **testing:** Lambda functions are tested in process, without AWS:
44
+ `LambdaTestClient`, an `httpx.Client` like FastAPI's `TestClient`, sends API
45
+ Gateway HTTP API or REST events to the real handler; `sqs_record` and
46
+ `sqs_raw_record` drive the SQS handler with the `JobEnvelope`
47
+ `SQSJobService` sends; `RecordingJobService`
48
+ (`app.job_service: loom.testing:RecordingJobService`) records each dispatch
49
+ after the commit. The `testing` extra now includes `httpx`.
50
+
51
+ ### stores
52
+
53
+ - **stores:** an application composes `stores.default` and every store that
54
+ holds a model (`__store__`). Each store gets its own backend, engine,
55
+ repositories, unit of work and readiness probe; its `SessionManager` or
56
+ `MongoSessions` is injected by type for `default` and as
57
+ `(SessionManager, "<store>")` for the others. One invocation enlists the
58
+ stores it uses and commits them one after another (ADR 0008); nothing is
59
+ atomic across stores. When they do not all end the same way the execution
60
+ raises `StoresNotCommitted` (`stores_not_committed`, HTTP 500) with each
61
+ store's outcome.
62
+ - **stores:** `Joined[...]` (`loom.core.use_case`) wraps a repository a use
63
+ case or job injects, such as `Joined[RepoFor[AuditEntry]]`, to declare that
64
+ it writes to that repository's store as well as to its primary store, the
65
+ `__store__` of its main model. Composition refuses `Joined` on a store that
66
+ cannot roll back (`UseCaseErrorCode.JOINED_AUTOCOMMIT_STORE`).
67
+ - **stores:** a use case or job without a main model declares its primary
68
+ store with `__store__ = "<store>"`, as a model does; without it the primary
69
+ store stays `default`. A store it names that is not declared fails
70
+ composition, and so does `__store__` beside a main model.
71
+ - **stores:** `load_application(path, store="audit")` loads one store's models
72
+ and schema section, so `create_schema` and `verify` prepare and check a
73
+ second Postgres store. `Application.path` (`loom.core.locator`) is derived
74
+ from the new `Application.store` and is no longer a constructor argument. Migrations still cover `default` only and log
75
+ `StoresNotLoaded` naming the stores they leave out.
76
+ - **stores:** `persistence.rollback_timeout` (seconds, default 30) bounds the
77
+ rollbacks of one invocation together.
78
+ - **stores:** the errors a caller catches have public import paths:
79
+ `StoresNotCommitted`, `ScopeOwnershipError`, `UnitOfWorkInsideScope`,
80
+ `UndeclaredStoreWrite` and `NestedElevation` from `loom.core.uow`,
81
+ `ForeignSessionError` from `loom.core.errors`, and `ReadOnlyElevation` from
82
+ `loom.core.repository.sqlalchemy.rls`, next to `elevate`.
83
+
84
+ ### config
85
+
86
+ - **config:** a top-level `aws:` section (`region`, `url`, `profile`, `pool`,
87
+ timeouts and retries; no credentials) sets the AWS client defaults every
88
+ AWS product inherits: `dynamodb` stores, `storage.dynamodb`, the `secrets`
89
+ and `ssm` resolvers (which read it as written and refuse a placeholder in
90
+ it) and the SNS notifier (from the flow's YAML; the topic's region wins).
91
+ A product's own keys override it key by key; without `aws:` nothing changes.
92
+ No `config.overridable` entry may open `aws` or `sqs.queues`.
93
+
5
94
  ### etl
6
95
 
7
96
  - **etl:** `IntoTable(...).upsert(..., delete_flag=...)` deletes matched rows
@@ -59,6 +148,171 @@
59
148
 
60
149
  ## ⚠ Behaviour changes
61
150
 
151
+ ### jobs
152
+
153
+ - **jobs:** the composition applies `jobs.<Job>.*` once for every entry point,
154
+ so the API process now honours them too; before, only the Celery and Lambda
155
+ SQS workers did.
156
+ - **jobs:** without `app.job_service` the job service is still chosen from the
157
+ `celery` section, now with a `DeprecationWarning` when Celery is installed or
158
+ configured. Set `app.job_service` to keep the choice explicit.
159
+ - **jobs:** the Lambda SQS adapter logs the type of its job service instead
160
+ of assuming Celery for anything that is not inline.
161
+ - **jobs:** job settings belong to the application:
162
+ `MyJob.__queue__`, `__retries__`, `__countdown__`, `__timeout__` and
163
+ `__priority__` no longer reflect `jobs.<Job>`; read
164
+ `application.job_settings.of(MyJob)`. `apply_job_config`,
165
+ `apply_job_overrides`, `read_job_config`, `resolve_binding` and
166
+ `validate_bindings` are removed, and an invalid or unknown `jobs.<Job>` key
167
+ fails composition.
168
+
169
+ ### stores
170
+
171
+ - **stores:** a write to a store the running use case did not declare raises
172
+ `UndeclaredStoreWrite` (`undeclared_store_write`, HTTP 500) before the
173
+ driver is called, where it raised `ForeignSessionError`. So does a
174
+ `@transactional` call inside an invocation that did not enlist its store.
175
+ - **stores:** `with_session_scope` takes the method's write intent:
176
+ `@with_session_scope(write=True)` or `@with_session_scope(write=False)`; a
177
+ bare `@with_session_scope` fails at import. A repository subclass calling
178
+ `self._session_scope()` passes `write=` too. A custom write is now refused
179
+ or joins the invocation like a built-in one, instead of committing on its
180
+ own when its store was not enlisted.
181
+ - **stores:** post-commit actions run by the outcome of the stores they
182
+ depend on: a job dispatch or publish on every store of the execution that
183
+ queued it, a cache invalidation on its repository's store. With one store
184
+ two outcomes change. A commit whose result is unknown (a lost
185
+ acknowledgement, a cancellation during the commit) now runs the cache
186
+ invalidations it queued, and still sends no job. A store without
187
+ transactions whose use case raised, or whose invocation was poisoned, now
188
+ runs its cache invalidations too, and sends no job; a poisoned invocation
189
+ over such stores alone now fails with the poison's cause instead of
190
+ succeeding.
191
+ - **stores:** `loom.core.transaction` is removed (`in_atomic_transaction`,
192
+ `open_atomic_transaction`, `close_atomic_transaction`). A cache
193
+ invalidation asks the invocation scope instead
194
+ (`InvocationScope.owners_of`): it waits for the commit only while the
195
+ model's store is enlisted and its unit of work declares both
196
+ `transactional = True` and `phased = True`, which is all a third-party unit
197
+ of work now needs. A write already durable (a store not enlisted, a unit of
198
+ work driven in a single phase, DynamoDB, Mongo without transactions) bumps
199
+ at once, so a later failure of the invocation no longer discards it.
200
+ `set_active_mutations`, `reset_active_mutations` and
201
+ `get_pending_mutations` are removed: `record_mutation` records on
202
+ `InvocationScope.mutations` while an outermost `@transactional` collects
203
+ them.
204
+ - **stores:** `clear_pending_dispatches()` drops the job dispatches and
205
+ publishes of every store of the running invocation, and never a cache
206
+ invalidation.
207
+ - **stores:** a read-only execution (`read_only = True`, every REST GET) runs
208
+ in an invocation that writes to no store: a write raises
209
+ `UndeclaredStoreWrite` instead of committing on its own, and so does a
210
+ `@transactional` method it calls; `async with uow:` in it raises
211
+ `UnitOfWorkInsideScope`, with or without a configured unit of work. A
212
+ use case or job that writes, run from it (a `gather` child or the invoker
213
+ included), raises `UndeclaredStoreWrite` instead of opening and committing
214
+ an invocation of its own, and so does one run from a read-only execution
215
+ nested in a writer. Move the write to a use case that is not read-only. A
216
+ job it dispatches, with any job service, raises `UndeclaredStoreWrite` too.
217
+ An
218
+ invocation that enlists no store closes without an outcome and logs no
219
+ `InvocationOutcome`.
220
+ - **stores:** `async with uow:` and an outermost `@transactional` run through
221
+ the coordinator; `async with uow:` inside a running invocation raises
222
+ `UnitOfWorkInsideScope`. Even with one store, a write from a `gather` child
223
+ or from a task that outlived its use case raises `ScopeOwnershipError`. A
224
+ write in an open invocation with no execution running raises
225
+ `UndeclaredStoreWrite`.
226
+ SQLAlchemy flushes before it commits, a rollback interrupted by a second
227
+ cancellation is still awaited (bounded by `persistence.rollback_timeout`),
228
+ and Mongo never aborts after an attempted commit. The post-commit actions
229
+ queued inside, a nested use case's job dispatches and cache invalidations
230
+ included, run once the store has ended and by its outcome, as in an
231
+ execution; before, a nested use case sent them before the outer commit, and
232
+ a cache invalidation ran inline. A failed action raises `PostCommitError`
233
+ from `async with uow:` too. A job dispatched in the block is sent after the
234
+ commit instead of waiting for `flush_pending_dispatches()`, which raises
235
+ `RuntimeError` inside the block, as inside `@transactional`.
236
+ - **stores:** an unknown commit result is `Uncertain`, not a rollback:
237
+ SQLAlchemy `OperationalError`, `InterfaceError`, an invalidated connection
238
+ or a transport timeout during `COMMIT`, and Mongo
239
+ `UnknownTransactionCommitResult`. The connection is invalidated and only the
240
+ cache invalidations run. The caller gets `StoresNotCommitted`, even with
241
+ one store, caused by the driver error; job runners never retry it, and REST
242
+ still answers 500, now with the code `stores_not_committed`.
243
+ - **stores:** `SessionManager.active_session` and
244
+ `MongoSessions.active_session` (properties) are the only public way to read
245
+ a store's session; `get_active_session()`, `session_to_join()`,
246
+ `has_caller_scoped_session()` and Mongo `active_session()` are gone. A Mongo
247
+ `session_provider` is called with the write intent
248
+ (`Callable[[bool], AsyncClientSession | None]`); one without arguments no
249
+ longer works.
250
+ - **stores:** a SQLAlchemy repository refuses a `session=` that is not the
251
+ invocation's session for its store (`ForeignSessionError`), and
252
+ `CachedRepository` requires a repository with `model`.
253
+ - **stores:** DynamoDB writes go through the same checks
254
+ (`UndeclaredStoreWrite`, `ScopeOwnershipError`) before any call to AWS and
255
+ report `NonTransactional(wrote=True)`; `delete` is conditional. Its thread
256
+ pool starts when the store is built, shuts down when the application closes
257
+ and starts again when it reopens.
258
+ - **stores:** wiring API. `RuntimeExecutor(uow_factory=)` and
259
+ `create_kernel(uow_factory=)` become `coordinator=` (`OrderedCommits`);
260
+ `Recipe.backend` becomes `Recipe.default_backend`, and
261
+ `CompositionSource.backend(key, *, default=)` takes the store;
262
+ `Application.persistence` and `require_single_store` are removed. `store`
263
+ is required by `StoreCatalog.served_by`, `BackendRuntime`, `SessionManager`,
264
+ `build_session_manager`, `MongoSessions`, `MongoUnitOfWork` and
265
+ `MongoUnitOfWorkFactory.transactional`;
266
+ `build_repository_registration_module` takes `default_builder=` and
267
+ `store=`. `StoreCatalog.models_by_store` always includes `default`. Binding
268
+ `MongoSessions` unkeyed, or a session manager keyed by store, is refused.
269
+ An invalid `stores` section fails in `compose_application`.
270
+ `_ROLLBACK_TIMEOUT_S` is now `ROLLBACK_TIMEOUT_S`.
271
+
272
+ ### rls
273
+
274
+ - **rls:** a Postgres role that is a superuser or has `BYPASSRLS` is refused
275
+ at startup in every mode, `create_all` included; local setups running as
276
+ `postgres` need a plain role.
277
+ - **rls:** elevation is routed per store. `SQLAlchemyElevationSink` becomes
278
+ `SQLAlchemyStoreElevation`; a hand-built kernel registers
279
+ `ScopedElevationSink({store: SQLAlchemyStoreElevation(session_manager)})`.
280
+ `validate_elevations(product, Mapping[StoreKey, ScopedTables])` runs in the
281
+ composition, and a backend plugin may expose `PersistenceWiring.elevation`.
282
+ A scope that is elevable or listed in `AuthzProduct.elevations` and
283
+ declared by two stores fails at startup
284
+ (`ELEVABLE_SCOPE_IN_SEVERAL_STORES`).
285
+ - **rls:** `elevate()` in a read-only execution, REST GET routes included,
286
+ raises `ReadOnlyElevation`. A failed elevation step rolls back every store
287
+ of the invocation, even when a parent use case catches the error.
288
+ - **rls:** scope sources are bound when the application is composed: every
289
+ `schema.scopes` binding is validated at startup, and a source registered
290
+ after composition does not reach that application.
291
+
292
+ ### rest
293
+
294
+ - **rest:** a `5xx` body no longer carries the error's message, which could
295
+ name hosts, databases, stores or classes: it keeps `code`, `trace_id` and
296
+ `committed`, with the fixed message `An unexpected error occurred` (`503`:
297
+ `The service is temporarily unavailable`), also for an `HTTPException`
298
+ whose detail is a string. The message is logged at `ERROR` under the same
299
+ `trace_id`. FastAPI and Lambda answer the same; `4xx` bodies are unchanged.
300
+
301
+ ### ai
302
+
303
+ - **ai:** a `5xx` `/run` body carries the same fixed message instead of the
304
+ run error's, `HOOK_FAILED` and `CONVERSATION_LOAD_FAILED` included; `code`
305
+ and `interaction_id` stay, and the error is logged at `ERROR`.
306
+
307
+
308
+ ### identity
309
+
310
+ - **identity:** the executor binds the identity it is given for the whole
311
+ execution, so `Caller()` and row-level security always agree. A nested
312
+ execution joining the caller's unit of work as another identity raises
313
+ `NestedIdentityMismatch`; any nested execution under an active elevation
314
+ raises `NestedElevation`.
315
+
62
316
  ### etl
63
317
 
64
318
  - **etl:** the `PolarsStepRunner` reader applies what a `FromTable` or
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: loom-kernel
3
- Version: 9.2.0
3
+ Version: 10.0.0
4
4
  Summary: Loom Python project
5
5
  License-File: LICENSE
6
6
  Classifier: Programming Language :: Python :: 3
@@ -81,6 +81,11 @@ Requires-Dist: opentelemetry-sdk<2.0,>=1.27; extra == 'etl-spark'
81
81
  Requires-Dist: pyspark<4.0,>=3.5; (python_version < '3.13') and extra == 'etl-spark'
82
82
  Provides-Extra: jwt
83
83
  Requires-Dist: pyjwt[crypto]<3,>=2.8; extra == 'jwt'
84
+ Provides-Extra: lambda
85
+ Requires-Dist: fastapi<1.0,>=0.115; extra == 'lambda'
86
+ Requires-Dist: mangum<1.0,>=0.22; extra == 'lambda'
87
+ Requires-Dist: prometheus-client>=0.20; extra == 'lambda'
88
+ Requires-Dist: pydantic<3.0,>=2.0; extra == 'lambda'
84
89
  Provides-Extra: logfire
85
90
  Requires-Dist: logfire<5,>=4.0; extra == 'logfire'
86
91
  Requires-Dist: opentelemetry-api<2.0,>=1.27; extra == 'logfire'
@@ -109,6 +114,8 @@ Provides-Extra: sqlalchemy
109
114
  Requires-Dist: alembic<2,>=1.13; extra == 'sqlalchemy'
110
115
  Requires-Dist: greenlet>=3.0; extra == 'sqlalchemy'
111
116
  Requires-Dist: sqlalchemy<3.0,>=2.0; extra == 'sqlalchemy'
117
+ Provides-Extra: sqs
118
+ Requires-Dist: boto3>=1.35; extra == 'sqs'
112
119
  Provides-Extra: streaming
113
120
  Requires-Dist: anyio<5.0,>=4.0; extra == 'streaming'
114
121
  Requires-Dist: bytewax>=0.21; (python_version < '3.13') and extra == 'streaming'
@@ -119,6 +126,7 @@ Requires-Dist: opentelemetry-exporter-otlp-proto-http<2.0,>=1.27; extra == 'stre
119
126
  Requires-Dist: opentelemetry-sdk<2.0,>=1.27; extra == 'streaming'
120
127
  Requires-Dist: uvloop<1.0,>=0.21; (sys_platform != 'win32') and extra == 'streaming'
121
128
  Provides-Extra: testing
129
+ Requires-Dist: httpx>=0.27; extra == 'testing'
122
130
  Requires-Dist: pytest>=8.3.0; extra == 'testing'
123
131
  Description-Content-Type: text/markdown
124
132
 
@@ -439,8 +447,9 @@ class AddressRestInterface(RestInterface[Address]):
439
447
 
440
448
  The `create_app()` factory wires everything — DB, cache, DI, routes — from a YAML config:
441
449
 
450
+ In `config/api.yaml`:
451
+
442
452
  ```yaml
443
- # config/api.yaml
444
453
  app:
445
454
  name: my_store
446
455
  code_path: src
@@ -459,16 +468,18 @@ app:
459
468
 
460
469
  persistence:
461
470
  cursors:
462
- signing: ephemeral # development.yaml only; production.yaml configures keys
471
+ signing: ephemeral
463
472
 
464
- database:
465
- url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///store.db}
473
+ stores:
474
+ default:
475
+ backend: sqlalchemy
476
+ url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///store.db}
466
477
 
467
- cache: # optional; wraps every repository marked @cached
478
+ cache:
468
479
  default_ttl: 300
469
480
  aiocache_config:
470
481
  default:
471
- cache: aiocache.SimpleMemoryCache # memory -> Redis: aiocache.RedisCache
482
+ cache: aiocache.SimpleMemoryCache
472
483
  serializer:
473
484
  class: loom.core.cache.serializer.MsgspecSerializer
474
485
 
@@ -481,6 +492,12 @@ observability:
481
492
  enabled: false
482
493
  ```
483
494
 
495
+ | Key | Meaning |
496
+ | --- | --- |
497
+ | `signing` | `signing: ephemeral` is for `development.yaml` only; `production.yaml` configures keys |
498
+ | `cache` | optional; wraps every repository marked `@cached` |
499
+ | `aiocache_config.default.cache` | memory -> Redis: `aiocache.RedisCache` |
500
+
484
501
  ```python
485
502
  # main.py — 3 lines
486
503
  from loom.rest.fastapi.auto import create_app
@@ -315,8 +315,9 @@ class AddressRestInterface(RestInterface[Address]):
315
315
 
316
316
  The `create_app()` factory wires everything — DB, cache, DI, routes — from a YAML config:
317
317
 
318
+ In `config/api.yaml`:
319
+
318
320
  ```yaml
319
- # config/api.yaml
320
321
  app:
321
322
  name: my_store
322
323
  code_path: src
@@ -335,16 +336,18 @@ app:
335
336
 
336
337
  persistence:
337
338
  cursors:
338
- signing: ephemeral # development.yaml only; production.yaml configures keys
339
+ signing: ephemeral
339
340
 
340
- database:
341
- url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///store.db}
341
+ stores:
342
+ default:
343
+ backend: sqlalchemy
344
+ url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///store.db}
342
345
 
343
- cache: # optional; wraps every repository marked @cached
346
+ cache:
344
347
  default_ttl: 300
345
348
  aiocache_config:
346
349
  default:
347
- cache: aiocache.SimpleMemoryCache # memory -> Redis: aiocache.RedisCache
350
+ cache: aiocache.SimpleMemoryCache
348
351
  serializer:
349
352
  class: loom.core.cache.serializer.MsgspecSerializer
350
353
 
@@ -357,6 +360,12 @@ observability:
357
360
  enabled: false
358
361
  ```
359
362
 
363
+ | Key | Meaning |
364
+ | --- | --- |
365
+ | `signing` | `signing: ephemeral` is for `development.yaml` only; `production.yaml` configures keys |
366
+ | `cache` | optional; wraps every repository marked `@cached` |
367
+ | `aiocache_config.default.cache` | memory -> Redis: `aiocache.RedisCache` |
368
+
360
369
  ```python
361
370
  # main.py — 3 lines
362
371
  from loom.rest.fastapi.auto import create_app
@@ -31,6 +31,7 @@ loom = "loom.cli:main"
31
31
  # them needs pytest at runtime like any other declared dependency.
32
32
  testing = [
33
33
  "pytest>=8.3.0",
34
+ "httpx>=0.27",
34
35
  ]
35
36
  rest = [
36
37
  "fastapi>=0.115,<1.0",
@@ -51,6 +52,9 @@ clickhouse = [
51
52
  dynamodb = [
52
53
  "boto3>=1.35",
53
54
  ]
55
+ sqs = [
56
+ "boto3>=1.35",
57
+ ]
54
58
  mongo = [
55
59
  "pymongo>=4.9,<5.0",
56
60
  ]
@@ -171,6 +175,14 @@ cli = [
171
175
  "pyyaml>=6",
172
176
  "typer>=0.12,<1",
173
177
  ]
178
+ # AWS Lambda behind API Gateway: the REST stack without a server, and the
179
+ # translator from API Gateway events to ASGI. The SQS adapter needs no extra.
180
+ lambda = [
181
+ "fastapi>=0.115,<1.0",
182
+ "pydantic>=2.0,<3.0",
183
+ "prometheus-client>=0.20",
184
+ "mangum>=0.22,<1.0",
185
+ ]
174
186
 
175
187
  [project.entry-points."loom.ai.engines"]
176
188
  pydantic-ai = "loom.ai.engines.pydantic_ai.provider:PydanticAIEngineProvider"
@@ -284,6 +296,9 @@ dev = [
284
296
  "a2a-sdk>=1.1,<2",
285
297
  "pydantic-ai-harness[skills]>=0.28,<1",
286
298
  "typer>=0.12,<1",
299
+ "pytest-timeout>=2.3",
300
+ # The Lambda HTTP adapter's tests run in the fast lane, without extras.
301
+ "mangum>=0.22,<1.0",
287
302
  ]
288
303
 
289
304
  [tool.hatch.build.targets.wheel]
@@ -440,6 +455,7 @@ pythonpath = [
440
455
  ]
441
456
  addopts = "-ra --log-disable=aiosqlite"
442
457
  asyncio_mode = "auto"
458
+ timeout = 300
443
459
  log_cli = true
444
460
  log_cli_level = "DEBUG"
445
461
  log_cli_format = "%(asctime)s %(levelname)s %(name)s %(message)s"
@@ -16,6 +16,8 @@ import logging
16
16
  from collections.abc import Coroutine
17
17
  from typing import Any, TypeVar
18
18
 
19
+ from loom.core._async import discard_outcome
20
+
19
21
  _logger = logging.getLogger(__name__)
20
22
 
21
23
  _T = TypeVar("_T")
@@ -34,7 +36,8 @@ async def shield_and_drain(call: Coroutine[Any, Any, _T], *, label: str) -> _T:
34
36
  Raises:
35
37
  asyncio.CancelledError: Re-raised to the caller once the call has
36
38
  finished draining underneath it; the call itself still ran to
37
- completion.
39
+ completion. A second cancellation while draining escapes at
40
+ once, so a caller can still abandon a call that hangs.
38
41
  """
39
42
  in_flight = asyncio.ensure_future(call)
40
43
  try:
@@ -42,11 +45,5 @@ async def shield_and_drain(call: Coroutine[Any, Any, _T], *, label: str) -> _T:
42
45
  except asyncio.CancelledError:
43
46
  _logger.debug("%r: draining a cancelled call", label)
44
47
  await asyncio.wait([in_flight])
45
- _discard_outcome(in_flight)
48
+ discard_outcome(in_flight)
46
49
  raise
47
-
48
-
49
- def _discard_outcome(task: asyncio.Future[Any]) -> None:
50
- """Consume a drained call's outcome so it is never reported as unretrieved."""
51
- if not task.cancelled():
52
- task.exception()
@@ -1,7 +1,7 @@
1
1
  """Start-up verification of use-case marker bindings, shared by every worker.
2
2
 
3
3
  Both composition roots that admit a marker — the FastAPI auto-bootstrap
4
- (:mod:`loom.rest.fastapi.auto`) and the Celery worker bootstrap
4
+ (:mod:`loom.composition._ai`) and the Celery worker bootstrap
5
5
  (:mod:`loom.celery.bootstrap`) — call :func:`verify_agent_markers` once every
6
6
  compiled use case declaring at least one ``Agent()`` binding is already known
7
7
  via :func:`~loom.core.use_case.agent_markers.declaring_agent_bindings`, so
@@ -32,6 +32,7 @@ from starlette.responses import Response
32
32
 
33
33
  from loom.ai.errors import AgentRunErrorCode
34
34
  from loom.ai.fastapi.response import AgentJSONResponse
35
+ from loom.rest.errors import _INTERNAL_ERROR_MESSAGE
35
36
 
36
37
  _JSONRPC_VERSION: Final = "2.0"
37
38
 
@@ -84,10 +85,6 @@ RUN_ERROR_DETAILS: Final[Mapping[AgentRunErrorCode, str]] = MappingProxyType(
84
85
  }
85
86
  )
86
87
 
87
- # Detail of a failure with no catalogue entry, including the catch-all. Mirrors
88
- # the wording of the HTTP surface's own unexpected-failure body.
89
- _UNEXPECTED_DETAIL: Final[str] = "An unexpected error occurred"
90
-
91
88
 
92
89
  class RpcEnvelope(msgspec.Struct, frozen=True, kw_only=True):
93
90
  """Permissive view of a JSON-RPC request, so a malformed one still echoes its id."""
@@ -162,7 +159,7 @@ def internal_error(code: AgentRunErrorCode) -> InternalError:
162
159
  return InternalError(
163
160
  code=-32603,
164
161
  message="Internal error",
165
- data={"code": str(code), "detail": RUN_ERROR_DETAILS.get(code, _UNEXPECTED_DETAIL)},
162
+ data={"code": str(code), "detail": RUN_ERROR_DETAILS.get(code, _INTERNAL_ERROR_MESSAGE)},
166
163
  )
167
164
 
168
165
 
@@ -171,7 +168,10 @@ def unexpected_error() -> InternalError:
171
168
  return InternalError(
172
169
  code=-32603,
173
170
  message="Internal error",
174
- data={"code": str(AgentRunErrorCode.PROVIDER_UNAVAILABLE), "detail": _UNEXPECTED_DETAIL},
171
+ data={
172
+ "code": str(AgentRunErrorCode.PROVIDER_UNAVAILABLE),
173
+ "detail": _INTERNAL_ERROR_MESSAGE,
174
+ },
175
175
  )
176
176
 
177
177
 
@@ -295,7 +295,7 @@ def compile_mcp_capability(
295
295
  """Resolve a server name and filter into a :class:`CompiledMcpCapability`.
296
296
 
297
297
  Shared by the agent ``mcp`` capability (:func:`_compile_mcp`) and the
298
- use-case ``Mcp()`` marker path (:mod:`loom.rest.fastapi.auto`), so both
298
+ use-case ``Mcp()`` marker path (:mod:`loom.composition._ai`), so both
299
299
  produce an identical compiled capability from identical inputs and the
300
300
  agent path's behaviour cannot drift from an independent copy.
301
301
 
@@ -326,11 +326,7 @@ class A2AConfig(LoomFrozenStruct, frozen=True, kw_only=True):
326
326
  _warn_plaintext_loopback("ai.a2a.base_url", address)
327
327
  if fault is not None:
328
328
  raise AgentCompilationError(
329
- [
330
- AgentErrorCode.A2A_BASE_URL_INVALID.issue(
331
- url=_redact_url(address), reason=fault
332
- )
333
- ]
329
+ [AgentErrorCode.A2A_BASE_URL_INVALID.issue(url=_redact_url(address), reason=fault)]
334
330
  )
335
331
 
336
332
 
@@ -196,7 +196,7 @@ def _handlebars_instruction(
196
196
  The closure renders against ``ctx.deps.state``, never against ``ctx.deps``
197
197
  itself. ``ctx.deps`` is the bundle carrying the caller's verified
198
198
  ``Identity``, the application container and a caller-bound invoker
199
- (``loom.rest.fastapi.auto``); rendering against the bundle would put all
199
+ (``loom.composition._ai``); rendering against the bundle would put all
200
200
  three within a marker's reach. Rendering against ``state`` — the
201
201
  normalised mapping the artifact declared a shape for — is the security
202
202
  boundary a template cannot cross (FR-036).
@@ -63,6 +63,7 @@ from loom.core.observability.runtime import ObservabilityRuntime
63
63
  from loom.core.observability.span import LoomSpan
64
64
  from loom.core.tracing import get_trace_id
65
65
  from loom.rest.auth.abc import Authenticator
66
+ from loom.rest.errors import _INTERNAL_ERROR_MESSAGE, _public_message
66
67
 
67
68
  _logger = logging.getLogger(__name__)
68
69
 
@@ -143,11 +144,20 @@ _REQUEST_DECODER = msgspec.json.Decoder(_AgentRunRequest)
143
144
 
144
145
 
145
146
  def _run_error_response(error: AgentRunError) -> Response:
146
- """Map a run-error code onto its published HTTP status."""
147
+ """Map a run-error code onto its published HTTP status; a ``5xx`` hides the message."""
148
+ status = _STATUS_BY_CODE.get(error.code, 500)
149
+ if status >= 500:
150
+ _logger.error(
151
+ "Agent run failed (code=%s interaction_id=%s trace_id=%s)",
152
+ error.code,
153
+ error.interaction_id,
154
+ get_trace_id(),
155
+ exc_info=error,
156
+ )
147
157
  return error_response(
148
- _STATUS_BY_CODE.get(error.code, 500),
158
+ status,
149
159
  str(error.code),
150
- str(error),
160
+ _public_message(status, str(error)),
151
161
  interaction_id=error.interaction_id,
152
162
  )
153
163
 
@@ -360,7 +370,7 @@ def _make_run_handler(
360
370
  return _run_error_response(exc)
361
371
  except Exception:
362
372
  _logger.exception("Unhandled error in the run endpoint of agent %r", name)
363
- return error_response(500, "INTERNAL_ERROR", "An unexpected error occurred")
373
+ return error_response(500, "INTERNAL_ERROR", _INTERNAL_ERROR_MESSAGE)
364
374
 
365
375
  return run_agent
366
376
 
@@ -14,6 +14,7 @@ from typing import Any, Final
14
14
 
15
15
  from loom.ai.compiler._plan import AgentPlan
16
16
  from loom.ai.errors import AgentRunError, AgentRunErrorCode
17
+ from loom.core._async import discard_outcome
17
18
  from loom.core.errors import Forbidden, Unauthenticated
18
19
  from loom.core.identity import Identity
19
20
  from loom.core.sql.abc import RoleNotAllowedError, RolesNotBoundError
@@ -59,8 +60,9 @@ async def bounded(coro: Coroutine[Any, Any, object], run: RunContext, *, what: s
59
60
  by the consumer's cancellation, so a started use case finishes or fails
60
61
  cleanly even when the consumer leaves; its outcome is retrieved on every
61
62
  exit path, so nothing ends "never retrieved". Transaction safety is not
62
- the shield's job: the executor exits the unit of work with the exception
63
- on any ``BaseException`` and the adapter rolls back.
63
+ the shield's job: on any ``BaseException`` the executor ends its
64
+ invocation scope with the exception, and the coordinator rolls back every
65
+ store that did not commit.
64
66
 
65
67
  Args:
66
68
  coro: The use-case invocation to run.
@@ -116,7 +118,7 @@ async def _settle(task: asyncio.Future[object], bound: float, run: RunContext, w
116
118
  task.cancel()
117
119
  # The task runs detached from here on: retrieve a late outcome so an
118
120
  # exception raised after this point is never "never retrieved".
119
- task.add_done_callback(_retrieve_outcome)
121
+ task.add_done_callback(discard_outcome)
120
122
  _logger.warning(
121
123
  "%s of agent %r still running at its bound after the consumer "
122
124
  "left; cancelled (interaction %s)",
@@ -180,9 +182,3 @@ def failure_error(
180
182
  "%s of agent %r failed (interaction %s)", what, run.plan.name, run.interaction_id
181
183
  )
182
184
  return AgentRunError(code, message, interaction_id=run.interaction_id)
183
-
184
-
185
- def _retrieve_outcome(task: asyncio.Future[object]) -> None:
186
- """Mark a detached task's outcome as retrieved once it finally ends."""
187
- if not task.cancelled():
188
- task.exception()
@@ -125,7 +125,7 @@ class _OpenedClient:
125
125
  class UseCaseMcpGrant:
126
126
  """One verified ``Mcp()`` marker binding, compiled into a runtime input.
127
127
 
128
- Built by :mod:`loom.rest.fastapi.auto` (``_resolve_ai``) once the marker's
128
+ Built by :mod:`loom.composition._ai` (``resolve_ai``) once the marker's
129
129
  server name has already been verified against ``ai.mcp_servers``, and
130
130
  handed to :class:`AgentRuntime` so the server it names joins the set the
131
131
  runtime opens even when no agent plan declares it. ``capability`` carries