kailash 0.8.2__tar.gz → 0.8.3__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.
- {kailash-0.8.2/src/kailash.egg-info → kailash-0.8.3}/PKG-INFO +1 -1
- {kailash-0.8.2 → kailash-0.8.3}/pyproject.toml +1 -1
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/__init__.py +1 -1
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/database/base_models.py +7 -1
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/code/python.py +1 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/builder.py +88 -9
- {kailash-0.8.2 → kailash-0.8.3/src/kailash.egg-info}/PKG-INFO +1 -1
- {kailash-0.8.2 → kailash-0.8.3}/LICENSE +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/MANIFEST.in +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/README.md +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/setup.cfg +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/setup.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/__main__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/access_control/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/access_control/managers.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/access_control/rule_evaluators.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/access_control.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/access_control_abac.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/adapters/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/adapters/mcp_platform_adapter.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/api/auth.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/api/custom_nodes.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/api/custom_nodes_secure.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/api/gateway.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/api/mcp_integration.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/api/studio.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/api/workflow_api.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/channels/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/channels/api_channel.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/channels/base.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/channels/cli_channel.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/channels/event_router.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/channels/mcp_channel.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/channels/session.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/cli/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/cli/commands.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/client/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/client/enhanced_client.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/config/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/config/database_config.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/core/actors/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/core/actors/adaptive_pool_controller.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/core/actors/connection_actor.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/core/actors/supervisor.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/core/ml/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/core/ml/query_patterns.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/core/monitoring/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/core/monitoring/connection_metrics.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/core/optimization/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/core/resilience/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/core/resilience/bulkhead.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/core/resilience/circuit_breaker.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/core/resilience/health_monitor.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/database/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/database/execution_pipeline.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/edge/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/edge/compliance.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/edge/discovery.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/edge/location.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/gateway/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/gateway/api.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/gateway/enhanced_gateway.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/gateway/resource_resolver.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/gateway/security.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/manifest.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/advanced_features.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/ai_registry_server.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/auth.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/client.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/client_new.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/discovery.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/errors.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/oauth.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/protocol.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/registry_integration.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/server.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/servers/ai_registry.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/transports.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/utils/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/utils/cache.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/utils/config.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/utils/formatters.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/mcp_server/utils/metrics.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/auth/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/auth/access_control.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/auth/auth_manager.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/auth/exceptions.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/auth/jwt_auth.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/auth/models.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/auth/utils.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/communication/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/communication/ai_chat.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/communication/api_gateway.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/communication/events.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/communication/realtime.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/core/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/core/agent_ui.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/core/schema.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/core/workflows.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/database/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/database/base.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/database/enums.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/database/migrations.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/database/models.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/database/repositories.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/database/session_manager.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/gateway/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/gateway/checkpoint_manager.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/gateway/deduplicator.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/gateway/durable_gateway.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/gateway/durable_request.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/gateway/event_store.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/gateway/storage_backends.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/mcp/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/mcp/client_integration.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/middleware/mcp/enhanced_server.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nexus/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nexus/cli/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nexus/cli/__main__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nexus/cli/main.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nexus/factory.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nexus/gateway.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/admin/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/admin/audit_log.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/admin/permission_check.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/admin/role_management.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/admin/schema.sql +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/admin/schema_manager.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/admin/security_event.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/admin/tenant_isolation.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/admin/transaction_utils.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/admin/user_management.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/ai/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/ai/a2a.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/ai/agents.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/ai/ai_providers.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/ai/embedding_generator.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/ai/intelligent_agent_orchestrator.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/ai/iterative_llm_agent.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/ai/llm_agent.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/ai/models.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/ai/self_organizing.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/ai/vision_utils.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/alerts/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/alerts/base.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/alerts/discord.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/api/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/api/auth.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/api/graphql.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/api/http.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/api/monitoring.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/api/rate_limiting.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/api/rest.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/api/security.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/auth/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/auth/directory_integration.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/auth/enterprise_auth_provider.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/auth/mfa.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/auth/risk_assessment.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/auth/session_management.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/auth/sso.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/base.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/base_async.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/base_cycle_aware.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/base_with_acl.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/cache/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/cache/cache.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/cache/cache_invalidation.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/cache/redis_pool_manager.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/code/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/code/async_python.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/compliance/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/compliance/data_retention.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/compliance/gdpr.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/async_connection.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/async_sql.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/async_vector.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/bulk_operations.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/directory.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/event_generation.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/file_discovery.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/optimistic_locking.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/query_builder.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/query_cache.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/query_pipeline.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/query_router.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/readers.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/redis.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/retrieval.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/sharepoint_graph.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/sources.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/sql.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/streaming.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/vector_db.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/workflow_connection_pool.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/data/writers.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/enterprise/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/enterprise/audit_logger.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/enterprise/batch_processor.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/enterprise/data_lineage.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/enterprise/mcp_executor.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/enterprise/service_discovery.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/enterprise/tenant_assignment.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/logic/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/logic/async_operations.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/logic/convergence.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/logic/loop.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/logic/operations.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/logic/workflow.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/mixins/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/mixins/event_emitter.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/mixins/mcp.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/mixins/security.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/mixins.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/monitoring/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/monitoring/connection_dashboard.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/monitoring/deadlock_detector.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/monitoring/health_check.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/monitoring/log_processor.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/monitoring/metrics_collector.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/monitoring/performance_anomaly.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/monitoring/performance_benchmark.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/monitoring/race_condition_detector.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/monitoring/transaction_metrics.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/monitoring/transaction_monitor.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/advanced.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/agentic.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/conversational.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/evaluation.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/federated.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/graph.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/multimodal.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/optimized.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/privacy.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/query_processing.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/realtime.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/registry.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/router.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/similarity.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/strategies.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/rag/workflows.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/security/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/security/abac_evaluator.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/security/audit_log.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/security/behavior_analysis.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/security/credential_manager.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/security/rotating_credentials.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/security/security_event.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/security/threat_detection.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/system/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/system/command_parser.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/testing/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/testing/credential_testing.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/transaction/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/transaction/distributed_transaction_manager.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/transaction/saga_coordinator.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/transaction/saga_state_storage.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/transaction/saga_step.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/transaction/transaction_context.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/transaction/two_phase_commit.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/transform/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/transform/chunkers.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/transform/formatters.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/transform/processors.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/validation/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/validation/test_executor.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/validation/validation_nodes.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/nodes/validation.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/resources/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/resources/factory.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/resources/health.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/resources/reference.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/resources/registry.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/runtime/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/runtime/access_controlled.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/runtime/async_local.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/runtime/docker.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/runtime/local.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/runtime/parallel.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/runtime/parallel_cyclic.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/runtime/parameter_injection.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/runtime/parameter_injector.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/runtime/runner.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/runtime/secret_provider.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/runtime/testing.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/sdk_exceptions.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/security.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/servers/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/servers/durable_workflow_server.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/servers/enterprise_workflow_server.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/servers/gateway.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/servers/workflow_server.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/testing/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/testing/async_test_case.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/testing/async_utils.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/testing/fixtures.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/testing/mock_registry.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/tracking/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/tracking/manager.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/tracking/metrics_collector.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/tracking/models.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/tracking/storage/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/tracking/storage/base.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/tracking/storage/database.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/tracking/storage/filesystem.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/utils/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/utils/data_validation.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/utils/export.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/utils/migrations/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/utils/migrations/generator.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/utils/migrations/models.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/utils/migrations/runner.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/utils/resource_manager.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/utils/secure_logging.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/utils/templates.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/visualization/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/visualization/api.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/visualization/dashboard.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/visualization/performance.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/visualization/reports.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/__init__.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/async_builder.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/async_patterns.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/convergence.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/cycle_analyzer.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/cycle_builder.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/cycle_config.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/cycle_debugger.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/cycle_exceptions.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/cycle_profiler.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/cycle_state.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/cyclic_runner.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/graph.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/input_handling.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/mermaid_visualizer.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/migration.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/mock_registry.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/resilience.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/runner.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/safety.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/state.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/templates.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/validation.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash/workflow/visualization.py +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash.egg-info/SOURCES.txt +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash.egg-info/dependency_links.txt +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash.egg-info/entry_points.txt +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash.egg-info/not-zip-safe +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash.egg-info/requires.txt +0 -0
- {kailash-0.8.2 → kailash-0.8.3}/src/kailash.egg-info/top_level.txt +0 -0
@@ -8,7 +8,13 @@ import uuid
|
|
8
8
|
from datetime import datetime, timezone
|
9
9
|
from typing import Any, Dict, List, Optional
|
10
10
|
|
11
|
-
from sqlalchemy import
|
11
|
+
from sqlalchemy import (
|
12
|
+
JSON,
|
13
|
+
Boolean,
|
14
|
+
CheckConstraint,
|
15
|
+
Column,
|
16
|
+
DateTime,
|
17
|
+
)
|
12
18
|
from sqlalchemy import Enum as SQLEnum
|
13
19
|
from sqlalchemy import (
|
14
20
|
Float,
|
@@ -380,18 +380,89 @@ class WorkflowBuilder:
|
|
380
380
|
WorkflowValidationError: If nodes don't exist
|
381
381
|
ConnectionError: If connection is invalid
|
382
382
|
"""
|
383
|
+
# Enhanced error messages with helpful suggestions
|
383
384
|
if from_node not in self.nodes:
|
384
|
-
|
385
|
-
|
386
|
-
|
385
|
+
available_nodes = list(self.nodes.keys())
|
386
|
+
similar_nodes = [
|
387
|
+
n
|
388
|
+
for n in available_nodes
|
389
|
+
if from_node.lower() in n.lower() or n.lower() in from_node.lower()
|
390
|
+
]
|
391
|
+
|
392
|
+
error_msg = f"Source node '{from_node}' not found in workflow."
|
393
|
+
if available_nodes:
|
394
|
+
error_msg += f"\nAvailable nodes: {available_nodes}"
|
395
|
+
if similar_nodes:
|
396
|
+
error_msg += f"\nDid you mean: {similar_nodes}?"
|
397
|
+
error_msg += f"\n\nTip: Use workflow.add_node() to create nodes before connecting them."
|
398
|
+
error_msg += f"\nExample: workflow.add_node('CSVReaderNode', '{from_node}', {{'file_path': 'data.csv'}})"
|
399
|
+
|
400
|
+
raise WorkflowValidationError(error_msg)
|
401
|
+
|
387
402
|
if to_node not in self.nodes:
|
388
|
-
|
389
|
-
|
403
|
+
available_nodes = list(self.nodes.keys())
|
404
|
+
similar_nodes = [
|
405
|
+
n
|
406
|
+
for n in available_nodes
|
407
|
+
if to_node.lower() in n.lower() or n.lower() in to_node.lower()
|
408
|
+
]
|
409
|
+
|
410
|
+
error_msg = f"Target node '{to_node}' not found in workflow."
|
411
|
+
if available_nodes:
|
412
|
+
error_msg += f"\nAvailable nodes: {available_nodes}"
|
413
|
+
if similar_nodes:
|
414
|
+
error_msg += f"\nDid you mean: {similar_nodes}?"
|
415
|
+
error_msg += f"\n\nTip: Use workflow.add_node() to create nodes before connecting them."
|
416
|
+
error_msg += f"\nExample: workflow.add_node('PythonCodeNode', '{to_node}', {{'code': 'result = data'}})"
|
417
|
+
|
418
|
+
raise WorkflowValidationError(error_msg)
|
419
|
+
|
420
|
+
# Self-connection check with helpful message
|
421
|
+
if from_node == to_node:
|
422
|
+
raise ConnectionError(
|
423
|
+
f"Cannot connect node '{from_node}' to itself.\n"
|
424
|
+
f"Tip: Consider using intermediate nodes or different port names.\n"
|
425
|
+
f"Example: Create a separate processing node between input and output."
|
390
426
|
)
|
391
427
|
|
392
|
-
#
|
393
|
-
|
394
|
-
|
428
|
+
# REFINED: Enhanced duplicate connection detection
|
429
|
+
for existing_conn in self.connections:
|
430
|
+
if (
|
431
|
+
existing_conn["from_node"] == from_node
|
432
|
+
and existing_conn["from_output"] == from_output
|
433
|
+
and existing_conn["to_node"] == to_node
|
434
|
+
and existing_conn["to_input"] == to_input
|
435
|
+
):
|
436
|
+
raise ConnectionError(
|
437
|
+
f"Duplicate connection detected: {from_node}.{from_output} -> {to_node}.{to_input}\n"
|
438
|
+
f"This connection already exists in the workflow.\n"
|
439
|
+
f"Tip: Remove the duplicate add_connection() call or use different port names.\n"
|
440
|
+
f"Current connections: {len(self.connections)} total"
|
441
|
+
)
|
442
|
+
|
443
|
+
# Enhanced port validation with suggestions
|
444
|
+
common_output_ports = [
|
445
|
+
"data",
|
446
|
+
"result",
|
447
|
+
"output",
|
448
|
+
"response",
|
449
|
+
"content",
|
450
|
+
"value",
|
451
|
+
]
|
452
|
+
common_input_ports = ["data", "input", "input_data", "content", "value"]
|
453
|
+
|
454
|
+
# Log port usage patterns for debugging
|
455
|
+
if from_output not in common_output_ports:
|
456
|
+
logger.debug(
|
457
|
+
f"Using non-standard output port '{from_output}' on node '{from_node}'"
|
458
|
+
)
|
459
|
+
logger.debug(f"Common output ports: {common_output_ports}")
|
460
|
+
|
461
|
+
if to_input not in common_input_ports:
|
462
|
+
logger.debug(
|
463
|
+
f"Using non-standard input port '{to_input}' on node '{to_node}'"
|
464
|
+
)
|
465
|
+
logger.debug(f"Common input ports: {common_input_ports}")
|
395
466
|
|
396
467
|
# Add connection to list
|
397
468
|
connection = {
|
@@ -402,7 +473,15 @@ class WorkflowBuilder:
|
|
402
473
|
}
|
403
474
|
self.connections.append(connection)
|
404
475
|
|
405
|
-
logger.info(f"Connected '{from_node}.{from_output}'
|
476
|
+
logger.info(f"Connected '{from_node}.{from_output}' -> '{to_node}.{to_input}'")
|
477
|
+
|
478
|
+
# Provide helpful tips for common connection patterns
|
479
|
+
if from_output == to_input == "data":
|
480
|
+
logger.debug(f"Using standard data flow connection pattern")
|
481
|
+
elif from_output in ["result", "output"] and to_input in ["data", "input"]:
|
482
|
+
logger.debug(f"Using result-to-input connection pattern")
|
483
|
+
else:
|
484
|
+
logger.debug(f"Using custom port mapping: {from_output} -> {to_input}")
|
406
485
|
return self
|
407
486
|
|
408
487
|
def connect(
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|