loom-kernel 10.0.0__tar.gz → 10.2.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-10.0.0 → loom_kernel-10.2.0}/CHANGELOG.md +130 -14
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/PKG-INFO +8 -8
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/pyproject.toml +9 -9
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/compiler/phases/_output.py +2 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/compiler/phases/_state.py +2 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_output.py +1 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/fastapi/endpoints.py +2 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/runtime/_grants.py +2 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/runtime/_lifecycle.py +2 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/celery/errors.py +1 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/celery/runner.py +1 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/cli/check.py +4 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/composition/build.py +7 -22
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/repository.py +2 -1
- loom_kernel-10.2.0/src/loom/core/config/_interpolations.py +68 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/loader.py +15 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/overrides.py +42 -32
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/resolver.py +20 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/secrets.py +1 -5
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/ssm.py +1 -5
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/discovery/worker.py +9 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/engine/__init__.py +1 -2
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/engine/compiler.py +2 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/engine/executor.py +17 -12
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/engine/post_commit.py +1 -24
- loom_kernel-10.2.0/src/loom/core/errors/__init__.py +64 -0
- loom_kernel-10.2.0/src/loom/core/errors/auth.py +133 -0
- loom_kernel-10.2.0/src/loom/core/errors/base.py +67 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/errors/codes.py +6 -1
- loom_kernel-10.2.0/src/loom/core/errors/domain.py +139 -0
- loom_kernel-10.2.0/src/loom/core/errors/jobs.py +85 -0
- loom_kernel-10.2.0/src/loom/core/errors/model.py +52 -0
- loom_kernel-10.2.0/src/loom/core/errors/stores.py +249 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/job/__init__.py +2 -5
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/job/context.py +2 -2
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/job/handle.py +1 -46
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/job/outcome.py +1 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/job/router.py +1 -14
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/__init__.py +0 -4
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/_loom_type.py +1 -48
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/abc/__init__.py +0 -2
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/abc/cursor.py +16 -10
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/dynamodb/repository.py +6 -14
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/mongo/query_compiler.py +2 -2
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/repository.py +12 -27
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/session_manager.py +54 -4
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/transactional.py +8 -8
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/values.py +2 -2
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/uow/__init__.py +0 -12
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/uow/coordinator.py +1 -23
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/uow/scope.py +7 -158
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/markers.py +5 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/rule.py +1 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/__init__.py +1 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/_format_registry.py +2 -30
- loom_kernel-10.2.0/src/loom/etl/runner/errors.py +38 -0
- loom_kernel-10.2.0/src/loom/jobs/aws/errors.py +36 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/jobs/aws/sqs.py +14 -18
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/auth/abc.py +3 -35
- loom_kernel-10.2.0/src/loom/rest/auth/errors.py +43 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/checks.py +7 -5
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/compiler.py +2 -7
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/errors.py +10 -4
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/fastapi/adapter.py +31 -38
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/fastapi/response.py +2 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/fastapi/router_runtime.py +2 -2
- loom_kernel-10.2.0/src/loom/serverless/aws/lambda_/__init__.py +49 -0
- loom_kernel-10.2.0/src/loom/serverless/aws/lambda_/_jobs.py +137 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/serverless/aws/lambda_/_refusals.py +6 -5
- loom_kernel-10.2.0/src/loom/serverless/aws/lambda_/checks.py +93 -0
- loom_kernel-10.2.0/src/loom/serverless/aws/lambda_/errors.py +16 -0
- loom_kernel-10.2.0/src/loom/serverless/aws/lambda_/functions.py +260 -0
- loom_kernel-10.2.0/src/loom/serverless/aws/lambda_/handler.py +302 -0
- loom_kernel-10.2.0/src/loom/serverless/aws/lambda_/interfaces.py +90 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/serverless/aws/lambda_/manifest.py +110 -119
- loom_kernel-10.2.0/src/loom/serverless/aws/lambda_/triggers/__init__.py +64 -0
- loom_kernel-10.2.0/src/loom/serverless/aws/lambda_/triggers/eventbridge.py +22 -0
- {loom_kernel-10.0.0/src/loom/serverless/aws/lambda_ → loom_kernel-10.2.0/src/loom/serverless/aws/lambda_/triggers}/http.py +46 -87
- loom_kernel-10.2.0/src/loom/serverless/aws/lambda_/triggers/s3.py +88 -0
- loom_kernel-10.2.0/src/loom/serverless/aws/lambda_/triggers/schedule.py +16 -0
- loom_kernel-10.2.0/src/loom/serverless/aws/lambda_/triggers/sns.py +55 -0
- loom_kernel-10.2.0/src/loom/serverless/aws/lambda_/triggers/sqs.py +183 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/_error_boundary.py +1 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_table/common.py +1 -1
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/testing/__init__.py +3 -8
- loom_kernel-10.2.0/src/loom/testing/gateway.py +48 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/testing/jobs.py +5 -67
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/testing/lambda_http.py +20 -38
- loom_kernel-10.2.0/src/loom/testing/serverless.py +227 -0
- loom_kernel-10.0.0/src/loom/core/errors/__init__.py +0 -35
- loom_kernel-10.0.0/src/loom/core/errors/errors.py +0 -340
- loom_kernel-10.0.0/src/loom/core/repository/abc/errors.py +0 -30
- loom_kernel-10.0.0/src/loom/serverless/aws/lambda_/__init__.py +0 -46
- loom_kernel-10.0.0/src/loom/serverless/aws/lambda_/functions.py +0 -203
- loom_kernel-10.0.0/src/loom/serverless/aws/lambda_/sqs.py +0 -316
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/.gitignore +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/LICENSE +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/README.md +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/_concurrency.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/_filters.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/_paths.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/_roles.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/_startup.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/_transport.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/_usecase.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/a2a/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/a2a/_binding.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/a2a/_handlers.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/a2a/_rpc.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/a2a/card.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/a2a/events.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/a2a/server.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/abc.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/bootstrap.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/compiler/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/compiler/_compiler.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/compiler/_fingerprint.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/compiler/_plan.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/compiler/phases/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/compiler/phases/_capabilities.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/compiler/phases/_conversation.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/compiler/phases/_feedable.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/compiler/phases/_hook.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/compiler/phases/_instructions.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/compiler/phases/_limits.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/compiler/phases/_model_role.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/declarative/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/declarative/_envelope.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/declarative/_schema.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/declarative/_v1.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/describe.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_a2a.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_capabilities.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_engine.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_escape.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_history.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_instructions.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_limits.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_mcp.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_models.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_native.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/extras/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/extras/a2a.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/extras/handlebars.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/extras/mcp.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/extras/skills.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/provider.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/providers/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/providers/_shared.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/providers/anthropic.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/providers/bedrock.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/providers/gateway.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/providers/openai.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/engines/pydantic_ai/providers/typesafe.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/errors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/etl/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/etl/_batch.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/etl/_columns.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/etl/_frames.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/etl/_ledger.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/etl/_runner.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/etl/_validation.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/fastapi/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/fastapi/response.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/fastapi/streaming.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/inference.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/pricing.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/registry.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/remote_auth.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/runtime/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/runtime/_bounded.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/runtime/_chain.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/runtime/_conversation.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/runtime/_handle.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/runtime/_health.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/runtime/_hooks.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/runtime/_limits.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/runtime/_mcp.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/validate/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/ai/validate/__main__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/celery/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/celery/_discovery.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/celery/adapter.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/celery/auto.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/celery/bootstrap.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/celery/config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/celery/constants.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/celery/service.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/cli/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/cli/app.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/cli/deploy.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/cli/schema.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/composition/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/composition/_ai.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/composition/_jobs.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/composition/_reserved.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/composition/_sql.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/composition/application.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/composition/errors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/composition/host.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/composition/recipe.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/composition/resources.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/composition/source.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/_async.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/async_bridge.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/authz/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/authz/_decide.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/authz/_grants.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/authz/_roles.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/authz/_scope.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/authz/elevation.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/authz/product.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/backend/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/backend/core_model.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/backend/protocol.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/backend/scoped_ddl.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/backend/sqlalchemy.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/bootstrap/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/bootstrap/bootstrap.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/bootstrap/kernel.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/_batching.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/_single_flight.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/abc/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/abc/backend.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/abc/config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/abc/dependency.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/calls.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/codec.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/decorators.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/dependency.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/errors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/gateway.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/keys.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/memory.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/result_codec.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/serializer.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/cache/wiring.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/checks.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/command/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/command/adapter.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/command/base.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/command/field.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/command/introspection.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/compiler.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/_includes.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/_resolver_utils.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/aws.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/binder.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/checks.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/configurable.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/context.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/convert.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/errors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/keys.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/model.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/observability.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/config/retired.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/connections/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/connections/_base.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/connections/aws/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/connections/aws/client.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/connections/aws/config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/connections/aws/loader.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/connections/clickhouse/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/connections/clickhouse/client.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/connections/clickhouse/config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/connections/clickhouse/loader.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/connections/mongo/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/connections/mongo/client.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/connections/mongo/config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/connections/mongo/loader.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/connections/relational.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/contracts/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/contracts/manifest.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/di/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/di/container.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/di/scope.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/discovery/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/discovery/_utils.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/discovery/base.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/discovery/config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/discovery/interfaces.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/discovery/manifest.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/discovery/modules.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/discovery/worker_manifest.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/engine/compilable.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/engine/events.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/engine/metrics.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/engine/plan.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/environment.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/expr/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/expr/eval.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/expr/nodes.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/expr/refs.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/identity/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/identity/context.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/identity/identity.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/identity/issuer.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/identity/wire.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/introspection/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/introspection/base.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/introspection/describe.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/job/callback.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/job/config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/job/envelope.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/job/job.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/job/run.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/job/service.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/locator.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/logger/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/logger/abc.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/logger/checks.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/logger/config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/logger/context.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/logger/registry.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/logger/structlogger.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/_json_schema.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/base.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/convert.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/enums.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/field.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/introspection.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/partition.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/privilege.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/projection.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/redaction.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/relation.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/scoped.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/struct.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/timestamped.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/types.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/model/types_postgres.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/observability/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/observability/config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/observability/event.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/observability/observer/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/observability/observer/noop.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/observability/observer/otel.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/observability/observer/structlog.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/observability/otel_ids.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/observability/protocol.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/observability/runtime.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/observability/span.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/observability/topology.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/persistence/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/persistence/abc.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/persistence/database.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/persistence/elevation.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/persistence/none.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/persistence/profile.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/persistence/registry.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/persistence/stores.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/plugins/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/plugins/entrypoints.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/plugins/optional.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/projection/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/projection/loaders.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/projection/runtime.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/abc/checks.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/abc/query.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/abc/query_compiler.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/abc/repo_for.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/abc/repository.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/abc/session_scope.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/dynamodb/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/dynamodb/backend.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/dynamodb/registry.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/dynamodb/uow.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/mongo/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/mongo/backend.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/mongo/ids.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/mongo/registry.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/mongo/repository.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/mongo/uow.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/mongo/values.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/mutation.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/registration.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/registry.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/_pool_metrics.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/backend.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/migrations/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/migrations/env_template.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/migrations/hook.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/migrations/operations.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/migrations/runners.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/model.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/rls/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/rls/bootstrap.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/rls/config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/rls/elevate.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/rls/guard/0001.sql +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/rls/guard/0002.sql +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/rls/guard/preflight.sql +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/rls/guard_manifest.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/rls/integrity.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/rls/partitions.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/rls/provider.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/rls/schema.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/rls/sources.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/rls/verify.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/session_settings.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/response/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/response/base.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/routing/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/routing/ref.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/routing/resolver.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/runner.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/schema/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/schema/schema_mode.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/schema_names.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/sql/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/sql/abc/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/sql/abc/contracts.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/sql/abc/errors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/sql/caller_bound.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/sql/clickhouse/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/sql/clickhouse/_client.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/sql/clickhouse/executor.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/sql/clickhouse/registry.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/sql/config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/sql/loader.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/sql/roles.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/sql/service.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/symbols.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/tracing/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/tracing/context.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/transport/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/transport/adapter.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/uow/abc.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/uow/alone.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/_predicates.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/agent_markers.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/compute.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/constants.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/errors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/factory.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/field_ref.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/invoker.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/joined.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/keys.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/mcp_markers.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/outcome.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/registry.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/core/use_case/use_case.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/_uri.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/_historify/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/_historify/_common.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/_historify/_log.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/_historify/_ops.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/_historify/_transform.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/_merge.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/_path_template.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/_predicate.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/_write_policy.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/polars/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/polars/_dtype.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/polars/_file_writer.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/polars/_frame.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/polars/_historify.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/polars/_predicate.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/polars/_reader.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/polars/_schema.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/polars/_streaming.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/polars/_writer.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/polars/provider.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/spark/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/spark/_dtype.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/spark/_historify.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/spark/_reader.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/spark/_schema.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/spark/_writer.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/backends/spark/provider.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/checkpoint/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/checkpoint/_backends/_memory.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/checkpoint/_cleaners.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/checkpoint/_options.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/checkpoint/_paths.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/checkpoint/_scope.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/checkpoint/_store.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/compiler/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/compiler/_binding.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/compiler/_compiler.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/compiler/_errors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/compiler/_filter.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/compiler/_plan.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/compiler/_validators.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/compiler/_validators_agents.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/compiler/_validators_config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/compiler/_validators_plan.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/compiler/_validators_step.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/_format.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/_read_options.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/_utils.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/_with_agent.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/_write_options.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/expr/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/expr/_params.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/expr/_predicate.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/expr/_refs.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/source/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/source/_from.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/source/_from_config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/source/_specs.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/target/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/target/_client.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/target/_errors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/target/_file.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/target/_history/_report.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/target/_into.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/target/_table.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/declarative/target/_temp.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/executor/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/executor/_agents.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/executor/_dispatcher.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/executor/_executor.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/io/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/io/_clickhouse_connection.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/io/_registry.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/io/sources/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/io/sources/_clickhouse.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/io/sources/_dynamodb.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/io/sources/_mongo.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/io/sources/_serialization.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/io/targets/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/io/targets/_clickhouse.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/lineage/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/lineage/_config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/lineage/_observer.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/lineage/_records.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/lineage/sinks/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/lineage/sinks/_table.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/lineage/sinks/_writer.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/maintenance/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/maintenance/_builder.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/maintenance/_ops.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/maintenance/_protocol.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/maintenance/_runner.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/maintenance/_step.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/maintenance/backends/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/pipeline/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/pipeline/_generics.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/pipeline/_params.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/pipeline/_pipeline.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/pipeline/_process.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/pipeline/_sql.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/pipeline/_step.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/pipeline/_step_client.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/pipeline/_step_sql.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/runner/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/runner/_agents.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/runner/_providers.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/runner/_wiring.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/runner/config_loader.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/runner/core.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/runtime/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/runtime/_config_values.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/runtime/contracts.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/schema/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/schema/_contract.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/schema/_schema.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/storage/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/storage/_config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/storage/_file_locator.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/storage/_locator.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/storage/routing.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/testing/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/testing/_delta.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/testing/_result.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/testing/_runners.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/testing/_scenario.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/testing/_stubs.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/etl/testing/spark.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/jobs/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/jobs/aws/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/_async.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/_config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/_ctx.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/_flow_yaml.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/_meta.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/_placeholders.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/_summary.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/deploy/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/deploy/_discovery.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/deploy/_schedule.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/deploy/_yaml_etls.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/deploy/entrypoint.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/flow/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/flow/_assemble.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/flow/_backfill.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/flow/_backfill_body.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/flow/_body.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/flow/_common.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/flow/_factory.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/flow/_hooks.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/flow/_maintenance.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/flow/_params.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/flow/_run_name.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/flow/_runtime.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/flow/_signature.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/flow/_stages.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/manifest/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/manifest/_model.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/manifest/_s3.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/manifest/_store.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/notify/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/notify/_event.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/notify/_factory.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/notify/_format.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/notify/_port.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/notify/_slack.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/notify/_sns.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/observer/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/observer/_flow.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/observer/_logging_bridge.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/observer/_manifest.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prefect/observer/_task_run.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prometheus/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prometheus/_instruments.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prometheus/adapter.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prometheus/db_pool.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prometheus/kafka.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prometheus/lifecycle.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/prometheus/middleware.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/py.typed +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/_body.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/adapter.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/auth/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/auth/config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/auth/jwt.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/auth/middleware.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/autocrud.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/constants.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/cors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/fastapi/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/fastapi/_auto_ai.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/fastapi/_auto_auth.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/fastapi/_auto_sql.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/fastapi/_errors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/fastapi/_exclusions.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/fastapi/app.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/fastapi/auto.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/fastapi/health.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/fastapi/openapi.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/fastapi/sql.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/middleware.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/model.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/rest/rest_adapter.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/serverless/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/serverless/aws/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/_adapter.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/_errors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/_operators.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/bytewax/runner.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/compiler/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/compiler/_bindings.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/compiler/_compiler.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/compiler/_errors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/compiler/_plan.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/compiler/phases/build_plan.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/compiler/phases/validate.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/core/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/core/_errors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/core/_exceptions.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/core/_message.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/core/_tracing.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/core/_typing.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/graph/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/graph/_flow.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/_codec.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/_config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/_errors.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/_key_resolver.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/_message.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/_record.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/_wire.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/client/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/client/_consumer.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/client/_producer.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/client/_protocol.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/client/_retry.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/message/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/message/_consumer.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/message/_producer.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/kafka/message/_protocol.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/mongo/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/mongo/_config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/mongo/_event.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/mongo/_normalize.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_boundary.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_branches.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_broadcast.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_capabilities.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_decompose.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_expand_routes.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_expr_eval.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_fork.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_helpers.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_mongo.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_protocols.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_router.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_shape.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_sink.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_step.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_table/__init__.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_table/_clickhouse.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_table/_delta.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_table/_sqlalchemy.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_table/config.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/_with.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/nodes/refs.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/streaming/testing.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/testing/agents.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/testing/golden.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/testing/http_harness.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/testing/in_memory.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/testing/repository_harness.py +0 -0
- {loom_kernel-10.0.0 → loom_kernel-10.2.0}/src/loom/testing/runner.py +0 -0
|
@@ -1,5 +1,52 @@
|
|
|
1
1
|
# Unreleased
|
|
2
2
|
|
|
3
|
+
## 💥 Breaking
|
|
4
|
+
|
|
5
|
+
### lambda
|
|
6
|
+
|
|
7
|
+
- **lambda:** the deploy manifest reuses the loader: `served_routes(source,
|
|
8
|
+
select_interfaces=None)` reads and validates `app.rest.interfaces` and
|
|
9
|
+
`app.rest.disable_routes` itself, the placeholders are read by OmegaConf's
|
|
10
|
+
grammar (`loom.core.config.resolver.referenced`; an escaped `\${secrets:...}`
|
|
11
|
+
is no longer listed, `${secrets:a,b}` names `a`), the resolvers' `.reference()`
|
|
12
|
+
methods are gone and `FunctionManifest.event` is a `dict` with the same keys
|
|
13
|
+
the removed `Route`, `HttpEvent`, `QueueEvent`, `OnFailure` and `DirectEvent`
|
|
14
|
+
structs encoded. The JSON does not change. `omegaconf` is bound to `<2.4`:
|
|
15
|
+
the manifest reads its generated grammar (`loom.core.config._interpolations`).
|
|
16
|
+
|
|
17
|
+
- **lambda:** one adapter, `LambdaAdapter`, serves every Lambda function: it
|
|
18
|
+
binds the handler of the trigger the deployed function declares. Nothing
|
|
19
|
+
of the previous surface remains:
|
|
20
|
+
|
|
21
|
+
| Before | Now |
|
|
22
|
+
|---|---|
|
|
23
|
+
| `LambdaHTTPAdapter()` | `LambdaAdapter()` |
|
|
24
|
+
| `LambdaSQSAdapter(jobs=...)` | `LambdaAdapter(jobs=...)` on a function with `trigger: {source: jobs}` |
|
|
25
|
+
| `app.entry: lambda_http` | `app.entry: lambda` |
|
|
26
|
+
| `app.entry: lambda_sqs` | `app.entry: <function>` with `trigger: {source: jobs}` |
|
|
27
|
+
| `lambda.functions.<f>.http: [...]` | `lambda.functions.<f>.trigger: {source: http, interfaces: [...]}` |
|
|
28
|
+
| `lambda.functions.<f>.auth` | `lambda.functions.<f>.trigger.auth` |
|
|
29
|
+
| `lambda.functions.<f>.sqs: true` | `lambda.functions.<f>.trigger: {source: jobs, queue: {name: ...}}` |
|
|
30
|
+
| `lambda.functions.<f>.queue`, `batch_size`, `batching_window_s`, `max_concurrency`, `report_batch_item_failures` | The same keys under `trigger.queue` (`queue` becomes `queue.name`) |
|
|
31
|
+
| `loom.serverless.aws.lambda_.http` | `loom.serverless.aws.lambda_.triggers.http` |
|
|
32
|
+
| `loom.serverless.aws.lambda_.sqs.SQSBatchFailedError` | `loom.serverless.aws.lambda_.SQSBatchFailedError` |
|
|
33
|
+
| `loom.serverless.aws.lambda_.sqs.SQSHandler` | `loom.serverless.aws.lambda_.LambdaHandler` |
|
|
34
|
+
| `loom.serverless.aws.lambda_.LambdaHTTPHandler` | `LambdaHandler`; the class is internal |
|
|
35
|
+
| `loom.serverless.aws.lambda_.sqs.DuplicateJobName` | `loom.core.discovery.worker.DuplicateJobName` |
|
|
36
|
+
| `loom.serverless.aws.lambda_.sqs.MALFORMED_JOB`, `TIMEOUT_SAFETY_MARGIN_MS` | Internal |
|
|
37
|
+
| `loom.testing.sqs_record(Job, payload, ...)` | `loom.testing.LambdaEvent.jobs(Job, payload, ...)` |
|
|
38
|
+
| `loom.testing.sqs_raw_record(body, ...)` | `loom.testing.LambdaEvent.sqs_record(body, ...)["Records"][0]` |
|
|
39
|
+
| Deploy manifest `manifest_version: 1`, event `type` (`http`, `sqs`) | `manifest_version: 2`: each function's `source` and `via` |
|
|
40
|
+
|
|
41
|
+
`loom.serverless.aws.lambda_` exports `LambdaAdapter`, `LambdaHandler`,
|
|
42
|
+
`LambdaUnservedConfigError`, `S3Object` and `SQSBatchFailedError` only.
|
|
43
|
+
|
|
44
|
+
### config
|
|
45
|
+
|
|
46
|
+
- **config:** a `config.overridable` entry reaching `lambda.handler`,
|
|
47
|
+
`app.discovery` or `lambda.functions.*.trigger` stops every load, as one
|
|
48
|
+
reaching `aws` or `sqs.queues` does; `app.*` is such an entry.
|
|
49
|
+
|
|
3
50
|
## ✨ Features
|
|
4
51
|
|
|
5
52
|
### jobs
|
|
@@ -11,30 +58,38 @@
|
|
|
11
58
|
injecting `JobService`.
|
|
12
59
|
- **jobs:** `app.job_service: sqs` (extra `loom[sqs]`) sends each job to the
|
|
13
60
|
SQS queue `sqs.queues` maps its queue to, after the commit, as the
|
|
14
|
-
`JobEnvelope`
|
|
61
|
+
`JobEnvelope` a Lambda `jobs` function runs. `sqs:` inherits `aws:`.
|
|
15
62
|
FIFO queues take the SHA-256 of the new `Job.__group_by__` payload field as
|
|
16
63
|
`MessageGroupId`. Callbacks, priorities, delays SQS cannot honour and bodies
|
|
17
64
|
over 256 KiB raise `SQSDispatchError`; unmapped queues stop startup.
|
|
18
65
|
- **jobs:** an execution's SQS jobs leave after the commit in
|
|
19
66
|
`SendMessageBatch` calls per queue, in dispatch order (`sqs.batch`,
|
|
20
67
|
`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.
|
|
68
|
+
entries SQS refuses once, a FIFO queue stops at its first failure. A
|
|
69
|
+
Lambda `jobs` trigger's `queue` block declares `batch_size`,
|
|
22
70
|
`batching_window_s`, `max_concurrency` and `report_batch_item_failures`;
|
|
23
71
|
`false` makes the SQS handler fail the whole batch.
|
|
24
72
|
|
|
25
73
|
### lambda
|
|
26
74
|
|
|
75
|
+
- **lambda:** event triggers: `trigger: {source: eventbridge | s3 | sns |
|
|
76
|
+
schedule, job, identity}` runs the job for each event, directly or through
|
|
77
|
+
a `queue:` block, as the configured identity only. A failed job fails the
|
|
78
|
+
event, which Lambda retries, then sends to its on-failure destination;
|
|
79
|
+
through a queue it is reported, then dead-lettered. See "Event triggers" in
|
|
80
|
+
the composition guide.
|
|
27
81
|
- **lambda:** `loom deploy manifest <config> [--function x]` prints a
|
|
28
|
-
versioned JSON manifest (`manifest_version:
|
|
82
|
+
versioned JSON manifest (`manifest_version: 2`) of each function of
|
|
29
83
|
`lambda.functions` for a deployment tool: the handler, code path and
|
|
30
|
-
queues once, then per function its
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
84
|
+
queues once, then per function its trigger's `source` and `via`, what its
|
|
85
|
+
event needs deployed (http routes and `auth`, the queue and its event
|
|
86
|
+
source mapping, or a direct trigger's job, identity and `on_failure`), and
|
|
87
|
+
the secret and SSM parameter names it resolves (never values; no resolver
|
|
88
|
+
runs). It runs the deploy checks of `loom check --deploy` first, prints
|
|
89
|
+
their findings to stderr and no manifest when one fails. `lambda.handler`
|
|
90
|
+
and a trigger's `queue` (a key of `sqs.queues`) are required by the
|
|
91
|
+
manifest only.
|
|
92
|
+
- **rest:** `loom.rest.E001` also fails a `lambda.functions.<name>.trigger.auth`
|
|
38
93
|
that names no mechanism (`{}`, `jwt: null`, `custom: false`): it replaces
|
|
39
94
|
`app.rest.auth` for that function.
|
|
40
95
|
|
|
@@ -42,9 +97,10 @@
|
|
|
42
97
|
|
|
43
98
|
- **testing:** Lambda functions are tested in process, without AWS:
|
|
44
99
|
`LambdaTestClient`, an `httpx.Client` like FastAPI's `TestClient`, sends API
|
|
45
|
-
Gateway HTTP API or REST events to the real handler;
|
|
46
|
-
`
|
|
47
|
-
`
|
|
100
|
+
Gateway HTTP API or REST events to the real handler;
|
|
101
|
+
`LambdaEvent` builds the event AWS delivers, one typed constructor per
|
|
102
|
+
trigger source (`LambdaEvent.s3([...])`, `.sns({...})`, `.jobs(Job, ...)`)
|
|
103
|
+
and `.via_sqs()` for the queue in between; `RecordingJobService`
|
|
48
104
|
(`app.job_service: loom.testing:RecordingJobService`) records each dispatch
|
|
49
105
|
after the commit. The `testing` extra now includes `httpx`.
|
|
50
106
|
|
|
@@ -80,6 +136,10 @@
|
|
|
80
136
|
`UndeclaredStoreWrite` and `NestedElevation` from `loom.core.uow`,
|
|
81
137
|
`ForeignSessionError` from `loom.core.errors`, and `ReadOnlyElevation` from
|
|
82
138
|
`loom.core.repository.sqlalchemy.rls`, next to `elevate`.
|
|
139
|
+
- **stores:** `async with session_manager.operation_session(write=...)`
|
|
140
|
+
gives raw SQL the session its operation runs in, as a repository's: the
|
|
141
|
+
invocation's when the store is enlisted, else a transaction of its own.
|
|
142
|
+
Repositories now run through it.
|
|
83
143
|
|
|
84
144
|
### config
|
|
85
145
|
|
|
@@ -146,6 +206,52 @@
|
|
|
146
206
|
raise `NotImplementedError`. Cache scenarios and frames, not runners: tests
|
|
147
207
|
that mutate state need a function-scoped runner on their own `tmp_path`.
|
|
148
208
|
|
|
209
|
+
## 💥 Breaking
|
|
210
|
+
|
|
211
|
+
### errors
|
|
212
|
+
|
|
213
|
+
- **errors:** `loom.core.errors` is a package split by area (`base`, `domain`,
|
|
214
|
+
`auth`, `model`, `jobs`, `stores`, `codes`) and re-exports every error, so
|
|
215
|
+
`from loom.core.errors import X` is unchanged. The errors below are
|
|
216
|
+
importable only from `loom.core.errors`; their old paths, and the package
|
|
217
|
+
re-exports that pointed at them, are gone:
|
|
218
|
+
|
|
219
|
+
| Old path | New path |
|
|
220
|
+
|---|---|
|
|
221
|
+
| every class of the removed `errors` submodule of `loom.core.errors` | `loom.core.errors` |
|
|
222
|
+
| `loom.core.uow.scope.ScopeOwnershipError`, `UnitOfWorkInsideScope`, `UndeclaredStoreWrite`, `NestedIdentityMismatch`, `NestedElevation`, `StoresNotCommitted` (also `loom.core.uow.*`) | `loom.core.errors` |
|
|
223
|
+
| `loom.core.uow.coordinator.UncomposedStore` | `loom.core.errors` |
|
|
224
|
+
| `loom.core.job.handle.JobTimeoutError`, `JobFailedError` (also `loom.core.job.*`) | `loom.core.errors` |
|
|
225
|
+
| `loom.core.job.router.MixedJobBackendsError` (also `loom.core.job.*`) | `loom.core.errors` |
|
|
226
|
+
| `loom.core.engine.post_commit.PostCommitError` (also `loom.core.engine.*`) | `loom.core.errors` |
|
|
227
|
+
| `loom.core.model._loom_type.BoundaryValidationError`, `UnsupportedBoundaryType` (also `loom.core.model.*`) | `loom.core.errors` |
|
|
228
|
+
| `loom.core.repository.abc.errors.UnsupportedQuery` (also `loom.core.repository.abc.*`; the module is removed) | `loom.core.errors` |
|
|
229
|
+
| `loom.jobs.aws.sqs.SQSDispatchError` | `loom.jobs.aws.errors` |
|
|
230
|
+
| `loom.serverless.aws.lambda_.triggers.sqs.SQSBatchFailedError` | `loom.serverless.aws.lambda_.errors` (also `loom.serverless.aws.lambda_`) |
|
|
231
|
+
| `loom.rest.auth.abc.AuthenticationUnavailable` | `loom.rest.auth.errors` (also `loom.rest.auth`) |
|
|
232
|
+
| `loom.etl.backends._format_registry.UnsupportedFormatError` | `loom.etl.runner.errors` (also `loom.etl`) |
|
|
233
|
+
|
|
234
|
+
- **errors:** a `LoomError` code is a catalogue member, never a literal
|
|
235
|
+
string: `LoomError(message, code=)` is typed `StrEnum`, `ErrorCode` gains
|
|
236
|
+
`JOB_TIMEOUT`, `JOB_FAILED`, `JOB_BACKENDS_MIXED` and
|
|
237
|
+
`BOUNDARY_TYPE_UNSUPPORTED` (same string values, mapped to 500 explicitly),
|
|
238
|
+
and the SQS adapters' `sqs_*` codes are the members of
|
|
239
|
+
`loom.jobs.aws.errors.SQSErrorCode`, which `SQSDispatchError(message, code=)`
|
|
240
|
+
now requires. An application catalogue is its own `StrEnum`.
|
|
241
|
+
`AuthenticationUnavailable` is a `SystemError`, so the generic retry and
|
|
242
|
+
circuit-breaker handlers see the outage it reports.
|
|
243
|
+
|
|
244
|
+
- **errors:** every error belongs to a family. `BoundaryValidationError` and
|
|
245
|
+
`UnsupportedFormatError` are `DomainError`s (still `ValueError`s);
|
|
246
|
+
`JobTimeoutError`, `JobFailedError`, `MixedJobBackendsError`,
|
|
247
|
+
`PostCommitError`, `UnsupportedBoundaryType`, `SQSDispatchError` and
|
|
248
|
+
`SQSBatchFailedError` are `SystemError`s. HTTP statuses do not change. A
|
|
249
|
+
`DomainError` is never retryable: Celery and the SQS consumers consume a
|
|
250
|
+
job that raises one instead of requeuing it, and the streaming boundary
|
|
251
|
+
files a `BoundaryValidationError` as a business error. `UnsupportedQuery`
|
|
252
|
+
takes `(reason, *, backend=None, model=None)` and its message names the
|
|
253
|
+
model and the reason, never the backend.
|
|
254
|
+
|
|
149
255
|
## ⚠ Behaviour changes
|
|
150
256
|
|
|
151
257
|
### jobs
|
|
@@ -168,6 +274,16 @@
|
|
|
168
274
|
|
|
169
275
|
### stores
|
|
170
276
|
|
|
277
|
+
- **stores:** a repository read, a `@with_session_scope(write=False)` method
|
|
278
|
+
or `operation_session(write=False)` on a store the invocation did not
|
|
279
|
+
enlist (a read-only execution such as a REST `GET`, or no invocation)
|
|
280
|
+
runs in a transaction of its own that is never committed: a write in it
|
|
281
|
+
persists nothing. On an enlisted store a `write=False` block still runs,
|
|
282
|
+
unrecorded, in the invocation's transaction and commits with it; declare
|
|
283
|
+
writes as `write=True`.
|
|
284
|
+
- **stores:** a failed transaction of its own logs `OperationSessionRollback`
|
|
285
|
+
with `store=` and the exception type only, where it logged
|
|
286
|
+
`RepositorySessionRollback` with `repository=` and the exception text.
|
|
171
287
|
- **stores:** a write to a store the running use case did not declare raises
|
|
172
288
|
`UndeclaredStoreWrite` (`undeclared_store_write`, HTTP 500) before the
|
|
173
289
|
driver is called, where it raised `ForeignSessionError`. So does a
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: loom-kernel
|
|
3
|
-
Version: 10.
|
|
3
|
+
Version: 10.2.0
|
|
4
4
|
Summary: Loom Python project
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -13,7 +13,7 @@ Classifier: Typing :: Typed
|
|
|
13
13
|
Requires-Python: >=3.11
|
|
14
14
|
Requires-Dist: aiocache<1.0,>=0.12
|
|
15
15
|
Requires-Dist: msgspec<1.0,>=0.18
|
|
16
|
-
Requires-Dist: omegaconf<
|
|
16
|
+
Requires-Dist: omegaconf<2.4,>=2.3
|
|
17
17
|
Requires-Dist: opentelemetry-api<2.0,>=1.27
|
|
18
18
|
Requires-Dist: prometheus-client>=0.20
|
|
19
19
|
Requires-Dist: structlog<27.0,>=24.4
|
|
@@ -37,7 +37,7 @@ Provides-Extra: ai-typesafe
|
|
|
37
37
|
Requires-Dist: pydantic-ai-slim[typesafe]<3,>=2.45; extra == 'ai-typesafe'
|
|
38
38
|
Provides-Extra: cache
|
|
39
39
|
Requires-Dist: aiocache<1.0,>=0.12; extra == 'cache'
|
|
40
|
-
Requires-Dist: omegaconf<
|
|
40
|
+
Requires-Dist: omegaconf<2.4,>=2.3; extra == 'cache'
|
|
41
41
|
Provides-Extra: celery
|
|
42
42
|
Requires-Dist: celery<6.0,>=5.3; extra == 'celery'
|
|
43
43
|
Requires-Dist: kombu<6.0,>=5.3; extra == 'celery'
|
|
@@ -49,11 +49,11 @@ Provides-Extra: clickhouse
|
|
|
49
49
|
Requires-Dist: clickhouse-connect<1.0,>=0.9.2; extra == 'clickhouse'
|
|
50
50
|
Provides-Extra: config
|
|
51
51
|
Requires-Dist: fsspec>=2024.2.0; extra == 'config'
|
|
52
|
-
Requires-Dist: omegaconf<
|
|
52
|
+
Requires-Dist: omegaconf<2.4,>=2.3; extra == 'config'
|
|
53
53
|
Provides-Extra: config-ssm
|
|
54
54
|
Requires-Dist: boto3>=1.35; extra == 'config-ssm'
|
|
55
55
|
Requires-Dist: fsspec>=2024.2.0; extra == 'config-ssm'
|
|
56
|
-
Requires-Dist: omegaconf<
|
|
56
|
+
Requires-Dist: omegaconf<2.4,>=2.3; extra == 'config-ssm'
|
|
57
57
|
Provides-Extra: dynamodb
|
|
58
58
|
Requires-Dist: boto3>=1.35; extra == 'dynamodb'
|
|
59
59
|
Provides-Extra: etl-otel
|
|
@@ -87,16 +87,16 @@ Requires-Dist: mangum<1.0,>=0.22; extra == 'lambda'
|
|
|
87
87
|
Requires-Dist: prometheus-client>=0.20; extra == 'lambda'
|
|
88
88
|
Requires-Dist: pydantic<3.0,>=2.0; extra == 'lambda'
|
|
89
89
|
Provides-Extra: logfire
|
|
90
|
-
Requires-Dist: logfire<
|
|
90
|
+
Requires-Dist: logfire<6,>=4.0; extra == 'logfire'
|
|
91
91
|
Requires-Dist: opentelemetry-api<2.0,>=1.27; extra == 'logfire'
|
|
92
92
|
Requires-Dist: opentelemetry-sdk<2.0,>=1.27; extra == 'logfire'
|
|
93
93
|
Provides-Extra: mongo
|
|
94
|
-
Requires-Dist: pymongo<5.0,>=4.
|
|
94
|
+
Requires-Dist: pymongo<5.0,>=4.18.3; extra == 'mongo'
|
|
95
95
|
Provides-Extra: prefect
|
|
96
96
|
Requires-Dist: boto3>=1.35; extra == 'prefect'
|
|
97
97
|
Requires-Dist: docker>=7.0; extra == 'prefect'
|
|
98
98
|
Requires-Dist: fsspec>=2024.2.0; extra == 'prefect'
|
|
99
|
-
Requires-Dist: omegaconf<
|
|
99
|
+
Requires-Dist: omegaconf<2.4,>=2.3; extra == 'prefect'
|
|
100
100
|
Requires-Dist: prefect<4.0,>=3.0; extra == 'prefect'
|
|
101
101
|
Requires-Dist: pyyaml>=6.0; extra == 'prefect'
|
|
102
102
|
Provides-Extra: prometheus
|
|
@@ -16,7 +16,7 @@ classifiers = [
|
|
|
16
16
|
dependencies = [
|
|
17
17
|
"msgspec>=0.18,<1.0",
|
|
18
18
|
"structlog>=24.4,<27.0",
|
|
19
|
-
"omegaconf>=2.3,<
|
|
19
|
+
"omegaconf>=2.3,<2.4",
|
|
20
20
|
"prometheus-client>=0.20",
|
|
21
21
|
"aiocache>=0.12,<1.0",
|
|
22
22
|
"typing_extensions>=4.12",
|
|
@@ -56,23 +56,23 @@ sqs = [
|
|
|
56
56
|
"boto3>=1.35",
|
|
57
57
|
]
|
|
58
58
|
mongo = [
|
|
59
|
-
"pymongo>=4.
|
|
59
|
+
"pymongo>=4.18.3,<5.0",
|
|
60
60
|
]
|
|
61
61
|
jwt = [
|
|
62
62
|
"pyjwt[crypto]>=2.8,<3",
|
|
63
63
|
]
|
|
64
64
|
config = [
|
|
65
|
-
"omegaconf>=2.3,<
|
|
65
|
+
"omegaconf>=2.3,<2.4",
|
|
66
66
|
"fsspec>=2024.2.0",
|
|
67
67
|
]
|
|
68
68
|
config-ssm = [
|
|
69
|
-
"omegaconf>=2.3,<
|
|
69
|
+
"omegaconf>=2.3,<2.4",
|
|
70
70
|
"fsspec>=2024.2.0",
|
|
71
71
|
"boto3>=1.35",
|
|
72
72
|
]
|
|
73
73
|
cache = [
|
|
74
74
|
"aiocache>=0.12,<1.0",
|
|
75
|
-
"omegaconf>=2.3,<
|
|
75
|
+
"omegaconf>=2.3,<2.4",
|
|
76
76
|
]
|
|
77
77
|
etl-polars = [
|
|
78
78
|
"polars>=1.24,<2.0",
|
|
@@ -107,7 +107,7 @@ prefect = [
|
|
|
107
107
|
"prefect>=3.0,<4.0",
|
|
108
108
|
"fsspec>=2024.2.0",
|
|
109
109
|
"pyyaml>=6.0",
|
|
110
|
-
"omegaconf>=2.3,<
|
|
110
|
+
"omegaconf>=2.3,<2.4",
|
|
111
111
|
"boto3>=1.35",
|
|
112
112
|
"docker>=7.0",
|
|
113
113
|
]
|
|
@@ -162,7 +162,7 @@ ai-harness = [
|
|
|
162
162
|
# See docs/ai/observability.md — a non-empty endpoint makes loom build its own
|
|
163
163
|
# provider, and the two are mutually exclusive by construction.
|
|
164
164
|
logfire = [
|
|
165
|
-
"logfire>=4.0,<
|
|
165
|
+
"logfire>=4.0,<6",
|
|
166
166
|
"opentelemetry-api>=1.27,<2.0",
|
|
167
167
|
"opentelemetry-sdk>=1.27,<2.0",
|
|
168
168
|
]
|
|
@@ -256,7 +256,7 @@ dev = [
|
|
|
256
256
|
"fastapi>=0.115,<1.0",
|
|
257
257
|
"greenlet>=3.0.0",
|
|
258
258
|
"mypy>=1.11.0,<2.0",
|
|
259
|
-
"omegaconf>=2.3,<
|
|
259
|
+
"omegaconf>=2.3,<2.4",
|
|
260
260
|
"pydantic>=2.0,<3.0",
|
|
261
261
|
"pre-commit>=3.8.0",
|
|
262
262
|
"pyright>=1.1.390,<2.0",
|
|
@@ -281,7 +281,7 @@ dev = [
|
|
|
281
281
|
"confluent-kafka>=2.6,<3.0",
|
|
282
282
|
"bytewax>=0.21; python_version < '3.13'",
|
|
283
283
|
"boto3>=1.35",
|
|
284
|
-
"pymongo>=4.
|
|
284
|
+
"pymongo>=4.18.3,<5.0",
|
|
285
285
|
"opentelemetry-api>=1.27,<2.0",
|
|
286
286
|
"opentelemetry-sdk>=1.27,<2.0",
|
|
287
287
|
"opentelemetry-exporter-otlp-proto-http>=1.27,<2.0",
|
|
@@ -36,7 +36,8 @@ from loom.ai.abc import OutputCheck
|
|
|
36
36
|
from loom.ai.compiler._plan import CompiledOutput
|
|
37
37
|
from loom.ai.declarative import JsonSchemaOutput, OutputSpec, TypeRefOutput
|
|
38
38
|
from loom.ai.errors import AgentCompilationIssue, AgentErrorCode
|
|
39
|
-
from loom.core.
|
|
39
|
+
from loom.core.errors import UnsupportedBoundaryType
|
|
40
|
+
from loom.core.model import LoomType, loom_type, msgspec_type
|
|
40
41
|
from loom.core.symbols import import_symbol
|
|
41
42
|
|
|
42
43
|
_CompileResult = tuple[CompiledOutput | None, list[AgentCompilationIssue]]
|
|
@@ -38,7 +38,8 @@ import msgspec
|
|
|
38
38
|
from loom.ai.abc import StateShape
|
|
39
39
|
from loom.ai.compiler.phases._output import _resolve_symbol, _schema_to_annotation
|
|
40
40
|
from loom.ai.errors import AgentCompilationIssue, AgentErrorCode
|
|
41
|
-
from loom.core.
|
|
41
|
+
from loom.core.errors import UnsupportedBoundaryType
|
|
42
|
+
from loom.core.model import loom_type, msgspec_type
|
|
42
43
|
|
|
43
44
|
_CompileResult = tuple[StateShape | None, list[AgentCompilationIssue]]
|
|
44
45
|
|
|
@@ -48,7 +48,7 @@ from pydantic_ai.messages import ModelResponse, TextPart, ToolCallPart
|
|
|
48
48
|
|
|
49
49
|
from loom.ai.compiler import CompiledOutput
|
|
50
50
|
from loom.ai.errors import AgentRunError, AgentRunErrorCode
|
|
51
|
-
from loom.core.
|
|
51
|
+
from loom.core.errors import BoundaryValidationError
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
class MissingOutputPayload(Exception):
|
|
@@ -56,8 +56,9 @@ from loom.ai.fastapi.response import AgentJSONResponse, error_response, result_p
|
|
|
56
56
|
from loom.ai.fastapi.streaming import encode_sse_event, stream_sse
|
|
57
57
|
from loom.ai.runtime import AgentRuntime
|
|
58
58
|
from loom.core.config.errors import ConfigError
|
|
59
|
+
from loom.core.errors import BoundaryValidationError
|
|
59
60
|
from loom.core.identity import Identity, current_identity
|
|
60
|
-
from loom.core.model import
|
|
61
|
+
from loom.core.model import LoomFrozenStruct
|
|
61
62
|
from loom.core.observability.event import Scope
|
|
62
63
|
from loom.core.observability.runtime import ObservabilityRuntime
|
|
63
64
|
from loom.core.observability.span import LoomSpan
|
|
@@ -49,8 +49,9 @@ from loom.ai._roles import bound_query_roles
|
|
|
49
49
|
from loom.ai.abc import McpHandle, McpSession, McpToolInfo, SqlGrantHandle
|
|
50
50
|
from loom.ai.compiler import CompiledMcpCapability, CompiledSqlCapability
|
|
51
51
|
from loom.ai.errors import AgentRunError, AgentRunErrorCode
|
|
52
|
+
from loom.core.errors import BoundaryValidationError, UnsupportedBoundaryType
|
|
52
53
|
from loom.core.identity import Identity
|
|
53
|
-
from loom.core.model import
|
|
54
|
+
from loom.core.model import loom_type_of
|
|
54
55
|
from loom.core.observability.event import Scope
|
|
55
56
|
from loom.core.observability.runtime import ObservabilityRuntime
|
|
56
57
|
from loom.core.sql.abc import SqlQueryResult
|
|
@@ -79,8 +79,9 @@ from loom.ai.runtime._mcp import (
|
|
|
79
79
|
mcp_session_for,
|
|
80
80
|
)
|
|
81
81
|
from loom.core.di import LoomContainer
|
|
82
|
+
from loom.core.errors import BoundaryValidationError
|
|
82
83
|
from loom.core.identity import ANONYMOUS, Identity
|
|
83
|
-
from loom.core.model import
|
|
84
|
+
from loom.core.model import LoomType
|
|
84
85
|
from loom.core.sql.config import SqlConfig
|
|
85
86
|
from loom.core.use_case.invoker import ApplicationInvoker
|
|
86
87
|
|
|
@@ -233,7 +233,7 @@ def _make_job_task(
|
|
|
233
233
|
decoded from the envelope is forwarded, so a job declaring ``Caller()``
|
|
234
234
|
fails closed rather than running as an unknown caller.
|
|
235
235
|
|
|
236
|
-
A :class:`~loom.core.
|
|
236
|
+
A :class:`~loom.core.errors.PostCommitError` whose
|
|
237
237
|
transaction committed is terminal: the task is not retried, since the
|
|
238
238
|
write already stands. One raised without a commit is retried like any
|
|
239
239
|
other failure.
|
|
@@ -32,6 +32,7 @@ from loom.core.config.errors import ConfigError
|
|
|
32
32
|
from loom.core.config.overrides import load_application_config
|
|
33
33
|
from loom.core.environment import Environment, resolve_environment, select_config_paths
|
|
34
34
|
from loom.core.locator import DEFAULT_CODE_PATH, add_code_path
|
|
35
|
+
from loom.serverless.aws.lambda_.checks import check_triggers
|
|
35
36
|
|
|
36
37
|
|
|
37
38
|
def check(
|
|
@@ -79,7 +80,8 @@ def load_checked(config: list[Path], env: str | None, skip: tuple[str, ...]) ->
|
|
|
79
80
|
"""Load *config* for *env*, put its code path on the import path and run the deploy checks.
|
|
80
81
|
|
|
81
82
|
Raises:
|
|
82
|
-
ConfigError: When the configuration does not load
|
|
83
|
+
ConfigError: When the configuration does not load, or ``lambda`` is
|
|
84
|
+
one startup would refuse.
|
|
83
85
|
"""
|
|
84
86
|
_load_check_packages()
|
|
85
87
|
environment = resolve_environment(env)
|
|
@@ -89,6 +91,7 @@ def load_checked(config: list[Path], env: str | None, skip: tuple[str, ...]) ->
|
|
|
89
91
|
)
|
|
90
92
|
config_root = Path(paths[0]).resolve().parent
|
|
91
93
|
code_path = _add_code_path(context, config_root)
|
|
94
|
+
check_triggers(context)
|
|
92
95
|
report = run_deploy_checks(context, skip=skip)
|
|
93
96
|
return CheckedConfig(context, environment, report, skip, config_root, code_path)
|
|
94
97
|
|
|
@@ -100,8 +100,8 @@ def create_app(
|
|
|
100
100
|
Args:
|
|
101
101
|
*config_paths: YAML files merged left to right; exclusive with *config_dir*.
|
|
102
102
|
adapter: The transport, and how it wants the application composed;
|
|
103
|
-
``app.entry`` picks it when omitted: ``fastapi``, ``
|
|
104
|
-
|
|
103
|
+
``app.entry`` picks it when omitted: ``fastapi``, ``lambda`` or a
|
|
104
|
+
function of ``lambda.functions``.
|
|
105
105
|
config_dir: Directory with ``base.yaml`` and the per-environment overlays.
|
|
106
106
|
environment: Environment of the application; overrides ``LOOM_ENV``.
|
|
107
107
|
code_path: Overrides ``app.code_path``, relative to the first config file.
|
|
@@ -140,22 +140,15 @@ def _fastapi() -> Adapter[object]:
|
|
|
140
140
|
return FastAPIAdapter()
|
|
141
141
|
|
|
142
142
|
|
|
143
|
-
def
|
|
144
|
-
from loom.serverless.aws.lambda_.
|
|
143
|
+
def _lambda(function: str | None = None) -> Adapter[object]:
|
|
144
|
+
from loom.serverless.aws.lambda_.handler import LambdaAdapter
|
|
145
145
|
|
|
146
|
-
return
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
def _lambda_sqs() -> Adapter[object]:
|
|
150
|
-
from loom.serverless.aws.lambda_.sqs import LambdaSQSAdapter
|
|
151
|
-
|
|
152
|
-
return LambdaSQSAdapter()
|
|
146
|
+
return LambdaAdapter(function=function)
|
|
153
147
|
|
|
154
148
|
|
|
155
149
|
_BUILTIN_ENTRIES: Final[Mapping[str, Callable[[], Adapter[object]]]] = {
|
|
156
150
|
"fastapi": _fastapi,
|
|
157
|
-
"
|
|
158
|
-
"lambda_sqs": _lambda_sqs,
|
|
151
|
+
"lambda": _lambda,
|
|
159
152
|
}
|
|
160
153
|
|
|
161
154
|
|
|
@@ -164,15 +157,7 @@ def _adapter_from_entry(source: CompositionSource) -> Adapter[object]:
|
|
|
164
157
|
if entry is None:
|
|
165
158
|
raise ConfigError("create_app needs adapter= or app.entry")
|
|
166
159
|
builtin = _BUILTIN_ENTRIES.get(entry)
|
|
167
|
-
if builtin is not None
|
|
168
|
-
return builtin()
|
|
169
|
-
from loom.serverless.aws.lambda_.functions import declared_function
|
|
170
|
-
|
|
171
|
-
if declared_function(source.config, entry).sqs:
|
|
172
|
-
return _lambda_sqs()
|
|
173
|
-
from loom.serverless.aws.lambda_.http import LambdaHTTPAdapter
|
|
174
|
-
|
|
175
|
-
return LambdaHTTPAdapter(function=entry)
|
|
160
|
+
return builtin() if builtin is not None else _lambda(entry)
|
|
176
161
|
|
|
177
162
|
|
|
178
163
|
def build_application(
|
|
@@ -30,8 +30,9 @@ from loom.core.cache.result_codec import (
|
|
|
30
30
|
to_payload,
|
|
31
31
|
)
|
|
32
32
|
from loom.core.engine.post_commit import store_channel
|
|
33
|
+
from loom.core.errors import BoundaryValidationError
|
|
33
34
|
from loom.core.logger import get_logger
|
|
34
|
-
from loom.core.model import
|
|
35
|
+
from loom.core.model import LoomType, is_pydantic_model, loom_type_of
|
|
35
36
|
from loom.core.model.convert import to_struct
|
|
36
37
|
from loom.core.model.enums import Cardinality
|
|
37
38
|
from loom.core.model.introspection import (
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""The placeholders of a configuration string, read by OmegaConf's own grammar.
|
|
2
|
+
|
|
3
|
+
This module is the one place loom touches the generated ANTLR parser behind
|
|
4
|
+
OmegaConf (``omegaconf.grammar``; written against omegaconf 2.3). It reads a
|
|
5
|
+
string the way the loader would, without resolving anything, so the deploy
|
|
6
|
+
manifest can name the secrets and parameters a configuration fetches.
|
|
7
|
+
``tests/unit/core/config/test_referenced.py`` pins every grammar path the
|
|
8
|
+
manifest relies on; an omegaconf upgrade that moves the parser fails there.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
from collections.abc import Collection, Iterator
|
|
14
|
+
from typing import Any
|
|
15
|
+
|
|
16
|
+
from loom.core.config.errors import ConfigError
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def referenced(text: str, names: Collection[str]) -> dict[str, list[str]]:
|
|
20
|
+
"""The first argument of every ``${name:...}`` of *text* whose *name* is one of *names*.
|
|
21
|
+
|
|
22
|
+
OmegaConf's own grammar reads *text*, so the surrounding literal text, an
|
|
23
|
+
escaped ``\\${``, quotes and argument separators mean what they mean to
|
|
24
|
+
the loader; nothing is resolved.
|
|
25
|
+
|
|
26
|
+
Returns:
|
|
27
|
+
The arguments by resolver name, as the resolver would receive them,
|
|
28
|
+
in order of appearance; a name nothing references is absent.
|
|
29
|
+
|
|
30
|
+
Raises:
|
|
31
|
+
ConfigError: When a selected resolver's arguments nest another
|
|
32
|
+
interpolation, whose value the caller cannot know as written.
|
|
33
|
+
"""
|
|
34
|
+
if "${" not in text:
|
|
35
|
+
return {}
|
|
36
|
+
# Local imports keep omegaconf out of the import of ``loom.core.config``.
|
|
37
|
+
from omegaconf.grammar.gen.OmegaConfGrammarParser import OmegaConfGrammarParser as Grammar
|
|
38
|
+
from omegaconf.grammar_parser import parse
|
|
39
|
+
from omegaconf.grammar_visitor import GrammarVisitor
|
|
40
|
+
|
|
41
|
+
literal = GrammarVisitor(lambda _key, _memo: None, lambda **_kwargs: None, None)
|
|
42
|
+
found: dict[str, list[str]] = {}
|
|
43
|
+
for node in _parse_nodes(parse(text, parser_rule="configValue")):
|
|
44
|
+
if not isinstance(node, Grammar.InterpolationResolverContext):
|
|
45
|
+
continue
|
|
46
|
+
call: Any = node # the generated parser carries no useful types
|
|
47
|
+
name = call.resolverName().getText()
|
|
48
|
+
if name not in names:
|
|
49
|
+
continue
|
|
50
|
+
sequence = call.sequence()
|
|
51
|
+
if any(isinstance(n, Grammar.InterpolationContext) for n in _parse_nodes(sequence)):
|
|
52
|
+
raise ConfigError(f"nests a placeholder in a {name} key")
|
|
53
|
+
arguments = [] if sequence is None else sequence.element()
|
|
54
|
+
first = str(literal.visitElement(arguments[0])) if arguments else ""
|
|
55
|
+
found.setdefault(name, []).append(first)
|
|
56
|
+
return found
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _parse_nodes(tree: Any) -> Iterator[Any]:
|
|
60
|
+
"""*tree* and every node under it, parents first; nothing for ``None``."""
|
|
61
|
+
if tree is None:
|
|
62
|
+
return
|
|
63
|
+
yield tree
|
|
64
|
+
for index in range(tree.getChildCount()):
|
|
65
|
+
yield from _parse_nodes(tree.getChild(index))
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
__all__ = ["referenced"]
|
|
@@ -78,7 +78,7 @@ reported across them::
|
|
|
78
78
|
from __future__ import annotations
|
|
79
79
|
|
|
80
80
|
import inspect
|
|
81
|
-
from collections.abc import Sequence
|
|
81
|
+
from collections.abc import Iterator, Sequence
|
|
82
82
|
from dataclasses import dataclass
|
|
83
83
|
from typing import TYPE_CHECKING, Any, NamedTuple, TypeVar
|
|
84
84
|
|
|
@@ -633,3 +633,17 @@ def convert_section(data: Any, key: str, target_type: type[T]) -> T:
|
|
|
633
633
|
raise ConfigError(
|
|
634
634
|
f"Config section {key!r} failed validation as {target_type.__name__!r}: {exc}"
|
|
635
635
|
) from exc
|
|
636
|
+
|
|
637
|
+
|
|
638
|
+
def config_strings(
|
|
639
|
+
node: object, path: tuple[str, ...] = ()
|
|
640
|
+
) -> Iterator[tuple[tuple[str, ...], str]]:
|
|
641
|
+
"""Every string of a configuration *node* as written, with its path of keys and indexes."""
|
|
642
|
+
if isinstance(node, str):
|
|
643
|
+
yield path, node
|
|
644
|
+
elif isinstance(node, dict):
|
|
645
|
+
for key, value in node.items():
|
|
646
|
+
yield from config_strings(value, (*path, str(key)))
|
|
647
|
+
elif isinstance(node, list):
|
|
648
|
+
for index, value in enumerate(node):
|
|
649
|
+
yield from config_strings(value, (*path, str(index)))
|