loom-kernel 2.22.0__tar.gz → 2.22.2__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.22.0 → loom_kernel-2.22.2}/CHANGELOG.md +91 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/PKG-INFO +1 -1
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/_startup.py +14 -13
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/a2a/_binding.py +7 -7
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/_compiler.py +6 -6
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_capabilities.py +104 -53
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_conversation.py +17 -10
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_hook.py +10 -9
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_instructions.py +7 -7
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_limits.py +13 -3
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_model_role.py +2 -2
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_output.py +24 -28
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_state.py +19 -17
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/config.py +100 -57
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/declarative/__init__.py +16 -11
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/declarative/_envelope.py +28 -15
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_capabilities.py +18 -11
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_instructions.py +9 -7
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_mcp.py +8 -2
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_models.py +8 -2
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/provider.py +4 -2
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/typesafe.py +6 -2
- loom_kernel-2.22.2/src/loom/ai/errors.py +946 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/registry.py +18 -13
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/remote_auth.py +28 -17
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_lifecycle.py +30 -17
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_mcp.py +13 -9
- loom_kernel-2.22.2/src/loom/core/errors/codes.py +143 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_binding.py +11 -16
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_compiler.py +10 -4
- loom_kernel-2.22.2/src/loom/etl/compiler/_errors.py +300 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_validators_agents.py +22 -16
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_validators_config.py +6 -2
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_validators_plan.py +20 -8
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_validators_step.py +92 -83
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/auto.py +4 -4
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/openapi.py +27 -5
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_adapter.py +3 -2
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/runner.py +5 -2
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/compiler/_bindings.py +9 -11
- loom_kernel-2.22.2/src/loom/streaming/compiler/_errors.py +240 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/compiler/_plan.py +3 -2
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/compiler/phases/build_plan.py +11 -14
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/compiler/phases/validate.py +121 -59
- loom_kernel-2.22.0/src/loom/ai/errors.py +0 -1693
- loom_kernel-2.22.0/src/loom/core/errors/codes.py +0 -41
- loom_kernel-2.22.0/src/loom/etl/compiler/_errors.py +0 -473
- loom_kernel-2.22.0/src/loom/streaming/compiler/_errors.py +0 -477
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/.gitignore +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/LICENSE +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/README.md +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/pyproject.toml +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/_concurrency.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/_filters.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/_paths.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/_roles.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/_transport.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/_usecase.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/a2a/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/a2a/_handlers.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/a2a/_rpc.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/a2a/card.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/a2a/events.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/a2a/server.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/abc.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/bootstrap.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/_fingerprint.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/_plan.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_feedable.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/declarative/_schema.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/declarative/_v1.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/describe.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_a2a.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_engine.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_escape.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_history.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_limits.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_native.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/extras/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/extras/a2a.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/extras/handlebars.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/extras/mcp.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/extras/skills.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/_shared.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/anthropic.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/bedrock.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/gateway.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/openai.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/etl/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/etl/_batch.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/etl/_columns.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/etl/_frames.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/etl/_ledger.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/etl/_runner.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/etl/_validation.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/fastapi/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/fastapi/endpoints.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/fastapi/response.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/fastapi/streaming.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/inference.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/pricing.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_bounded.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_chain.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_conversation.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_grants.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_handle.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_health.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_hooks.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/runtime/_limits.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/validate/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/ai/validate/__main__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/celery/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/celery/auto.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/celery/bootstrap.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/celery/config.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/celery/constants.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/celery/runner.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/celery/service.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/cli/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/cli/app.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/cli/schema.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/async_bridge.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/authz/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/authz/_decide.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/authz/_grants.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/authz/_roles.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/authz/_scope.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/authz/elevation.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/authz/product.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/backend/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/backend/core_model.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/backend/protocol.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/backend/scoped_ddl.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/backend/sqlalchemy.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/bootstrap/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/bootstrap/bootstrap.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/bootstrap/kernel.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/_batching.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/_single_flight.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/abc/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/abc/backend.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/abc/config.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/abc/dependency.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/calls.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/codec.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/decorators.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/dependency.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/errors.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/gateway.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/keys.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/memory.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/repository.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/result_codec.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/serializer.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/cache/wiring.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/command/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/command/adapter.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/command/base.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/command/field.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/command/introspection.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/compiler.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/_boto3.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/_includes.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/_resolver_utils.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/binder.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/configurable.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/context.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/errors.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/keys.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/loader.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/model.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/observability.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/resolver.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/secrets.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/config/ssm.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/contracts/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/contracts/manifest.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/di/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/di/container.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/di/scope.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/discovery/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/discovery/_utils.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/discovery/base.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/discovery/interfaces.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/discovery/manifest.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/discovery/modules.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/engine/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/engine/compilable.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/engine/compiler.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/engine/events.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/engine/executor.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/engine/metrics.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/engine/plan.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/engine/post_commit.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/errors/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/errors/errors.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/expr/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/expr/eval.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/expr/nodes.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/expr/refs.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/identity/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/identity/context.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/identity/identity.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/identity/issuer.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/identity/wire.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/introspection/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/introspection/base.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/introspection/describe.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/job/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/job/callback.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/job/context.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/job/handle.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/job/job.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/job/service.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/locator.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/logger/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/logger/abc.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/logger/config.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/logger/registry.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/logger/structlogger.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/_json_schema.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/_loom_type.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/base.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/convert.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/enums.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/field.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/introspection.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/partition.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/privilege.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/projection.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/relation.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/scoped.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/struct.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/timestamped.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/types.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/model/types_postgres.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/config.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/event.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/observer/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/observer/noop.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/observer/otel.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/observer/structlog.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/otel_ids.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/protocol.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/runtime.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/span.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/observability/topology.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/persistence/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/persistence/abc.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/persistence/none.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/persistence/registry.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/plugins/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/plugins/entrypoints.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/plugins/optional.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/projection/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/projection/loaders.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/projection/runtime.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/abc/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/abc/cursor.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/abc/errors.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/abc/query.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/abc/query_compiler.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/abc/repo_for.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/abc/repository.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/abc/session_scope.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/dynamodb/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/dynamodb/backend.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/dynamodb/registry.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/dynamodb/repository.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/dynamodb/uow.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/backend.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/ids.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/query_compiler.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/registry.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/repository.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/uow.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/values.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/mutation.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/registration.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/registry.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/backend.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/migrations/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/migrations/env_template.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/migrations/hook.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/migrations/operations.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/migrations/runners.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/model.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/bootstrap.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/config.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/elevate.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/guard/0001.sql +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/guard/0002.sql +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/guard/preflight.sql +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/guard_manifest.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/integrity.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/partitions.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/provider.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/schema.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/sources.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/verify.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/session_manager.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/session_settings.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/response/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/response/base.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/routing/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/routing/ref.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/routing/resolver.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/runner.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/schema/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/schema/schema_mode.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/schema_names.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/abc/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/abc/contracts.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/abc/errors.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/caller_bound.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/clickhouse/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/clickhouse/_client.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/clickhouse/executor.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/clickhouse/registry.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/config.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/roles.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/sql/service.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/symbols.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/tracing/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/tracing/context.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/transaction.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/transport/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/transport/adapter.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/uow/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/uow/abc.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/uow/context.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/_predicates.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/agent_markers.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/compute.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/constants.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/factory.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/field_ref.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/invoker.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/keys.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/markers.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/mcp_markers.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/outcome.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/registry.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/rule.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/core/use_case/use_case.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/_uri.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_format_registry.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/_common.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/_log.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/_ops.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/_transform.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_merge.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_path_template.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_predicate.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/_write_policy.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_dtype.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_file_writer.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_frame.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_historify.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_predicate.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_reader.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_schema.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_streaming.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_writer.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/provider.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_dtype.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_historify.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_reader.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_schema.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_writer.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/provider.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_cleaners.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_options.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_paths.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_scope.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_store.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_filter.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_plan.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/compiler/_validators.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/_format.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/_read_options.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/_utils.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/_with_agent.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/_write_options.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/expr/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/expr/_params.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/expr/_predicate.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/expr/_refs.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_from.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_from_config.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_specs.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_client.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_errors.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_file.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/_report.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_into.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_table.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_temp.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/executor/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/executor/_agents.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/executor/_dispatcher.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/executor/_executor.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/_registry.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_clickhouse.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_dynamodb.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_mongo.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_serialization.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/targets/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/io/targets/_clickhouse.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/lineage/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/lineage/_config.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/lineage/_observer.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/lineage/_records.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/lineage/sinks/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/lineage/sinks/_table.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/lineage/sinks/_writer.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/maintenance/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/maintenance/_builder.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/maintenance/_ops.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/maintenance/_protocol.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/maintenance/_runner.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/maintenance/_step.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/maintenance/backends/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_generics.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_params.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_pipeline.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_process.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_sql.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_step.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_step_client.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_step_sql.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runner/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runner/_agents.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runner/_providers.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runner/_wiring.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runner/config_loader.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runner/core.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runner/errors.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runner/filtering.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runtime/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runtime/_config_values.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/runtime/contracts.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/schema/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/schema/_contract.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/schema/_schema.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/storage/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/storage/_config.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/storage/_file_locator.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/storage/_locator.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/storage/routing.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/testing/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/testing/_result.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/testing/_runners.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/testing/_scenario.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/testing/_stubs.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/etl/testing/spark.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/_async.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/_config.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/_ctx.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/_flow_yaml.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/_meta.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/_placeholders.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/_summary.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/deploy/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/deploy/_discovery.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/deploy/_schedule.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/deploy/_yaml_etls.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/deploy/entrypoint.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_assemble.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_backfill.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_backfill_body.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_body.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_common.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_factory.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_hooks.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_maintenance.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_params.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_run_name.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_runtime.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_signature.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/flow/_stages.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/manifest/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/manifest/_model.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/manifest/_s3.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/manifest/_store.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/notify/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/notify/_event.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/notify/_factory.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/notify/_format.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/notify/_port.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/notify/_slack.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/notify/_sns.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/observer/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/observer/_flow.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/observer/_logging_bridge.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/observer/_manifest.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prefect/observer/_task_run.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prometheus/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prometheus/_instruments.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prometheus/adapter.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prometheus/kafka.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prometheus/lifecycle.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/prometheus/middleware.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/py.typed +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/_body.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/adapter.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/auth/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/auth/abc.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/auth/config.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/auth/jwt.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/auth/middleware.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/autocrud.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/compiler.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/config.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/constants.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/cors.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/errors.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/_errors.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/_exclusions.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/app.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/health.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/response.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/router_runtime.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/fastapi/sql.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/middleware.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/model.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/rest/rest_adapter.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_dlq.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_errors.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_operators.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/compiler/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/compiler/_compiler.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/core/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/core/_errors.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/core/_exceptions.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/core/_message.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/core/_tracing.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/core/_typing.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/graph/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/graph/_flow.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_codec.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_config.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_errors.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_key_resolver.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_message.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_record.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_wire.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/client/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/client/_consumer.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/client/_producer.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/client/_protocol.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/client/_retry.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/message/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/message/_consumer.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/message/_producer.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/kafka/message/_protocol.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/mongo/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/mongo/_config.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/mongo/_event.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/mongo/_normalize.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_boundary.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_branches.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_broadcast.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_capabilities.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_decompose.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_expand_routes.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_expr_eval.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_fork.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_helpers.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_mongo.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_protocols.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_router.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_shape.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_sink.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_step.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_table/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_table/common.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_table/config.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_with.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/nodes/refs.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/streaming/testing.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/testing/__init__.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/testing/agents.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/testing/golden.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/testing/http_harness.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/testing/in_memory.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/testing/repository_harness.py +0 -0
- {loom_kernel-2.22.0 → loom_kernel-2.22.2}/src/loom/testing/runner.py +0 -0
|
@@ -88,6 +88,18 @@
|
|
|
88
88
|
naming a scalar leaf (`"api.token"`) and convert that value; before, they
|
|
89
89
|
failed on anything but a mapping.
|
|
90
90
|
|
|
91
|
+
- **core:** compile-issue catalogues as data (ADR 0003, part B).
|
|
92
|
+
`loom.core.errors.codes` gains `IssueCode`, `Template` and `CompileIssue`.
|
|
93
|
+
An `IssueCode` member is declared as `NAME = "NAME", Template(text,
|
|
94
|
+
field=..., component=...)`, and `Code.NAME.issue(**params)` builds its
|
|
95
|
+
`CompileIssue` (`code`, `message`, `component`, `field`). Each part of the
|
|
96
|
+
template is a `str.format` template. A sequence parameter is joined with
|
|
97
|
+
`", "` and renders `none` when empty, a set is ordered by the text of its
|
|
98
|
+
items, and a type renders as its `__qualname__`. A missing or unknown
|
|
99
|
+
parameter raises a `TypeError` naming the code. `AgentErrorCode`,
|
|
100
|
+
`StreamingErrorCode` and `ETLErrorCode` are such catalogues, and
|
|
101
|
+
`ETLCompilationError.from_issue(issue)` raises the ETL error for an issue.
|
|
102
|
+
|
|
91
103
|
### ai
|
|
92
104
|
|
|
93
105
|
- **ai:** `AiConfig` logs a warning for every key of `ai.prices` that no
|
|
@@ -493,6 +505,24 @@
|
|
|
493
505
|
|
|
494
506
|
### ai
|
|
495
507
|
|
|
508
|
+
- **ai:** compile issues come from the code catalogue, and the 89 issue
|
|
509
|
+
factory functions of `loom.ai.errors` are removed, without aliases: for
|
|
510
|
+
example `spec_malformed`, `engine_not_found` and `mcp_server_unreachable`.
|
|
511
|
+
Build an issue with `AgentErrorCode.X.issue(...)` and keyword arguments,
|
|
512
|
+
such as `AgentErrorCode.ENGINE_NOT_FOUND.issue(component="openai-agents",
|
|
513
|
+
available=["pydantic-ai"])`. `loom.ai.errors.from_message` is removed too:
|
|
514
|
+
`AgentCompilationError` still turns a bare string into an `UNSPECIFIED`
|
|
515
|
+
issue. Messages keep their text; a list that is empty renders `none`.
|
|
516
|
+
- **ai:** `AgentCompilationIssue` is a type alias of
|
|
517
|
+
`CompileIssue[AgentErrorCode]` from `loom.core.errors.codes`, not a class.
|
|
518
|
+
It has the same fields, but `isinstance` against it raises `TypeError`
|
|
519
|
+
(check `CompileIssue` instead), and it no longer derives from
|
|
520
|
+
`LoomFrozenStruct`, so `loom_message_type()` is gone.
|
|
521
|
+
- **ai:** an `Mcp()` include filter on a use case that matches no tool aborts
|
|
522
|
+
start-up with the new code `USECASE_TOOL_FILTER_MATCHES_NOTHING` instead of
|
|
523
|
+
`TOOL_FILTER_MATCHES_NOTHING`, which is now raised only by an agent
|
|
524
|
+
artifact's filter. The message and the `parameters.<name>` field are
|
|
525
|
+
unchanged.
|
|
496
526
|
- **ai:** `AgentPlan.fingerprint`, and so the ETL `agent_version` column,
|
|
497
527
|
changes once for every existing agent. It no longer covers any policy, so
|
|
498
528
|
changing `retries`, a timeout, `max_iterations`, `max_tool_calls`,
|
|
@@ -646,6 +676,25 @@
|
|
|
646
676
|
|
|
647
677
|
### etl
|
|
648
678
|
|
|
679
|
+
- **etl:** compile errors come from the code catalogue, and the 34
|
|
680
|
+
class-method factories of `ETLCompilationError` are removed, without
|
|
681
|
+
aliases: for example `upsert_no_keys`, `missing_target` and
|
|
682
|
+
`unknown_source_table`. Raise
|
|
683
|
+
`ETLCompilationError.from_issue(ETLErrorCode.X.issue(...))`; the
|
|
684
|
+
`ETLCompilationError(code, component, message, field)` constructor is
|
|
685
|
+
unchanged. Messages keep their text.
|
|
686
|
+
- **etl:** each `IntoHistory` compile check has its own code instead of
|
|
687
|
+
`INVALID_TARGET_TYPE`: `HISTORIFY_KEYS_EMPTY`, `HISTORIFY_KEYS_TRACK_OVERLAP`,
|
|
688
|
+
`HISTORIFY_EFFECTIVE_DATE_IN_TRACK`, `HISTORIFY_BOUNDARY_IN_KEYS`,
|
|
689
|
+
`HISTORIFY_BOUNDARY_IN_TRACK`, `HISTORIFY_LOG_EFFECTIVE_DATE_NOT_COLUMN`,
|
|
690
|
+
`HISTORIFY_DELETE_MARKER_REQUIRES_LOG` and
|
|
691
|
+
`HISTORIFY_DELETE_MARKER_DECLARED_COLUMN`. Messages and fields are unchanged;
|
|
692
|
+
code that matched `INVALID_TARGET_TYPE` for these checks must match the new
|
|
693
|
+
codes. `INVALID_TARGET_TYPE` now means only a `target` that is not an
|
|
694
|
+
`IntoTable`, `IntoFile` or `IntoTemp`.
|
|
695
|
+
- **etl:** `ETLErrorCode.INVALID_SOURCES_TYPE` is removed. No step could raise
|
|
696
|
+
it: a step's sources are grouped only when `sources` is a `Sources` or a
|
|
697
|
+
`SourceSet`, and both are valid.
|
|
649
698
|
- **etl:** a `WithAgent` compiled by a runner whose config has no `ai:`
|
|
650
699
|
section fails with the new code `AGENT_RUNNER_NOT_CONFIGURED` instead of
|
|
651
700
|
`AGENT_NOT_FOUND`, which now means only that no artifact declares the name.
|
|
@@ -692,6 +741,20 @@
|
|
|
692
741
|
`sNaN` used to raise `decimal.InvalidOperation`, and a `Decimal`
|
|
693
742
|
`Infinity`, a `float` `inf` and a `float` `nan` were accepted.
|
|
694
743
|
|
|
744
|
+
### streaming
|
|
745
|
+
|
|
746
|
+
- **streaming:** compile issues come from the code catalogue
|
|
747
|
+
(`StreamingErrorCode.X.issue(...)`), and the compiler's private issue
|
|
748
|
+
factories are removed. `loom.streaming.compiler.CompilationIssue` is a type
|
|
749
|
+
alias of `CompileIssue[StreamingErrorCode]`, not a class: it has the same
|
|
750
|
+
fields, but `isinstance` against it raises `TypeError` (check
|
|
751
|
+
`CompileIssue` instead), `loom_message_type()` is gone, and
|
|
752
|
+
`CompilationIssue.prefixed()` is removed. Messages keep their text.
|
|
753
|
+
- **streaming:** a `Broadcast` followed by another node reports
|
|
754
|
+
`BROADCAST_NOT_LAST` with component `broadcast`, at the top level, in a
|
|
755
|
+
branch and in a Router branch. It used to report `TERMINAL_NOT_LAST` with
|
|
756
|
+
component `Broadcast`.
|
|
757
|
+
|
|
695
758
|
## 🐛 Fixes
|
|
696
759
|
|
|
697
760
|
### core
|
|
@@ -908,6 +971,34 @@
|
|
|
908
971
|
and cause are logged at `WARNING`, never sent. `ErrorCode` gains
|
|
909
972
|
`SERVICE_UNAVAILABLE`, which `HttpErrorMapper` maps to `503`. Any other
|
|
910
973
|
exception from the authenticator, and the `401` refusal, are unchanged.
|
|
974
|
+
- **rest:** the OpenAPI document of a route whose request or response holds a
|
|
975
|
+
tagged union published `discriminator.mapping` values as `#/$defs/<Name>`,
|
|
976
|
+
which the document does not contain, while each `$ref` already pointed at
|
|
977
|
+
`#/components/schemas/<Name>`, so code generators and OpenAPI validators
|
|
978
|
+
could not resolve them. Mapping values now follow the same rewrite as
|
|
979
|
+
`$ref` wherever they occur, for msgspec tagged structs and pydantic
|
|
980
|
+
discriminated unions alike, an optional (`X | Y | None`) union included.
|
|
981
|
+
|
|
982
|
+
### streaming
|
|
983
|
+
|
|
984
|
+
- **streaming:** a `Broadcast` is validated as a `Broadcast`. The compiler
|
|
985
|
+
treated it as a plain terminal, so the nodes of its branches were never
|
|
986
|
+
shape-checked. A branch with a shape mismatch, such as a record step after
|
|
987
|
+
`CollectBatch`, now fails compilation with `SHAPE_MISMATCH` scoped under
|
|
988
|
+
`broadcast branch <n>`; such flows used to compile. The code a misplaced
|
|
989
|
+
`Broadcast` reports is under Behaviour changes.
|
|
990
|
+
- **streaming:** a bare `ErrorEnvelope` among the `payloads` of
|
|
991
|
+
`FromMultiTypeTopic` is refused with `ERROR_ENVELOPE_UNPARAMETERIZED`. The
|
|
992
|
+
check only matched `ErrorEnvelope[X]`, which always has a parameter, so the
|
|
993
|
+
bare class compiled as a plain payload and its messages never reached the
|
|
994
|
+
error dispatch. Declare `ErrorEnvelope[OrderEvent]` instead; such flows used
|
|
995
|
+
to compile.
|
|
996
|
+
- **streaming:** an `ExpandRoutes` is validated. Its routes were never
|
|
997
|
+
shape-checked and nothing stopped a node from following it, although the
|
|
998
|
+
node is terminal and hands the expanded payloads, not rows, to whatever
|
|
999
|
+
follows. Each route is now checked on the record stream it receives, with
|
|
1000
|
+
issues scoped under `expand_routes branch <type>`, and a node after an
|
|
1001
|
+
`ExpandRoutes` fails with `TERMINAL_NOT_LAST`; such flows used to compile.
|
|
911
1002
|
|
|
912
1003
|
### prefect
|
|
913
1004
|
|
|
@@ -25,13 +25,7 @@ from typing import get_args
|
|
|
25
25
|
|
|
26
26
|
from loom.ai.compiler import AgentPlan
|
|
27
27
|
from loom.ai.config import McpServerConfig
|
|
28
|
-
from loom.ai.errors import
|
|
29
|
-
AgentCompilationError,
|
|
30
|
-
AgentCompilationIssue,
|
|
31
|
-
agent_marker_output_mismatch,
|
|
32
|
-
agent_marker_unknown,
|
|
33
|
-
mcp_marker_unknown,
|
|
34
|
-
)
|
|
28
|
+
from loom.ai.errors import AgentCompilationError, AgentCompilationIssue, AgentErrorCode
|
|
35
29
|
from loom.core.engine.compilable import Compilable
|
|
36
30
|
from loom.core.engine.plan import AgentBinding, McpBinding
|
|
37
31
|
from loom.core.use_case.registry import UseCaseRegistry
|
|
@@ -85,7 +79,9 @@ def _agent_binding_issues(
|
|
|
85
79
|
for binding in agent_bindings:
|
|
86
80
|
agent_plan = plans_by_name.get(binding.agent)
|
|
87
81
|
if agent_plan is None:
|
|
88
|
-
yield
|
|
82
|
+
yield AgentErrorCode.AGENT_MARKER_UNKNOWN.issue(
|
|
83
|
+
component=uc_name, parameter=binding.name, agent=binding.agent, available=available
|
|
84
|
+
)
|
|
89
85
|
continue
|
|
90
86
|
expected_args = get_args(binding.annotation)
|
|
91
87
|
if not expected_args:
|
|
@@ -97,10 +93,10 @@ def _agent_binding_issues(
|
|
|
97
93
|
declared = agent_plan.output.loom_type.type
|
|
98
94
|
if expected is declared:
|
|
99
95
|
continue
|
|
100
|
-
yield
|
|
101
|
-
uc_name,
|
|
102
|
-
binding.name,
|
|
103
|
-
binding.agent,
|
|
96
|
+
yield AgentErrorCode.AGENT_MARKER_OUTPUT_MISMATCH.issue(
|
|
97
|
+
component=uc_name,
|
|
98
|
+
parameter=binding.name,
|
|
99
|
+
agent=binding.agent,
|
|
104
100
|
expected=getattr(expected, "__name__", str(expected)),
|
|
105
101
|
declared=getattr(declared, "__name__", str(declared)),
|
|
106
102
|
)
|
|
@@ -159,7 +155,12 @@ def _mcp_binding_issues(
|
|
|
159
155
|
available = tuple(servers)
|
|
160
156
|
for binding in mcp_bindings:
|
|
161
157
|
if binding.server not in servers:
|
|
162
|
-
yield
|
|
158
|
+
yield AgentErrorCode.MCP_MARKER_UNKNOWN.issue(
|
|
159
|
+
component=uc_name,
|
|
160
|
+
parameter=binding.name,
|
|
161
|
+
server=binding.server,
|
|
162
|
+
available=available,
|
|
163
|
+
)
|
|
163
164
|
|
|
164
165
|
|
|
165
166
|
__all__ = ["verify_agent_markers", "verify_mcp_markers"]
|
|
@@ -25,11 +25,7 @@ from starlette.middleware import Middleware
|
|
|
25
25
|
from loom.ai.a2a.card import build_agent_card, card_path
|
|
26
26
|
from loom.ai.compiler import AgentPlan
|
|
27
27
|
from loom.ai.config import AgentEndpointConfig, AiConfig
|
|
28
|
-
from loom.ai.errors import
|
|
29
|
-
AgentCompilationError,
|
|
30
|
-
auth_exclusion_overlaps_agents,
|
|
31
|
-
state_surface_unsupported,
|
|
32
|
-
)
|
|
28
|
+
from loom.ai.errors import AgentCompilationError, AgentErrorCode
|
|
33
29
|
from loom.ai.fastapi.response import ENCODER
|
|
34
30
|
from loom.ai.runtime import AgentRuntime
|
|
35
31
|
from loom.core.config.errors import ConfigError
|
|
@@ -98,7 +94,9 @@ def published_agents(
|
|
|
98
94
|
)
|
|
99
95
|
continue
|
|
100
96
|
if plan.state is not None:
|
|
101
|
-
raise AgentCompilationError(
|
|
97
|
+
raise AgentCompilationError(
|
|
98
|
+
[AgentErrorCode.STATE_SURFACE_UNSUPPORTED.issue(component=name, surface="a2a")]
|
|
99
|
+
)
|
|
102
100
|
card = ENCODER.encode(build_agent_card(plan, a2a, mechanism=mechanism, prefix=prefix))
|
|
103
101
|
published.append(
|
|
104
102
|
PublishedAgent(
|
|
@@ -180,7 +178,9 @@ def verify_exclusions(
|
|
|
180
178
|
and any(path == root or path.startswith(f"{root}/") for root in guarded)
|
|
181
179
|
]
|
|
182
180
|
if offending:
|
|
183
|
-
raise AgentCompilationError(
|
|
181
|
+
raise AgentCompilationError(
|
|
182
|
+
[AgentErrorCode.AUTH_EXCLUSION_OVERLAPS_AGENTS.issue(paths=offending)]
|
|
183
|
+
)
|
|
184
184
|
|
|
185
185
|
|
|
186
186
|
def _is_auth_middleware(entry: Middleware) -> bool:
|
|
@@ -31,11 +31,7 @@ from loom.ai.compiler.phases._output import compile_output, compile_output_check
|
|
|
31
31
|
from loom.ai.compiler.phases._state import compile_state
|
|
32
32
|
from loom.ai.config import AiConfig
|
|
33
33
|
from loom.ai.declarative import AgentSpecV1, DecodedSpec
|
|
34
|
-
from loom.ai.errors import
|
|
35
|
-
AgentCompilationError,
|
|
36
|
-
AgentCompilationIssue,
|
|
37
|
-
agent_name_duplicate,
|
|
38
|
-
)
|
|
34
|
+
from loom.ai.errors import AgentCompilationError, AgentCompilationIssue, AgentErrorCode
|
|
39
35
|
from loom.ai.inference import InferenceTarget
|
|
40
36
|
from loom.ai.pricing import ModelPrice
|
|
41
37
|
from loom.core.sql.config import SqlConfig
|
|
@@ -240,4 +236,8 @@ def _duplicate_name_issues(
|
|
|
240
236
|
sources: dict[str, list[str]] = defaultdict(list)
|
|
241
237
|
for spec, source_path in entries:
|
|
242
238
|
sources[spec.name].append(source_path if source_path is not None else _UNNAMED_SOURCE)
|
|
243
|
-
return [
|
|
239
|
+
return [
|
|
240
|
+
AgentErrorCode.AGENT_NAME_DUPLICATE.issue(component=name, sources=paths)
|
|
241
|
+
for name, paths in sources.items()
|
|
242
|
+
if len(paths) > 1
|
|
243
|
+
]
|
|
@@ -46,31 +46,7 @@ from loom.ai.declarative import (
|
|
|
46
46
|
SqlCapability,
|
|
47
47
|
UsecaseCapability,
|
|
48
48
|
)
|
|
49
|
-
from loom.ai.errors import
|
|
50
|
-
AgentCompilationError,
|
|
51
|
-
AgentCompilationIssue,
|
|
52
|
-
a2a_agent_unknown,
|
|
53
|
-
anonymous_with_data_capability,
|
|
54
|
-
capability_empty,
|
|
55
|
-
capability_kind_unsupported,
|
|
56
|
-
mcp_server_unknown,
|
|
57
|
-
native_tool_duplicate,
|
|
58
|
-
native_tool_unsupported,
|
|
59
|
-
python_factory_not_callable,
|
|
60
|
-
python_factory_params_rejected,
|
|
61
|
-
python_factory_unresolvable,
|
|
62
|
-
skills_library_escapes,
|
|
63
|
-
skills_library_invalid,
|
|
64
|
-
skills_name_collision,
|
|
65
|
-
skills_root_missing,
|
|
66
|
-
sql_config_missing,
|
|
67
|
-
sql_connection_not_readonly,
|
|
68
|
-
sql_connection_roles_unbound,
|
|
69
|
-
sql_connection_unknown,
|
|
70
|
-
sql_result_bound_missing,
|
|
71
|
-
usecase_declares_query,
|
|
72
|
-
usecase_key_unknown,
|
|
73
|
-
)
|
|
49
|
+
from loom.ai.errors import AgentCompilationError, AgentCompilationIssue, AgentErrorCode
|
|
74
50
|
from loom.ai.inference import InferenceTarget
|
|
75
51
|
from loom.core.engine.compilable import Compilable
|
|
76
52
|
from loom.core.sql.config import SqlConfig, roles_need_identity_binding
|
|
@@ -171,10 +147,16 @@ def compile_capabilities(
|
|
|
171
147
|
for capability in spec.capabilities:
|
|
172
148
|
kind = str(capability.__struct_config__.tag)
|
|
173
149
|
if kind not in supported_kinds:
|
|
174
|
-
issues.append(
|
|
150
|
+
issues.append(
|
|
151
|
+
AgentErrorCode.CAPABILITY_KIND_UNSUPPORTED.issue(
|
|
152
|
+
component=component, kind=kind, engine=config.engine
|
|
153
|
+
)
|
|
154
|
+
)
|
|
175
155
|
continue
|
|
176
156
|
if context.anonymous and kind in _DATA_OR_REMOTE_KINDS:
|
|
177
|
-
issues.append(
|
|
157
|
+
issues.append(
|
|
158
|
+
AgentErrorCode.ANONYMOUS_WITH_DATA_CAPABILITY.issue(component=component, kind=kind)
|
|
159
|
+
)
|
|
178
160
|
item, item_issues = _HANDLERS[type(capability)](capability, context)
|
|
179
161
|
issues.extend(item_issues)
|
|
180
162
|
if item is not None:
|
|
@@ -195,7 +177,11 @@ def _native_duplicate_issues(
|
|
|
195
177
|
if not isinstance(capability, CompiledNativeCapability):
|
|
196
178
|
continue
|
|
197
179
|
if capability.tool in seen:
|
|
198
|
-
issues.append(
|
|
180
|
+
issues.append(
|
|
181
|
+
AgentErrorCode.NATIVE_TOOL_DUPLICATE.issue(
|
|
182
|
+
component=component, tool=capability.tool
|
|
183
|
+
)
|
|
184
|
+
)
|
|
199
185
|
continue
|
|
200
186
|
seen.add(capability.tool)
|
|
201
187
|
return issues
|
|
@@ -214,7 +200,14 @@ def _skill_collision_issues(
|
|
|
214
200
|
for name in capability.names:
|
|
215
201
|
first = owner.setdefault(name, capability.library)
|
|
216
202
|
if first != capability.library:
|
|
217
|
-
issues.append(
|
|
203
|
+
issues.append(
|
|
204
|
+
AgentErrorCode.SKILLS_NAME_COLLISION.issue(
|
|
205
|
+
component=component,
|
|
206
|
+
skill=name,
|
|
207
|
+
first_library=first,
|
|
208
|
+
second_library=capability.library,
|
|
209
|
+
)
|
|
210
|
+
)
|
|
218
211
|
return issues
|
|
219
212
|
|
|
220
213
|
|
|
@@ -230,11 +223,15 @@ def _compile_usecase(capability: UsecaseCapability, context: _Context) -> _Handl
|
|
|
230
223
|
try:
|
|
231
224
|
use_case = context.registry.resolve(key)
|
|
232
225
|
except KeyError:
|
|
233
|
-
issues.append(
|
|
226
|
+
issues.append(
|
|
227
|
+
AgentErrorCode.USECASE_KEY_UNKNOWN.issue(component=context.component, key=key)
|
|
228
|
+
)
|
|
234
229
|
continue
|
|
235
230
|
execution = getattr(use_case, "__execution_plan__", None)
|
|
236
231
|
if execution is not None and execution.query_binding is not None:
|
|
237
|
-
issues.append(
|
|
232
|
+
issues.append(
|
|
233
|
+
AgentErrorCode.USECASE_DECLARES_QUERY.issue(component=context.component, key=key)
|
|
234
|
+
)
|
|
238
235
|
use_cases.append(use_case)
|
|
239
236
|
if issues:
|
|
240
237
|
return None, issues
|
|
@@ -243,20 +240,36 @@ def _compile_usecase(capability: UsecaseCapability, context: _Context) -> _Handl
|
|
|
243
240
|
|
|
244
241
|
def _compile_sql(capability: SqlCapability, context: _Context) -> _HandlerResult:
|
|
245
242
|
if context.sql is None:
|
|
246
|
-
return None, [
|
|
243
|
+
return None, [AgentErrorCode.SQL_CONFIG_MISSING.issue(component=context.component)]
|
|
247
244
|
connection = context.sql.connections.get(capability.connection)
|
|
248
245
|
if connection is None:
|
|
249
|
-
return None, [
|
|
246
|
+
return None, [
|
|
247
|
+
AgentErrorCode.SQL_CONNECTION_UNKNOWN.issue(
|
|
248
|
+
component=context.component, connection=capability.connection
|
|
249
|
+
)
|
|
250
|
+
]
|
|
250
251
|
issues: list[AgentCompilationIssue] = []
|
|
251
252
|
if not connection.readonly:
|
|
252
|
-
issues.append(
|
|
253
|
+
issues.append(
|
|
254
|
+
AgentErrorCode.SQL_CONNECTION_NOT_READONLY.issue(
|
|
255
|
+
component=context.component, connection=capability.connection
|
|
256
|
+
)
|
|
257
|
+
)
|
|
253
258
|
binds_roles = not context.anonymous
|
|
254
259
|
if roles_need_identity_binding(connection.allowed_roles, mechanism_binds_roles=binds_roles):
|
|
255
|
-
issues.append(
|
|
260
|
+
issues.append(
|
|
261
|
+
AgentErrorCode.SQL_CONNECTION_ROLES_UNBOUND.issue(
|
|
262
|
+
component=context.component, connection=capability.connection
|
|
263
|
+
)
|
|
264
|
+
)
|
|
256
265
|
# Defensive: the v1 struct already makes absent or non-positive bounds
|
|
257
266
|
# unrepresentable, but a spec built through another path must not pass.
|
|
258
267
|
if capability.max_rows < 1 or capability.max_result_bytes < 1:
|
|
259
|
-
issues.append(
|
|
268
|
+
issues.append(
|
|
269
|
+
AgentErrorCode.SQL_RESULT_BOUND_MISSING.issue(
|
|
270
|
+
component=context.component, connection=capability.connection
|
|
271
|
+
)
|
|
272
|
+
)
|
|
260
273
|
if issues:
|
|
261
274
|
return None, issues
|
|
262
275
|
return (
|
|
@@ -294,12 +307,14 @@ def compile_mcp_capability(
|
|
|
294
307
|
|
|
295
308
|
Returns:
|
|
296
309
|
The compiled capability, or ``None`` with one
|
|
297
|
-
:
|
|
298
|
-
is not in ``servers``.
|
|
310
|
+
:attr:`~loom.ai.errors.AgentErrorCode.MCP_SERVER_UNKNOWN` issue when
|
|
311
|
+
``server_name`` is not in ``servers``.
|
|
299
312
|
"""
|
|
300
313
|
server = servers.get(server_name)
|
|
301
314
|
if server is None:
|
|
302
|
-
return None, [
|
|
315
|
+
return None, [
|
|
316
|
+
AgentErrorCode.MCP_SERVER_UNKNOWN.issue(component=component, server=server_name)
|
|
317
|
+
]
|
|
303
318
|
return (
|
|
304
319
|
CompiledMcpCapability(
|
|
305
320
|
server=server_name,
|
|
@@ -347,7 +362,11 @@ def _compile_auth(auth: Mapping[str, str] | None) -> CompiledRemoteAuth | None:
|
|
|
347
362
|
def _compile_a2a(capability: A2ACapability, context: _Context) -> _HandlerResult:
|
|
348
363
|
agent = context.a2a_agents.get(capability.agent)
|
|
349
364
|
if agent is None:
|
|
350
|
-
return None, [
|
|
365
|
+
return None, [
|
|
366
|
+
AgentErrorCode.A2A_AGENT_UNKNOWN.issue(
|
|
367
|
+
component=context.component, agent=capability.agent
|
|
368
|
+
)
|
|
369
|
+
]
|
|
351
370
|
return (
|
|
352
371
|
CompiledA2ACapability(
|
|
353
372
|
agent=capability.agent,
|
|
@@ -366,22 +385,34 @@ def _library_base(library: str, context: _Context) -> _ResolveResult:
|
|
|
366
385
|
if library.startswith(_LOCAL_LIBRARY_PREFIX):
|
|
367
386
|
if context.source_path is None:
|
|
368
387
|
reason = "a './' library needs a known artifact path"
|
|
369
|
-
return None, [
|
|
388
|
+
return None, [
|
|
389
|
+
AgentErrorCode.SKILLS_LIBRARY_INVALID.issue(
|
|
390
|
+
component=context.component, library=library, reason=reason
|
|
391
|
+
)
|
|
392
|
+
]
|
|
370
393
|
return Path(context.source_path).parent, []
|
|
371
394
|
if context.skills_root is None:
|
|
372
|
-
return None, [
|
|
395
|
+
return None, [AgentErrorCode.SKILLS_ROOT_MISSING.issue(component=context.component)]
|
|
373
396
|
return Path(context.skills_root), []
|
|
374
397
|
|
|
375
398
|
|
|
376
399
|
def _resolve_library(library: str, context: _Context) -> _ResolveResult:
|
|
377
400
|
if escapes(library.removeprefix(_LOCAL_LIBRARY_PREFIX)):
|
|
378
|
-
return None, [
|
|
401
|
+
return None, [
|
|
402
|
+
AgentErrorCode.SKILLS_LIBRARY_ESCAPES.issue(
|
|
403
|
+
component=context.component, library=library
|
|
404
|
+
)
|
|
405
|
+
]
|
|
379
406
|
base, issues = _library_base(library, context)
|
|
380
407
|
if base is None:
|
|
381
408
|
return None, issues
|
|
382
409
|
resolved = base / library.removeprefix(_LOCAL_LIBRARY_PREFIX)
|
|
383
410
|
if not is_within(resolved, base):
|
|
384
|
-
return None, [
|
|
411
|
+
return None, [
|
|
412
|
+
AgentErrorCode.SKILLS_LIBRARY_ESCAPES.issue(
|
|
413
|
+
component=context.component, library=library
|
|
414
|
+
)
|
|
415
|
+
]
|
|
385
416
|
return resolved.resolve(), []
|
|
386
417
|
|
|
387
418
|
|
|
@@ -413,14 +444,20 @@ def _compile_skills(capability: SkillsCapability, context: _Context) -> _Handler
|
|
|
413
444
|
return None, issues
|
|
414
445
|
discovered, reason = _discover_skills(directory)
|
|
415
446
|
if reason is not None:
|
|
416
|
-
return None, [
|
|
447
|
+
return None, [
|
|
448
|
+
AgentErrorCode.SKILLS_LIBRARY_INVALID.issue(
|
|
449
|
+
component=context.component, library=library, reason=reason
|
|
450
|
+
)
|
|
451
|
+
]
|
|
417
452
|
selected = select_names(
|
|
418
453
|
discovered,
|
|
419
454
|
include=capability.include,
|
|
420
455
|
exclude=capability.exclude,
|
|
421
456
|
)
|
|
422
457
|
if not selected:
|
|
423
|
-
return None, [
|
|
458
|
+
return None, [
|
|
459
|
+
AgentErrorCode.CAPABILITY_EMPTY.issue(component=context.component, kind="skills")
|
|
460
|
+
]
|
|
424
461
|
return (
|
|
425
462
|
CompiledSkillsCapability(library=library, directory=str(directory), names=selected),
|
|
426
463
|
[],
|
|
@@ -431,9 +468,17 @@ def _compile_python(capability: PythonCapability, context: _Context) -> _Handler
|
|
|
431
468
|
try:
|
|
432
469
|
factory = import_symbol(capability.factory)
|
|
433
470
|
except (ImportError, AttributeError, ValueError) as exc:
|
|
434
|
-
return None, [
|
|
471
|
+
return None, [
|
|
472
|
+
AgentErrorCode.PYTHON_FACTORY_UNRESOLVABLE.issue(
|
|
473
|
+
component=context.component, factory=capability.factory, reason=str(exc)
|
|
474
|
+
)
|
|
475
|
+
]
|
|
435
476
|
if not callable(factory):
|
|
436
|
-
return None, [
|
|
477
|
+
return None, [
|
|
478
|
+
AgentErrorCode.PYTHON_FACTORY_NOT_CALLABLE.issue(
|
|
479
|
+
component=context.component, factory=capability.factory
|
|
480
|
+
)
|
|
481
|
+
]
|
|
437
482
|
issue = _rejected_params(factory, capability.params, context.component, capability.factory)
|
|
438
483
|
if issue is not None:
|
|
439
484
|
return None, [issue]
|
|
@@ -460,11 +505,13 @@ def _rejected_params(
|
|
|
460
505
|
try:
|
|
461
506
|
signature.bind_partial(_FIRST_POSITIONAL)
|
|
462
507
|
except TypeError:
|
|
463
|
-
return
|
|
508
|
+
return AgentErrorCode.PYTHON_FACTORY_NOT_CALLABLE.issue(component=component, factory=ref)
|
|
464
509
|
try:
|
|
465
510
|
signature.bind(_FIRST_POSITIONAL, **params)
|
|
466
511
|
except TypeError as exc:
|
|
467
|
-
return
|
|
512
|
+
return AgentErrorCode.PYTHON_FACTORY_PARAMS_REJECTED.issue(
|
|
513
|
+
component=component, factory=ref, reason=str(exc)
|
|
514
|
+
)
|
|
468
515
|
return None
|
|
469
516
|
|
|
470
517
|
|
|
@@ -477,15 +524,19 @@ def _compile_native(capability: NativeCapability, context: _Context) -> _Handler
|
|
|
477
524
|
if context.inference is None:
|
|
478
525
|
return None, []
|
|
479
526
|
if context.native_tools is None:
|
|
480
|
-
return None, [
|
|
527
|
+
return None, [
|
|
528
|
+
AgentErrorCode.CAPABILITY_KIND_UNSUPPORTED.issue(
|
|
529
|
+
component=context.component, kind="native", engine=context.engine
|
|
530
|
+
)
|
|
531
|
+
]
|
|
481
532
|
try:
|
|
482
533
|
supported = context.native_tools(context.inference)
|
|
483
534
|
except AgentCompilationError as exc:
|
|
484
535
|
return None, list(exc.issues)
|
|
485
536
|
if capability.tool not in supported:
|
|
486
537
|
return None, [
|
|
487
|
-
|
|
488
|
-
context.component,
|
|
538
|
+
AgentErrorCode.NATIVE_TOOL_UNSUPPORTED.issue(
|
|
539
|
+
component=context.component,
|
|
489
540
|
tool=capability.tool,
|
|
490
541
|
role=context.model_role,
|
|
491
542
|
provider=context.inference.provider,
|
|
@@ -18,12 +18,7 @@ from __future__ import annotations
|
|
|
18
18
|
from loom.ai.compiler._plan import CONVERSATION_CONTEXT_FIELDS, CompiledConversation
|
|
19
19
|
from loom.ai.compiler.phases._feedable import feedable_input, is_granted
|
|
20
20
|
from loom.ai.declarative import AgentSpecV1
|
|
21
|
-
from loom.ai.errors import
|
|
22
|
-
AgentCompilationIssue,
|
|
23
|
-
conversation_input_unsatisfied,
|
|
24
|
-
conversation_usecase_also_granted,
|
|
25
|
-
conversation_usecase_unknown,
|
|
26
|
-
)
|
|
21
|
+
from loom.ai.errors import AgentCompilationIssue, AgentErrorCode
|
|
27
22
|
from loom.core.use_case.registry import UseCaseRegistry
|
|
28
23
|
|
|
29
24
|
_ConversationResult = tuple[CompiledConversation | None, list[AgentCompilationIssue]]
|
|
@@ -59,17 +54,29 @@ def compile_conversation(
|
|
|
59
54
|
key = spec.conversation.usecase
|
|
60
55
|
issues: list[AgentCompilationIssue] = []
|
|
61
56
|
if is_granted(spec.capabilities, key):
|
|
62
|
-
issues.append(
|
|
57
|
+
issues.append(
|
|
58
|
+
AgentErrorCode.CONVERSATION_USECASE_ALSO_GRANTED.issue(component=component, key=key)
|
|
59
|
+
)
|
|
63
60
|
try:
|
|
64
61
|
use_case = registry.resolve(key)
|
|
65
62
|
except KeyError:
|
|
66
|
-
issues.append(
|
|
63
|
+
issues.append(
|
|
64
|
+
AgentErrorCode.CONVERSATION_USECASE_UNKNOWN.issue(component=component, key=key)
|
|
65
|
+
)
|
|
67
66
|
return None, issues
|
|
68
67
|
accepted, reason = feedable_input(use_case, _OFFERED)
|
|
69
68
|
if reason is not None:
|
|
70
|
-
issues.append(
|
|
69
|
+
issues.append(
|
|
70
|
+
AgentErrorCode.CONVERSATION_INPUT_UNSATISFIED.issue(
|
|
71
|
+
component=component, key=key, reason=reason
|
|
72
|
+
)
|
|
73
|
+
)
|
|
71
74
|
elif _CONVERSATION_ID not in accepted:
|
|
72
|
-
issues.append(
|
|
75
|
+
issues.append(
|
|
76
|
+
AgentErrorCode.CONVERSATION_INPUT_UNSATISFIED.issue(
|
|
77
|
+
component=component, key=key, reason=_MISSING_CONVERSATION_ID
|
|
78
|
+
)
|
|
79
|
+
)
|
|
73
80
|
if issues:
|
|
74
81
|
return None, issues
|
|
75
82
|
return CompiledConversation(usecase=key, use_case=use_case, accepted=accepted), []
|
|
@@ -20,12 +20,7 @@ from loom.ai.compiler._plan import (
|
|
|
20
20
|
)
|
|
21
21
|
from loom.ai.compiler.phases._feedable import feedable_input, is_granted
|
|
22
22
|
from loom.ai.declarative import AgentSpecV1
|
|
23
|
-
from loom.ai.errors import
|
|
24
|
-
AgentCompilationIssue,
|
|
25
|
-
on_output_input_unsatisfied,
|
|
26
|
-
on_output_usecase_also_granted,
|
|
27
|
-
on_output_usecase_unknown,
|
|
28
|
-
)
|
|
23
|
+
from loom.ai.errors import AgentCompilationIssue, AgentErrorCode
|
|
29
24
|
from loom.core.use_case.registry import UseCaseRegistry
|
|
30
25
|
|
|
31
26
|
_HookResult = tuple[CompiledOutputHook | None, list[AgentCompilationIssue]]
|
|
@@ -55,15 +50,21 @@ def compile_output_hook(
|
|
|
55
50
|
key = spec.on_output.usecase
|
|
56
51
|
issues: list[AgentCompilationIssue] = []
|
|
57
52
|
if is_granted(spec.capabilities, key):
|
|
58
|
-
issues.append(
|
|
53
|
+
issues.append(
|
|
54
|
+
AgentErrorCode.ON_OUTPUT_USECASE_ALSO_GRANTED.issue(component=component, key=key)
|
|
55
|
+
)
|
|
59
56
|
try:
|
|
60
57
|
use_case = registry.resolve(key)
|
|
61
58
|
except KeyError:
|
|
62
|
-
issues.append(
|
|
59
|
+
issues.append(AgentErrorCode.ON_OUTPUT_USECASE_UNKNOWN.issue(component=component, key=key))
|
|
63
60
|
return None, issues
|
|
64
61
|
accepted, reason = feedable_input(use_case, _OFFERED)
|
|
65
62
|
if reason is not None:
|
|
66
|
-
issues.append(
|
|
63
|
+
issues.append(
|
|
64
|
+
AgentErrorCode.ON_OUTPUT_INPUT_UNSATISFIED.issue(
|
|
65
|
+
component=component, key=key, reason=reason
|
|
66
|
+
)
|
|
67
|
+
)
|
|
67
68
|
if issues:
|
|
68
69
|
return None, issues
|
|
69
70
|
return CompiledOutputHook(usecase=key, use_case=use_case, accepted=accepted), []
|
|
@@ -17,7 +17,7 @@ from collections.abc import Sequence
|
|
|
17
17
|
from loom.ai.abc import StateShape
|
|
18
18
|
from loom.ai.compiler._plan import CompiledInstruction
|
|
19
19
|
from loom.ai.declarative import InstructionBlock
|
|
20
|
-
from loom.ai.errors import AgentCompilationIssue,
|
|
20
|
+
from loom.ai.errors import AgentCompilationIssue, AgentErrorCode
|
|
21
21
|
|
|
22
22
|
_CompileResult = tuple[tuple[CompiledInstruction, ...], list[AgentCompilationIssue]]
|
|
23
23
|
|
|
@@ -61,9 +61,9 @@ def _duplicate_name_issues(
|
|
|
61
61
|
if block.name is not None:
|
|
62
62
|
positions[block.name].append(index)
|
|
63
63
|
return [
|
|
64
|
-
|
|
65
|
-
component,
|
|
66
|
-
f"name '{name}' is declared twice, at positions "
|
|
64
|
+
AgentErrorCode.INSTRUCTION_BLOCK_INVALID.issue(
|
|
65
|
+
component=component,
|
|
66
|
+
reason=f"name '{name}' is declared twice, at positions "
|
|
67
67
|
f"{', '.join(str(position) for position in dupes)}",
|
|
68
68
|
)
|
|
69
69
|
for name, dupes in positions.items()
|
|
@@ -77,9 +77,9 @@ def _missing_state_issues(
|
|
|
77
77
|
if state is not None:
|
|
78
78
|
return []
|
|
79
79
|
return [
|
|
80
|
-
|
|
81
|
-
component,
|
|
82
|
-
f"block {_block_label(block, index)} declares template "
|
|
80
|
+
AgentErrorCode.INSTRUCTION_BLOCK_INVALID.issue(
|
|
81
|
+
component=component,
|
|
82
|
+
reason=f"block {_block_label(block, index)} declares template "
|
|
83
83
|
f"'{block.template}' but the artifact declares no state "
|
|
84
84
|
"(add deps_type or deps_schema)",
|
|
85
85
|
)
|