loom-kernel 2.5.0__tar.gz → 2.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/CHANGELOG.md +119 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/PKG-INFO +3 -1
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/ai/artifacts.md +10 -2
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/ai/providers.md +36 -2
- loom_kernel-2.7.0/docs/architecture/clean-architecture.md +44 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/etl/pipelines.md +11 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/guides/etl.md +84 -1
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/pyproject.toml +6 -1
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/abc.py +16 -0
- loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/_a2a.py +79 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_capabilities.py +14 -10
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_engine.py +2 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_events.py +5 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_instructions.py +29 -12
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_mcp.py +28 -13
- loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/_models.py +137 -0
- loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/extras/__init__.py +8 -0
- loom_kernel-2.5.0/src/loom/ai/engines/pydantic_ai/_a2a.py → loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/extras/a2a.py +23 -64
- loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/extras/handlebars.py +31 -0
- loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/extras/mcp.py +8 -0
- loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/extras/skills.py +7 -0
- loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/providers/__init__.py +9 -0
- loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/providers/_shared.py +58 -0
- loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/providers/anthropic.py +18 -0
- loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/providers/bedrock.py +24 -0
- loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/providers/gateway.py +17 -0
- loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/providers/openai.py +18 -0
- loom_kernel-2.7.0/src/loom/ai/engines/pydantic_ai/providers/typesafe.py +31 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/errors.py +26 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/fastapi/response.py +3 -2
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/registry.py +11 -7
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_handle.py +1 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_lifecycle.py +1 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/gateway.py +3 -4
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/serializer.py +0 -3
- loom_kernel-2.7.0/src/loom/core/config/_boto3.py +22 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/_resolver_utils.py +36 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/secrets.py +4 -11
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/ssm.py +2 -11
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/runtime.py +2 -12
- loom_kernel-2.7.0/src/loom/core/plugins/optional.py +66 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/checkpoint/_backends/_polars.py +23 -36
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/checkpoint/_cleaners.py +4 -22
- loom_kernel-2.7.0/src/loom/etl/checkpoint/_options.py +128 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/checkpoint/_store.py +12 -2
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runner/_wiring.py +13 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/_flow_yaml.py +28 -1
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/_meta.py +35 -1
- loom_kernel-2.7.0/src/loom/prefect/_placeholders.py +126 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/deploy/_discovery.py +30 -1
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/deploy/_yaml_etls.py +10 -3
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_assemble.py +57 -3
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_backfill.py +1 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_backfill_body.py +50 -46
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_body.py +25 -23
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_common.py +21 -1
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_factory.py +1 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_maintenance.py +14 -13
- loom_kernel-2.7.0/src/loom/prefect/flow/_params.py +93 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_run_name.py +10 -22
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/testing/agents.py +3 -1
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/testing/runner.py +12 -1
- loom_kernel-2.7.0/tests/helpers/extras.py +50 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_a2a_auth_wiring.py +2 -1
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_a2a_capability.py +8 -6
- loom_kernel-2.7.0/tests/unit/ai/engines/test_missing_extras.py +69 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_binding.py +65 -2
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_errors.py +2 -2
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_instructions.py +4 -4
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_limits.py +1 -1
- loom_kernel-2.7.0/tests/unit/ai/engines/test_pydantic_ai_provider_details.py +90 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/test_agent_handle.py +40 -4
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_skills_extra.py +2 -2
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_bootstrap/test_bootstrap_resolvers.py +3 -4
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_default_resolvers.py +4 -5
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_secrets.py +3 -1
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/observability/test_runtime.py +7 -15
- loom_kernel-2.7.0/tests/unit/core/plugins/test_optional.py +38 -0
- loom_kernel-2.7.0/tests/unit/etl/checkpoint/backends/test_checkpoint_polars.py +119 -0
- loom_kernel-2.7.0/tests/unit/etl/checkpoint/test_cleaners.py +179 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_backend_factory.py +38 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_runner_resolvers.py +3 -4
- loom_kernel-2.7.0/tests/unit/prefect/test_flow_trigger.py +248 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_maintenance_flow.py +1 -1
- loom_kernel-2.7.0/tests/unit/prefect/test_placeholders.py +186 -0
- loom_kernel-2.7.0/tests/unit/prefect/test_run_params.py +441 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_yaml_etls.py +19 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_fastapi_auto_resolvers.py +3 -4
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_runner_resolvers.py +4 -6
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/uv.lock +50 -18
- loom_kernel-2.5.0/docs/architecture/clean-architecture.md +0 -10
- loom_kernel-2.5.0/src/loom/ai/engines/pydantic_ai/_models.py +0 -210
- loom_kernel-2.5.0/src/loom/prefect/_placeholders.py +0 -83
- loom_kernel-2.5.0/tests/unit/etl/checkpoint/backends/test_checkpoint_polars.py +0 -33
- loom_kernel-2.5.0/tests/unit/etl/checkpoint/test_cleaners.py +0 -81
- loom_kernel-2.5.0/tests/unit/prefect/test_placeholders.py +0 -93
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/.github/workflows/ci-main.yml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/.github/workflows/ci-pr.yml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/.github/workflows/docs.yml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/.github/workflows/release.yml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/.gitignore +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/.pre-commit-config.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/.readthedocs.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/LICENSE +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/Makefile +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/README.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/codecov.yml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docker-compose.local.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/_static/.gitkeep +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/_static/custom.css +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/_static/logo-transparent.png +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/_static/logo.svg +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/ai/a2a.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/ai/mcp.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/ai/observability.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/ai/overview.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/architecture/adr/README.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/architecture/overview.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/conf.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/etl/examples.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/etl/testing.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/examples-repo/index.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/getting-started/etl.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/getting-started/rest.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/getting-started/streaming.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/guides/autocrud.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/guides/celery.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/guides/fake-repo-examples.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/guides/quickstart.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/guides/use-case-dsl.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/index.rst +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/overview.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/reference/api/ai.rst +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/reference/api/core.rst +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/reference/api/etl.rst +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/reference/api/repository.rst +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/reference/api/rest.rst +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/reference/api/streaming.rst +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/reference/api/testing.rst +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/reference/index.rst +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/requirements.txt +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/autocrud.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/cache.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/celery.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/examples.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/identity.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/persistence-backends.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/sql.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/testing.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/rest/use-case-dsl.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/streaming/bytewax.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/streaming/delivery.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/docs/streaming/tracing.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/scripts/ci/merge_test_results.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/scripts/release/README.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/sonar-project.properties +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/_concurrency.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/_filters.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/_roles.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/_startup.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/_transport.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/_usecase.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/a2a/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/a2a/_binding.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/a2a/_handlers.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/a2a/_rpc.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/a2a/card.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/a2a/events.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/a2a/server.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/_compiler.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/_plan.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_capabilities.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_conversation.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_feedable.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_hook.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_instructions.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_limits.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_model_role.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_output.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/compiler/phases/_state.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/declarative/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/declarative/_envelope.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/declarative/_schema.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/declarative/_v1.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/declarative/schemas/agent-spec-v1.schema.json +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/describe.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_escape.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_guards.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_history.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_limits.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_native.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_output.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_returns.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_schemas.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/_spec.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/engines/pydantic_ai/provider.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/fastapi/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/fastapi/endpoints.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/fastapi/streaming.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/inference.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/remote_auth.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_bounded.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_chain.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_conversation.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_grants.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_health.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_hooks.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_limits.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/runtime/_mcp.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/validate/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/ai/validate/__main__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/celery/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/celery/auto.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/celery/bootstrap.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/celery/config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/celery/constants.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/celery/runner.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/celery/service.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/async_bridge.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/backend/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/backend/core_model.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/backend/protocol.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/backend/sqlalchemy.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/bootstrap/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/bootstrap/bootstrap.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/bootstrap/kernel.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/_batching.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/_single_flight.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/abc/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/abc/backend.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/abc/config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/abc/dependency.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/calls.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/codec.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/decorators.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/dependency.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/keys.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/memory.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/repository.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/result_codec.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/cache/wiring.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/command/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/command/adapter.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/command/base.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/command/field.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/command/introspection.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/compiler.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/_includes.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/binder.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/configurable.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/context.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/keys.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/loader.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/model.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/observability.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/config/resolver.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/contracts/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/contracts/manifest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/di/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/di/container.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/di/scope.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/discovery/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/discovery/_utils.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/discovery/base.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/discovery/interfaces.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/discovery/manifest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/discovery/modules.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/engine/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/engine/compilable.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/engine/compiler.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/engine/events.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/engine/executor.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/engine/metrics.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/engine/plan.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/engine/post_commit.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/errors/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/errors/codes.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/errors/errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/expr/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/expr/eval.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/expr/nodes.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/expr/refs.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/identity/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/identity/context.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/identity/identity.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/identity/issuer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/identity/wire.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/introspection/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/introspection/base.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/introspection/describe.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/job/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/job/callback.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/job/context.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/job/handle.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/job/job.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/job/service.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/logger/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/logger/abc.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/logger/config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/logger/registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/logger/structlogger.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/_loom_type.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/base.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/convert.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/enums.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/field.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/introspection.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/projection.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/relation.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/struct.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/timestamped.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/types.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/model/types_postgres.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/event.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/observer/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/observer/noop.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/observer/otel.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/observer/structlog.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/otel_ids.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/protocol.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/span.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/observability/topology.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/persistence/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/persistence/abc.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/persistence/none.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/persistence/registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/plugins/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/plugins/entrypoints.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/projection/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/projection/loaders.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/projection/runtime.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/abc/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/abc/cursor.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/abc/errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/abc/query.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/abc/query_compiler.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/abc/repo_for.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/abc/repository.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/abc/session_scope.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/dynamodb/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/dynamodb/backend.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/dynamodb/registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/dynamodb/repository.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/dynamodb/uow.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mongo/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mongo/backend.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mongo/ids.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mongo/query_compiler.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mongo/registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mongo/repository.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mongo/uow.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mongo/values.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/mutation.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/registration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/backend.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/integrity.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/loaders.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/mixins.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/model.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/profile_loader.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/projection.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/compiler.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/cursor.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/filters.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/ordering.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/paths.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/query_compiler/subquery.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/repository.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/session_manager.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/transactional.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/repository/sqlalchemy/uow.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/response/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/response/base.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/routing/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/routing/ref.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/routing/resolver.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/runner.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/schema/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/schema/schema_mode.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/abc/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/abc/contracts.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/abc/errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/caller_bound.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/clickhouse/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/clickhouse/_client.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/clickhouse/executor.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/clickhouse/registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/roles.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/sql/service.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/symbols.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/tracing/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/tracing/context.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/transaction.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/transport/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/transport/adapter.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/uow/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/uow/abc.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/uow/context.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/_predicates.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/agent_markers.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/compute.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/constants.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/factory.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/field_ref.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/invoker.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/keys.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/markers.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/mcp_markers.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/rule.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/core/use_case/use_case.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_format_registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_historify/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_historify/_common.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_historify/_log.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_historify/_ops.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_historify/_snapshot.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_historify/_transform.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_merge.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_path_template.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_predicate.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_schema_aligner/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_schema_aligner/_aligner.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_schema_aligner/_policy.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/_write_policy.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_dtype.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_file_writer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_historify.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_predicate.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_reader.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_schema.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_schema_aligner.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_streaming.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/_writer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/polars/provider.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/spark/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/spark/_dtype.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/spark/_historify.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/spark/_reader.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/spark/_schema.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/spark/_schema_aligner.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/spark/_writer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/backends/spark/provider.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/checkpoint/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/checkpoint/_backends/_spark.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/checkpoint/_paths.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/checkpoint/_scope.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/compiler/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/compiler/_binding.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/compiler/_compiler.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/compiler/_errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/compiler/_plan.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/compiler/_validators.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/compiler/_validators_plan.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/compiler/_validators_step.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/_format.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/_read_options.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/_utils.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/_write_options.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/expr/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/expr/_params.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/expr/_predicate.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/expr/_predicate_dialect.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/expr/_refs.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/source/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/source/_from.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/source/_from_clickhouse.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/source/_from_dynamodb.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/source/_from_mongo.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/source/_specs.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_client.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_file.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_history/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_history/_builder.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_history/_enums.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_history/_errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_history/_report.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_history/_spec.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_into.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_schema_mode.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_table.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/declarative/target/_temp.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/executor/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/executor/_dispatcher.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/executor/_executor.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/_registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_clickhouse.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_dynamodb.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_dynamodb_items.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_dynamodb_predicate.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_mongo.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_mongo_batch.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_mongo_bson.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_mongo_predicate.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/sources/_serialization.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/targets/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/io/targets/_clickhouse.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/lineage/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/lineage/_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/lineage/_observer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/lineage/_records.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/lineage/sinks/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/lineage/sinks/_protocol.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/lineage/sinks/_table.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/lineage/sinks/_writer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/maintenance/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/maintenance/_builder.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/maintenance/_ops.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/maintenance/_protocol.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/maintenance/_runner.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/maintenance/_step.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/maintenance/backends/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/maintenance/backends/_delta_rs.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/_generics.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/_params.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/_pipeline.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/_process.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/_sql.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/_step.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/_step_client.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/pipeline/_step_sql.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runner/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runner/_providers.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runner/config_loader.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runner/core.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runner/errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runner/filtering.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runtime/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/runtime/contracts.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/schema/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/schema/_contract.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/schema/_schema.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/storage/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/storage/_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/storage/_file_locator.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/storage/_locator.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/storage/routing.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/testing/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/testing/_result.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/testing/_runners.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/testing/_scenario.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/testing/_stubs.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/etl/testing/spark.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/_async.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/_ctx.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/_summary.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/deploy/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/deploy/_schedule.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/deploy/entrypoint.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_hooks.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_runtime.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_signature.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/flow/_stages.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/manifest/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/manifest/_model.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/manifest/_s3.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/manifest/_store.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/notify/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/notify/_event.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/notify/_factory.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/notify/_port.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/notify/_slack.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/observer/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/observer/_flow.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/observer/_logging_bridge.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/observer/_manifest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prefect/observer/_task_run.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prometheus/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prometheus/_instruments.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prometheus/adapter.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prometheus/kafka.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prometheus/lifecycle.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/prometheus/middleware.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/py.typed +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/_body.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/adapter.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/auth/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/auth/abc.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/auth/config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/auth/jwt.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/auth/middleware.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/autocrud.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/compiler.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/constants.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/cors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/_errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/_exclusions.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/app.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/auto.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/health.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/openapi.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/response.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/router_runtime.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/fastapi/sql.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/middleware.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/model.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/rest/rest_adapter.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_adapter.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_batch_spans.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_commit_tracker.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_dlq.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_error_boundary.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_operators.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_resource_manager.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_runtime_io.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/_sink_registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/_shared.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/boundary.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/dispatcher.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/routing.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/scopes.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/shapes.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/steps.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/handlers/storage.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/bytewax/runner.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/compiler/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/compiler/_bindings.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/compiler/_compiler.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/compiler/_errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/compiler/_plan.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/compiler/phases/build_plan.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/compiler/phases/validate.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/core/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/core/_errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/core/_exceptions.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/core/_message.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/core/_tracing.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/core/_typing.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/graph/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/graph/_flow.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/_codec.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/_errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/_key_resolver.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/_message.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/_record.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/_wire.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/client/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/client/_consumer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/client/_producer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/client/_protocol.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/client/_retry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/message/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/message/_consumer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/message/_producer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/kafka/message/_protocol.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/mongo/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/mongo/_bytewax_source.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/mongo/_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/mongo/_event.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/mongo/_normalize.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_boundary.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_branches.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_broadcast.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_capabilities.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_decompose.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_expand_routes.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_expr_eval.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_fork.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_helpers.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_mongo.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_protocols.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_router.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_shape.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_sink.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_step.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_table/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_table/common.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_table/config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/_with.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/nodes/refs.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/streaming/testing.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/testing/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/testing/golden.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/testing/http_harness.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/testing/in_memory.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/src/loom/testing/repository_harness.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/contract/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/contract/ai/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/contract/ai/test_contract_fake.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/contract/ai/test_contract_pydantic_ai.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/contract/observability/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/contract/observability/test_otel_sdk_contract.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/config/split_storage/common.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/config/split_storage/original.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/config/split_storage/storage.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/config/split_storage/tables/billing.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/config/split_storage/tables/sales.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/prefect/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/prefect/etls/billing.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/prefect/etls/daily_orders.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/prefect/etls/orders_reconcile.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/prefect/pipelines.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/fixtures/prefect/raising.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/golden/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/golden/baselines/.gitkeep +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/golden/outputs/.gitkeep +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/golden/plans/.gitkeep +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/helpers/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/helpers/pydantic_ai_engine.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/helpers/remote_auth_plugin.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/helpers/spans.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/_agents_only_app.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/_entrypoints.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/_no_marker_app.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/mcp_stdio_server.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_a2a.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_agent_call_chain.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_agent_marker_grants_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_agent_marker_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_agent_marker_test_double.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_agent_specs_source.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_auto_a2a.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_auto_agents_only.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_auto_client_factories.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_auto_gate.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_auto_without_sqlalchemy.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_capabilities.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_conversation.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_describe.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_endpoints.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_grant_wiring.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_health_probe.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_hooks.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_limits.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_live_provider.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_mcp_connect_timeout_wiring.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_mcp_end_to_end.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_mcp_session_recovery.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_mcp_shared_connection.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_mcp_stdio_end_to_end.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_native_escape_hatch_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_no_agent_marker_containment.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_provider_portability.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_remote_auth_wiring.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_runtime.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_runtime_remote_clients.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_state_and_instructions.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_streaming.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_transport.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_use_case_mcp_end_to_end.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_use_case_mcp_health_gap.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_use_case_mcp_marker_test_double.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_use_case_mcp_resolver.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_use_case_mcp_runtime.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/ai/test_zero_agent_use_case_mcp.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/celery_bootstrap/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/celery_bootstrap/config/conf.celery.integration.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/celery_bootstrap/test_auto_create_app_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/celery_bootstrap/test_bootstrap_worker.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/bootstrap/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/bootstrap/test_bootstrap_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/repository/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/repository/sqlalchemy/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/repository/sqlalchemy/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/repository/sqlalchemy/test_cache_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/repository/sqlalchemy/test_repository_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/rest/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/rest/test_auto_interface_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/rest/test_fastapi_app_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/rest/test_rest_error_mapping.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/rest/test_rest_observability.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/use_case/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/use_case/test_caller_bound_sql_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/use_case/test_custom_repository_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/core/use_case/test_use_case_crud_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/etl/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/etl/test_runner_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/config/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/config/conf.interfaces.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/config/conf.manifest.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/config/conf.modules.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/config/conf.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/main.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/manifest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/category/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/category/model.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/category/schemas.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/interface.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/jobs.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/model.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/relations.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/repository.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/repository_contract.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/review/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/review/model.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/review/schemas.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/schemas.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/fake_repo/product/use_cases.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_bulk.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_datetime.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_pagination.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_query.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_read.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_transactions.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_uow.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/persistence/mongo/test_write.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/rest/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/rest/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/rest/test_yaml_interfaces.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/sql/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/sql/init/01_users_roles.sql +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/sql/test_clickhouse_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/streaming/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/streaming/kafka/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/streaming/kafka/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/streaming/kafka/test_partitioned_source_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/streaming/kafka/test_source_contract_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/streaming/test_into_table_integration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/support/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/integration/support/logical_repo_fixtures.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/_resolver_stubs.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/compiler/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/compiler/test_state_phase.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_capability_span_nesting.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_native_tools.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_conversation.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_cost_enforcement.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_escape_hatch.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_failures.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_mcp_concurrency.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_mcp_session_recovery.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_mcp_timeouts.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_native_output.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_output_check.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_shape_override.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_state.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_streaming_off.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_translation.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_usage_limits.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_pydantic_ai_user_prompt.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_python_capability.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_streaming_capability_conflict.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/engines/test_usage_propagation.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fastapi/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fastapi/test_state_decode.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/README.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/capability-a2a-agent/agent.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/capability-mcp-agent/agent.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/capability-native-agent/agent.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/capability-python-agent/agent.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/capability-skills-agent/agent.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/capability-skills-agent/skills/release-notes/SKILL.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/capability-sql-agent/agent.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/capability-usecase-agent/agent.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/full-agent/agent.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/full-agent/skills/severity-rubric/SKILL.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/minimal-agent/agent.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/corpus_v1/output-type-ref-agent/agent.yaml +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/conversations.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/incidents.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/invoices.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/pydantic_invoices.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/triage.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/domain/unsupported.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/broken.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/geo.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/metrics.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/fake_pkgs/myapp/tools/params.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/skills_root/shared/group-changes/SKILL.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/fixtures/skills_root/shared/tone-of-voice/SKILL.md +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_capabilities.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_conversation.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_hook.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_instructions.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_limits.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_model_role.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_output.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_remote_auth_plan.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/phases/test_validate_cli.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/test_grants.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/test_hook_command.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/test_lifecycle_mcp_wiring.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/test_loader_command.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/test_mcp_session.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/test_native_guard.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/runtime/test_state_channel.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_a2a_base_url.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_a2a_card.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_agent_handle_contract.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_compiler.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_compiler_offline.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_concurrency.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_declarative_conversation.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_declarative_envelope.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_declarative_hook.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_declarative_instructions.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_declarative_native.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_declarative_policy_caps.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_declarative_state.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_describe.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_error_catalogue_totality.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_error_factories.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_fake_engine.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_identity_notice.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_loopback_plaintext.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_native_capability.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_no_extras_import.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_public_surface.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_remote_auth.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_remote_auth_settings.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_run_error_hook.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_schema_emission.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_secret_containment.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_spec_v1_corpus.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ai/test_usecase_helpers.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_bootstrap/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_bootstrap/test_agent_marker_rejection.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_bootstrap/test_async_runtime.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_bootstrap/test_bootstrap.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_bootstrap/test_bootstrap_cache.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_bootstrap/test_bootstrap_without_sqlalchemy.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_bootstrap/test_mcp_marker_rejection.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_jobs/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_jobs/test_auto.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_jobs/test_celery_service.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_jobs/test_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_jobs/test_identity_propagation.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/celery_jobs/test_runner.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ci/test_merge_test_results.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/ci/test_workflow_supply_chain_contract.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/backend/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/backend/test_backend_compiler.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/bootstrap/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/bootstrap/test_bootstrap.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/bootstrap/test_bootstrap_metrics.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/bootstrap/test_kernel.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/_doubles.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/_toolset_module.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_bounded_memory.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_cache_call.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_cache_call_decorator.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_cache_call_toolset.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_cache_import_containment.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_cache_query_codec.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_cached_repository.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_cached_repository_pydantic.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_call_codec.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_config_wiring.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_dependency_bump.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_gateway_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_gateway_typed_get.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_gateway_write_errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_index_refill.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_invalidation_granularity.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_single_flight.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_ttl_jitter.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/cache/test_wiring.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/command/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/command/test_command_base.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/command/test_command_field.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/command/test_command_patch.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/command/test_introspection.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_binder.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_configurable.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_context.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_includes.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_keyed_collections.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_resolver_utils.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/config/test_ssm.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/di/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/di/test_container.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/discovery/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/discovery/test_interfaces.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/discovery/test_manifest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/discovery/test_modules.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/_lifecycle_doubles.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/contract/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/contract/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/contract/test_dispatch.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/contract/test_lifecycle.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/contract/test_nesting.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_agent_marker.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_audit_regressions.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_caller_binding.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_compiler.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_compiler_mcp_marker.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_executor.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_executor_mcp_marker.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_executor_trace.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_executor_uow.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_metrics.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_plan.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_plan_resolution.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_post_commit.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_post_commit_shield.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/engine/test_post_commit_teardown_guard.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/errors/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/errors/test_errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/expr/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/expr/test_expr.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/identity/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/identity/test_context.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/identity/test_identity.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/identity/test_wire.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/introspection/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/introspection/test_describe.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/job/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/job/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/job/test_callback.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/job/test_context.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/job/test_handle.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/job/test_inline_service.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/job/test_job.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/logger/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/logger/test_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/logger/test_registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/test_annotation_resolution.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/test_convert.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/test_introspection_helpers.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/test_loom_type.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/test_loom_type_import_containment.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/test_model.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/test_struct.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/model/test_timestamped.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/observability/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/observability/test_message_id_generator.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/observability/test_observers.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/observability/test_optional_otel_sdk.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/observability/test_otel_loader_branches.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/observability/test_provider_modes.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/observability/test_tracing_characterisation.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/persistence/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/persistence/test_registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/plugins/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/plugins/test_entrypoints.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/plugins/test_import_containment.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/projection/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/projection/test_descriptors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/projection/test_runtime.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/abc/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/abc/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/abc/test_cursor.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/abc/test_query.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/abc/test_repository_contract.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/test_bulk.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/test_cache.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/test_pagination.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/test_query.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/test_read.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/test_uow.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/contract/test_write.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/dynamodb/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/dynamodb/_fake.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/dynamodb/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/dynamodb/test_backend.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/dynamodb/test_registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/dynamodb/test_repository.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/dynamodb/test_uow.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/_fake.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/test_backend.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/test_fake_collection.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/test_query_compiler.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/test_registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/test_repository.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/mongo/test_uow.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_backend.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_bulk_create.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_cursor_pagination.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_loaders.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_offset_pagination.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_query_compiler_protocol.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_repository.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_transaction_signal.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_transactional.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_transactional_post_commit.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_transactional_shield.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/sqlalchemy/test_typed_columns.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/repository/test_registration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/routing/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/routing/test_routing.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/_fakes.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_caller_bound.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_clickhouse_executor.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_clickhouse_transport.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_isolation.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_null_service.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_pagination_limits.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_registry_lifecycle.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/sql/test_role_policy.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/test_async_bridge.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/test_compiler_contracts.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/test_runner_contracts.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/tracing/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/tracing/test_context.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/uow/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/uow/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/uow/test_executor_uow.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/uow/test_sqlalchemy_uow.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/uow/test_uow_protocols.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/test_compute.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/test_factory.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/test_field_ref.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/test_invoker.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/test_markers.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/test_mcp_markers.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/test_rule.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/core/use_case/test_use_case.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/_historify_contract.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_empty_write_warning.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_historify_common.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_path_template.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_apply_schema.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_backend.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_dtype.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_file_writer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_historify_polars.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_predicate_pushdown.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_provider_optional_mongo.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_reader_columns.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_reader_json_columns.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_step_execution.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_streaming_write.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_update_writer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_upsert_writer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_writer_null_schema.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_polars/test_writer_to_frame.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_spark/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_spark/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_spark/test_dtype.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_spark/test_historify_spark.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_spark/test_session_configuration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_spark/test_spark_apply_schema.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_spark/test_step_execution.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_spark/test_writer_to_frame.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_unsupported_format_contract.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/backends/test_write_policy_historify.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/checkpoint/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/checkpoint/backends/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/checkpoint/test_checkpoint_paths.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/checkpoint/test_store.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/client_step/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/client_step/test_client_step.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_catalog_validator.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_compiler.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_compiler_catalog.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_compiler_upsert.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_errors_additional_factories.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_errors_runtime_factories.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_file_template_validator.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_historify_validator.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_param_exprs_validator.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_plan_traversal.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_step_validator.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_structural.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_temp_validator.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/compiler/test_upsert_validator.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_clickhouse_reader.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_dynamodb_predicate.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_dynamodb_reader.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_from_clickhouse.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_from_dynamodb.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_from_mongo.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_mongo_predicate.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_mongo_reader.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/sources/test_mongo_reader_memory.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/targets/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/targets/test_clickhouse_writer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/targets/test_into_clickhouse.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/test_history_target.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/test_source.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/test_source_json.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/test_source_options.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/test_target.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/test_utils.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/test_variants.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/io/test_writer_registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/lineage/test_observer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/lineage/test_records.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/lineage/test_store.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/maintenance/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/maintenance/backends/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/maintenance/backends/test_delta_rs.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/maintenance/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/maintenance/test_builder.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/maintenance/test_runner.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/maintenance/test_step.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/pipeline/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/pipeline/test_pipeline_process.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/pipeline/test_proxy.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/pipeline/test_step.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/schema/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/schema/test_contract.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/schema/test_schema.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/schema/test_table.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/sql/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/sql/test_merge.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/sql/test_predicate.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/sql/test_predicate_dialect.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/sql/test_sql_runtime.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_io_protocols.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_locator.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_observability_and_protocols.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_route_build.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_schema_readers.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_storage_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_storage_config_mapping.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/storage/test_storage_profiles.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_config_loader.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_executor.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_executor_tracing.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_format_registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_module_contracts.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_public_api_discovery.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_record_schema_coverage.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_runner.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_runner_errors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_spark_testing.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/test_split_storage.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/testing/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/testing/test_runners.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/testing/test_scenario_and_stubs.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/etl/testing/test_spark_helpers.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_backfill_flow.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_ctx.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_discovery_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_entrypoint.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_etl_flow.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_logging_bridge.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_manifest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_manifest_s3.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_notify.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_observer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_task_run_observer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prefect/test_yaml_loader.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prometheus/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prometheus/test_adapter.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prometheus/test_instruments.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/prometheus/test_middleware.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/release/test_release_workflow_contract.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/_fixture_app.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_app_hardening.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_auth_middleware.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_auth_rejection_logging.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_autocrud.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_autocrud_capabilities.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_cors.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_create_app_cache.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_fastapi_auto_agent_markers.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_fastapi_auto_logger.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_fastapi_auto_mcp_markers.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_fastapi_auto_persistence.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_health.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_jwt_issuer.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_jwt_middleware.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_middleware.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_persistence_boundary.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_pydantic_adapter.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_request_hardening.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_response.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_rest_adapter.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_rest_compiler.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_rest_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_rest_model.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_route_rbac.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_router_identity.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_router_runtime.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_sql_container_registration.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_sql_endpoint.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_sql_endpoint_auth_gate.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_sql_endpoint_roles.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/rest/test_sql_serialization.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/cases.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_adapter.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_batch_key.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_bytewax_dispatcher.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_collect_batch.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_dlq.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_error_boundary.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_fanout_accounting.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_import_without_sqlalchemy.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_operators.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_resource_manager.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_runner.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_runtime_io.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_runtime_sink.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_runtime_source.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_sink_registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_steps.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_storage.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/bytewax/test_storage_trace_characterisation.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/cases.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_async_walk.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_basics.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_clickhouse_sink_validation.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_config_bindings.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_delivery.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_error_codes.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_mongo_source.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_multi_source.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_router.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_window.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/compiler/test_with.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/contracts/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/contracts/cases.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/contracts/test_boundary.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/contracts/test_message.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/contracts/test_mongo_contracts.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/contracts/test_multi_boundary.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/contracts/test_steps.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/cases/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/cases/batch.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/cases/explode.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/cases/fork.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/cases/router.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/cases/shared.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/cases/simple.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/test_compiler_examples.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/flows/test_flow_examples.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/cases.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/fakes.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_client.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_coordinator_retry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_key_resolver.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_message.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_message_client.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_multi_wire.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_observability.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_settings.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_source_decode_parity.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/kafka/test_wire.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/mongo/test_bytewax_source.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/nodes/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/nodes/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/nodes/test_broadcast.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/nodes/test_delta_config.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/nodes/test_logging.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/nodes/test_sink_protocol_typing.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/nodes/test_table_package.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/cases.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/conftest.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/test_message_lifecycle_spans.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/test_multiworker_trace_continuity.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/test_observability_runner.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/test_outbound_topic_terminal_spans.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/test_protocols.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/test_registry.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/observability/test_structlog.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/support/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/support/flow_cases.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/test_branch_indexing.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/test_expand_routes.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/test_fork.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/test_otel_observability.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/test_routing.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/test_testing_mongo.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/streaming/test_with.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/test_boundary_calls_containment.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/test_no_sqlalchemy_import.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/test_packaging_extras.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/testing/__init__.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/testing/test_golden.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/testing/test_http_harness.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/testing/test_identity_harness.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/testing/test_in_memory.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/testing/test_lazy_exports.py +0 -0
- {loom_kernel-2.5.0 → loom_kernel-2.7.0}/tests/unit/testing/test_runner.py +0 -0
|
@@ -31,6 +31,43 @@
|
|
|
31
31
|
|
|
32
32
|
### ai
|
|
33
33
|
|
|
34
|
+
- **ai:** `provider: typesafe` binds TypeSafe's Jev, a decision model that
|
|
35
|
+
fills a typed output from the state it is given and never writes text, so a
|
|
36
|
+
role whose answer is a choice or a verdict can run on it. Extra
|
|
37
|
+
`ai-typesafe` (pydantic-ai 2.45 or later); `credentials_ref` names the
|
|
38
|
+
variable holding the API key, `endpoint` overrides the base URL. pydantic-ai
|
|
39
|
+
fills a TypeSafe output by tool alone, so a binding pinning `output_mode:
|
|
40
|
+
native` fails start-up with the new `OUTPUT_MODE_UNSUPPORTED`, instead of
|
|
41
|
+
being refused by the model on every request.
|
|
42
|
+
- **core:** `loom.core.plugins.optional.import_optional` is the one way loom
|
|
43
|
+
loads a module that needs an optional extra: the island imports its SDK
|
|
44
|
+
at the top, the selector loads the island by name, and the island's
|
|
45
|
+
`ImportError` becomes a `MissingExtraError` naming the extra. The rule is
|
|
46
|
+
written in `docs/architecture/clean-architecture.md`.
|
|
47
|
+
- **ai:** each pydantic-ai provider is an island under
|
|
48
|
+
`loom.ai.engines.pydantic_ai.providers` (`bedrock`, `openai`, `anthropic`,
|
|
49
|
+
`gateway`, `typesafe`), and each optional extra of the engine one under
|
|
50
|
+
`loom.ai.engines.pydantic_ai.extras` (`mcp`, `a2a`, `skills`,
|
|
51
|
+
`handlebars`): the one module importing its SDK. `_models.py` keeps the
|
|
52
|
+
binding table and loads the island through `require_provider_sdk`, now a
|
|
53
|
+
reading of `import_optional`; the MCP toolset, the A2A client, the skills
|
|
54
|
+
capability and the templating check load theirs the same way. No
|
|
55
|
+
behaviour change: `PROVIDER_UNKNOWN`, `PROVIDER_NOT_INSTALLED`,
|
|
56
|
+
`PROVIDER_SETTING_MISSING` and `TEMPLATE_EXTRA_MISSING` fire exactly as
|
|
57
|
+
before.
|
|
58
|
+
- **core:** boto3 is an island too, `loom.core.config._boto3`: the SSM and
|
|
59
|
+
Secrets Manager resolvers load it on first use and fail with `ConfigError`
|
|
60
|
+
naming `config-ssm` when it is absent, instead of a module-level `None`
|
|
61
|
+
sentinel checked later. `aiocache` and `prometheus-client` are required
|
|
62
|
+
dependencies, so `CacheGateway` and `ObservabilityRuntime` import them at
|
|
63
|
+
the top like any other, dropping an `importlib.import_module("aiocache")`
|
|
64
|
+
and a `None` sentinel that guarded nothing. Tests that stood in for an
|
|
65
|
+
absent or stubbed SDK now go through `tests/helpers/extras.py`.
|
|
66
|
+
- **ai:** `AgentAnswer`, `AgentResult` and the `final` event carry `provider_details`: what
|
|
67
|
+
the provider reported about the final answer beyond the answer itself,
|
|
68
|
+
verbatim — Jev's confidence and probabilities per field, another
|
|
69
|
+
provider's finish reason — or `None`. In process only: the `/run` body and
|
|
70
|
+
the `final` frame keep their four keys, as `messages` taught them to.
|
|
34
71
|
- **ai:** `output.type_ref` and `deps_type` accept a strict
|
|
35
72
|
`pydantic.BaseModel` (`model_config["extra"] == "forbid"`) wherever they
|
|
36
73
|
accept a `msgspec.Struct`. A pydantic output is handed to pydantic-ai as
|
|
@@ -51,6 +88,33 @@
|
|
|
51
88
|
boundaries already use; `LoomRestAdapter`'s Struct projection goes
|
|
52
89
|
through it too.
|
|
53
90
|
|
|
91
|
+
### prefect
|
|
92
|
+
|
|
93
|
+
- **prefect:** a deployment may run each time another one completes, inheriting
|
|
94
|
+
some of its parameters. The per-flow YAML takes an optional `trigger` block:
|
|
95
|
+
`after`, the upstream deployment as `<flow>/<deployment>` or, for a loom ETL
|
|
96
|
+
whose flow and deployment share its name, that name; and `inherit_params`, a
|
|
97
|
+
list of parameter names. The deployer registers it as a Prefect
|
|
98
|
+
`DeploymentEventTrigger` on `prefect.flow-run.Completed` whose related
|
|
99
|
+
resources must include both that flow and that deployment, since a deployment
|
|
100
|
+
name is only unique within its flow. Each inherited parameter is rendered, as
|
|
101
|
+
text, from the completed run's stored parameters, which loom records resolved,
|
|
102
|
+
so `${today-1d}` upstream reaches the downstream run as the concrete date.
|
|
103
|
+
Only fields declared exactly `str`, `date` or `datetime` can be inherited (a
|
|
104
|
+
null would render as `"None"`), and each must be stored on the upstream run,
|
|
105
|
+
that is declared under its YAML `params` or submitted: a value it only took
|
|
106
|
+
from a signature default renders as empty text, which a `str` field takes as
|
|
107
|
+
`""` and a `date` field fails to decode. Every other parameter takes the
|
|
108
|
+
deployment's default, and a placeholder among them resolves against the
|
|
109
|
+
downstream run's creation time. The block is decoded strictly (an unknown key,
|
|
110
|
+
a wrong type or an `after` with spaces around either part is refused) when the
|
|
111
|
+
flow is built and, for YAML declarations, as a `ConfigError` before any
|
|
112
|
+
deployment is registered. A trigger coexists with `schedule`, in which case
|
|
113
|
+
the ETL runs on both. If the upstream run failed to record its parameters, the
|
|
114
|
+
downstream run inherits the placeholder text and resolves it against its own
|
|
115
|
+
creation time. Without `trigger` the deployment is registered exactly as
|
|
116
|
+
before.
|
|
117
|
+
|
|
54
118
|
## ⚠ Behaviour changes
|
|
55
119
|
|
|
56
120
|
### core
|
|
@@ -96,6 +160,44 @@
|
|
|
96
160
|
OpenAPI schemas for request bodies and responses alike, matching the
|
|
97
161
|
untitled document a Struct always produced.
|
|
98
162
|
|
|
163
|
+
### prefect
|
|
164
|
+
|
|
165
|
+
- **prefect:** a placeholder counts from the run's scheduled start instead of
|
|
166
|
+
the wall clock. `${today-1d}`, `${yesterday}` and `${now±N}` counted from
|
|
167
|
+
`datetime.now()` inside the flow, so a queued run that started after
|
|
168
|
+
midnight, or a retry the next day, processed another day than its slot's.
|
|
169
|
+
`etl_flow`, `maintenance_flow` and `backfill_flow` (`start_from` included)
|
|
170
|
+
and the run name now resolve against the run's scheduled start
|
|
171
|
+
(`prefect.runtime.flow_run.scheduled_start_time`, read in UTC): the slot of
|
|
172
|
+
a scheduled run, the same slot on every retry, the creation time of a manual
|
|
173
|
+
run. A late run's `${now}` therefore covers up to its scheduled time, not up
|
|
174
|
+
to the moment it started. Outside a flow run the wall clock still applies.
|
|
175
|
+
The backfill finalize pass still pins `window_end` to the current chunk.
|
|
176
|
+
- **prefect:** resuming from the manifest now works for placeholder
|
|
177
|
+
parameters. The correlation id was computed from the resolved value, so
|
|
178
|
+
with `${now}` it carried the seconds of the clock and a retry never found
|
|
179
|
+
the manifest of the attempt before it; anchored, every attempt of a run
|
|
180
|
+
computes the same id. The id is now also computed from the decoded
|
|
181
|
+
parameters rather than the submitted ones, so a value and its recorded ISO
|
|
182
|
+
string key the same manifest. Two ids change: a `date` field submitted as
|
|
183
|
+
an ISO string (`"2026-09-21"` now keys `20260921T000000`, as the `date`
|
|
184
|
+
itself always did), and a `correlation_field` typed as a plain `Enum`,
|
|
185
|
+
which now keys the member's sanitised name (`Color_RED`) instead of its
|
|
186
|
+
submitted value (`red`); a `StrEnum` renders as its value and keeps its id.
|
|
187
|
+
Do not upgrade across a run you intend to resume from its manifest.
|
|
188
|
+
- **prefect:** the run records the parameters it resolved. Prefect stored and
|
|
189
|
+
showed the placeholder text, so nothing told which days a run processed.
|
|
190
|
+
After decoding, the flow updates its own run: the parameters the API stored
|
|
191
|
+
for it, with each placeholder replaced by its value (dates and datetimes in
|
|
192
|
+
ISO 8601, a backfill's `start_from` included); nothing is added. The UI
|
|
193
|
+
shows the concrete window, a run resubmitted from the UI ("Retry") or
|
|
194
|
+
copied reproduces it, and an automation reading `flow_run.parameters` gets
|
|
195
|
+
dates. A run that stores no placeholder makes no call, so a resubmitted run
|
|
196
|
+
makes none. A retry inside the same process (`retries`) still holds the
|
|
197
|
+
placeholders it started with and repeats the call with the same values,
|
|
198
|
+
which is harmless. The update is one attempt with a 10-second timeout; if
|
|
199
|
+
it fails, the flow logs it at `ERROR` in the run's logs and goes on.
|
|
200
|
+
|
|
99
201
|
## 🐛 Fixes
|
|
100
202
|
|
|
101
203
|
### core
|
|
@@ -130,6 +232,23 @@
|
|
|
130
232
|
The `etl-polars` extra now requires `polars>=1.24`, the release that
|
|
131
233
|
named that join option `nulls_equal`.
|
|
132
234
|
|
|
235
|
+
- **etl:** `storage.temp.storage_options` reaches the checkpoint write. A
|
|
236
|
+
pipeline declaring `aws_server_side_encryption` / `aws_sse_kms_key_id` /
|
|
237
|
+
`aws_sse_bucket_key_enabled` for its temporaries wrote them with the bucket
|
|
238
|
+
default encryption and said nothing: the filter guarding the fsspec cleanup
|
|
239
|
+
returned an empty mapping unless an `endpoint_url` was set, and forwarded
|
|
240
|
+
only endpoint and credentials when it was. The encryption options now
|
|
241
|
+
survive that filter with or without an endpoint, in either spelling
|
|
242
|
+
(lowercase or uppercase), and reach both halves of the atomic write — the
|
|
243
|
+
`sink_ipc` through object_store under their own names, and the rename, a
|
|
244
|
+
server-side copy, as `s3_additional_kwargs` botocore parameters. The read
|
|
245
|
+
path is untouched, decryption being server-side. Any other key of the
|
|
246
|
+
delta-rs mapping is still dropped, now logged at debug; the Spark checkpoint
|
|
247
|
+
backend cannot take them at all (it reads SSE from Hadoop's S3A conf) and
|
|
248
|
+
logs a warning when encryption is declared. The declared mapping is parsed
|
|
249
|
+
once, so the two halves never disagree: `aws_sse_bucket_key_enabled: "false"`
|
|
250
|
+
(or `"yes"`, `"on"`, `"1"`) yields the same flag on either side.
|
|
251
|
+
|
|
133
252
|
### ai
|
|
134
253
|
|
|
135
254
|
- **ai:** an MCP session that dies after it opened no longer fails every later
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: loom-kernel
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.7.0
|
|
4
4
|
Summary: Loom Python project
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Classifier: Typing :: Typed
|
|
@@ -27,6 +27,8 @@ Provides-Extra: ai-pydantic
|
|
|
27
27
|
Requires-Dist: pydantic-ai-slim<3,>=2; extra == 'ai-pydantic'
|
|
28
28
|
Provides-Extra: ai-templates
|
|
29
29
|
Requires-Dist: pydantic-ai-slim[spec]<3,>=2; extra == 'ai-templates'
|
|
30
|
+
Provides-Extra: ai-typesafe
|
|
31
|
+
Requires-Dist: pydantic-ai-slim[typesafe]<3,>=2.45; extra == 'ai-typesafe'
|
|
30
32
|
Provides-Extra: cache
|
|
31
33
|
Requires-Dist: aiocache<1.0,>=0.12; extra == 'cache'
|
|
32
34
|
Requires-Dist: omegaconf<3.0,>=2.3; extra == 'cache'
|
|
@@ -509,6 +509,14 @@ The hook's return value is a client-facing DTO delivered verbatim to the caller
|
|
|
509
509
|
— public on an `allow_anonymous` mount — so return a purpose-built struct,
|
|
510
510
|
never a domain entity.
|
|
511
511
|
|
|
512
|
+
In process, `AgentAnswer` and `AgentResult` also carry `provider_details`: what the provider
|
|
513
|
+
reported about the final answer beyond the answer itself, verbatim and opaque
|
|
514
|
+
to loom — a decision model's confidence and probabilities per field (see
|
|
515
|
+
[`typesafe`](providers.md#typesafe-fills-an-output-it-never-writes-text)),
|
|
516
|
+
another provider's finish reason — or `None` when it reported nothing. Like
|
|
517
|
+
`messages`, it never reaches the wire: the `/run` body and the `final` frame
|
|
518
|
+
keep their four keys.
|
|
519
|
+
|
|
512
520
|
The request body accepts an optional `conversation_id`: a string of 1 to 128
|
|
513
521
|
characters that loom never reads and never keys anything on. It selects the
|
|
514
522
|
conversation the loader receives when the artifact declares
|
|
@@ -797,8 +805,8 @@ accepts the parameter and ignores it, so scripted tests stay byte for byte.
|
|
|
797
805
|
|
|
798
806
|
Clients keep sending `{"prompt", "conversation_id"}`. The `/run` body has
|
|
799
807
|
exactly `output`, `usage`, `interaction_id` and `hook_result`; the `final`
|
|
800
|
-
frame has the same four keys; `messages`
|
|
801
|
-
frame. Over A2A the thread travels as the message's `contextId`, which the
|
|
808
|
+
frame has the same four keys; `messages` and `provider_details` appear in
|
|
809
|
+
neither, nor in any A2A frame. Over A2A the thread travels as the message's `contextId`, which the
|
|
802
810
|
runtime treats as the `conversation_id` (see [the A2A surface](a2a.md#conversations)).
|
|
803
811
|
|
|
804
812
|
### Two turns
|
|
@@ -25,6 +25,7 @@ with `MODEL_ROLE_UNBOUND`. It is never deferred to the first request.
|
|
|
25
25
|
| `openai` | `ai-openai` | — | the **name of the environment variable** holding the API key; omit it and the SDK reads its own default | OpenAI's own API |
|
|
26
26
|
| `anthropic` | `ai-anthropic` | — | the **name of the environment variable** holding the API key; omit it and the SDK reads its own default | Anthropic's own API |
|
|
27
27
|
| `gateway` | `ai-openai` | `endpoint` | the **name of the environment variable** holding the API key the endpoint expects | **any OpenAI-compatible endpoint** — see below |
|
|
28
|
+
| `typesafe` | `ai-typesafe` | — | the **name of the environment variable** holding the API key; omit it and the SDK reads `TYPESAFE_API_KEY` | TypeSafe's Jev — a decision model, see below |
|
|
28
29
|
|
|
29
30
|
Which **provider-run tools** each binding admits — web search, web fetch, code
|
|
30
31
|
execution — is decided by the model class of the installed engine, not by this
|
|
@@ -107,6 +108,37 @@ An artifact then picks one with `model_role: reasoning`. Moving that agent to a
|
|
|
107
108
|
cheaper model later is a one-line config change with no artifact edit and no
|
|
108
109
|
redeploy of the agent definition.
|
|
109
110
|
|
|
111
|
+
## `typesafe` fills an output, it never writes text
|
|
112
|
+
|
|
113
|
+
Jev, TypeSafe's model, is not a language model: given a state, it answers
|
|
114
|
+
typed questions about it with a calibrated probability each, and pydantic-ai
|
|
115
|
+
turns the agent's `output_type` into those questions. Bind it to a role whose
|
|
116
|
+
output is a strict class of `bool`, `Literal`/`Enum`, bounded `float` or
|
|
117
|
+
`IntEnum` fields; a `str` field, a text answer, a file in the prompt or a
|
|
118
|
+
tool taking arguments is refused by pydantic-ai before any request.
|
|
119
|
+
|
|
120
|
+
```yaml
|
|
121
|
+
ai:
|
|
122
|
+
models:
|
|
123
|
+
verdict:
|
|
124
|
+
provider: typesafe
|
|
125
|
+
model: jev-latest
|
|
126
|
+
credentials_ref: TYPESAFE_API_KEY
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
pydantic-ai fills a TypeSafe output through tool mode only, so this is the one
|
|
130
|
+
binding whose `output_mode` loom can check before the first request: pinning
|
|
131
|
+
`native` fails **start-up** with `OUTPUT_MODE_UNSUPPORTED`, naming the mode
|
|
132
|
+
the provider serves. `endpoint`, when set, replaces the API's base URL.
|
|
133
|
+
`streaming` changes nothing: Jev returns each answer whole.
|
|
134
|
+
|
|
135
|
+
What makes the answer worth having — the probability behind each field and
|
|
136
|
+
the margin by which it cleared its threshold — comes back on
|
|
137
|
+
`AgentAnswer.provider_details`, verbatim as pydantic-ai reports it
|
|
138
|
+
(`confidence`, `probabilities`, `scores`, `requests`), so a use case can act
|
|
139
|
+
on a firm verdict and escalate a doubtful one. In process only; see
|
|
140
|
+
[what the caller receives](artifacts.md#what-the-caller-receives).
|
|
141
|
+
|
|
110
142
|
## Credentials never live in the artifact — or in the config
|
|
111
143
|
|
|
112
144
|
`credentials_ref` is a **reference**, never the secret itself: an AWS profile
|
|
@@ -114,7 +146,7 @@ name for `bedrock`, and for the API-key providers the **name of an environment
|
|
|
114
146
|
variable** loom reads at start-up. An unset variable fails start-up with
|
|
115
147
|
`PROVIDER_SETTING_MISSING` naming it, instead of a 401 on the first call; omit
|
|
116
148
|
`credentials_ref` and each SDK reads its own default variable
|
|
117
|
-
(`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`).
|
|
149
|
+
(`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `TYPESAFE_API_KEY`).
|
|
118
150
|
|
|
119
151
|
The value is validated fail-closed at start-up — a value shaped like literal
|
|
120
152
|
secret material (`AKIA…`, `sk-…`, `ghp_…`, a URL with credentials in its
|
|
@@ -193,7 +225,9 @@ loom does not infer it per provider. Two consequences follow from that:
|
|
|
193
225
|
surfaces as `PROVIDER_UNAVAILABLE`. The provider's detail stays server-side,
|
|
194
226
|
in the logs; the caller sees the code. Loom cannot check a mode against a
|
|
195
227
|
model before the first request, so a wrong pin is found there, not at
|
|
196
|
-
start-up.
|
|
228
|
+
start-up. The one exception is `typesafe`, whose models pydantic-ai serves
|
|
229
|
+
by tool alone, so a `native` pin on it fails start-up with
|
|
230
|
+
`OUTPUT_MODE_UNSUPPORTED`.
|
|
197
231
|
|
|
198
232
|
## Asking for the answer whole, not as a stream
|
|
199
233
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Clean architecture rules
|
|
2
|
+
|
|
3
|
+
Project invariants:
|
|
4
|
+
|
|
5
|
+
1. Domain/Application layers must not import infrastructure.
|
|
6
|
+
2. Repositories are interface-driven.
|
|
7
|
+
3. Runtime side effects are explicit and observable.
|
|
8
|
+
4. Public APIs are typed and documented.
|
|
9
|
+
|
|
10
|
+
This contract is enforced through module boundaries and strict typing checks.
|
|
11
|
+
|
|
12
|
+
## Optional dependencies: islands
|
|
13
|
+
|
|
14
|
+
A dependency loom does not require lives behind an extra, and the code that
|
|
15
|
+
uses it follows one pattern, whatever the pillar:
|
|
16
|
+
|
|
17
|
+
1. **One optional dependency, one island.** An island is a module that
|
|
18
|
+
imports the vendor SDK at its top, with an ordinary `import`, and nothing
|
|
19
|
+
else in loom imports that SDK. The island builds what the SDK serves
|
|
20
|
+
(`loom.ai.engines.pydantic_ai.providers.bedrock`, `loom.core.sql.clickhouse`,
|
|
21
|
+
`loom.streaming.bytewax`).
|
|
22
|
+
2. **The selector loads the island, not the SDK.** A registry keyed by
|
|
23
|
+
provider, engine or backend name loads the island by module path once it
|
|
24
|
+
knows the name — `loom.core.plugins.optional.import_optional` for a module
|
|
25
|
+
of loom, `loom.core.plugins.entrypoints` for a plugin distribution — and
|
|
26
|
+
translates `MissingExtraError` into its own coded failure naming the extra
|
|
27
|
+
(`PROVIDER_NOT_INSTALLED` in the AI layer).
|
|
28
|
+
3. **Nothing else.** No `import` inside a function to reach a vendor SDK, no
|
|
29
|
+
module-level `try`/`except ImportError` with a `None` sentinel checked
|
|
30
|
+
later, no `importlib.import_module("vendor")` on the request path, no
|
|
31
|
+
attribute lookup on a vendor module.
|
|
32
|
+
|
|
33
|
+
The island needs no `try`/`except` of its own: its `ImportError` is what
|
|
34
|
+
`import_optional` translates. Islands today: the pydantic-ai providers and
|
|
35
|
+
extras (`loom.ai.engines.pydantic_ai.providers`, `.extras`), boto3 for the
|
|
36
|
+
config resolvers (`loom.core.config._boto3`), and the whole-package islands
|
|
37
|
+
that predate the rule (`loom.core.sql.clickhouse`, `loom.streaming.bytewax`,
|
|
38
|
+
`loom.etl.testing`). A dependency listed under `dependencies` is not
|
|
39
|
+
optional and gets no island: import it at the top like any other. A test that stands in for an absent or stubbed SDK
|
|
40
|
+
blocks the SDK **and** evicts the island, so the next load re-imports it;
|
|
41
|
+
`tests/helpers/extras.py` does both. A module that reads an SDK the application
|
|
42
|
+
itself may or may not have loaded — pydantic in `loom.core.model` — gates on
|
|
43
|
+
`sys.modules` instead, on purpose: loom never loads what the application did
|
|
44
|
+
not. Code that predates this rule is migrated when it is next touched.
|
|
@@ -164,6 +164,12 @@ storage:
|
|
|
164
164
|
|
|
165
165
|
tmp_root: /var/lib/loom/lake/_tmp
|
|
166
166
|
|
|
167
|
+
temp:
|
|
168
|
+
root: s3://my-lake/_checkpoints
|
|
169
|
+
storage_options:
|
|
170
|
+
aws_server_side_encryption: aws:kms
|
|
171
|
+
aws_sse_kms_key_id: alias/loom-temp
|
|
172
|
+
|
|
167
173
|
observability:
|
|
168
174
|
log:
|
|
169
175
|
enabled: true
|
|
@@ -179,6 +185,11 @@ observability:
|
|
|
179
185
|
# database: ops
|
|
180
186
|
```
|
|
181
187
|
|
|
188
|
+
Server-side encryption declared in `storage.temp.storage_options` is honoured by
|
|
189
|
+
the Polars engine only; with `engine: spark` the checkpoint write goes through
|
|
190
|
+
Hadoop's S3A, which takes it from `fs.s3a.server-side-encryption-*` on the
|
|
191
|
+
session instead.
|
|
192
|
+
|
|
182
193
|
```python
|
|
183
194
|
from loom.etl import ETLRunner
|
|
184
195
|
|
|
@@ -164,6 +164,12 @@ storage:
|
|
|
164
164
|
|
|
165
165
|
tmp_root: /var/lib/loom/lake/_tmp
|
|
166
166
|
|
|
167
|
+
temp:
|
|
168
|
+
root: s3://my-lake/_checkpoints
|
|
169
|
+
storage_options:
|
|
170
|
+
aws_server_side_encryption: aws:kms
|
|
171
|
+
aws_sse_kms_key_id: alias/loom-temp
|
|
172
|
+
|
|
167
173
|
observability:
|
|
168
174
|
log:
|
|
169
175
|
enabled: true
|
|
@@ -179,6 +185,11 @@ observability:
|
|
|
179
185
|
# database: ops
|
|
180
186
|
```
|
|
181
187
|
|
|
188
|
+
Server-side encryption declared in `storage.temp.storage_options` is honoured by
|
|
189
|
+
the Polars engine only; with `engine: spark` the checkpoint write goes through
|
|
190
|
+
Hadoop's S3A, which takes it from `fs.s3a.server-side-encryption-*` on the
|
|
191
|
+
session instead.
|
|
192
|
+
|
|
182
193
|
```python
|
|
183
194
|
from loom.etl import ETLRunner
|
|
184
195
|
|
|
@@ -882,7 +893,7 @@ that matches nothing is a `ConfigError`.
|
|
|
882
893
|
|
|
883
894
|
A declaration file has one of two shapes. The first is a **per-ETL document**:
|
|
884
895
|
the YAML `etl_flow` already reads (`schedule`, `params`, `tags`, `environments`,
|
|
885
|
-
`retry`, `notifications`, `correlation_field`) plus the keys that replace the
|
|
896
|
+
`retry`, `notifications`, `correlation_field`, `trigger`) plus the keys that replace the
|
|
886
897
|
Python module:
|
|
887
898
|
|
|
888
899
|
```yaml
|
|
@@ -947,6 +958,78 @@ declares neither `etls:` nor `pipeline` is a `ConfigError` naming the file, so
|
|
|
947
958
|
keep ETL declarations in their own directory (`config/etls/`) or in one `etls:`
|
|
948
959
|
file rather than next to the storage YAML.
|
|
949
960
|
|
|
961
|
+
### Placeholders count from the run's scheduled start
|
|
962
|
+
|
|
963
|
+
A parameter may hold a placeholder: `${today}`, `${today±Nd}`, `${yesterday}`,
|
|
964
|
+
`${now}` or `${now±N}` with `d`, `h` or `m`. Inside a flow run it counts from
|
|
965
|
+
the run's scheduled start, read in UTC, not from the moment the run executes:
|
|
966
|
+
|
|
967
|
+
- a scheduled run resolves against its slot, even when it starts late or
|
|
968
|
+
after midnight;
|
|
969
|
+
- a retry, by the engine or through "Retry" in the UI, resolves against the
|
|
970
|
+
same slot;
|
|
971
|
+
- a manual run resolves against the time it was created.
|
|
972
|
+
|
|
973
|
+
A late run's `${now}` therefore covers up to its scheduled time. The run name
|
|
974
|
+
follows the same rule.
|
|
975
|
+
|
|
976
|
+
Once resolved, the flow writes the values back to its own run: the
|
|
977
|
+
parameters the API stored for it, with each placeholder replaced by its value
|
|
978
|
+
(dates and datetimes in ISO 8601, a backfill's `start_from` included). Nothing
|
|
979
|
+
else is added or changed. The run then shows the window it processed, and a
|
|
980
|
+
run resubmitted from the UI ("Retry") or copied reproduces it exactly: its
|
|
981
|
+
parameters are concrete, so it makes no call. A retry inside the same process
|
|
982
|
+
(`retries`) still holds the placeholders it started with, resolves them to the
|
|
983
|
+
same values and repeats the call, which is harmless.
|
|
984
|
+
|
|
985
|
+
The update is a single attempt with a 10-second timeout. If it fails, the flow
|
|
986
|
+
logs it at `ERROR`, in the run's logs, and runs anyway; the run then keeps
|
|
987
|
+
showing the placeholders.
|
|
988
|
+
|
|
989
|
+
Because every attempt of a run resolves the same values, the correlation id,
|
|
990
|
+
and therefore the manifest a retry resumes from, is stable across attempts.
|
|
991
|
+
|
|
992
|
+
### Running a deployment after another one
|
|
993
|
+
|
|
994
|
+
A per-flow YAML may name the deployment whose completed runs start this one,
|
|
995
|
+
and the parameters it copies from them:
|
|
996
|
+
|
|
997
|
+
```yaml
|
|
998
|
+
trigger:
|
|
999
|
+
after: respondio_messages_daily
|
|
1000
|
+
inherit_params: [updated_at_from, updated_at_to]
|
|
1001
|
+
```
|
|
1002
|
+
|
|
1003
|
+
`after` is the upstream deployment as `<flow>/<deployment>`, or a single name
|
|
1004
|
+
when the flow and the deployment share it, as every loom ETL's do. The
|
|
1005
|
+
deployer registers a Prefect `DeploymentEventTrigger` that fires on
|
|
1006
|
+
`prefect.flow-run.Completed` of a run related to both that flow and that
|
|
1007
|
+
deployment; a deployment name alone is only unique within its flow.
|
|
1008
|
+
|
|
1009
|
+
Each name in `inherit_params` is copied from the completed run's stored
|
|
1010
|
+
parameters. Since the run records its placeholders resolved, the downstream
|
|
1011
|
+
run receives the same concrete window. The name must therefore be stored on the
|
|
1012
|
+
upstream run, which means declared under the upstream YAML's `params` (or
|
|
1013
|
+
submitted with the run): a value the upstream flow only took from its
|
|
1014
|
+
signature default is not stored, so it renders as empty text, which a `str`
|
|
1015
|
+
field accepts as `""` and a `date` or `datetime` field fails to decode. The trigger passes each value as text,
|
|
1016
|
+
so only a field declared exactly `str`, `date` or `datetime` can be inherited;
|
|
1017
|
+
an optional field is refused because a null would arrive as the text `"None"`.
|
|
1018
|
+
|
|
1019
|
+
- Parameters not inherited take this deployment's defaults; a placeholder
|
|
1020
|
+
among them resolves against the downstream run's own creation time.
|
|
1021
|
+
- If the upstream run could not record its parameters, the downstream run
|
|
1022
|
+
inherits the placeholder text and resolves it against its own creation
|
|
1023
|
+
time, which may not be the upstream slot.
|
|
1024
|
+
- `trigger` and `schedule` may both be set, and the ETL then runs on both: on
|
|
1025
|
+
its schedule and after each completed upstream run.
|
|
1026
|
+
- The upstream name is not checked against the deployments that exist: a
|
|
1027
|
+
trigger naming no deployment never fires.
|
|
1028
|
+
|
|
1029
|
+
The block is decoded strictly: `after` and `inherit_params` are its only keys,
|
|
1030
|
+
`after` must name a deployment, without surrounding spaces in either part, and
|
|
1031
|
+
each inherited name must be a field of the flow's params type.
|
|
1032
|
+
|
|
950
1033
|
### Validation before any deployment
|
|
951
1034
|
|
|
952
1035
|
Every declaration is read and checked before the first deployment is
|
|
@@ -122,6 +122,11 @@ ai-openai = [
|
|
|
122
122
|
ai-anthropic = [
|
|
123
123
|
"pydantic-ai-slim[anthropic]>=2,<3",
|
|
124
124
|
]
|
|
125
|
+
# TypeSafe's Jev: a decision model that fills a typed output from a state, no
|
|
126
|
+
# text. Its model class first shipped in pydantic-ai 2.45.
|
|
127
|
+
ai-typesafe = [
|
|
128
|
+
"pydantic-ai-slim[typesafe]>=2.45,<3",
|
|
129
|
+
]
|
|
125
130
|
# Only an artefact declaring `template:` on an instruction block needs this:
|
|
126
131
|
# the engine compiles a Handlebars template and renders it per request. An
|
|
127
132
|
# artefact whose instructions are literal never reaches the import.
|
|
@@ -255,7 +260,7 @@ dev = [
|
|
|
255
260
|
"httpx>=0.27",
|
|
256
261
|
"types-pyyaml>=6.0.12.20260724",
|
|
257
262
|
"jsonschema>=4.26.0",
|
|
258
|
-
"pydantic-ai-slim[anthropic,bedrock,openai,spec]>=2,<3",
|
|
263
|
+
"pydantic-ai-slim[anthropic,bedrock,openai,spec,typesafe]>=2.45,<3",
|
|
259
264
|
"fasta2a>=0.6,<1",
|
|
260
265
|
"a2a-sdk>=1.1,<2",
|
|
261
266
|
"pydantic-ai-harness[skills]>=0.28,<1",
|
|
@@ -179,6 +179,12 @@ class AgentResult(LoomFrozenStruct, frozen=True, kw_only=True):
|
|
|
179
179
|
messages: New messages of this run in the engine's own serialised
|
|
180
180
|
form; ``None`` when they are longer than
|
|
181
181
|
``policies.max_history_bytes``.
|
|
182
|
+
provider_details: What the provider reported about the final answer
|
|
183
|
+
beyond the answer itself, verbatim and opaque to loom — a
|
|
184
|
+
decision model's confidence and probabilities per field, another
|
|
185
|
+
provider's finish reason. ``None`` when it reported nothing. In
|
|
186
|
+
process only: the ``/run`` body and the ``final`` frame never
|
|
187
|
+
carry it.
|
|
182
188
|
"""
|
|
183
189
|
|
|
184
190
|
output: object
|
|
@@ -186,6 +192,7 @@ class AgentResult(LoomFrozenStruct, frozen=True, kw_only=True):
|
|
|
186
192
|
interaction_id: str | None = None
|
|
187
193
|
hook_result: object | None = None
|
|
188
194
|
messages: bytes | None = None
|
|
195
|
+
provider_details: Mapping[str, Any] | None = None
|
|
189
196
|
|
|
190
197
|
|
|
191
198
|
class AgentAnswer(LoomFrozenStruct, Generic[AnswerT], frozen=True, kw_only=True):
|
|
@@ -205,11 +212,16 @@ class AgentAnswer(LoomFrozenStruct, Generic[AnswerT], frozen=True, kw_only=True)
|
|
|
205
212
|
overrode it for this call only.
|
|
206
213
|
usage: Resource accounting of this run only.
|
|
207
214
|
interaction_id: Identifier the runtime minted for this run.
|
|
215
|
+
provider_details: What the provider reported about this answer beyond
|
|
216
|
+
the answer itself, verbatim and opaque to loom — a decision
|
|
217
|
+
model's confidence and probabilities per field, another
|
|
218
|
+
provider's finish reason — or ``None`` when it reported nothing.
|
|
208
219
|
"""
|
|
209
220
|
|
|
210
221
|
output: AnswerT
|
|
211
222
|
usage: AgentUsage
|
|
212
223
|
interaction_id: str | None = None
|
|
224
|
+
provider_details: Mapping[str, Any] | None = None
|
|
213
225
|
|
|
214
226
|
|
|
215
227
|
class McpHandle(Protocol):
|
|
@@ -678,6 +690,9 @@ class FinalEvent(LoomFrozenStruct, frozen=True, kw_only=True, tag="final", tag_f
|
|
|
678
690
|
messages: New messages of this run in the engine's own serialised
|
|
679
691
|
form; ``None`` when they are longer than
|
|
680
692
|
``policies.max_history_bytes``.
|
|
693
|
+
provider_details: What the provider reported about the final answer
|
|
694
|
+
beyond the answer itself, as on :class:`AgentResult`; the
|
|
695
|
+
runtime copies it there, and no wire surface publishes it.
|
|
681
696
|
"""
|
|
682
697
|
|
|
683
698
|
output: object
|
|
@@ -685,6 +700,7 @@ class FinalEvent(LoomFrozenStruct, frozen=True, kw_only=True, tag="final", tag_f
|
|
|
685
700
|
interaction_id: str | None = None
|
|
686
701
|
hook_result: object | None = None
|
|
687
702
|
messages: bytes | None = None
|
|
703
|
+
provider_details: Mapping[str, Any] | None = None
|
|
688
704
|
|
|
689
705
|
|
|
690
706
|
AgentEvent = TextDeltaEvent | ToolCallEvent | ToolResultEvent | ErrorEvent | FinalEvent
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""Outbound A2A transport: this agent calling a remote one (T147).
|
|
2
|
+
|
|
3
|
+
Two entry points, one connection recipe, both served by the
|
|
4
|
+
:mod:`~loom.ai.engines.pydantic_ai.extras.a2a` island, the one module of the
|
|
5
|
+
engine that imports the ``a2a-sdk``:
|
|
6
|
+
|
|
7
|
+
* :func:`create_a2a_client` is the :data:`~loom.ai.runtime.A2AClientFactory`
|
|
8
|
+
the runtime opens at start-up. Entering it fetches the remote card, applies
|
|
9
|
+
the grant's skill filter to it and hands back a usable session, so an
|
|
10
|
+
unreachable or mismatched agent fails start-up as ``A2A_AGENT_UNREACHABLE``
|
|
11
|
+
instead of surfacing on the first delegation.
|
|
12
|
+
* :func:`send_to_remote_agent` performs one delegation.
|
|
13
|
+
|
|
14
|
+
This module loads the island when a grant names it — :func:`require_a2a_sdk`
|
|
15
|
+
at build, the two entry points at call — so a deployment that declares no
|
|
16
|
+
``a2a`` grant never imports the SDK, and one that does fails start-up naming
|
|
17
|
+
the ``ai-a2a`` extra when it is missing.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
from contextlib import AbstractAsyncContextManager
|
|
23
|
+
from typing import TYPE_CHECKING, Protocol, cast
|
|
24
|
+
|
|
25
|
+
from loom.ai.compiler import CompiledA2ACapability
|
|
26
|
+
from loom.ai.registry import require_provider_sdk
|
|
27
|
+
|
|
28
|
+
if TYPE_CHECKING:
|
|
29
|
+
from a2a.client import Client
|
|
30
|
+
|
|
31
|
+
_ISLAND = "loom.ai.engines.pydantic_ai.extras.a2a"
|
|
32
|
+
_EXTRA = "ai-a2a"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class _A2ASdk(Protocol):
|
|
36
|
+
"""The two names the A2A island publishes."""
|
|
37
|
+
|
|
38
|
+
def create_a2a_client(
|
|
39
|
+
self, capability: CompiledA2ACapability
|
|
40
|
+
) -> AbstractAsyncContextManager[Client]: ...
|
|
41
|
+
|
|
42
|
+
async def send_to_remote_agent(self, capability: CompiledA2ACapability, prompt: str) -> str: ...
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _sdk() -> _A2ASdk:
|
|
46
|
+
"""Load the island; the cast records the contract every island keeps."""
|
|
47
|
+
return cast(_A2ASdk, require_provider_sdk("a2a", _ISLAND, _EXTRA))
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def require_a2a_sdk() -> None:
|
|
51
|
+
"""Fail the build when the ``ai-a2a`` extra is not installed.
|
|
52
|
+
|
|
53
|
+
Raises:
|
|
54
|
+
AgentCompilationError: With ``PROVIDER_NOT_INSTALLED`` naming the
|
|
55
|
+
extra when the island cannot be imported.
|
|
56
|
+
"""
|
|
57
|
+
_sdk()
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def create_a2a_client(capability: CompiledA2ACapability) -> AbstractAsyncContextManager[Client]:
|
|
61
|
+
"""Open one session against a remote agent, card fetched and checked.
|
|
62
|
+
|
|
63
|
+
Satisfies :data:`~loom.ai.runtime.A2AClientFactory`. See the island's
|
|
64
|
+
``create_a2a_client`` for what entering the context does and raises.
|
|
65
|
+
|
|
66
|
+
Example::
|
|
67
|
+
|
|
68
|
+
runtime = AgentRuntime(..., a2a_client_factory=create_a2a_client)
|
|
69
|
+
"""
|
|
70
|
+
return _sdk().create_a2a_client(capability)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
async def send_to_remote_agent(capability: CompiledA2ACapability, prompt: str) -> str:
|
|
74
|
+
"""Delegate one prompt to a remote agent and return its reply text.
|
|
75
|
+
|
|
76
|
+
See the island's ``send_to_remote_agent`` for the contract: the reply is
|
|
77
|
+
untrusted data, presented as a tool value and never as instruction.
|
|
78
|
+
"""
|
|
79
|
+
return await _sdk().send_to_remote_agent(capability, prompt)
|
|
@@ -26,7 +26,7 @@ from collections.abc import Callable, Iterator, Mapping, Sequence
|
|
|
26
26
|
from dataclasses import dataclass
|
|
27
27
|
from enum import Enum
|
|
28
28
|
from types import MappingProxyType
|
|
29
|
-
from typing import Any, Final, NamedTuple, cast
|
|
29
|
+
from typing import Any, Final, NamedTuple, Protocol, cast
|
|
30
30
|
|
|
31
31
|
from pydantic_ai import ToolReturn
|
|
32
32
|
from pydantic_ai.capabilities import AbstractCapability
|
|
@@ -78,11 +78,11 @@ from loom.ai.errors import (
|
|
|
78
78
|
AgentCompilationError,
|
|
79
79
|
AgentRunError,
|
|
80
80
|
AgentRunErrorCode,
|
|
81
|
-
provider_not_installed,
|
|
82
81
|
python_factory_failed,
|
|
83
82
|
python_factory_not_callable,
|
|
84
83
|
python_remote_not_granted,
|
|
85
84
|
)
|
|
85
|
+
from loom.ai.registry import require_provider_sdk
|
|
86
86
|
from loom.core.di import LoomContainer
|
|
87
87
|
from loom.core.engine.compilable import Compilable
|
|
88
88
|
from loom.core.engine.plan import ExecutionPlan
|
|
@@ -528,18 +528,22 @@ def _skills_capability(
|
|
|
528
528
|
AgentCompilationError: When the ``ai-harness`` extra is not installed.
|
|
529
529
|
"""
|
|
530
530
|
del context
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
from pydantic_ai_harness import Skills
|
|
536
|
-
except ImportError as exc:
|
|
537
|
-
raise AgentCompilationError([provider_not_installed("skills", "ai-harness")]) from exc
|
|
531
|
+
sdk = cast(
|
|
532
|
+
_SkillsSdk,
|
|
533
|
+
require_provider_sdk("skills", "loom.ai.engines.pydantic_ai.extras.skills", "ai-harness"),
|
|
534
|
+
)
|
|
538
535
|
return cast(
|
|
539
|
-
"AbstractCapability[Any]",
|
|
536
|
+
"AbstractCapability[Any]",
|
|
537
|
+
sdk.Skills(capability.directory, include=list(capability.names)),
|
|
540
538
|
)
|
|
541
539
|
|
|
542
540
|
|
|
541
|
+
class _SkillsSdk(Protocol):
|
|
542
|
+
"""The one name the skills island publishes."""
|
|
543
|
+
|
|
544
|
+
Skills: type[Any]
|
|
545
|
+
|
|
546
|
+
|
|
543
547
|
_KINDS: Final[Mapping[type[CompiledCapability], _KindBinding]] = MappingProxyType(
|
|
544
548
|
{
|
|
545
549
|
CompiledUsecaseCapability: _KindBinding(_Destination.TOOLSET, _usecase_toolset),
|
|
@@ -242,6 +242,7 @@ class PydanticAIEngine:
|
|
|
242
242
|
agent=self._plan.name,
|
|
243
243
|
max_history_bytes=self._plan.policies.max_history_bytes,
|
|
244
244
|
),
|
|
245
|
+
provider_details=result.response.provider_details,
|
|
245
246
|
)
|
|
246
247
|
|
|
247
248
|
def run_stream(
|
|
@@ -783,6 +784,7 @@ class PydanticAIEngine:
|
|
|
783
784
|
agent=self._plan.name,
|
|
784
785
|
max_history_bytes=self._plan.policies.max_history_bytes,
|
|
785
786
|
),
|
|
787
|
+
provider_details=result.response.provider_details,
|
|
786
788
|
)
|
|
787
789
|
|
|
788
790
|
|