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.
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/CHANGELOG.md +268 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/PKG-INFO +26 -9
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/README.md +15 -6
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/pyproject.toml +19 -3
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/_concurrency.py +5 -8
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/_startup.py +1 -1
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/a2a/_rpc.py +6 -6
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_capabilities.py +1 -1
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/config.py +1 -5
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_instructions.py +1 -1
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/fastapi/endpoints.py +14 -4
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_bounded.py +5 -9
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_lifecycle.py +1 -1
- loom_kernel-10.1.0/src/loom/celery/__init__.py +52 -0
- loom_kernel-10.1.0/src/loom/celery/_discovery.py +45 -0
- loom_kernel-10.1.0/src/loom/celery/adapter.py +421 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/celery/auto.py +3 -1
- loom_kernel-10.1.0/src/loom/celery/bootstrap.py +203 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/celery/config.py +5 -82
- loom_kernel-10.1.0/src/loom/celery/constants.py +10 -0
- loom_kernel-10.1.0/src/loom/celery/errors.py +45 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/celery/runner.py +138 -150
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/celery/service.py +27 -13
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/cli/app.py +2 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/cli/check.py +45 -19
- loom_kernel-10.1.0/src/loom/cli/deploy.py +60 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/cli/schema.py +21 -6
- loom_kernel-10.1.0/src/loom/composition/__init__.py +46 -0
- loom_kernel-9.2.0/src/loom/rest/fastapi/_auto_ai.py → loom_kernel-10.1.0/src/loom/composition/_ai.py +97 -153
- loom_kernel-10.1.0/src/loom/composition/_jobs.py +225 -0
- loom_kernel-10.1.0/src/loom/composition/_reserved.py +73 -0
- loom_kernel-10.1.0/src/loom/composition/_sql.py +118 -0
- loom_kernel-10.1.0/src/loom/composition/application.py +177 -0
- loom_kernel-10.1.0/src/loom/composition/build.py +574 -0
- loom_kernel-10.1.0/src/loom/composition/errors.py +144 -0
- loom_kernel-10.1.0/src/loom/composition/host.py +242 -0
- loom_kernel-10.1.0/src/loom/composition/recipe.py +72 -0
- loom_kernel-10.1.0/src/loom/composition/resources.py +80 -0
- loom_kernel-10.1.0/src/loom/composition/source.py +82 -0
- loom_kernel-10.1.0/src/loom/core/_async.py +63 -0
- loom_kernel-10.1.0/src/loom/core/authz/elevation.py +274 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/backend/scoped_ddl.py +12 -2
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/backend/sqlalchemy.py +25 -15
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/bootstrap/kernel.py +5 -4
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/repository.py +25 -37
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/wiring.py +3 -3
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/__init__.py +3 -2
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/_resolver_utils.py +64 -37
- loom_kernel-10.1.0/src/loom/core/config/aws.py +48 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/checks.py +1 -12
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/context.py +11 -7
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/keys.py +6 -2
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/loader.py +9 -5
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/overrides.py +50 -22
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/resolver.py +3 -2
- loom_kernel-10.1.0/src/loom/core/config/retired.py +107 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/secrets.py +25 -39
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/ssm.py +24 -38
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/aws/__init__.py +2 -2
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/aws/config.py +28 -2
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/clickhouse/config.py +3 -3
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/mongo/config.py +1 -1
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/contracts/manifest.py +3 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/di/container.py +29 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/discovery/base.py +11 -2
- loom_kernel-10.1.0/src/loom/core/discovery/config.py +116 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/discovery/manifest.py +7 -3
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/discovery/modules.py +4 -1
- loom_kernel-10.1.0/src/loom/core/discovery/worker.py +394 -0
- loom_kernel-10.1.0/src/loom/core/discovery/worker_manifest.py +15 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/engine/compiler.py +66 -2
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/engine/executor.py +236 -109
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/engine/plan.py +7 -0
- loom_kernel-10.1.0/src/loom/core/engine/post_commit.py +353 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/errors/__init__.py +6 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/errors/codes.py +10 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/errors/errors.py +71 -1
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/identity/context.py +3 -1
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/job/__init__.py +3 -0
- loom_kernel-10.1.0/src/loom/core/job/config.py +92 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/job/context.py +41 -17
- loom_kernel-10.1.0/src/loom/core/job/envelope.py +80 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/job/job.py +5 -0
- loom_kernel-10.1.0/src/loom/core/job/outcome.py +15 -0
- loom_kernel-10.1.0/src/loom/core/job/router.py +126 -0
- loom_kernel-10.1.0/src/loom/core/job/run.py +40 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/job/service.py +17 -3
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/locator.py +94 -88
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/base.py +4 -1
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/scoped.py +11 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/persistence/__init__.py +2 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/persistence/abc.py +29 -6
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/persistence/database.py +53 -39
- loom_kernel-10.1.0/src/loom/core/persistence/elevation.py +219 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/persistence/none.py +15 -4
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/persistence/profile.py +38 -3
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/persistence/registry.py +19 -8
- loom_kernel-10.1.0/src/loom/core/persistence/stores.py +371 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/plugins/entrypoints.py +4 -2
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/checks.py +9 -4
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/cursor.py +3 -3
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/session_scope.py +0 -3
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/dynamodb/backend.py +67 -25
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/dynamodb/registry.py +11 -19
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/dynamodb/repository.py +45 -13
- loom_kernel-10.1.0/src/loom/core/repository/mongo/backend.py +208 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/mongo/registry.py +9 -7
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/mongo/repository.py +33 -28
- loom_kernel-10.1.0/src/loom/core/repository/mongo/uow.py +301 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/registration.py +15 -6
- loom_kernel-10.1.0/src/loom/core/repository/sqlalchemy/backend.py +469 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/integrity.py +1 -1
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/migrations/runners.py +2 -6
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/mixins.py +19 -17
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/registry.py +21 -15
- loom_kernel-10.1.0/src/loom/core/repository/sqlalchemy/repository.py +182 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/__init__.py +5 -6
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/bootstrap.py +6 -1
- loom_kernel-10.1.0/src/loom/core/repository/sqlalchemy/rls/elevate.py +88 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/partitions.py +1 -10
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/provider.py +26 -23
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/schema.py +2 -1
- loom_kernel-10.1.0/src/loom/core/repository/sqlalchemy/rls/sources.py +78 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/session_manager.py +131 -6
- loom_kernel-10.1.0/src/loom/core/repository/sqlalchemy/transactional.py +206 -0
- loom_kernel-10.1.0/src/loom/core/repository/sqlalchemy/uow.py +203 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/schema_names.py +1 -1
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/clickhouse/registry.py +69 -16
- loom_kernel-10.1.0/src/loom/core/sql/loader.py +36 -0
- loom_kernel-10.1.0/src/loom/core/uow/__init__.py +30 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/uow/abc.py +1 -2
- loom_kernel-10.1.0/src/loom/core/uow/alone.py +135 -0
- loom_kernel-10.1.0/src/loom/core/uow/coordinator.py +711 -0
- loom_kernel-10.1.0/src/loom/core/uow/scope.py +693 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/__init__.py +5 -0
- loom_kernel-10.1.0/src/loom/core/use_case/errors.py +130 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/factory.py +37 -4
- loom_kernel-10.1.0/src/loom/core/use_case/joined.py +57 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runner/config_loader.py +8 -2
- loom_kernel-10.1.0/src/loom/jobs/__init__.py +1 -0
- loom_kernel-10.1.0/src/loom/jobs/aws/__init__.py +3 -0
- loom_kernel-10.1.0/src/loom/jobs/aws/sqs.py +422 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_assemble.py +1 -1
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/notify/_factory.py +9 -4
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/notify/_sns.py +11 -5
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/auth/abc.py +4 -4
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/checks.py +30 -7
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/compiler.py +60 -19
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/config.py +1 -1
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/errors.py +23 -3
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/__init__.py +3 -0
- loom_kernel-10.1.0/src/loom/rest/fastapi/_auto_ai.py +128 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/_auto_auth.py +5 -6
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/_auto_sql.py +7 -105
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/_errors.py +23 -6
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/_exclusions.py +3 -3
- loom_kernel-10.1.0/src/loom/rest/fastapi/adapter.py +772 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/app.py +43 -13
- loom_kernel-10.1.0/src/loom/rest/fastapi/auto.py +207 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/health.py +11 -13
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/router_runtime.py +12 -1
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/sql.py +21 -6
- loom_kernel-10.1.0/src/loom/serverless/__init__.py +1 -0
- loom_kernel-10.1.0/src/loom/serverless/aws/__init__.py +1 -0
- loom_kernel-10.1.0/src/loom/serverless/aws/lambda_/__init__.py +46 -0
- loom_kernel-10.1.0/src/loom/serverless/aws/lambda_/_refusals.py +69 -0
- loom_kernel-10.1.0/src/loom/serverless/aws/lambda_/functions.py +203 -0
- loom_kernel-10.1.0/src/loom/serverless/aws/lambda_/http.py +268 -0
- loom_kernel-10.1.0/src/loom/serverless/aws/lambda_/manifest.py +266 -0
- loom_kernel-10.1.0/src/loom/serverless/aws/lambda_/sqs.py +316 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/compiler/_compiler.py +5 -2
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/compiler/phases/build_plan.py +21 -9
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/compiler/phases/validate.py +28 -12
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_table/common.py +31 -17
- loom_kernel-10.1.0/src/loom/streaming/nodes/_table/config.py +208 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/testing/__init__.py +26 -0
- loom_kernel-10.1.0/src/loom/testing/jobs.py +187 -0
- loom_kernel-10.1.0/src/loom/testing/lambda_http.py +128 -0
- loom_kernel-9.2.0/src/loom/celery/__init__.py +0 -20
- loom_kernel-9.2.0/src/loom/celery/bootstrap.py +0 -1039
- loom_kernel-9.2.0/src/loom/celery/constants.py +0 -22
- loom_kernel-9.2.0/src/loom/core/authz/elevation.py +0 -158
- loom_kernel-9.2.0/src/loom/core/config/retired.py +0 -35
- loom_kernel-9.2.0/src/loom/core/engine/post_commit.py +0 -201
- loom_kernel-9.2.0/src/loom/core/repository/mongo/backend.py +0 -156
- loom_kernel-9.2.0/src/loom/core/repository/mongo/uow.py +0 -257
- loom_kernel-9.2.0/src/loom/core/repository/sqlalchemy/backend.py +0 -330
- loom_kernel-9.2.0/src/loom/core/repository/sqlalchemy/repository.py +0 -150
- loom_kernel-9.2.0/src/loom/core/repository/sqlalchemy/rls/elevate.py +0 -84
- loom_kernel-9.2.0/src/loom/core/repository/sqlalchemy/rls/sources.py +0 -68
- loom_kernel-9.2.0/src/loom/core/repository/sqlalchemy/transactional.py +0 -269
- loom_kernel-9.2.0/src/loom/core/repository/sqlalchemy/uow.py +0 -240
- loom_kernel-9.2.0/src/loom/core/transaction.py +0 -83
- loom_kernel-9.2.0/src/loom/core/uow/__init__.py +0 -14
- loom_kernel-9.2.0/src/loom/core/uow/context.py +0 -27
- loom_kernel-9.2.0/src/loom/rest/fastapi/auto.py +0 -1085
- loom_kernel-9.2.0/src/loom/streaming/nodes/_table/config.py +0 -197
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/.gitignore +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/LICENSE +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/_filters.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/_paths.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/_roles.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/_transport.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/_usecase.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/a2a/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/a2a/_binding.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/a2a/_handlers.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/a2a/card.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/a2a/events.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/a2a/server.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/abc.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/bootstrap.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/_compiler.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/_fingerprint.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/_plan.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_conversation.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_feedable.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_hook.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_instructions.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_limits.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_model_role.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_output.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/compiler/phases/_state.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/declarative/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/declarative/_envelope.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/declarative/_schema.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/declarative/_v1.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/describe.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_a2a.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_capabilities.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_engine.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_escape.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_history.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_limits.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_mcp.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_models.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_native.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/extras/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/extras/a2a.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/extras/handlebars.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/extras/mcp.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/extras/skills.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/provider.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/providers/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/providers/_shared.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/providers/anthropic.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/providers/bedrock.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/providers/gateway.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/providers/openai.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/engines/pydantic_ai/providers/typesafe.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/errors.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/etl/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/etl/_batch.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/etl/_columns.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/etl/_frames.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/etl/_ledger.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/etl/_runner.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/etl/_validation.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/fastapi/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/fastapi/response.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/fastapi/streaming.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/inference.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/pricing.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/registry.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/remote_auth.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_chain.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_conversation.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_grants.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_handle.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_health.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_hooks.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_limits.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/runtime/_mcp.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/validate/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/ai/validate/__main__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/cli/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/async_bridge.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/authz/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/authz/_decide.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/authz/_grants.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/authz/_roles.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/authz/_scope.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/authz/product.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/backend/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/backend/core_model.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/backend/protocol.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/bootstrap/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/bootstrap/bootstrap.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/_batching.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/_single_flight.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/abc/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/abc/backend.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/abc/config.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/abc/dependency.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/calls.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/codec.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/decorators.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/dependency.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/errors.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/gateway.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/keys.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/memory.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/result_codec.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/cache/serializer.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/checks.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/command/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/command/adapter.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/command/base.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/command/field.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/command/introspection.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/compiler.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/_includes.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/binder.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/configurable.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/convert.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/errors.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/model.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/config/observability.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/_base.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/aws/client.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/aws/loader.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/clickhouse/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/clickhouse/client.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/clickhouse/loader.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/mongo/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/mongo/client.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/mongo/loader.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/connections/relational.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/contracts/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/di/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/di/scope.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/discovery/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/discovery/_utils.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/discovery/interfaces.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/engine/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/engine/compilable.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/engine/events.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/engine/metrics.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/environment.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/expr/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/expr/eval.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/expr/nodes.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/expr/refs.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/identity/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/identity/identity.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/identity/issuer.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/identity/wire.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/introspection/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/introspection/base.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/introspection/describe.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/job/callback.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/job/handle.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/logger/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/logger/abc.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/logger/checks.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/logger/config.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/logger/context.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/logger/registry.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/logger/structlogger.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/_json_schema.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/_loom_type.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/convert.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/enums.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/field.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/introspection.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/partition.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/privilege.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/projection.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/redaction.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/relation.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/struct.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/timestamped.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/types.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/model/types_postgres.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/config.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/event.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/observer/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/observer/noop.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/observer/otel.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/observer/structlog.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/otel_ids.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/protocol.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/runtime.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/span.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/observability/topology.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/plugins/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/plugins/optional.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/projection/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/projection/loaders.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/projection/runtime.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/errors.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/query.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/query_compiler.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/repo_for.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/abc/repository.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/dynamodb/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/dynamodb/uow.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/mongo/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/mongo/ids.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/mongo/query_compiler.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/mongo/values.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/mutation.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/registry.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/_pool_metrics.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/migrations/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/migrations/env_template.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/migrations/hook.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/migrations/operations.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/model.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/config.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/guard/0001.sql +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/guard/0002.sql +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/guard/preflight.sql +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/guard_manifest.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/integrity.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/rls/verify.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/session_settings.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/repository/sqlalchemy/values.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/response/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/response/base.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/routing/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/routing/ref.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/routing/resolver.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/runner.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/schema/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/schema/schema_mode.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/abc/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/abc/contracts.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/abc/errors.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/caller_bound.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/clickhouse/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/clickhouse/_client.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/clickhouse/executor.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/config.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/roles.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/sql/service.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/symbols.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/tracing/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/tracing/context.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/transport/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/transport/adapter.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/_predicates.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/agent_markers.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/compute.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/constants.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/field_ref.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/invoker.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/keys.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/markers.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/mcp_markers.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/outcome.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/registry.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/rule.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/core/use_case/use_case.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/_uri.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_format_registry.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_historify/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_historify/_common.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_historify/_log.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_historify/_ops.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_historify/_transform.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_merge.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_path_template.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_predicate.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/_write_policy.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_dtype.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_file_writer.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_frame.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_historify.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_predicate.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_reader.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_schema.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_streaming.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/_writer.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/polars/provider.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/spark/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/spark/_dtype.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/spark/_historify.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/spark/_reader.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/spark/_schema.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/spark/_writer.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/backends/spark/provider.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/_backends/_memory.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/_cleaners.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/_options.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/_paths.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/_scope.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/checkpoint/_store.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_binding.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_compiler.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_errors.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_filter.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_plan.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_validators.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_validators_agents.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_validators_config.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_validators_plan.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/compiler/_validators_step.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/_format.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/_read_options.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/_utils.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/_with_agent.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/_write_options.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/expr/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/expr/_params.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/expr/_predicate.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/expr/_refs.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/source/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/source/_from.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/source/_from_config.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/source/_specs.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_client.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_errors.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_file.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_history/_report.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_into.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_table.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/declarative/target/_temp.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/executor/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/executor/_agents.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/executor/_dispatcher.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/executor/_executor.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/_clickhouse_connection.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/_registry.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_clickhouse.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_dynamodb.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_mongo.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/sources/_serialization.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/targets/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/io/targets/_clickhouse.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/lineage/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/lineage/_config.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/lineage/_observer.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/lineage/_records.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/lineage/sinks/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/lineage/sinks/_table.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/lineage/sinks/_writer.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/maintenance/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/maintenance/_builder.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/maintenance/_ops.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/maintenance/_protocol.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/maintenance/_runner.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/maintenance/_step.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/maintenance/backends/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/_generics.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/_params.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/_pipeline.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/_process.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/_sql.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/_step.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/_step_client.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/pipeline/_step_sql.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runner/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runner/_agents.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runner/_providers.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runner/_wiring.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runner/core.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runtime/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runtime/_config_values.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/runtime/contracts.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/schema/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/schema/_contract.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/schema/_schema.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/storage/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/storage/_config.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/storage/_file_locator.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/storage/_locator.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/storage/routing.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/testing/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/testing/_delta.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/testing/_result.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/testing/_runners.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/testing/_scenario.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/testing/_stubs.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/etl/testing/spark.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/_async.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/_config.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/_ctx.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/_flow_yaml.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/_meta.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/_placeholders.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/_summary.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/deploy/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/deploy/_discovery.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/deploy/_schedule.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/deploy/_yaml_etls.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/deploy/entrypoint.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_backfill.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_backfill_body.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_body.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_common.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_factory.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_hooks.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_maintenance.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_params.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_run_name.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_runtime.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_signature.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/flow/_stages.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/manifest/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/manifest/_model.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/manifest/_s3.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/manifest/_store.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/notify/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/notify/_event.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/notify/_format.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/notify/_port.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/notify/_slack.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/observer/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/observer/_flow.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/observer/_logging_bridge.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/observer/_manifest.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prefect/observer/_task_run.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prometheus/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prometheus/_instruments.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prometheus/adapter.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prometheus/db_pool.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prometheus/kafka.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prometheus/lifecycle.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/prometheus/middleware.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/py.typed +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/_body.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/adapter.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/auth/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/auth/config.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/auth/jwt.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/auth/middleware.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/autocrud.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/constants.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/cors.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/openapi.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/fastapi/response.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/middleware.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/model.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/rest/rest_adapter.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_adapter.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_errors.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_operators.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/bytewax/runner.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/compiler/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/compiler/_bindings.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/compiler/_errors.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/compiler/_plan.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/core/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/core/_errors.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/core/_exceptions.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/core/_message.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/core/_tracing.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/core/_typing.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/graph/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/graph/_flow.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/_codec.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/_config.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/_errors.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/_key_resolver.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/_message.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/_record.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/_wire.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/client/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/client/_consumer.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/client/_producer.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/client/_protocol.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/client/_retry.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/message/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/message/_consumer.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/message/_producer.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/kafka/message/_protocol.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/mongo/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/mongo/_config.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/mongo/_event.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/mongo/_normalize.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_boundary.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_branches.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_broadcast.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_capabilities.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_decompose.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_expand_routes.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_expr_eval.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_fork.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_helpers.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_mongo.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_protocols.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_router.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_shape.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_sink.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_step.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_table/__init__.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_table/_clickhouse.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_table/_delta.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_table/_sqlalchemy.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/_with.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/nodes/refs.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/streaming/testing.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/testing/agents.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/testing/golden.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/testing/http_harness.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/testing/in_memory.py +0 -0
- {loom_kernel-9.2.0 → loom_kernel-10.1.0}/src/loom/testing/repository_harness.py +0 -0
- {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:
|
|
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<
|
|
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.
|
|
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
|
|
471
|
+
signing: ephemeral
|
|
463
472
|
|
|
464
|
-
|
|
465
|
-
|
|
473
|
+
stores:
|
|
474
|
+
default:
|
|
475
|
+
backend: sqlalchemy
|
|
476
|
+
url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///store.db}
|
|
466
477
|
|
|
467
|
-
cache:
|
|
478
|
+
cache:
|
|
468
479
|
default_ttl: 300
|
|
469
480
|
aiocache_config:
|
|
470
481
|
default:
|
|
471
|
-
cache: aiocache.SimpleMemoryCache
|
|
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
|
|
339
|
+
signing: ephemeral
|
|
339
340
|
|
|
340
|
-
|
|
341
|
-
|
|
341
|
+
stores:
|
|
342
|
+
default:
|
|
343
|
+
backend: sqlalchemy
|
|
344
|
+
url: ${oc.env:DATABASE_URL,sqlite+aiosqlite:///store.db}
|
|
342
345
|
|
|
343
|
-
cache:
|
|
346
|
+
cache:
|
|
344
347
|
default_ttl: 300
|
|
345
348
|
aiocache_config:
|
|
346
349
|
default:
|
|
347
|
-
cache: aiocache.SimpleMemoryCache
|
|
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.
|
|
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,<
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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,
|
|
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={
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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",
|
|
373
|
+
return error_response(500, "INTERNAL_ERROR", _INTERNAL_ERROR_MESSAGE)
|
|
364
374
|
|
|
365
375
|
return run_agent
|
|
366
376
|
|