loom-kernel 2.22.1__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.1 → loom_kernel-2.22.2}/CHANGELOG.md +84 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/PKG-INFO +1 -1
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/_startup.py +14 -13
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/a2a/_binding.py +7 -7
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/compiler/_compiler.py +6 -6
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_capabilities.py +104 -53
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_conversation.py +17 -10
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_hook.py +10 -9
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_instructions.py +7 -7
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_limits.py +13 -3
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_model_role.py +2 -2
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_output.py +24 -28
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_state.py +19 -17
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/config.py +100 -57
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/declarative/__init__.py +16 -11
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/declarative/_envelope.py +28 -15
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_capabilities.py +18 -11
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_instructions.py +9 -7
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_mcp.py +8 -2
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_models.py +8 -2
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/provider.py +4 -2
- {loom_kernel-2.22.1 → 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.1 → loom_kernel-2.22.2}/src/loom/ai/registry.py +18 -13
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/remote_auth.py +28 -17
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/runtime/_lifecycle.py +30 -17
- {loom_kernel-2.22.1 → 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.1 → loom_kernel-2.22.2}/src/loom/etl/compiler/_binding.py +11 -16
- {loom_kernel-2.22.1 → 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.1 → loom_kernel-2.22.2}/src/loom/etl/compiler/_validators_agents.py +22 -16
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/compiler/_validators_config.py +6 -2
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/compiler/_validators_plan.py +20 -8
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/compiler/_validators_step.py +92 -83
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/fastapi/auto.py +4 -4
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_adapter.py +3 -2
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/runner.py +5 -2
- {loom_kernel-2.22.1 → 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.1 → loom_kernel-2.22.2}/src/loom/streaming/compiler/_plan.py +3 -2
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/compiler/phases/build_plan.py +11 -14
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/compiler/phases/validate.py +121 -59
- loom_kernel-2.22.1/src/loom/ai/errors.py +0 -1693
- loom_kernel-2.22.1/src/loom/core/errors/codes.py +0 -41
- loom_kernel-2.22.1/src/loom/etl/compiler/_errors.py +0 -473
- loom_kernel-2.22.1/src/loom/streaming/compiler/_errors.py +0 -477
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/.gitignore +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/LICENSE +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/README.md +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/pyproject.toml +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/_concurrency.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/_filters.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/_paths.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/_roles.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/_transport.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/_usecase.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/a2a/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/a2a/_handlers.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/a2a/_rpc.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/a2a/card.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/a2a/events.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/a2a/server.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/abc.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/bootstrap.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/compiler/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/compiler/_fingerprint.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/compiler/_plan.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/compiler/phases/_feedable.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/declarative/_schema.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/declarative/_v1.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/describe.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_a2a.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_engine.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_escape.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_events.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_history.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_limits.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_native.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/extras/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/extras/a2a.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/extras/handlebars.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/extras/mcp.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/extras/skills.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/_shared.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/anthropic.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/bedrock.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/gateway.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/engines/pydantic_ai/providers/openai.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/etl/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/etl/_batch.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/etl/_columns.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/etl/_frames.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/etl/_ledger.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/etl/_runner.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/etl/_validation.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/fastapi/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/fastapi/endpoints.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/fastapi/response.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/fastapi/streaming.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/inference.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/pricing.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/runtime/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/runtime/_bounded.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/runtime/_chain.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/runtime/_conversation.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/runtime/_grants.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/runtime/_handle.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/runtime/_health.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/runtime/_hooks.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/runtime/_limits.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/validate/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/ai/validate/__main__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/celery/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/celery/auto.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/celery/bootstrap.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/celery/config.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/celery/constants.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/celery/runner.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/celery/service.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/cli/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/cli/app.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/cli/schema.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/async_bridge.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/authz/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/authz/_decide.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/authz/_grants.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/authz/_roles.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/authz/_scope.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/authz/elevation.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/authz/product.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/backend/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/backend/core_model.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/backend/protocol.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/backend/scoped_ddl.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/backend/sqlalchemy.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/bootstrap/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/bootstrap/bootstrap.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/bootstrap/kernel.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/_batching.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/_single_flight.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/abc/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/abc/backend.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/abc/config.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/abc/dependency.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/calls.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/codec.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/decorators.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/dependency.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/errors.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/gateway.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/keys.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/memory.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/repository.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/result_codec.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/serializer.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/cache/wiring.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/command/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/command/adapter.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/command/base.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/command/field.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/command/introspection.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/compiler.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/config/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/config/_boto3.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/config/_includes.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/config/_resolver_utils.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/config/binder.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/config/configurable.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/config/context.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/config/errors.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/config/keys.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/config/loader.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/config/model.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/config/observability.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/config/resolver.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/config/secrets.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/config/ssm.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/contracts/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/contracts/manifest.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/di/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/di/container.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/di/scope.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/discovery/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/discovery/_utils.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/discovery/base.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/discovery/interfaces.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/discovery/manifest.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/discovery/modules.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/engine/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/engine/compilable.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/engine/compiler.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/engine/events.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/engine/executor.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/engine/metrics.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/engine/plan.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/engine/post_commit.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/errors/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/errors/errors.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/expr/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/expr/eval.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/expr/nodes.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/expr/refs.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/identity/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/identity/context.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/identity/identity.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/identity/issuer.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/identity/wire.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/introspection/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/introspection/base.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/introspection/describe.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/job/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/job/callback.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/job/context.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/job/handle.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/job/job.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/job/service.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/locator.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/logger/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/logger/abc.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/logger/config.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/logger/registry.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/logger/structlogger.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/_json_schema.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/_loom_type.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/base.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/convert.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/enums.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/field.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/introspection.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/partition.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/privilege.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/projection.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/relation.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/scoped.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/struct.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/timestamped.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/types.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/model/types_postgres.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/observability/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/observability/config.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/observability/event.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/observability/observer/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/observability/observer/noop.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/observability/observer/otel.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/observability/observer/structlog.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/observability/otel_ids.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/observability/protocol.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/observability/runtime.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/observability/span.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/observability/topology.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/persistence/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/persistence/abc.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/persistence/none.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/persistence/registry.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/plugins/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/plugins/entrypoints.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/plugins/optional.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/projection/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/projection/loaders.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/projection/runtime.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/abc/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/abc/cursor.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/abc/errors.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/abc/query.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/abc/query_compiler.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/abc/repo_for.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/abc/repository.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/abc/session_scope.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/dynamodb/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/dynamodb/backend.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/dynamodb/registry.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/dynamodb/repository.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/dynamodb/uow.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/backend.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/ids.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/query_compiler.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/registry.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/repository.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/uow.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/mongo/values.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/mutation.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/registration.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/registry.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/backend.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/migrations/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/migrations/env_template.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/migrations/hook.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/migrations/operations.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/migrations/runners.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/model.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/bootstrap.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/config.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/elevate.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/guard/0001.sql +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/guard/0002.sql +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/guard/preflight.sql +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/guard_manifest.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/integrity.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/partitions.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/provider.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/schema.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/sources.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/rls/verify.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/session_manager.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/session_settings.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/response/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/response/base.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/routing/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/routing/ref.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/routing/resolver.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/runner.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/schema/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/schema/schema_mode.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/schema_names.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/sql/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/sql/abc/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/sql/abc/contracts.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/sql/abc/errors.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/sql/caller_bound.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/sql/clickhouse/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/sql/clickhouse/_client.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/sql/clickhouse/executor.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/sql/clickhouse/registry.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/sql/config.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/sql/roles.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/sql/service.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/symbols.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/tracing/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/tracing/context.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/transaction.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/transport/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/transport/adapter.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/uow/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/uow/abc.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/uow/context.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/use_case/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/use_case/_predicates.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/use_case/agent_markers.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/use_case/compute.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/use_case/constants.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/use_case/factory.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/use_case/field_ref.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/use_case/invoker.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/use_case/keys.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/use_case/markers.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/use_case/mcp_markers.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/use_case/outcome.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/use_case/registry.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/use_case/rule.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/core/use_case/use_case.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/_uri.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/_format_registry.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/_common.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/_log.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/_ops.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/_historify/_transform.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/_merge.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/_path_template.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/_predicate.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/_write_policy.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_dtype.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_file_writer.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_frame.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_historify.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_predicate.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_reader.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_schema.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_streaming.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/_writer.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/polars/provider.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_dtype.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_historify.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_reader.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_schema.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/_writer.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/backends/spark/provider.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_backends/_polars.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_cleaners.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_options.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_paths.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_scope.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/checkpoint/_store.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/compiler/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/compiler/_filter.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/compiler/_plan.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/compiler/_validators.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/_format.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/_read_options.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/_utils.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/_with_agent.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/_write_options.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/expr/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/expr/_params.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/expr/_predicate.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/expr/_refs.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_from.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_from_config.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/source/_specs.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_client.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_errors.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_file.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/_report.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_into.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_table.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/declarative/target/_temp.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/executor/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/executor/_agents.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/executor/_dispatcher.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/executor/_executor.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/io/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/io/_registry.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/io/sources/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_clickhouse.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_dynamodb.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_mongo.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/io/sources/_serialization.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/io/targets/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/io/targets/_clickhouse.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/lineage/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/lineage/_config.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/lineage/_observer.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/lineage/_records.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/lineage/sinks/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/lineage/sinks/_table.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/lineage/sinks/_writer.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/maintenance/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/maintenance/_builder.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/maintenance/_ops.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/maintenance/_protocol.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/maintenance/_runner.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/maintenance/_step.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/maintenance/backends/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/pipeline/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_generics.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_params.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_pipeline.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_process.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_sql.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_step.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_step_client.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/pipeline/_step_sql.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/runner/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/runner/_agents.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/runner/_providers.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/runner/_wiring.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/runner/config_loader.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/runner/core.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/runner/errors.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/runner/filtering.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/runtime/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/runtime/_config_values.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/runtime/contracts.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/schema/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/schema/_contract.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/schema/_schema.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/storage/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/storage/_config.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/storage/_file_locator.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/storage/_locator.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/storage/routing.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/testing/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/testing/_result.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/testing/_runners.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/testing/_scenario.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/testing/_stubs.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/etl/testing/spark.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/_async.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/_config.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/_ctx.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/_flow_yaml.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/_meta.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/_placeholders.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/_summary.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/deploy/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/deploy/_discovery.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/deploy/_schedule.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/deploy/_yaml_etls.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/deploy/entrypoint.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/flow/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/flow/_assemble.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/flow/_backfill.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/flow/_backfill_body.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/flow/_body.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/flow/_common.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/flow/_factory.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/flow/_hooks.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/flow/_maintenance.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/flow/_params.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/flow/_run_name.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/flow/_runtime.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/flow/_signature.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/flow/_stages.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/manifest/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/manifest/_model.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/manifest/_s3.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/manifest/_store.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/notify/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/notify/_event.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/notify/_factory.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/notify/_format.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/notify/_port.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/notify/_slack.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/notify/_sns.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/observer/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/observer/_flow.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/observer/_logging_bridge.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/observer/_manifest.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prefect/observer/_task_run.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prometheus/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prometheus/_instruments.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prometheus/adapter.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prometheus/kafka.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prometheus/lifecycle.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/prometheus/middleware.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/py.typed +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/_body.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/adapter.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/auth/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/auth/abc.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/auth/config.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/auth/jwt.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/auth/middleware.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/autocrud.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/compiler.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/config.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/constants.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/cors.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/errors.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/fastapi/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/fastapi/_errors.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/fastapi/_exclusions.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/fastapi/app.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/fastapi/health.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/fastapi/openapi.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/fastapi/response.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/fastapi/router_runtime.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/fastapi/sql.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/middleware.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/model.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/rest/rest_adapter.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_dlq.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_errors.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_operators.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/compiler/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/compiler/_compiler.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/core/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/core/_errors.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/core/_exceptions.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/core/_message.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/core/_tracing.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/core/_typing.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/graph/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/graph/_flow.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_codec.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_config.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_errors.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_key_resolver.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_message.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_record.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/_wire.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/client/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/client/_consumer.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/client/_producer.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/client/_protocol.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/client/_retry.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/message/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/message/_consumer.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/message/_producer.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/kafka/message/_protocol.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/mongo/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/mongo/_config.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/mongo/_event.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/mongo/_normalize.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_boundary.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_branches.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_broadcast.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_capabilities.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_decompose.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_expand_routes.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_expr_eval.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_fork.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_helpers.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_mongo.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_protocols.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_router.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_shape.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_sink.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_step.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_table/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_table/common.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_table/config.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/_with.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/nodes/refs.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/streaming/testing.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/testing/__init__.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/testing/agents.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/testing/golden.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/testing/http_harness.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/testing/in_memory.py +0 -0
- {loom_kernel-2.22.1 → loom_kernel-2.22.2}/src/loom/testing/repository_harness.py +0 -0
- {loom_kernel-2.22.1 → 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
|
|
@@ -916,6 +979,27 @@
|
|
|
916
979
|
`$ref` wherever they occur, for msgspec tagged structs and pydantic
|
|
917
980
|
discriminated unions alike, an optional (`X | Y | None`) union included.
|
|
918
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.
|
|
1002
|
+
|
|
919
1003
|
### prefect
|
|
920
1004
|
|
|
921
1005
|
- **prefect:** every log line the bridge sends carries the run's
|
|
@@ -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
|
)
|