loom-kernel 2.13.0__tar.gz → 2.14.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-2.13.0 → loom_kernel-2.14.0}/CHANGELOG.md +20 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/PKG-INFO +1 -1
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/errors/codes.py +1 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/auth/__init__.py +2 -1
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/auth/abc.py +39 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/auth/middleware.py +46 -7
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/errors.py +22 -16
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/fastapi/_errors.py +1 -1
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/.gitignore +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/LICENSE +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/README.md +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/pyproject.toml +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/_concurrency.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/_filters.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/_roles.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/_startup.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/_transport.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/_usecase.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/a2a/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/a2a/_binding.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/a2a/_handlers.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/a2a/_rpc.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/a2a/card.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/a2a/events.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/a2a/server.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/abc.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/compiler/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/compiler/_compiler.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/compiler/_plan.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/compiler/phases/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/compiler/phases/_capabilities.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/compiler/phases/_conversation.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/compiler/phases/_feedable.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/compiler/phases/_hook.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/compiler/phases/_instructions.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/compiler/phases/_limits.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/compiler/phases/_model_role.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/compiler/phases/_output.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/compiler/phases/_state.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/declarative/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/declarative/_envelope.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/declarative/_schema.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/declarative/_v1.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/describe.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_a2a.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_capabilities.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_engine.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_escape.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_history.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_instructions.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_limits.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_mcp.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_models.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_native.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/extras/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/extras/a2a.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/extras/handlebars.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/extras/mcp.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/extras/skills.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/provider.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/providers/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/providers/_shared.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/providers/anthropic.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/providers/bedrock.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/providers/gateway.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/providers/openai.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/providers/typesafe.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/errors.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/fastapi/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/fastapi/endpoints.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/fastapi/response.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/fastapi/streaming.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/inference.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/registry.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/remote_auth.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/runtime/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/runtime/_bounded.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/runtime/_chain.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/runtime/_conversation.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/runtime/_grants.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/runtime/_handle.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/runtime/_health.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/runtime/_hooks.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/runtime/_lifecycle.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/runtime/_limits.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/runtime/_mcp.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/validate/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/validate/__main__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/celery/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/celery/auto.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/celery/bootstrap.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/celery/config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/celery/constants.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/celery/runner.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/celery/service.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/cli/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/cli/app.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/cli/schema.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/async_bridge.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/authz/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/authz/_decide.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/authz/_grants.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/authz/_roles.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/authz/_scope.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/authz/elevation.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/authz/product.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/backend/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/backend/core_model.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/backend/protocol.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/backend/scoped_ddl.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/backend/sqlalchemy.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/bootstrap/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/bootstrap/bootstrap.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/bootstrap/kernel.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/_batching.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/_single_flight.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/abc/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/abc/backend.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/abc/config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/abc/dependency.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/calls.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/codec.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/decorators.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/dependency.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/errors.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/gateway.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/keys.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/memory.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/repository.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/result_codec.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/serializer.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/cache/wiring.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/command/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/command/adapter.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/command/base.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/command/field.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/command/introspection.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/compiler.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/config/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/config/_boto3.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/config/_includes.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/config/_resolver_utils.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/config/binder.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/config/configurable.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/config/context.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/config/errors.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/config/keys.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/config/loader.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/config/model.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/config/observability.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/config/resolver.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/config/secrets.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/config/ssm.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/contracts/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/contracts/manifest.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/di/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/di/container.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/di/scope.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/discovery/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/discovery/_utils.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/discovery/base.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/discovery/interfaces.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/discovery/manifest.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/discovery/modules.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/engine/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/engine/compilable.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/engine/compiler.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/engine/events.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/engine/executor.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/engine/metrics.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/engine/plan.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/engine/post_commit.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/errors/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/errors/errors.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/expr/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/expr/eval.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/expr/nodes.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/expr/refs.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/identity/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/identity/context.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/identity/identity.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/identity/issuer.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/identity/wire.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/introspection/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/introspection/base.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/introspection/describe.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/job/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/job/callback.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/job/context.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/job/handle.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/job/job.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/job/service.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/locator.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/logger/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/logger/abc.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/logger/config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/logger/registry.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/logger/structlogger.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/model/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/model/_loom_type.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/model/base.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/model/convert.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/model/enums.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/model/field.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/model/introspection.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/model/partition.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/model/privilege.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/model/projection.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/model/relation.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/model/scoped.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/model/struct.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/model/timestamped.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/model/types.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/model/types_postgres.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/observability/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/observability/config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/observability/event.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/observability/observer/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/observability/observer/noop.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/observability/observer/otel.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/observability/observer/structlog.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/observability/otel_ids.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/observability/protocol.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/observability/runtime.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/observability/span.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/observability/topology.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/persistence/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/persistence/abc.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/persistence/none.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/persistence/registry.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/plugins/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/plugins/entrypoints.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/plugins/optional.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/projection/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/projection/loaders.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/projection/runtime.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/abc/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/abc/cursor.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/abc/errors.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/abc/query.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/abc/query_compiler.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/abc/repo_for.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/abc/repository.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/abc/session_scope.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/dynamodb/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/dynamodb/backend.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/dynamodb/registry.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/dynamodb/repository.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/dynamodb/uow.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/mongo/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/mongo/backend.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/mongo/ids.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/mongo/query_compiler.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/mongo/registry.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/mongo/repository.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/mongo/uow.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/mongo/values.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/mutation.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/registration.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/registry.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/backend.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/migrations/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/migrations/env_template.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/migrations/hook.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/migrations/operations.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/migrations/runners.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/model.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/rls/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/rls/bootstrap.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/rls/config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/rls/elevate.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/rls/guard/0001.sql +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/rls/guard/0002.sql +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/rls/guard/preflight.sql +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/rls/guard_manifest.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/rls/integrity.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/rls/partitions.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/rls/provider.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/rls/schema.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/rls/sources.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/rls/verify.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/session_manager.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/session_settings.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/response/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/response/base.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/routing/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/routing/ref.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/routing/resolver.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/runner.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/schema/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/schema/schema_mode.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/schema_names.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/sql/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/sql/abc/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/sql/abc/contracts.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/sql/abc/errors.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/sql/caller_bound.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/sql/clickhouse/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/sql/clickhouse/_client.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/sql/clickhouse/executor.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/sql/clickhouse/registry.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/sql/config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/sql/roles.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/sql/service.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/symbols.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/tracing/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/tracing/context.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/transaction.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/transport/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/transport/adapter.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/uow/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/uow/abc.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/uow/context.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/use_case/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/use_case/_predicates.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/use_case/agent_markers.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/use_case/compute.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/use_case/constants.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/use_case/factory.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/use_case/field_ref.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/use_case/invoker.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/use_case/keys.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/use_case/markers.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/use_case/mcp_markers.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/use_case/registry.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/use_case/rule.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/core/use_case/use_case.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/_format_registry.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/_historify/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/_historify/_common.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/_historify/_log.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/_historify/_ops.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/_historify/_transform.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/_merge.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/_path_template.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/_predicate.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/_write_policy.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/polars/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/polars/_dtype.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/polars/_file_writer.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/polars/_historify.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/polars/_predicate.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/polars/_reader.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/polars/_schema.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/polars/_streaming.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/polars/_writer.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/polars/provider.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/spark/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/spark/_dtype.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/spark/_historify.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/spark/_reader.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/spark/_schema.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/spark/_writer.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/backends/spark/provider.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/checkpoint/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/checkpoint/_cleaners.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/checkpoint/_options.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/checkpoint/_paths.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/checkpoint/_scope.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/checkpoint/_store.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/compiler/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/compiler/_binding.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/compiler/_compiler.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/compiler/_errors.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/compiler/_plan.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/compiler/_validators.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/compiler/_validators_config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/compiler/_validators_plan.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/compiler/_validators_step.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/_format.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/_read_options.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/_utils.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/_write_options.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/expr/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/expr/_params.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/expr/_predicate.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/expr/_refs.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/source/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/source/_from.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/source/_from_config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/source/_specs.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/target/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/target/_client.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/target/_file.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/target/_history/_report.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/target/_into.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/target/_table.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/declarative/target/_temp.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/executor/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/executor/_dispatcher.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/executor/_executor.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/io/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/io/_registry.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/io/sources/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/io/sources/_clickhouse.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/io/sources/_dynamodb.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/io/sources/_mongo.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/io/sources/_serialization.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/io/targets/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/io/targets/_clickhouse.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/lineage/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/lineage/_config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/lineage/_observer.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/lineage/_records.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/lineage/sinks/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/lineage/sinks/_table.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/lineage/sinks/_writer.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/maintenance/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/maintenance/_builder.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/maintenance/_ops.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/maintenance/_protocol.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/maintenance/_runner.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/maintenance/_step.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/maintenance/backends/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/pipeline/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/pipeline/_generics.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/pipeline/_params.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/pipeline/_pipeline.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/pipeline/_process.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/pipeline/_sql.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/pipeline/_step.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/pipeline/_step_client.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/pipeline/_step_sql.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/runner/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/runner/_providers.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/runner/_wiring.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/runner/config_loader.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/runner/core.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/runner/errors.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/runner/filtering.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/runtime/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/runtime/_config_values.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/runtime/contracts.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/schema/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/schema/_contract.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/schema/_schema.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/storage/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/storage/_config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/storage/_file_locator.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/storage/_locator.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/storage/routing.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/testing/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/testing/_result.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/testing/_runners.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/testing/_scenario.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/testing/_stubs.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/etl/testing/spark.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/_async.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/_config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/_ctx.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/_flow_yaml.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/_meta.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/_placeholders.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/_summary.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/deploy/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/deploy/_discovery.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/deploy/_schedule.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/deploy/_yaml_etls.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/deploy/entrypoint.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/flow/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/flow/_assemble.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/flow/_backfill.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/flow/_backfill_body.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/flow/_body.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/flow/_common.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/flow/_factory.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/flow/_hooks.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/flow/_maintenance.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/flow/_params.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/flow/_run_name.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/flow/_runtime.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/flow/_signature.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/flow/_stages.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/manifest/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/manifest/_model.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/manifest/_s3.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/manifest/_store.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/notify/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/notify/_event.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/notify/_factory.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/notify/_port.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/notify/_slack.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/observer/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/observer/_flow.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/observer/_logging_bridge.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/observer/_manifest.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prefect/observer/_task_run.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prometheus/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prometheus/_instruments.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prometheus/adapter.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prometheus/kafka.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prometheus/lifecycle.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/prometheus/middleware.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/py.typed +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/_body.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/adapter.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/auth/config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/auth/jwt.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/autocrud.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/compiler.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/constants.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/cors.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/fastapi/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/fastapi/_exclusions.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/fastapi/app.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/fastapi/auto.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/fastapi/health.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/fastapi/openapi.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/fastapi/response.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/fastapi/router_runtime.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/fastapi/sql.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/middleware.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/model.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/rest/rest_adapter.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/_adapter.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/_dlq.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/_errors.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/_operators.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/bytewax/runner.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/compiler/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/compiler/_bindings.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/compiler/_compiler.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/compiler/_errors.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/compiler/_plan.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/compiler/phases/build_plan.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/compiler/phases/validate.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/core/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/core/_errors.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/core/_exceptions.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/core/_message.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/core/_tracing.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/core/_typing.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/graph/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/graph/_flow.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/_codec.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/_config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/_errors.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/_key_resolver.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/_message.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/_record.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/_wire.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/client/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/client/_consumer.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/client/_producer.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/client/_protocol.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/client/_retry.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/message/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/message/_consumer.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/message/_producer.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/kafka/message/_protocol.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/mongo/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/mongo/_config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/mongo/_event.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/mongo/_normalize.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_boundary.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_branches.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_broadcast.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_capabilities.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_decompose.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_expand_routes.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_expr_eval.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_fork.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_helpers.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_mongo.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_protocols.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_router.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_shape.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_sink.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_step.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_table/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_table/common.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_table/config.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/_with.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/nodes/refs.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/streaming/testing.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/testing/__init__.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/testing/agents.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/testing/golden.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/testing/http_harness.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/testing/in_memory.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/testing/repository_harness.py +0 -0
- {loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/testing/runner.py +0 -0
|
@@ -140,6 +140,13 @@
|
|
|
140
140
|
|
|
141
141
|
### rest
|
|
142
142
|
|
|
143
|
+
- **rest:** a single `RuleViolation(field, message)` now answers its `field`.
|
|
144
|
+
`HttpErrorMapper` dropped it, so two `rule_violation` 422s could only be
|
|
145
|
+
told apart by their message text. The body adds `field` (`ErrorField.FIELD`,
|
|
146
|
+
the key each `violations` item of `RuleViolations` already carries) next to
|
|
147
|
+
the unchanged `code`, `message` and `trace_id`; the status stays `422`. This
|
|
148
|
+
includes the SQL endpoint's 422s, whose `field` is `sql` or `body`. Every
|
|
149
|
+
other error body is unchanged.
|
|
143
150
|
- **rest:** a strict `pydantic.BaseModel` result, a `list` of them or an
|
|
144
151
|
envelope holding one now renders directly on a REST route, through
|
|
145
152
|
`MsgspecJSONResponse`'s `enc_hook`, and documents in OpenAPI
|
|
@@ -363,6 +370,19 @@
|
|
|
363
370
|
capability does not recover yet; see "A session that died after it opened is
|
|
364
371
|
replaced by the next call" in `docs/ai/mcp.md`.
|
|
365
372
|
|
|
373
|
+
### rest
|
|
374
|
+
|
|
375
|
+
- **rest:** an authenticator can report an outage instead of answering `500`.
|
|
376
|
+
An exception raised inside `AuthenticationMiddleware` never reached
|
|
377
|
+
Starlette's exception handlers, so a custom authenticator whose identity
|
|
378
|
+
provider was unreachable answered a bare `500`. An authenticator now raises
|
|
379
|
+
`loom.rest.auth.AuthenticationUnavailable` and the request answers `503`
|
|
380
|
+
with the standard error body (`code: service_unavailable`, a fixed message,
|
|
381
|
+
`trace_id`) and no `WWW-Authenticate` challenge; the exception's message
|
|
382
|
+
and cause are logged at `WARNING`, never sent. `ErrorCode` gains
|
|
383
|
+
`SERVICE_UNAVAILABLE`, which `HttpErrorMapper` maps to `503`. Any other
|
|
384
|
+
exception from the authenticator, and the `401` refusal, are unchanged.
|
|
385
|
+
|
|
366
386
|
## ♻️ Refactor
|
|
367
387
|
|
|
368
388
|
### etl
|
|
@@ -12,13 +12,14 @@ Install the optional JWT dependency with::
|
|
|
12
12
|
pip install "loom-kernel[jwt]"
|
|
13
13
|
"""
|
|
14
14
|
|
|
15
|
-
from loom.rest.auth.abc import Authenticator, RequestCredentials
|
|
15
|
+
from loom.rest.auth.abc import AuthenticationUnavailable, Authenticator, RequestCredentials
|
|
16
16
|
from loom.rest.auth.config import JwtAuthConfig, JwtIssuerConfig
|
|
17
17
|
from loom.rest.auth.jwt import JwtAuthenticator, JwtIssuer
|
|
18
18
|
from loom.rest.auth.middleware import AuthenticationMiddleware, JwtAuthMiddleware
|
|
19
19
|
|
|
20
20
|
__all__ = [
|
|
21
21
|
"AuthenticationMiddleware",
|
|
22
|
+
"AuthenticationUnavailable",
|
|
22
23
|
"Authenticator",
|
|
23
24
|
"JwtAuthConfig",
|
|
24
25
|
"JwtAuthMiddleware",
|
|
@@ -13,6 +13,8 @@ from dataclasses import dataclass
|
|
|
13
13
|
from types import MappingProxyType
|
|
14
14
|
from typing import Protocol, runtime_checkable
|
|
15
15
|
|
|
16
|
+
from loom.core.errors import LoomError
|
|
17
|
+
from loom.core.errors.codes import ErrorCode
|
|
16
18
|
from loom.core.identity import Identity
|
|
17
19
|
|
|
18
20
|
|
|
@@ -59,6 +61,39 @@ class RequestCredentials:
|
|
|
59
61
|
return self.headers.get(name.lower())
|
|
60
62
|
|
|
61
63
|
|
|
64
|
+
class AuthenticationUnavailable(LoomError):
|
|
65
|
+
"""Raised by an authenticator that cannot decide on the credentials right now.
|
|
66
|
+
|
|
67
|
+
An outage of something the mechanism depends on — an identity provider's
|
|
68
|
+
key set, a session store, a revocation list — is neither a refusal nor a
|
|
69
|
+
bug. :class:`~loom.rest.auth.middleware.AuthenticationMiddleware` answers
|
|
70
|
+
it with ``503 service_unavailable``: a ``401`` would make clients discard
|
|
71
|
+
credentials that are still valid, and a ``500`` would report a bug where
|
|
72
|
+
there is an outage.
|
|
73
|
+
Any other exception an authenticator raises keeps propagating unchanged.
|
|
74
|
+
|
|
75
|
+
Raised from an authenticator, the message goes to the server log, never to
|
|
76
|
+
the caller, so it may name the unreachable dependency; raised anywhere
|
|
77
|
+
else, :class:`~loom.rest.errors.HttpErrorMapper` answers ``503`` with it,
|
|
78
|
+
like any :class:`~loom.core.errors.LoomError`. It must never carry the
|
|
79
|
+
credential. Chain the underlying error with ``raise ... from exc`` to keep
|
|
80
|
+
its traceback.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
message: Operator-facing description of what is unavailable.
|
|
84
|
+
|
|
85
|
+
Example::
|
|
86
|
+
|
|
87
|
+
try:
|
|
88
|
+
keys = await self._jwks.fetch()
|
|
89
|
+
except httpx.HTTPError as exc:
|
|
90
|
+
raise AuthenticationUnavailable("issuer key set unreachable") from exc
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
def __init__(self, message: str = "Authentication is temporarily unavailable") -> None:
|
|
94
|
+
super().__init__(message, code=ErrorCode.SERVICE_UNAVAILABLE)
|
|
95
|
+
|
|
96
|
+
|
|
62
97
|
@runtime_checkable
|
|
63
98
|
class Authenticator(Protocol):
|
|
64
99
|
"""Turns the credentials of one request into a verified identity.
|
|
@@ -105,5 +140,9 @@ class Authenticator(Protocol):
|
|
|
105
140
|
The verified identity, or ``None`` to refuse the request. The
|
|
106
141
|
refusal carries no reason on purpose: the response must not become
|
|
107
142
|
an oracle about which part of the credentials failed.
|
|
143
|
+
|
|
144
|
+
Raises:
|
|
145
|
+
AuthenticationUnavailable: When the credentials cannot be verified
|
|
146
|
+
right now because a dependency of the mechanism is down.
|
|
108
147
|
"""
|
|
109
148
|
...
|
|
@@ -12,7 +12,8 @@ TLS without touching a single authorization rule.
|
|
|
12
12
|
from __future__ import annotations
|
|
13
13
|
|
|
14
14
|
import logging
|
|
15
|
-
from collections.abc import Awaitable, Callable, Sequence
|
|
15
|
+
from collections.abc import Awaitable, Callable, Mapping, Sequence
|
|
16
|
+
from http import HTTPStatus
|
|
16
17
|
from typing import Any
|
|
17
18
|
|
|
18
19
|
import msgspec
|
|
@@ -20,7 +21,7 @@ import msgspec
|
|
|
20
21
|
from loom.core.errors.codes import ErrorCode
|
|
21
22
|
from loom.core.identity import reset_identity, set_identity
|
|
22
23
|
from loom.core.tracing import get_trace_id
|
|
23
|
-
from loom.rest.auth.abc import Authenticator, RequestCredentials
|
|
24
|
+
from loom.rest.auth.abc import AuthenticationUnavailable, Authenticator, RequestCredentials
|
|
24
25
|
from loom.rest.auth.config import JwtAuthConfig
|
|
25
26
|
from loom.rest.auth.jwt import JwtAuthenticator
|
|
26
27
|
from loom.rest.constants import BEARER_CHALLENGE
|
|
@@ -33,6 +34,7 @@ _ASGIApp = Callable[[_Scope, _Receive, _Send], Awaitable[None]]
|
|
|
33
34
|
|
|
34
35
|
_HTTP_SCOPE = "http"
|
|
35
36
|
_UNAUTHORIZED_MESSAGE = "Authentication required: missing or invalid credentials."
|
|
37
|
+
_UNAVAILABLE_MESSAGE = "Authentication is temporarily unavailable."
|
|
36
38
|
_UNKNOWN_CLIENT = "unknown"
|
|
37
39
|
|
|
38
40
|
_logger = logging.getLogger(__name__)
|
|
@@ -55,6 +57,10 @@ class AuthenticationMiddleware:
|
|
|
55
57
|
4. On success, installs the identity for the duration of the request and
|
|
56
58
|
restores the previous one in a ``finally`` — without it, a reused
|
|
57
59
|
worker task would inherit the previous caller.
|
|
60
|
+
5. When the authenticator raises
|
|
61
|
+
:class:`~loom.rest.auth.abc.AuthenticationUnavailable`, answers ``503``
|
|
62
|
+
with the standard error body and a fixed message, and logs the cause at
|
|
63
|
+
``WARNING``. Any other exception propagates unchanged.
|
|
58
64
|
|
|
59
65
|
Non-HTTP scopes (WebSocket, lifespan) are passed through unchanged.
|
|
60
66
|
|
|
@@ -89,7 +95,23 @@ class AuthenticationMiddleware:
|
|
|
89
95
|
await self._app(scope, receive, send)
|
|
90
96
|
return
|
|
91
97
|
|
|
92
|
-
|
|
98
|
+
try:
|
|
99
|
+
identity = await self._authenticator.authenticate(_credentials(scope))
|
|
100
|
+
except AuthenticationUnavailable:
|
|
101
|
+
_logger.warning(
|
|
102
|
+
"authentication unavailable method=%s path=%s",
|
|
103
|
+
scope.get("method", _UNKNOWN_CLIENT),
|
|
104
|
+
scope.get("path", _UNKNOWN_CLIENT),
|
|
105
|
+
exc_info=True,
|
|
106
|
+
)
|
|
107
|
+
await _send_error(
|
|
108
|
+
send,
|
|
109
|
+
HTTPStatus.SERVICE_UNAVAILABLE,
|
|
110
|
+
ErrorCode.SERVICE_UNAVAILABLE,
|
|
111
|
+
_UNAVAILABLE_MESSAGE,
|
|
112
|
+
)
|
|
113
|
+
return
|
|
114
|
+
|
|
93
115
|
if identity is None:
|
|
94
116
|
_logger.info(
|
|
95
117
|
"authentication refused method=%s path=%s client=%s",
|
|
@@ -170,9 +192,26 @@ async def send_unauthorized(send: _Send) -> None:
|
|
|
170
192
|
Args:
|
|
171
193
|
send: ASGI send callable of the request being refused.
|
|
172
194
|
"""
|
|
195
|
+
await _send_error(
|
|
196
|
+
send,
|
|
197
|
+
HTTPStatus.UNAUTHORIZED,
|
|
198
|
+
ErrorCode.UNAUTHENTICATED,
|
|
199
|
+
_UNAUTHORIZED_MESSAGE,
|
|
200
|
+
BEARER_CHALLENGE,
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
async def _send_error(
|
|
205
|
+
send: _Send,
|
|
206
|
+
status: HTTPStatus,
|
|
207
|
+
code: ErrorCode,
|
|
208
|
+
message: str,
|
|
209
|
+
extra_headers: Mapping[str, str] | None = None,
|
|
210
|
+
) -> None:
|
|
211
|
+
"""Send *status* with the standard ``code``/``message``/``trace_id`` body."""
|
|
173
212
|
detail = {
|
|
174
|
-
"code":
|
|
175
|
-
"message":
|
|
213
|
+
"code": code.value,
|
|
214
|
+
"message": message,
|
|
176
215
|
"trace_id": get_trace_id(),
|
|
177
216
|
}
|
|
178
217
|
body = msgspec.json.encode({"detail": detail})
|
|
@@ -181,8 +220,8 @@ async def send_unauthorized(send: _Send) -> None:
|
|
|
181
220
|
(b"content-length", str(len(body)).encode("ascii")),
|
|
182
221
|
*(
|
|
183
222
|
(name.lower().encode("ascii"), value.encode("ascii"))
|
|
184
|
-
for name, value in
|
|
223
|
+
for name, value in (extra_headers or {}).items()
|
|
185
224
|
),
|
|
186
225
|
]
|
|
187
|
-
await send({"type": "http.response.start", "status":
|
|
226
|
+
await send({"type": "http.response.start", "status": status.value, "headers": headers})
|
|
188
227
|
await send({"type": "http.response.body", "body": body})
|
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from enum import StrEnum
|
|
6
|
+
from http import HTTPStatus
|
|
6
7
|
from typing import Any, ClassVar
|
|
7
8
|
|
|
8
9
|
from fastapi import HTTPException
|
|
9
10
|
|
|
10
11
|
from loom.core.engine.post_commit import PostCommitError
|
|
11
|
-
from loom.core.errors import LoomError, NotFound, RuleViolations
|
|
12
|
+
from loom.core.errors import LoomError, NotFound, RuleViolation, RuleViolations
|
|
12
13
|
from loom.core.errors.codes import ErrorCode
|
|
13
14
|
from loom.core.model import BoundaryValidationError
|
|
14
15
|
from loom.core.tracing import get_trace_id
|
|
@@ -51,6 +52,7 @@ class HttpErrorMapper:
|
|
|
51
52
|
per error type:
|
|
52
53
|
|
|
53
54
|
- :class:`~loom.core.errors.NotFound` → ``entity``, ``id``
|
|
55
|
+
- :class:`~loom.core.errors.RuleViolation` → ``field``
|
|
54
56
|
- :class:`~loom.core.errors.RuleViolations` → ``violations``
|
|
55
57
|
- :class:`~loom.core.model.BoundaryValidationError` → ``violations``
|
|
56
58
|
(``422``; a schema failure, distinct from a rule failure)
|
|
@@ -69,18 +71,19 @@ class HttpErrorMapper:
|
|
|
69
71
|
raise mapper.to_http(exc) from exc
|
|
70
72
|
"""
|
|
71
73
|
|
|
72
|
-
_STATUS: ClassVar[dict[str,
|
|
73
|
-
ErrorCode.NOT_FOUND:
|
|
74
|
-
ErrorCode.UNAUTHENTICATED:
|
|
75
|
-
ErrorCode.FORBIDDEN:
|
|
76
|
-
ErrorCode.CONFLICT:
|
|
77
|
-
ErrorCode.RULE_VIOLATIONS:
|
|
78
|
-
ErrorCode.RULE_VIOLATION:
|
|
79
|
-
ErrorCode.BOUNDARY_VALIDATION:
|
|
80
|
-
ErrorCode.UNSUPPORTED_FORMAT:
|
|
81
|
-
ErrorCode.UNSUPPORTED_QUERY:
|
|
82
|
-
ErrorCode.SYSTEM_ERROR:
|
|
83
|
-
ErrorCode.
|
|
74
|
+
_STATUS: ClassVar[dict[str, HTTPStatus]] = {
|
|
75
|
+
ErrorCode.NOT_FOUND: HTTPStatus.NOT_FOUND,
|
|
76
|
+
ErrorCode.UNAUTHENTICATED: HTTPStatus.UNAUTHORIZED,
|
|
77
|
+
ErrorCode.FORBIDDEN: HTTPStatus.FORBIDDEN,
|
|
78
|
+
ErrorCode.CONFLICT: HTTPStatus.CONFLICT,
|
|
79
|
+
ErrorCode.RULE_VIOLATIONS: HTTPStatus.UNPROCESSABLE_ENTITY,
|
|
80
|
+
ErrorCode.RULE_VIOLATION: HTTPStatus.UNPROCESSABLE_ENTITY,
|
|
81
|
+
ErrorCode.BOUNDARY_VALIDATION: HTTPStatus.UNPROCESSABLE_ENTITY,
|
|
82
|
+
ErrorCode.UNSUPPORTED_FORMAT: HTTPStatus.BAD_REQUEST,
|
|
83
|
+
ErrorCode.UNSUPPORTED_QUERY: HTTPStatus.BAD_REQUEST,
|
|
84
|
+
ErrorCode.SYSTEM_ERROR: HTTPStatus.INTERNAL_SERVER_ERROR,
|
|
85
|
+
ErrorCode.SERVICE_UNAVAILABLE: HTTPStatus.SERVICE_UNAVAILABLE,
|
|
86
|
+
ErrorCode.POST_COMMIT_FAILURE: HTTPStatus.INTERNAL_SERVER_ERROR,
|
|
84
87
|
}
|
|
85
88
|
|
|
86
89
|
def to_http(self, error: LoomError) -> HTTPException:
|
|
@@ -95,7 +98,7 @@ class HttpErrorMapper:
|
|
|
95
98
|
also carries the ``WWW-Authenticate`` challenge required by
|
|
96
99
|
RFC 9110 §11.6.1.
|
|
97
100
|
"""
|
|
98
|
-
status = self._STATUS.get(error.code,
|
|
101
|
+
status = self._STATUS.get(error.code, HTTPStatus.INTERNAL_SERVER_ERROR)
|
|
99
102
|
detail: dict[str, Any] = {
|
|
100
103
|
ErrorField.CODE: error.code,
|
|
101
104
|
ErrorField.MESSAGE: error.message,
|
|
@@ -106,6 +109,9 @@ class HttpErrorMapper:
|
|
|
106
109
|
detail[ErrorField.ENTITY] = error.entity
|
|
107
110
|
detail[ErrorField.ID] = error.id
|
|
108
111
|
|
|
112
|
+
if isinstance(error, RuleViolation):
|
|
113
|
+
detail[ErrorField.FIELD] = error.field
|
|
114
|
+
|
|
109
115
|
if isinstance(error, RuleViolations):
|
|
110
116
|
detail[ErrorField.VIOLATIONS] = [
|
|
111
117
|
{ErrorField.FIELD: v.field, ErrorField.MESSAGE: v.message} for v in error.violations
|
|
@@ -123,6 +129,6 @@ class HttpErrorMapper:
|
|
|
123
129
|
return HTTPException(status_code=status, detail=detail, headers=_challenge(status))
|
|
124
130
|
|
|
125
131
|
|
|
126
|
-
def _challenge(status:
|
|
132
|
+
def _challenge(status: HTTPStatus) -> dict[str, str] | None:
|
|
127
133
|
"""Return the ``WWW-Authenticate`` header a ``401`` must carry, else ``None``."""
|
|
128
|
-
return dict(BEARER_CHALLENGE) if status
|
|
134
|
+
return dict(BEARER_CHALLENGE) if status is HTTPStatus.UNAUTHORIZED else None
|
|
@@ -47,7 +47,7 @@ async def _handle_validation_error(request: Request, exc: Exception) -> Response
|
|
|
47
47
|
del request
|
|
48
48
|
violations = _violations(exc) if isinstance(exc, RequestValidationError) else ()
|
|
49
49
|
return MsgspecJSONResponse(
|
|
50
|
-
status_code=
|
|
50
|
+
status_code=HTTPStatus.UNPROCESSABLE_ENTITY,
|
|
51
51
|
content={
|
|
52
52
|
"detail": {
|
|
53
53
|
ErrorField.CODE: ErrorCode.RULE_VIOLATIONS.value,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/extras/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/extras/handlebars.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/providers/__init__.py
RENAMED
|
File without changes
|
{loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/providers/_shared.py
RENAMED
|
File without changes
|
{loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/providers/anthropic.py
RENAMED
|
File without changes
|
{loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/providers/bedrock.py
RENAMED
|
File without changes
|
{loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/providers/gateway.py
RENAMED
|
File without changes
|
{loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/providers/openai.py
RENAMED
|
File without changes
|
{loom_kernel-2.13.0 → loom_kernel-2.14.0}/src/loom/ai/engines/pydantic_ai/providers/typesafe.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|