loom-kernel 9.2.0__tar.gz → 10.1.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.1.0}/CHANGELOG.md +268 -0
  2. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/PKG-INFO +26 -9
  3. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/README.md +15 -6
  4. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/pyproject.toml +19 -3
  5. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/_concurrency.py +5 -8
  6. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/_startup.py +1 -1
  7. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/a2a/_rpc.py +6 -6
  8. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_capabilities.py +1 -1
  9. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/config.py +1 -5
  10. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_instructions.py +1 -1
  11. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/fastapi/endpoints.py +14 -4
  12. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_bounded.py +5 -9
  13. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_lifecycle.py +1 -1
  14. loom_kernel-10.1.0/src/loom/celery/__init__.py +52 -0
  15. loom_kernel-10.1.0/src/loom/celery/_discovery.py +45 -0
  16. loom_kernel-10.1.0/src/loom/celery/adapter.py +421 -0
  17. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/celery/auto.py +3 -1
  18. loom_kernel-10.1.0/src/loom/celery/bootstrap.py +203 -0
  19. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/celery/config.py +5 -82
  20. loom_kernel-10.1.0/src/loom/celery/constants.py +10 -0
  21. loom_kernel-10.1.0/src/loom/celery/errors.py +45 -0
  22. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/celery/runner.py +138 -150
  23. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/celery/service.py +27 -13
  24. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/cli/app.py +2 -0
  25. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/cli/check.py +45 -19
  26. loom_kernel-10.1.0/src/loom/cli/deploy.py +60 -0
  27. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/cli/schema.py +21 -6
  28. loom_kernel-10.1.0/src/loom/composition/__init__.py +46 -0
  29. loom_kernel-9.2.0/src/loom/rest/fastapi/_auto_ai.py → loom_kernel-10.1.0/src/loom/composition/_ai.py +97 -153
  30. loom_kernel-10.1.0/src/loom/composition/_jobs.py +225 -0
  31. loom_kernel-10.1.0/src/loom/composition/_reserved.py +73 -0
  32. loom_kernel-10.1.0/src/loom/composition/_sql.py +118 -0
  33. loom_kernel-10.1.0/src/loom/composition/application.py +177 -0
  34. loom_kernel-10.1.0/src/loom/composition/build.py +574 -0
  35. loom_kernel-10.1.0/src/loom/composition/errors.py +144 -0
  36. loom_kernel-10.1.0/src/loom/composition/host.py +242 -0
  37. loom_kernel-10.1.0/src/loom/composition/recipe.py +72 -0
  38. loom_kernel-10.1.0/src/loom/composition/resources.py +80 -0
  39. loom_kernel-10.1.0/src/loom/composition/source.py +82 -0
  40. loom_kernel-10.1.0/src/loom/core/_async.py +63 -0
  41. loom_kernel-10.1.0/src/loom/core/authz/elevation.py +274 -0
  42. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/backend/scoped_ddl.py +12 -2
  43. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/backend/sqlalchemy.py +25 -15
  44. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/bootstrap/kernel.py +5 -4
  45. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/repository.py +25 -37
  46. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/wiring.py +3 -3
  47. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/__init__.py +3 -2
  48. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/_resolver_utils.py +64 -37
  49. loom_kernel-10.1.0/src/loom/core/config/aws.py +48 -0
  50. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/checks.py +1 -12
  51. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/context.py +11 -7
  52. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/keys.py +6 -2
  53. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/loader.py +9 -5
  54. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/overrides.py +50 -22
  55. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/resolver.py +3 -2
  56. loom_kernel-10.1.0/src/loom/core/config/retired.py +107 -0
  57. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/secrets.py +25 -39
  58. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/ssm.py +24 -38
  59. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/aws/__init__.py +2 -2
  60. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/aws/config.py +28 -2
  61. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/clickhouse/config.py +3 -3
  62. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/mongo/config.py +1 -1
  63. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/contracts/manifest.py +3 -0
  64. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/di/container.py +29 -0
  65. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/discovery/base.py +11 -2
  66. loom_kernel-10.1.0/src/loom/core/discovery/config.py +116 -0
  67. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/discovery/manifest.py +7 -3
  68. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/discovery/modules.py +4 -1
  69. loom_kernel-10.1.0/src/loom/core/discovery/worker.py +394 -0
  70. loom_kernel-10.1.0/src/loom/core/discovery/worker_manifest.py +15 -0
  71. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/engine/compiler.py +66 -2
  72. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/engine/executor.py +236 -109
  73. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/engine/plan.py +7 -0
  74. loom_kernel-10.1.0/src/loom/core/engine/post_commit.py +353 -0
  75. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/errors/__init__.py +6 -0
  76. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/errors/codes.py +10 -0
  77. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/errors/errors.py +71 -1
  78. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/identity/context.py +3 -1
  79. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/job/__init__.py +3 -0
  80. loom_kernel-10.1.0/src/loom/core/job/config.py +92 -0
  81. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/job/context.py +41 -17
  82. loom_kernel-10.1.0/src/loom/core/job/envelope.py +80 -0
  83. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/job/job.py +5 -0
  84. loom_kernel-10.1.0/src/loom/core/job/outcome.py +15 -0
  85. loom_kernel-10.1.0/src/loom/core/job/router.py +126 -0
  86. loom_kernel-10.1.0/src/loom/core/job/run.py +40 -0
  87. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/job/service.py +17 -3
  88. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/locator.py +94 -88
  89. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/base.py +4 -1
  90. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/scoped.py +11 -0
  91. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/persistence/__init__.py +2 -0
  92. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/persistence/abc.py +29 -6
  93. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/persistence/database.py +53 -39
  94. loom_kernel-10.1.0/src/loom/core/persistence/elevation.py +219 -0
  95. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/persistence/none.py +15 -4
  96. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/persistence/profile.py +38 -3
  97. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/persistence/registry.py +19 -8
  98. loom_kernel-10.1.0/src/loom/core/persistence/stores.py +371 -0
  99. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/plugins/entrypoints.py +4 -2
  100. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/checks.py +9 -4
  101. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/cursor.py +3 -3
  102. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/session_scope.py +0 -3
  103. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/dynamodb/backend.py +67 -25
  104. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/dynamodb/registry.py +11 -19
  105. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/dynamodb/repository.py +45 -13
  106. loom_kernel-10.1.0/src/loom/core/repository/mongo/backend.py +208 -0
  107. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/mongo/registry.py +9 -7
  108. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/mongo/repository.py +33 -28
  109. loom_kernel-10.1.0/src/loom/core/repository/mongo/uow.py +301 -0
  110. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/registration.py +15 -6
  111. loom_kernel-10.1.0/src/loom/core/repository/sqlalchemy/backend.py +469 -0
  112. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/integrity.py +1 -1
  113. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/migrations/runners.py +2 -6
  114. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/mixins.py +19 -17
  115. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/registry.py +21 -15
  116. loom_kernel-10.1.0/src/loom/core/repository/sqlalchemy/repository.py +182 -0
  117. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/__init__.py +5 -6
  118. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/bootstrap.py +6 -1
  119. loom_kernel-10.1.0/src/loom/core/repository/sqlalchemy/rls/elevate.py +88 -0
  120. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/partitions.py +1 -10
  121. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/provider.py +26 -23
  122. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/schema.py +2 -1
  123. loom_kernel-10.1.0/src/loom/core/repository/sqlalchemy/rls/sources.py +78 -0
  124. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/session_manager.py +131 -6
  125. loom_kernel-10.1.0/src/loom/core/repository/sqlalchemy/transactional.py +206 -0
  126. loom_kernel-10.1.0/src/loom/core/repository/sqlalchemy/uow.py +203 -0
  127. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/schema_names.py +1 -1
  128. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/clickhouse/registry.py +69 -16
  129. loom_kernel-10.1.0/src/loom/core/sql/loader.py +36 -0
  130. loom_kernel-10.1.0/src/loom/core/uow/__init__.py +30 -0
  131. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/uow/abc.py +1 -2
  132. loom_kernel-10.1.0/src/loom/core/uow/alone.py +135 -0
  133. loom_kernel-10.1.0/src/loom/core/uow/coordinator.py +711 -0
  134. loom_kernel-10.1.0/src/loom/core/uow/scope.py +693 -0
  135. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/__init__.py +5 -0
  136. loom_kernel-10.1.0/src/loom/core/use_case/errors.py +130 -0
  137. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/factory.py +37 -4
  138. loom_kernel-10.1.0/src/loom/core/use_case/joined.py +57 -0
  139. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runner/config_loader.py +8 -2
  140. loom_kernel-10.1.0/src/loom/jobs/__init__.py +1 -0
  141. loom_kernel-10.1.0/src/loom/jobs/aws/__init__.py +3 -0
  142. loom_kernel-10.1.0/src/loom/jobs/aws/sqs.py +422 -0
  143. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_assemble.py +1 -1
  144. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/notify/_factory.py +9 -4
  145. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/notify/_sns.py +11 -5
  146. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/auth/abc.py +4 -4
  147. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/checks.py +30 -7
  148. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/compiler.py +60 -19
  149. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/config.py +1 -1
  150. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/errors.py +23 -3
  151. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/__init__.py +3 -0
  152. loom_kernel-10.1.0/src/loom/rest/fastapi/_auto_ai.py +128 -0
  153. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/_auto_auth.py +5 -6
  154. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/_auto_sql.py +7 -105
  155. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/_errors.py +23 -6
  156. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/_exclusions.py +3 -3
  157. loom_kernel-10.1.0/src/loom/rest/fastapi/adapter.py +772 -0
  158. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/app.py +43 -13
  159. loom_kernel-10.1.0/src/loom/rest/fastapi/auto.py +207 -0
  160. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/health.py +11 -13
  161. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/router_runtime.py +12 -1
  162. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/sql.py +21 -6
  163. loom_kernel-10.1.0/src/loom/serverless/__init__.py +1 -0
  164. loom_kernel-10.1.0/src/loom/serverless/aws/__init__.py +1 -0
  165. loom_kernel-10.1.0/src/loom/serverless/aws/lambda_/__init__.py +46 -0
  166. loom_kernel-10.1.0/src/loom/serverless/aws/lambda_/_refusals.py +69 -0
  167. loom_kernel-10.1.0/src/loom/serverless/aws/lambda_/functions.py +203 -0
  168. loom_kernel-10.1.0/src/loom/serverless/aws/lambda_/http.py +268 -0
  169. loom_kernel-10.1.0/src/loom/serverless/aws/lambda_/manifest.py +266 -0
  170. loom_kernel-10.1.0/src/loom/serverless/aws/lambda_/sqs.py +316 -0
  171. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/compiler/_compiler.py +5 -2
  172. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/compiler/phases/build_plan.py +21 -9
  173. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/compiler/phases/validate.py +28 -12
  174. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_table/common.py +31 -17
  175. loom_kernel-10.1.0/src/loom/streaming/nodes/_table/config.py +208 -0
  176. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/testing/__init__.py +26 -0
  177. loom_kernel-10.1.0/src/loom/testing/jobs.py +187 -0
  178. loom_kernel-10.1.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.1.0}/.gitignore +0 -0
  199. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/LICENSE +0 -0
  200. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/__init__.py +0 -0
  201. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/__init__.py +0 -0
  202. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/_filters.py +0 -0
  203. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/_paths.py +0 -0
  204. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/_roles.py +0 -0
  205. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/_transport.py +0 -0
  206. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/_usecase.py +0 -0
  207. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/a2a/__init__.py +0 -0
  208. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/a2a/_binding.py +0 -0
  209. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/a2a/_handlers.py +0 -0
  210. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/a2a/card.py +0 -0
  211. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/a2a/events.py +0 -0
  212. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/a2a/server.py +0 -0
  213. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/abc.py +0 -0
  214. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/bootstrap.py +0 -0
  215. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/__init__.py +0 -0
  216. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/_compiler.py +0 -0
  217. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/_fingerprint.py +0 -0
  218. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/_plan.py +0 -0
  219. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/__init__.py +0 -0
  220. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_conversation.py +0 -0
  221. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_feedable.py +0 -0
  222. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_hook.py +0 -0
  223. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_instructions.py +0 -0
  224. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_limits.py +0 -0
  225. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_model_role.py +0 -0
  226. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_output.py +0 -0
  227. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_state.py +0 -0
  228. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/declarative/__init__.py +0 -0
  229. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/declarative/_envelope.py +0 -0
  230. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/declarative/_schema.py +0 -0
  231. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/declarative/_v1.py +0 -0
  232. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
  233. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/describe.py +0 -0
  234. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/__init__.py +0 -0
  235. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
  236. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_a2a.py +0 -0
  237. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_capabilities.py +0 -0
  238. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_engine.py +0 -0
  239. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
  240. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_escape.py +0 -0
  241. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
  242. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
  243. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_history.py +0 -0
  244. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_limits.py +0 -0
  245. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_mcp.py +0 -0
  246. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_models.py +0 -0
  247. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_native.py +0 -0
  248. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
  249. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
  250. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
  251. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
  252. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/extras/__init__.py +0 -0
  253. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/extras/a2a.py +0 -0
  254. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/extras/handlebars.py +0 -0
  255. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/extras/mcp.py +0 -0
  256. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/extras/skills.py +0 -0
  257. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/provider.py +0 -0
  258. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/providers/__init__.py +0 -0
  259. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/providers/_shared.py +0 -0
  260. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/providers/anthropic.py +0 -0
  261. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/providers/bedrock.py +0 -0
  262. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/providers/gateway.py +0 -0
  263. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/providers/openai.py +0 -0
  264. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/providers/typesafe.py +0 -0
  265. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/errors.py +0 -0
  266. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/etl/__init__.py +0 -0
  267. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/etl/_batch.py +0 -0
  268. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/etl/_columns.py +0 -0
  269. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/etl/_frames.py +0 -0
  270. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/etl/_ledger.py +0 -0
  271. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/etl/_runner.py +0 -0
  272. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/etl/_validation.py +0 -0
  273. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/fastapi/__init__.py +0 -0
  274. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/fastapi/response.py +0 -0
  275. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/fastapi/streaming.py +0 -0
  276. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/inference.py +0 -0
  277. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/pricing.py +0 -0
  278. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/registry.py +0 -0
  279. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/remote_auth.py +0 -0
  280. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/__init__.py +0 -0
  281. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_chain.py +0 -0
  282. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_conversation.py +0 -0
  283. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_grants.py +0 -0
  284. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_handle.py +0 -0
  285. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_health.py +0 -0
  286. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_hooks.py +0 -0
  287. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_limits.py +0 -0
  288. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_mcp.py +0 -0
  289. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/validate/__init__.py +0 -0
  290. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/validate/__main__.py +0 -0
  291. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/cli/__init__.py +0 -0
  292. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/async_bridge.py +0 -0
  293. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/authz/__init__.py +0 -0
  294. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/authz/_decide.py +0 -0
  295. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/authz/_grants.py +0 -0
  296. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/authz/_roles.py +0 -0
  297. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/authz/_scope.py +0 -0
  298. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/authz/product.py +0 -0
  299. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/backend/__init__.py +0 -0
  300. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/backend/core_model.py +0 -0
  301. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/backend/protocol.py +0 -0
  302. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/bootstrap/__init__.py +0 -0
  303. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/bootstrap/bootstrap.py +0 -0
  304. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/__init__.py +0 -0
  305. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/_batching.py +0 -0
  306. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/_single_flight.py +0 -0
  307. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/abc/__init__.py +0 -0
  308. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/abc/backend.py +0 -0
  309. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/abc/config.py +0 -0
  310. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/abc/dependency.py +0 -0
  311. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/calls.py +0 -0
  312. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/codec.py +0 -0
  313. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/decorators.py +0 -0
  314. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/dependency.py +0 -0
  315. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/errors.py +0 -0
  316. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/gateway.py +0 -0
  317. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/keys.py +0 -0
  318. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/memory.py +0 -0
  319. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/result_codec.py +0 -0
  320. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/serializer.py +0 -0
  321. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/checks.py +0 -0
  322. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/command/__init__.py +0 -0
  323. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/command/adapter.py +0 -0
  324. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/command/base.py +0 -0
  325. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/command/field.py +0 -0
  326. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/command/introspection.py +0 -0
  327. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/compiler.py +0 -0
  328. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/_includes.py +0 -0
  329. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/binder.py +0 -0
  330. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/configurable.py +0 -0
  331. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/convert.py +0 -0
  332. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/errors.py +0 -0
  333. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/model.py +0 -0
  334. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/observability.py +0 -0
  335. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/__init__.py +0 -0
  336. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/_base.py +0 -0
  337. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/aws/client.py +0 -0
  338. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/aws/loader.py +0 -0
  339. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/clickhouse/__init__.py +0 -0
  340. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/clickhouse/client.py +0 -0
  341. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/clickhouse/loader.py +0 -0
  342. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/mongo/__init__.py +0 -0
  343. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/mongo/client.py +0 -0
  344. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/mongo/loader.py +0 -0
  345. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/relational.py +0 -0
  346. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/contracts/__init__.py +0 -0
  347. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/di/__init__.py +0 -0
  348. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/di/scope.py +0 -0
  349. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/discovery/__init__.py +0 -0
  350. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/discovery/_utils.py +0 -0
  351. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/discovery/interfaces.py +0 -0
  352. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/engine/__init__.py +0 -0
  353. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/engine/compilable.py +0 -0
  354. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/engine/events.py +0 -0
  355. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/engine/metrics.py +0 -0
  356. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/environment.py +0 -0
  357. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/expr/__init__.py +0 -0
  358. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/expr/eval.py +0 -0
  359. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/expr/nodes.py +0 -0
  360. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/expr/refs.py +0 -0
  361. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/identity/__init__.py +0 -0
  362. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/identity/identity.py +0 -0
  363. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/identity/issuer.py +0 -0
  364. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/identity/wire.py +0 -0
  365. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/introspection/__init__.py +0 -0
  366. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/introspection/base.py +0 -0
  367. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/introspection/describe.py +0 -0
  368. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/job/callback.py +0 -0
  369. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/job/handle.py +0 -0
  370. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/logger/__init__.py +0 -0
  371. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/logger/abc.py +0 -0
  372. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/logger/checks.py +0 -0
  373. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/logger/config.py +0 -0
  374. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/logger/context.py +0 -0
  375. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/logger/registry.py +0 -0
  376. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/logger/structlogger.py +0 -0
  377. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/__init__.py +0 -0
  378. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/_json_schema.py +0 -0
  379. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/_loom_type.py +0 -0
  380. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/convert.py +0 -0
  381. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/enums.py +0 -0
  382. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/field.py +0 -0
  383. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/introspection.py +0 -0
  384. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/partition.py +0 -0
  385. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/privilege.py +0 -0
  386. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/projection.py +0 -0
  387. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/redaction.py +0 -0
  388. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/relation.py +0 -0
  389. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/struct.py +0 -0
  390. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/timestamped.py +0 -0
  391. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/types.py +0 -0
  392. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/types_postgres.py +0 -0
  393. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/__init__.py +0 -0
  394. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/config.py +0 -0
  395. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/event.py +0 -0
  396. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/observer/__init__.py +0 -0
  397. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/observer/noop.py +0 -0
  398. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/observer/otel.py +0 -0
  399. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/observer/structlog.py +0 -0
  400. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/otel_ids.py +0 -0
  401. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/protocol.py +0 -0
  402. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/runtime.py +0 -0
  403. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/span.py +0 -0
  404. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/topology.py +0 -0
  405. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/plugins/__init__.py +0 -0
  406. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/plugins/optional.py +0 -0
  407. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/projection/__init__.py +0 -0
  408. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/projection/loaders.py +0 -0
  409. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/projection/runtime.py +0 -0
  410. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/__init__.py +0 -0
  411. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/__init__.py +0 -0
  412. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/errors.py +0 -0
  413. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/query.py +0 -0
  414. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/query_compiler.py +0 -0
  415. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/repo_for.py +0 -0
  416. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/repository.py +0 -0
  417. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/dynamodb/__init__.py +0 -0
  418. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/dynamodb/uow.py +0 -0
  419. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/mongo/__init__.py +0 -0
  420. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/mongo/ids.py +0 -0
  421. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/mongo/query_compiler.py +0 -0
  422. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/mongo/values.py +0 -0
  423. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/mutation.py +0 -0
  424. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/registry.py +0 -0
  425. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
  426. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/_pool_metrics.py +0 -0
  427. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
  428. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/migrations/__init__.py +0 -0
  429. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/migrations/env_template.py +0 -0
  430. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/migrations/hook.py +0 -0
  431. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/migrations/operations.py +0 -0
  432. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/model.py +0 -0
  433. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
  434. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
  435. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
  436. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
  437. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
  438. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
  439. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
  440. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
  441. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
  442. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
  443. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/config.py +0 -0
  444. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/guard/0001.sql +0 -0
  445. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/guard/0002.sql +0 -0
  446. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/guard/preflight.sql +0 -0
  447. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/guard_manifest.py +0 -0
  448. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/integrity.py +0 -0
  449. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/verify.py +0 -0
  450. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/session_settings.py +0 -0
  451. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/values.py +0 -0
  452. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/response/__init__.py +0 -0
  453. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/response/base.py +0 -0
  454. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/routing/__init__.py +0 -0
  455. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/routing/ref.py +0 -0
  456. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/routing/resolver.py +0 -0
  457. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/runner.py +0 -0
  458. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/schema/__init__.py +0 -0
  459. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/schema/schema_mode.py +0 -0
  460. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/__init__.py +0 -0
  461. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/abc/__init__.py +0 -0
  462. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/abc/contracts.py +0 -0
  463. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/abc/errors.py +0 -0
  464. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/caller_bound.py +0 -0
  465. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/clickhouse/__init__.py +0 -0
  466. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/clickhouse/_client.py +0 -0
  467. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/clickhouse/executor.py +0 -0
  468. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/config.py +0 -0
  469. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/roles.py +0 -0
  470. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/service.py +0 -0
  471. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/symbols.py +0 -0
  472. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/tracing/__init__.py +0 -0
  473. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/tracing/context.py +0 -0
  474. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/transport/__init__.py +0 -0
  475. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/transport/adapter.py +0 -0
  476. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/_predicates.py +0 -0
  477. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/agent_markers.py +0 -0
  478. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/compute.py +0 -0
  479. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/constants.py +0 -0
  480. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/field_ref.py +0 -0
  481. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/invoker.py +0 -0
  482. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/keys.py +0 -0
  483. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/markers.py +0 -0
  484. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/mcp_markers.py +0 -0
  485. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/outcome.py +0 -0
  486. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/registry.py +0 -0
  487. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/rule.py +0 -0
  488. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/use_case.py +0 -0
  489. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/__init__.py +0 -0
  490. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/_uri.py +0 -0
  491. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/__init__.py +0 -0
  492. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_format_registry.py +0 -0
  493. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_historify/__init__.py +0 -0
  494. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_historify/_common.py +0 -0
  495. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_historify/_log.py +0 -0
  496. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_historify/_ops.py +0 -0
  497. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
  498. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_historify/_transform.py +0 -0
  499. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_merge.py +0 -0
  500. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_path_template.py +0 -0
  501. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_predicate.py +0 -0
  502. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
  503. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
  504. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
  505. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_write_policy.py +0 -0
  506. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/__init__.py +0 -0
  507. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_dtype.py +0 -0
  508. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_file_writer.py +0 -0
  509. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_frame.py +0 -0
  510. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_historify.py +0 -0
  511. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_predicate.py +0 -0
  512. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_reader.py +0 -0
  513. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_schema.py +0 -0
  514. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
  515. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_streaming.py +0 -0
  516. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_writer.py +0 -0
  517. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/provider.py +0 -0
  518. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/spark/__init__.py +0 -0
  519. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/spark/_dtype.py +0 -0
  520. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/spark/_historify.py +0 -0
  521. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/spark/_reader.py +0 -0
  522. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/spark/_schema.py +0 -0
  523. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
  524. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/spark/_writer.py +0 -0
  525. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/spark/provider.py +0 -0
  526. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/__init__.py +0 -0
  527. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/_backends/_memory.py +0 -0
  528. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
  529. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
  530. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/_cleaners.py +0 -0
  531. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/_options.py +0 -0
  532. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/_paths.py +0 -0
  533. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/_scope.py +0 -0
  534. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/_store.py +0 -0
  535. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/__init__.py +0 -0
  536. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_binding.py +0 -0
  537. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_compiler.py +0 -0
  538. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_errors.py +0 -0
  539. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_filter.py +0 -0
  540. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_plan.py +0 -0
  541. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_validators.py +0 -0
  542. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_validators_agents.py +0 -0
  543. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_validators_config.py +0 -0
  544. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_validators_plan.py +0 -0
  545. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_validators_step.py +0 -0
  546. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/__init__.py +0 -0
  547. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/_format.py +0 -0
  548. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/_read_options.py +0 -0
  549. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/_utils.py +0 -0
  550. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/_with_agent.py +0 -0
  551. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/_write_options.py +0 -0
  552. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/expr/__init__.py +0 -0
  553. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/expr/_params.py +0 -0
  554. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/expr/_predicate.py +0 -0
  555. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
  556. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/expr/_refs.py +0 -0
  557. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/source/__init__.py +0 -0
  558. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/source/_from.py +0 -0
  559. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
  560. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/source/_from_config.py +0 -0
  561. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
  562. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
  563. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/source/_specs.py +0 -0
  564. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/__init__.py +0 -0
  565. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_client.py +0 -0
  566. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_errors.py +0 -0
  567. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_file.py +0 -0
  568. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
  569. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
  570. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
  571. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
  572. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_history/_report.py +0 -0
  573. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
  574. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_into.py +0 -0
  575. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_table.py +0 -0
  576. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_temp.py +0 -0
  577. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/executor/__init__.py +0 -0
  578. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/executor/_agents.py +0 -0
  579. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/executor/_dispatcher.py +0 -0
  580. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/executor/_executor.py +0 -0
  581. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/__init__.py +0 -0
  582. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/_clickhouse_connection.py +0 -0
  583. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/_registry.py +0 -0
  584. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/__init__.py +0 -0
  585. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_clickhouse.py +0 -0
  586. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_dynamodb.py +0 -0
  587. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
  588. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
  589. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_mongo.py +0 -0
  590. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
  591. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
  592. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
  593. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_serialization.py +0 -0
  594. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/targets/__init__.py +0 -0
  595. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/targets/_clickhouse.py +0 -0
  596. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/lineage/__init__.py +0 -0
  597. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/lineage/_config.py +0 -0
  598. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/lineage/_observer.py +0 -0
  599. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/lineage/_records.py +0 -0
  600. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/lineage/sinks/__init__.py +0 -0
  601. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
  602. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/lineage/sinks/_table.py +0 -0
  603. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/lineage/sinks/_writer.py +0 -0
  604. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/maintenance/__init__.py +0 -0
  605. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/maintenance/_builder.py +0 -0
  606. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/maintenance/_ops.py +0 -0
  607. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/maintenance/_protocol.py +0 -0
  608. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/maintenance/_runner.py +0 -0
  609. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/maintenance/_step.py +0 -0
  610. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/maintenance/backends/__init__.py +0 -0
  611. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
  612. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/__init__.py +0 -0
  613. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/_generics.py +0 -0
  614. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/_params.py +0 -0
  615. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/_pipeline.py +0 -0
  616. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/_process.py +0 -0
  617. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/_sql.py +0 -0
  618. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/_step.py +0 -0
  619. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/_step_client.py +0 -0
  620. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/_step_sql.py +0 -0
  621. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runner/__init__.py +0 -0
  622. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runner/_agents.py +0 -0
  623. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runner/_providers.py +0 -0
  624. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runner/_wiring.py +0 -0
  625. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runner/core.py +0 -0
  626. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runtime/__init__.py +0 -0
  627. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runtime/_config_values.py +0 -0
  628. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runtime/contracts.py +0 -0
  629. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/schema/__init__.py +0 -0
  630. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/schema/_contract.py +0 -0
  631. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/schema/_schema.py +0 -0
  632. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/storage/__init__.py +0 -0
  633. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/storage/_config.py +0 -0
  634. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/storage/_file_locator.py +0 -0
  635. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/storage/_locator.py +0 -0
  636. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/storage/routing.py +0 -0
  637. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/testing/__init__.py +0 -0
  638. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/testing/_delta.py +0 -0
  639. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/testing/_result.py +0 -0
  640. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/testing/_runners.py +0 -0
  641. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/testing/_scenario.py +0 -0
  642. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/testing/_stubs.py +0 -0
  643. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/testing/spark.py +0 -0
  644. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/__init__.py +0 -0
  645. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/_async.py +0 -0
  646. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/_config.py +0 -0
  647. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/_ctx.py +0 -0
  648. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/_flow_yaml.py +0 -0
  649. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/_meta.py +0 -0
  650. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/_placeholders.py +0 -0
  651. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/_summary.py +0 -0
  652. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/deploy/__init__.py +0 -0
  653. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/deploy/_discovery.py +0 -0
  654. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/deploy/_schedule.py +0 -0
  655. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/deploy/_yaml_etls.py +0 -0
  656. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/deploy/entrypoint.py +0 -0
  657. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/__init__.py +0 -0
  658. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_backfill.py +0 -0
  659. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_backfill_body.py +0 -0
  660. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_body.py +0 -0
  661. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_common.py +0 -0
  662. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_factory.py +0 -0
  663. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_hooks.py +0 -0
  664. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_maintenance.py +0 -0
  665. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_params.py +0 -0
  666. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_run_name.py +0 -0
  667. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_runtime.py +0 -0
  668. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_signature.py +0 -0
  669. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_stages.py +0 -0
  670. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/manifest/__init__.py +0 -0
  671. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/manifest/_model.py +0 -0
  672. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/manifest/_s3.py +0 -0
  673. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/manifest/_store.py +0 -0
  674. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/notify/__init__.py +0 -0
  675. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/notify/_event.py +0 -0
  676. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/notify/_format.py +0 -0
  677. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/notify/_port.py +0 -0
  678. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/notify/_slack.py +0 -0
  679. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/observer/__init__.py +0 -0
  680. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/observer/_flow.py +0 -0
  681. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/observer/_logging_bridge.py +0 -0
  682. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/observer/_manifest.py +0 -0
  683. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/observer/_task_run.py +0 -0
  684. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prometheus/__init__.py +0 -0
  685. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prometheus/_instruments.py +0 -0
  686. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prometheus/adapter.py +0 -0
  687. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prometheus/db_pool.py +0 -0
  688. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prometheus/kafka.py +0 -0
  689. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prometheus/lifecycle.py +0 -0
  690. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prometheus/middleware.py +0 -0
  691. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/py.typed +0 -0
  692. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/__init__.py +0 -0
  693. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/_body.py +0 -0
  694. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/adapter.py +0 -0
  695. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/auth/__init__.py +0 -0
  696. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/auth/config.py +0 -0
  697. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/auth/jwt.py +0 -0
  698. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/auth/middleware.py +0 -0
  699. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/autocrud.py +0 -0
  700. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/constants.py +0 -0
  701. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/cors.py +0 -0
  702. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/openapi.py +0 -0
  703. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/response.py +0 -0
  704. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/middleware.py +0 -0
  705. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/model.py +0 -0
  706. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/rest_adapter.py +0 -0
  707. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/__init__.py +0 -0
  708. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/__init__.py +0 -0
  709. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_adapter.py +0 -0
  710. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
  711. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
  712. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
  713. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_errors.py +0 -0
  714. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_operators.py +0 -0
  715. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
  716. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
  717. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
  718. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
  719. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
  720. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
  721. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
  722. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
  723. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
  724. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
  725. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
  726. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
  727. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/runner.py +0 -0
  728. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/compiler/__init__.py +0 -0
  729. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/compiler/_bindings.py +0 -0
  730. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/compiler/_errors.py +0 -0
  731. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/compiler/_plan.py +0 -0
  732. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/core/__init__.py +0 -0
  733. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/core/_errors.py +0 -0
  734. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/core/_exceptions.py +0 -0
  735. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/core/_message.py +0 -0
  736. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/core/_tracing.py +0 -0
  737. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/core/_typing.py +0 -0
  738. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/graph/__init__.py +0 -0
  739. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/graph/_flow.py +0 -0
  740. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/__init__.py +0 -0
  741. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/_codec.py +0 -0
  742. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/_config.py +0 -0
  743. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/_errors.py +0 -0
  744. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/_key_resolver.py +0 -0
  745. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/_message.py +0 -0
  746. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/_record.py +0 -0
  747. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/_wire.py +0 -0
  748. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/client/__init__.py +0 -0
  749. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/client/_consumer.py +0 -0
  750. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/client/_producer.py +0 -0
  751. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/client/_protocol.py +0 -0
  752. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/client/_retry.py +0 -0
  753. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/message/__init__.py +0 -0
  754. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/message/_consumer.py +0 -0
  755. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/message/_producer.py +0 -0
  756. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/message/_protocol.py +0 -0
  757. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/mongo/__init__.py +0 -0
  758. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
  759. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/mongo/_config.py +0 -0
  760. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/mongo/_event.py +0 -0
  761. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/mongo/_normalize.py +0 -0
  762. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/__init__.py +0 -0
  763. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_boundary.py +0 -0
  764. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_branches.py +0 -0
  765. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_broadcast.py +0 -0
  766. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_capabilities.py +0 -0
  767. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_decompose.py +0 -0
  768. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_expand_routes.py +0 -0
  769. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_expr_eval.py +0 -0
  770. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_fork.py +0 -0
  771. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_helpers.py +0 -0
  772. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_mongo.py +0 -0
  773. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_protocols.py +0 -0
  774. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_router.py +0 -0
  775. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_shape.py +0 -0
  776. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_sink.py +0 -0
  777. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_step.py +0 -0
  778. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_table/__init__.py +0 -0
  779. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_table/_clickhouse.py +0 -0
  780. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_table/_delta.py +0 -0
  781. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_table/_sqlalchemy.py +0 -0
  782. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_with.py +0 -0
  783. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/refs.py +0 -0
  784. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/testing.py +0 -0
  785. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/testing/agents.py +0 -0
  786. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/testing/golden.py +0 -0
  787. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/testing/http_harness.py +0 -0
  788. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/testing/in_memory.py +0 -0
  789. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/testing/repository_harness.py +0 -0
  790. {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/testing/runner.py +0 -0
@@ -2,6 +2,99 @@
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
+ - **stores:** `async with session_manager.operation_session(write=...)`
84
+ gives raw SQL the session its operation runs in, as a repository's: the
85
+ invocation's when the store is enlisted, else a transaction of its own.
86
+ Repositories now run through it.
87
+
88
+ ### config
89
+
90
+ - **config:** a top-level `aws:` section (`region`, `url`, `profile`, `pool`,
91
+ timeouts and retries; no credentials) sets the AWS client defaults every
92
+ AWS product inherits: `dynamodb` stores, `storage.dynamodb`, the `secrets`
93
+ and `ssm` resolvers (which read it as written and refuse a placeholder in
94
+ it) and the SNS notifier (from the flow's YAML; the topic's region wins).
95
+ A product's own keys override it key by key; without `aws:` nothing changes.
96
+ No `config.overridable` entry may open `aws` or `sqs.queues`.
97
+
5
98
  ### etl
6
99
 
7
100
  - **etl:** `IntoTable(...).upsert(..., delete_flag=...)` deletes matched rows
@@ -59,6 +152,181 @@
59
152
 
60
153
  ## ⚠ Behaviour changes
61
154
 
155
+ ### jobs
156
+
157
+ - **jobs:** the composition applies `jobs.<Job>.*` once for every entry point,
158
+ so the API process now honours them too; before, only the Celery and Lambda
159
+ SQS workers did.
160
+ - **jobs:** without `app.job_service` the job service is still chosen from the
161
+ `celery` section, now with a `DeprecationWarning` when Celery is installed or
162
+ configured. Set `app.job_service` to keep the choice explicit.
163
+ - **jobs:** the Lambda SQS adapter logs the type of its job service instead
164
+ of assuming Celery for anything that is not inline.
165
+ - **jobs:** job settings belong to the application:
166
+ `MyJob.__queue__`, `__retries__`, `__countdown__`, `__timeout__` and
167
+ `__priority__` no longer reflect `jobs.<Job>`; read
168
+ `application.job_settings.of(MyJob)`. `apply_job_config`,
169
+ `apply_job_overrides`, `read_job_config`, `resolve_binding` and
170
+ `validate_bindings` are removed, and an invalid or unknown `jobs.<Job>` key
171
+ fails composition.
172
+
173
+ ### stores
174
+
175
+ - **stores:** a repository read, a `@with_session_scope(write=False)` method
176
+ or `operation_session(write=False)` on a store the invocation did not
177
+ enlist (a read-only execution such as a REST `GET`, or no invocation)
178
+ runs in a transaction of its own that is never committed: a write in it
179
+ persists nothing. On an enlisted store a `write=False` block still runs,
180
+ unrecorded, in the invocation's transaction and commits with it; declare
181
+ writes as `write=True`.
182
+ - **stores:** a failed transaction of its own logs `OperationSessionRollback`
183
+ with `store=` and the exception type only, where it logged
184
+ `RepositorySessionRollback` with `repository=` and the exception text.
185
+ - **stores:** a write to a store the running use case did not declare raises
186
+ `UndeclaredStoreWrite` (`undeclared_store_write`, HTTP 500) before the
187
+ driver is called, where it raised `ForeignSessionError`. So does a
188
+ `@transactional` call inside an invocation that did not enlist its store.
189
+ - **stores:** `with_session_scope` takes the method's write intent:
190
+ `@with_session_scope(write=True)` or `@with_session_scope(write=False)`; a
191
+ bare `@with_session_scope` fails at import. A repository subclass calling
192
+ `self._session_scope()` passes `write=` too. A custom write is now refused
193
+ or joins the invocation like a built-in one, instead of committing on its
194
+ own when its store was not enlisted.
195
+ - **stores:** post-commit actions run by the outcome of the stores they
196
+ depend on: a job dispatch or publish on every store of the execution that
197
+ queued it, a cache invalidation on its repository's store. With one store
198
+ two outcomes change. A commit whose result is unknown (a lost
199
+ acknowledgement, a cancellation during the commit) now runs the cache
200
+ invalidations it queued, and still sends no job. A store without
201
+ transactions whose use case raised, or whose invocation was poisoned, now
202
+ runs its cache invalidations too, and sends no job; a poisoned invocation
203
+ over such stores alone now fails with the poison's cause instead of
204
+ succeeding.
205
+ - **stores:** `loom.core.transaction` is removed (`in_atomic_transaction`,
206
+ `open_atomic_transaction`, `close_atomic_transaction`). A cache
207
+ invalidation asks the invocation scope instead
208
+ (`InvocationScope.owners_of`): it waits for the commit only while the
209
+ model's store is enlisted and its unit of work declares both
210
+ `transactional = True` and `phased = True`, which is all a third-party unit
211
+ of work now needs. A write already durable (a store not enlisted, a unit of
212
+ work driven in a single phase, DynamoDB, Mongo without transactions) bumps
213
+ at once, so a later failure of the invocation no longer discards it.
214
+ `set_active_mutations`, `reset_active_mutations` and
215
+ `get_pending_mutations` are removed: `record_mutation` records on
216
+ `InvocationScope.mutations` while an outermost `@transactional` collects
217
+ them.
218
+ - **stores:** `clear_pending_dispatches()` drops the job dispatches and
219
+ publishes of every store of the running invocation, and never a cache
220
+ invalidation.
221
+ - **stores:** a read-only execution (`read_only = True`, every REST GET) runs
222
+ in an invocation that writes to no store: a write raises
223
+ `UndeclaredStoreWrite` instead of committing on its own, and so does a
224
+ `@transactional` method it calls; `async with uow:` in it raises
225
+ `UnitOfWorkInsideScope`, with or without a configured unit of work. A
226
+ use case or job that writes, run from it (a `gather` child or the invoker
227
+ included), raises `UndeclaredStoreWrite` instead of opening and committing
228
+ an invocation of its own, and so does one run from a read-only execution
229
+ nested in a writer. Move the write to a use case that is not read-only. A
230
+ job it dispatches, with any job service, raises `UndeclaredStoreWrite` too.
231
+ An
232
+ invocation that enlists no store closes without an outcome and logs no
233
+ `InvocationOutcome`.
234
+ - **stores:** `async with uow:` and an outermost `@transactional` run through
235
+ the coordinator; `async with uow:` inside a running invocation raises
236
+ `UnitOfWorkInsideScope`. Even with one store, a write from a `gather` child
237
+ or from a task that outlived its use case raises `ScopeOwnershipError`. A
238
+ write in an open invocation with no execution running raises
239
+ `UndeclaredStoreWrite`.
240
+ SQLAlchemy flushes before it commits, a rollback interrupted by a second
241
+ cancellation is still awaited (bounded by `persistence.rollback_timeout`),
242
+ and Mongo never aborts after an attempted commit. The post-commit actions
243
+ queued inside, a nested use case's job dispatches and cache invalidations
244
+ included, run once the store has ended and by its outcome, as in an
245
+ execution; before, a nested use case sent them before the outer commit, and
246
+ a cache invalidation ran inline. A failed action raises `PostCommitError`
247
+ from `async with uow:` too. A job dispatched in the block is sent after the
248
+ commit instead of waiting for `flush_pending_dispatches()`, which raises
249
+ `RuntimeError` inside the block, as inside `@transactional`.
250
+ - **stores:** an unknown commit result is `Uncertain`, not a rollback:
251
+ SQLAlchemy `OperationalError`, `InterfaceError`, an invalidated connection
252
+ or a transport timeout during `COMMIT`, and Mongo
253
+ `UnknownTransactionCommitResult`. The connection is invalidated and only the
254
+ cache invalidations run. The caller gets `StoresNotCommitted`, even with
255
+ one store, caused by the driver error; job runners never retry it, and REST
256
+ still answers 500, now with the code `stores_not_committed`.
257
+ - **stores:** `SessionManager.active_session` and
258
+ `MongoSessions.active_session` (properties) are the only public way to read
259
+ a store's session; `get_active_session()`, `session_to_join()`,
260
+ `has_caller_scoped_session()` and Mongo `active_session()` are gone. A Mongo
261
+ `session_provider` is called with the write intent
262
+ (`Callable[[bool], AsyncClientSession | None]`); one without arguments no
263
+ longer works.
264
+ - **stores:** a SQLAlchemy repository refuses a `session=` that is not the
265
+ invocation's session for its store (`ForeignSessionError`), and
266
+ `CachedRepository` requires a repository with `model`.
267
+ - **stores:** DynamoDB writes go through the same checks
268
+ (`UndeclaredStoreWrite`, `ScopeOwnershipError`) before any call to AWS and
269
+ report `NonTransactional(wrote=True)`; `delete` is conditional. Its thread
270
+ pool starts when the store is built, shuts down when the application closes
271
+ and starts again when it reopens.
272
+ - **stores:** wiring API. `RuntimeExecutor(uow_factory=)` and
273
+ `create_kernel(uow_factory=)` become `coordinator=` (`OrderedCommits`);
274
+ `Recipe.backend` becomes `Recipe.default_backend`, and
275
+ `CompositionSource.backend(key, *, default=)` takes the store;
276
+ `Application.persistence` and `require_single_store` are removed. `store`
277
+ is required by `StoreCatalog.served_by`, `BackendRuntime`, `SessionManager`,
278
+ `build_session_manager`, `MongoSessions`, `MongoUnitOfWork` and
279
+ `MongoUnitOfWorkFactory.transactional`;
280
+ `build_repository_registration_module` takes `default_builder=` and
281
+ `store=`. `StoreCatalog.models_by_store` always includes `default`. Binding
282
+ `MongoSessions` unkeyed, or a session manager keyed by store, is refused.
283
+ An invalid `stores` section fails in `compose_application`.
284
+ `_ROLLBACK_TIMEOUT_S` is now `ROLLBACK_TIMEOUT_S`.
285
+
286
+ ### rls
287
+
288
+ - **rls:** a Postgres role that is a superuser or has `BYPASSRLS` is refused
289
+ at startup in every mode, `create_all` included; local setups running as
290
+ `postgres` need a plain role.
291
+ - **rls:** elevation is routed per store. `SQLAlchemyElevationSink` becomes
292
+ `SQLAlchemyStoreElevation`; a hand-built kernel registers
293
+ `ScopedElevationSink({store: SQLAlchemyStoreElevation(session_manager)})`.
294
+ `validate_elevations(product, Mapping[StoreKey, ScopedTables])` runs in the
295
+ composition, and a backend plugin may expose `PersistenceWiring.elevation`.
296
+ A scope that is elevable or listed in `AuthzProduct.elevations` and
297
+ declared by two stores fails at startup
298
+ (`ELEVABLE_SCOPE_IN_SEVERAL_STORES`).
299
+ - **rls:** `elevate()` in a read-only execution, REST GET routes included,
300
+ raises `ReadOnlyElevation`. A failed elevation step rolls back every store
301
+ of the invocation, even when a parent use case catches the error.
302
+ - **rls:** scope sources are bound when the application is composed: every
303
+ `schema.scopes` binding is validated at startup, and a source registered
304
+ after composition does not reach that application.
305
+
306
+ ### rest
307
+
308
+ - **rest:** a `5xx` body no longer carries the error's message, which could
309
+ name hosts, databases, stores or classes: it keeps `code`, `trace_id` and
310
+ `committed`, with the fixed message `An unexpected error occurred` (`503`:
311
+ `The service is temporarily unavailable`), also for an `HTTPException`
312
+ whose detail is a string. The message is logged at `ERROR` under the same
313
+ `trace_id`. FastAPI and Lambda answer the same; `4xx` bodies are unchanged.
314
+
315
+ ### ai
316
+
317
+ - **ai:** a `5xx` `/run` body carries the same fixed message instead of the
318
+ run error's, `HOOK_FAILED` and `CONVERSATION_LOAD_FAILED` included; `code`
319
+ and `interaction_id` stay, and the error is logged at `ERROR`.
320
+
321
+
322
+ ### identity
323
+
324
+ - **identity:** the executor binds the identity it is given for the whole
325
+ execution, so `Caller()` and row-level security always agree. A nested
326
+ execution joining the caller's unit of work as another identity raises
327
+ `NestedIdentityMismatch`; any nested execution under an active elevation
328
+ raises `NestedElevation`.
329
+
62
330
  ### etl
63
331
 
64
332
  - **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.1.0
4
4
  Summary: Loom Python project
5
5
  License-File: LICENSE
6
6
  Classifier: Programming Language :: Python :: 3
@@ -81,12 +81,17 @@ 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
- Requires-Dist: logfire<5,>=4.0; extra == 'logfire'
90
+ Requires-Dist: logfire<6,>=4.0; extra == 'logfire'
86
91
  Requires-Dist: opentelemetry-api<2.0,>=1.27; extra == 'logfire'
87
92
  Requires-Dist: opentelemetry-sdk<2.0,>=1.27; extra == 'logfire'
88
93
  Provides-Extra: mongo
89
- Requires-Dist: pymongo<5.0,>=4.9; extra == 'mongo'
94
+ Requires-Dist: pymongo<5.0,>=4.18.3; extra == 'mongo'
90
95
  Provides-Extra: prefect
91
96
  Requires-Dist: boto3>=1.35; extra == 'prefect'
92
97
  Requires-Dist: docker>=7.0; extra == 'prefect'
@@ -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,8 +52,11 @@ clickhouse = [
51
52
  dynamodb = [
52
53
  "boto3>=1.35",
53
54
  ]
55
+ sqs = [
56
+ "boto3>=1.35",
57
+ ]
54
58
  mongo = [
55
- "pymongo>=4.9,<5.0",
59
+ "pymongo>=4.18.3,<5.0",
56
60
  ]
57
61
  jwt = [
58
62
  "pyjwt[crypto]>=2.8,<3",
@@ -158,7 +162,7 @@ ai-harness = [
158
162
  # See docs/ai/observability.md — a non-empty endpoint makes loom build its own
159
163
  # provider, and the two are mutually exclusive by construction.
160
164
  logfire = [
161
- "logfire>=4.0,<5",
165
+ "logfire>=4.0,<6",
162
166
  "opentelemetry-api>=1.27,<2.0",
163
167
  "opentelemetry-sdk>=1.27,<2.0",
164
168
  ]
@@ -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"
@@ -269,7 +281,7 @@ dev = [
269
281
  "confluent-kafka>=2.6,<3.0",
270
282
  "bytewax>=0.21; python_version < '3.13'",
271
283
  "boto3>=1.35",
272
- "pymongo>=4.9,<5.0",
284
+ "pymongo>=4.18.3,<5.0",
273
285
  "opentelemetry-api>=1.27,<2.0",
274
286
  "opentelemetry-sdk>=1.27,<2.0",
275
287
  "opentelemetry-exporter-otlp-proto-http>=1.27,<2.0",
@@ -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