kailash 0.8.7__tar.gz → 0.9.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.
Files changed (411) hide show
  1. {kailash-0.8.7/src/kailash.egg-info → kailash-0.9.0}/PKG-INFO +1 -1
  2. {kailash-0.8.7 → kailash-0.9.0}/pyproject.toml +1 -1
  3. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/__init__.py +4 -5
  4. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/logic/operations.py +8 -4
  5. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/local.py +102 -0
  6. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/cyclic_runner.py +68 -0
  7. {kailash-0.8.7 → kailash-0.9.0/src/kailash.egg-info}/PKG-INFO +1 -1
  8. {kailash-0.8.7 → kailash-0.9.0}/LICENSE +0 -0
  9. {kailash-0.8.7 → kailash-0.9.0}/MANIFEST.in +0 -0
  10. {kailash-0.8.7 → kailash-0.9.0}/README.md +0 -0
  11. {kailash-0.8.7 → kailash-0.9.0}/setup.cfg +0 -0
  12. {kailash-0.8.7 → kailash-0.9.0}/setup.py +0 -0
  13. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/__main__.py +0 -0
  14. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/access_control/__init__.py +0 -0
  15. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/access_control/managers.py +0 -0
  16. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/access_control/rule_evaluators.py +0 -0
  17. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/access_control.py +0 -0
  18. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/access_control_abac.py +0 -0
  19. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/adapters/__init__.py +0 -0
  20. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/adapters/mcp_platform_adapter.py +0 -0
  21. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/api/auth.py +0 -0
  22. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/api/custom_nodes.py +0 -0
  23. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/api/custom_nodes_secure.py +0 -0
  24. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/api/gateway.py +0 -0
  25. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/api/mcp_integration.py +0 -0
  26. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/api/studio.py +0 -0
  27. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/api/workflow_api.py +0 -0
  28. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/channels/__init__.py +0 -0
  29. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/channels/api_channel.py +0 -0
  30. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/channels/base.py +0 -0
  31. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/channels/cli_channel.py +0 -0
  32. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/channels/event_router.py +0 -0
  33. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/channels/mcp_channel.py +0 -0
  34. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/channels/session.py +0 -0
  35. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/cli/__init__.py +0 -0
  36. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/cli/commands.py +0 -0
  37. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/cli/validate_imports.py +0 -0
  38. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/cli/validation_audit.py +0 -0
  39. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/client/__init__.py +0 -0
  40. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/client/enhanced_client.py +0 -0
  41. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/config/__init__.py +0 -0
  42. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/config/database_config.py +0 -0
  43. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/core/actors/__init__.py +0 -0
  44. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/core/actors/adaptive_pool_controller.py +0 -0
  45. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/core/actors/connection_actor.py +0 -0
  46. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/core/actors/supervisor.py +0 -0
  47. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/core/ml/__init__.py +0 -0
  48. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/core/ml/query_patterns.py +0 -0
  49. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/core/monitoring/__init__.py +0 -0
  50. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/core/monitoring/connection_metrics.py +0 -0
  51. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/core/optimization/__init__.py +0 -0
  52. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/core/resilience/__init__.py +0 -0
  53. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/core/resilience/bulkhead.py +0 -0
  54. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/core/resilience/circuit_breaker.py +0 -0
  55. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/core/resilience/health_monitor.py +0 -0
  56. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/database/__init__.py +0 -0
  57. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/database/execution_pipeline.py +0 -0
  58. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/__init__.py +0 -0
  59. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/compliance.py +0 -0
  60. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/consistency.py +0 -0
  61. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/coordination/__init__.py +0 -0
  62. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/coordination/global_ordering.py +0 -0
  63. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/coordination/leader_election.py +0 -0
  64. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/coordination/partition_detector.py +0 -0
  65. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/coordination/raft.py +0 -0
  66. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/discovery.py +0 -0
  67. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/location.py +0 -0
  68. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/migration/__init__.py +0 -0
  69. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/migration/edge_migration_service.py +0 -0
  70. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/migration/edge_migrator.py +0 -0
  71. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/monitoring/__init__.py +0 -0
  72. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/monitoring/edge_monitor.py +0 -0
  73. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/prediction/__init__.py +0 -0
  74. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/prediction/predictive_warmer.py +0 -0
  75. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/resource/__init__.py +0 -0
  76. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/resource/cloud_integration.py +0 -0
  77. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/resource/cost_optimizer.py +0 -0
  78. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/resource/docker_integration.py +0 -0
  79. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/resource/kubernetes_integration.py +0 -0
  80. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/resource/platform_integration.py +0 -0
  81. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/resource/predictive_scaler.py +0 -0
  82. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/resource/resource_analyzer.py +0 -0
  83. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/edge/resource/resource_pools.py +0 -0
  84. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/gateway/__init__.py +0 -0
  85. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/gateway/api.py +0 -0
  86. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/gateway/enhanced_gateway.py +0 -0
  87. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/gateway/resource_resolver.py +0 -0
  88. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/gateway/security.py +0 -0
  89. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/integrations/dataflow_edge.py +0 -0
  90. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/manifest.py +0 -0
  91. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/__init__.py +0 -0
  92. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/advanced_features.py +0 -0
  93. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/ai_registry_server.py +0 -0
  94. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/auth.py +0 -0
  95. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/client.py +0 -0
  96. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/client_new.py +0 -0
  97. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/discovery.py +0 -0
  98. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/errors.py +0 -0
  99. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/oauth.py +0 -0
  100. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/protocol.py +0 -0
  101. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/registry_integration.py +0 -0
  102. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/server.py +0 -0
  103. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/servers/ai_registry.py +0 -0
  104. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/subscriptions.py +0 -0
  105. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/transports.py +0 -0
  106. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/utils/__init__.py +0 -0
  107. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/utils/cache.py +0 -0
  108. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/utils/config.py +0 -0
  109. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/utils/formatters.py +0 -0
  110. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/mcp_server/utils/metrics.py +0 -0
  111. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/__init__.py +0 -0
  112. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/auth/__init__.py +0 -0
  113. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/auth/access_control.py +0 -0
  114. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/auth/auth_manager.py +0 -0
  115. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/auth/exceptions.py +0 -0
  116. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/auth/jwt_auth.py +0 -0
  117. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/auth/models.py +0 -0
  118. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/auth/utils.py +0 -0
  119. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/communication/__init__.py +0 -0
  120. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/communication/ai_chat.py +0 -0
  121. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/communication/api_gateway.py +0 -0
  122. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/communication/events.py +0 -0
  123. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/communication/realtime.py +0 -0
  124. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/core/__init__.py +0 -0
  125. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/core/agent_ui.py +0 -0
  126. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/core/schema.py +0 -0
  127. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/core/workflows.py +0 -0
  128. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/database/__init__.py +0 -0
  129. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/database/base.py +0 -0
  130. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/database/base_models.py +0 -0
  131. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/database/enums.py +0 -0
  132. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/database/migrations.py +0 -0
  133. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/database/models.py +0 -0
  134. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/database/repositories.py +0 -0
  135. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/database/session_manager.py +0 -0
  136. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/gateway/__init__.py +0 -0
  137. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/gateway/checkpoint_manager.py +0 -0
  138. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/gateway/deduplicator.py +0 -0
  139. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/gateway/durable_gateway.py +0 -0
  140. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/gateway/durable_request.py +0 -0
  141. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/gateway/event_store.py +0 -0
  142. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/gateway/storage_backends.py +0 -0
  143. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/mcp/__init__.py +0 -0
  144. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/mcp/client_integration.py +0 -0
  145. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/middleware/mcp/enhanced_server.py +0 -0
  146. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/monitoring/__init__.py +0 -0
  147. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/monitoring/alerts.py +0 -0
  148. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/monitoring/metrics.py +0 -0
  149. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/__init__.py +0 -0
  150. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/admin/__init__.py +0 -0
  151. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/admin/audit_log.py +0 -0
  152. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/admin/permission_check.py +0 -0
  153. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/admin/role_management.py +0 -0
  154. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/admin/schema.sql +0 -0
  155. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/admin/schema_manager.py +0 -0
  156. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/admin/security_event.py +0 -0
  157. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/admin/tenant_isolation.py +0 -0
  158. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/admin/transaction_utils.py +0 -0
  159. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/admin/user_management.py +0 -0
  160. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/ai/__init__.py +0 -0
  161. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/ai/a2a.py +0 -0
  162. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/ai/a2a_backup.py +0 -0
  163. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/ai/agents.py +0 -0
  164. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/ai/ai_providers.py +0 -0
  165. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/ai/embedding_generator.py +0 -0
  166. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/ai/hybrid_search.py +0 -0
  167. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/ai/intelligent_agent_orchestrator.py +0 -0
  168. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/ai/iterative_llm_agent.py +0 -0
  169. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/ai/llm_agent.py +0 -0
  170. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/ai/models.py +0 -0
  171. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/ai/self_organizing.py +0 -0
  172. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/ai/semantic_memory.py +0 -0
  173. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/ai/streaming_analytics.py +0 -0
  174. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/ai/vision_utils.py +0 -0
  175. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/alerts/__init__.py +0 -0
  176. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/alerts/base.py +0 -0
  177. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/alerts/discord.py +0 -0
  178. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/api/__init__.py +0 -0
  179. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/api/auth.py +0 -0
  180. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/api/graphql.py +0 -0
  181. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/api/http.py +0 -0
  182. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/api/monitoring.py +0 -0
  183. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/api/rate_limiting.py +0 -0
  184. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/api/rest.py +0 -0
  185. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/api/security.py +0 -0
  186. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/auth/__init__.py +0 -0
  187. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/auth/directory_integration.py +0 -0
  188. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/auth/enterprise_auth_provider.py +0 -0
  189. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/auth/mfa.py +0 -0
  190. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/auth/risk_assessment.py +0 -0
  191. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/auth/session_management.py +0 -0
  192. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/auth/sso.py +0 -0
  193. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/base.py +0 -0
  194. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/base_async.py +0 -0
  195. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/base_cycle_aware.py +0 -0
  196. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/base_with_acl.py +0 -0
  197. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/cache/__init__.py +0 -0
  198. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/cache/cache.py +0 -0
  199. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/cache/cache_invalidation.py +0 -0
  200. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/cache/redis_pool_manager.py +0 -0
  201. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/code/__init__.py +0 -0
  202. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/code/async_python.py +0 -0
  203. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/code/python.py +0 -0
  204. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/compliance/__init__.py +0 -0
  205. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/compliance/data_retention.py +0 -0
  206. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/compliance/gdpr.py +0 -0
  207. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/__init__.py +0 -0
  208. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/async_connection.py +0 -0
  209. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/async_sql.py +0 -0
  210. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/async_vector.py +0 -0
  211. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/bulk_operations.py +0 -0
  212. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/directory.py +0 -0
  213. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/event_generation.py +0 -0
  214. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/file_discovery.py +0 -0
  215. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/optimistic_locking.py +0 -0
  216. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/query_builder.py +0 -0
  217. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/query_cache.py +0 -0
  218. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/query_pipeline.py +0 -0
  219. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/query_router.py +0 -0
  220. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/readers.py +0 -0
  221. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/redis.py +0 -0
  222. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/retrieval.py +0 -0
  223. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/sharepoint_graph.py +0 -0
  224. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/sources.py +0 -0
  225. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/sql.py +0 -0
  226. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/streaming.py +0 -0
  227. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/vector_db.py +0 -0
  228. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/workflow_connection_pool.py +0 -0
  229. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/data/writers.py +0 -0
  230. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/edge/__init__.py +0 -0
  231. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/edge/base.py +0 -0
  232. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/edge/cloud_node.py +0 -0
  233. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/edge/coordination.py +0 -0
  234. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/edge/docker_node.py +0 -0
  235. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/edge/edge_data.py +0 -0
  236. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/edge/edge_migration_node.py +0 -0
  237. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/edge/edge_monitoring_node.py +0 -0
  238. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/edge/edge_state.py +0 -0
  239. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/edge/edge_warming_node.py +0 -0
  240. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/edge/kubernetes_node.py +0 -0
  241. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/edge/platform_node.py +0 -0
  242. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/edge/resource_analyzer_node.py +0 -0
  243. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/edge/resource_optimizer_node.py +0 -0
  244. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/edge/resource_scaler_node.py +0 -0
  245. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/enterprise/__init__.py +0 -0
  246. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/enterprise/audit_logger.py +0 -0
  247. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/enterprise/batch_processor.py +0 -0
  248. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/enterprise/data_lineage.py +0 -0
  249. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/enterprise/mcp_executor.py +0 -0
  250. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/enterprise/service_discovery.py +0 -0
  251. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/enterprise/tenant_assignment.py +0 -0
  252. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/governance.py +0 -0
  253. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/logic/__init__.py +0 -0
  254. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/logic/async_operations.py +0 -0
  255. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/logic/convergence.py +0 -0
  256. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/logic/loop.py +0 -0
  257. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/logic/workflow.py +0 -0
  258. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/mixins/__init__.py +0 -0
  259. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/mixins/event_emitter.py +0 -0
  260. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/mixins/mcp.py +0 -0
  261. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/mixins/security.py +0 -0
  262. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/mixins.py +0 -0
  263. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/monitoring/__init__.py +0 -0
  264. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/monitoring/connection_dashboard.py +0 -0
  265. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/monitoring/deadlock_detector.py +0 -0
  266. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/monitoring/health_check.py +0 -0
  267. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/monitoring/log_processor.py +0 -0
  268. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/monitoring/metrics_collector.py +0 -0
  269. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/monitoring/performance_anomaly.py +0 -0
  270. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/monitoring/performance_benchmark.py +0 -0
  271. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/monitoring/race_condition_detector.py +0 -0
  272. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/monitoring/transaction_metrics.py +0 -0
  273. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/monitoring/transaction_monitor.py +0 -0
  274. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/ports.py +0 -0
  275. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/__init__.py +0 -0
  276. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/advanced.py +0 -0
  277. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/agentic.py +0 -0
  278. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/conversational.py +0 -0
  279. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/evaluation.py +0 -0
  280. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/federated.py +0 -0
  281. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/graph.py +0 -0
  282. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/multimodal.py +0 -0
  283. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/optimized.py +0 -0
  284. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/privacy.py +0 -0
  285. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/query_processing.py +0 -0
  286. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/realtime.py +0 -0
  287. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/registry.py +0 -0
  288. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/router.py +0 -0
  289. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/similarity.py +0 -0
  290. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/strategies.py +0 -0
  291. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/rag/workflows.py +0 -0
  292. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/security/__init__.py +0 -0
  293. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/security/abac_evaluator.py +0 -0
  294. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/security/audit_log.py +0 -0
  295. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/security/behavior_analysis.py +0 -0
  296. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/security/credential_manager.py +0 -0
  297. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/security/rotating_credentials.py +0 -0
  298. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/security/security_event.py +0 -0
  299. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/security/threat_detection.py +0 -0
  300. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/system/__init__.py +0 -0
  301. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/system/command_parser.py +0 -0
  302. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/testing/__init__.py +0 -0
  303. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/testing/credential_testing.py +0 -0
  304. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/transaction/__init__.py +0 -0
  305. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/transaction/distributed_transaction_manager.py +0 -0
  306. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/transaction/saga_coordinator.py +0 -0
  307. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/transaction/saga_state_storage.py +0 -0
  308. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/transaction/saga_step.py +0 -0
  309. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/transaction/transaction_context.py +0 -0
  310. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/transaction/two_phase_commit.py +0 -0
  311. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/transform/__init__.py +0 -0
  312. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/transform/chunkers.py +0 -0
  313. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/transform/formatters.py +0 -0
  314. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/transform/processors.py +0 -0
  315. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/validation/__init__.py +0 -0
  316. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/validation/test_executor.py +0 -0
  317. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/validation/validation_nodes.py +0 -0
  318. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/nodes/validation.py +0 -0
  319. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/resources/__init__.py +0 -0
  320. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/resources/factory.py +0 -0
  321. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/resources/health.py +0 -0
  322. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/resources/reference.py +0 -0
  323. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/resources/registry.py +0 -0
  324. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/__init__.py +0 -0
  325. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/access_controlled.py +0 -0
  326. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/async_local.py +0 -0
  327. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/docker.py +0 -0
  328. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/parallel.py +0 -0
  329. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/parallel_cyclic.py +0 -0
  330. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/parameter_injection.py +0 -0
  331. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/parameter_injector.py +0 -0
  332. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/runner.py +0 -0
  333. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/secret_provider.py +0 -0
  334. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/testing.py +0 -0
  335. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/validation/__init__.py +0 -0
  336. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/validation/connection_context.py +0 -0
  337. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/validation/enhanced_error_formatter.py +0 -0
  338. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/validation/error_categorizer.py +0 -0
  339. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/validation/import_validator.py +0 -0
  340. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/validation/metrics.py +0 -0
  341. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/validation/performance.py +0 -0
  342. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/runtime/validation/suggestion_engine.py +0 -0
  343. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/sdk_exceptions.py +0 -0
  344. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/security.py +0 -0
  345. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/servers/__init__.py +0 -0
  346. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/servers/durable_workflow_server.py +0 -0
  347. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/servers/enterprise_workflow_server.py +0 -0
  348. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/servers/gateway.py +0 -0
  349. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/servers/workflow_server.py +0 -0
  350. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/testing/__init__.py +0 -0
  351. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/testing/async_test_case.py +0 -0
  352. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/testing/async_utils.py +0 -0
  353. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/testing/fixtures.py +0 -0
  354. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/testing/mock_registry.py +0 -0
  355. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/tracking/__init__.py +0 -0
  356. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/tracking/manager.py +0 -0
  357. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/tracking/metrics_collector.py +0 -0
  358. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/tracking/models.py +0 -0
  359. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/tracking/storage/__init__.py +0 -0
  360. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/tracking/storage/base.py +0 -0
  361. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/tracking/storage/database.py +0 -0
  362. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/tracking/storage/filesystem.py +0 -0
  363. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/utils/__init__.py +0 -0
  364. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/utils/data_paths.py +0 -0
  365. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/utils/data_validation.py +0 -0
  366. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/utils/export.py +0 -0
  367. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/utils/migrations/__init__.py +0 -0
  368. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/utils/migrations/generator.py +0 -0
  369. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/utils/migrations/models.py +0 -0
  370. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/utils/migrations/runner.py +0 -0
  371. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/utils/resource_manager.py +0 -0
  372. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/utils/secure_logging.py +0 -0
  373. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/utils/templates.py +0 -0
  374. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/visualization/__init__.py +0 -0
  375. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/visualization/api.py +0 -0
  376. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/visualization/dashboard.py +0 -0
  377. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/visualization/performance.py +0 -0
  378. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/visualization/reports.py +0 -0
  379. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/__init__.py +0 -0
  380. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/async_builder.py +0 -0
  381. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/async_patterns.py +0 -0
  382. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/builder.py +0 -0
  383. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/contracts.py +0 -0
  384. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/convergence.py +0 -0
  385. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/cycle_analyzer.py +0 -0
  386. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/cycle_builder.py +0 -0
  387. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/cycle_config.py +0 -0
  388. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/cycle_debugger.py +0 -0
  389. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/cycle_exceptions.py +0 -0
  390. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/cycle_profiler.py +0 -0
  391. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/cycle_state.py +0 -0
  392. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/edge_infrastructure.py +0 -0
  393. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/graph.py +0 -0
  394. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/input_handling.py +0 -0
  395. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/mermaid_visualizer.py +0 -0
  396. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/migration.py +0 -0
  397. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/mock_registry.py +0 -0
  398. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/resilience.py +0 -0
  399. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/runner.py +0 -0
  400. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/safety.py +0 -0
  401. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/state.py +0 -0
  402. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/templates.py +0 -0
  403. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/type_inference.py +0 -0
  404. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/validation.py +0 -0
  405. {kailash-0.8.7 → kailash-0.9.0}/src/kailash/workflow/visualization.py +0 -0
  406. {kailash-0.8.7 → kailash-0.9.0}/src/kailash.egg-info/SOURCES.txt +0 -0
  407. {kailash-0.8.7 → kailash-0.9.0}/src/kailash.egg-info/dependency_links.txt +0 -0
  408. {kailash-0.8.7 → kailash-0.9.0}/src/kailash.egg-info/entry_points.txt +0 -0
  409. {kailash-0.8.7 → kailash-0.9.0}/src/kailash.egg-info/not-zip-safe +0 -0
  410. {kailash-0.8.7 → kailash-0.9.0}/src/kailash.egg-info/requires.txt +0 -0
  411. {kailash-0.8.7 → kailash-0.9.0}/src/kailash.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kailash
3
- Version: 0.8.7
3
+ Version: 0.9.0
4
4
  Summary: Python SDK for the Kailash container-node architecture
5
5
  Home-page: https://github.com/integrum/kailash-python-sdk
6
6
  Author: Integrum
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "kailash"
7
- version = "0.8.7"
7
+ version = "0.9.0"
8
8
  description = "Python SDK for the Kailash container-node architecture"
9
9
  authors = [
10
10
  {name = "Integrum", email = "info@integrum.com"}
@@ -3,10 +3,9 @@
3
3
  The Kailash SDK provides a comprehensive framework for creating nodes and workflows
4
4
  that align with container-node architecture while allowing rapid prototyping.
5
5
 
6
- New in v0.8.7: MCP Parameter Validation Tool, 100% MCP Protocol compliance with missing
7
- handlers, Phase 2 MCP subscriptions with GraphQL optimization, WebSocket compression, and
8
- Redis-backed distributed coordination.
9
- Previous v0.8.6: Enhanced parameter validation system with debugging tools.
6
+ New in v0.9.0: Complete migration from cycle=True to modern CycleBuilder API across
7
+ all documentation and examples. Enhanced cyclic workflow patterns for enterprise use.
8
+ Previous v0.8.7: MCP Parameter Validation Tool, 100% MCP Protocol compliance.
10
9
  """
11
10
 
12
11
  from kailash.nodes.base import Node, NodeMetadata, NodeParameter
@@ -49,7 +48,7 @@ except ImportError:
49
48
  # For backward compatibility
50
49
  WorkflowGraph = Workflow
51
50
 
52
- __version__ = "0.8.6"
51
+ __version__ = "0.9.0"
53
52
 
54
53
  __all__ = [
55
54
  # Core workflow components
@@ -85,10 +85,14 @@ class SwitchNode(Node):
85
85
  ... operator="==",
86
86
  ... value=True
87
87
  ... ))
88
- >>> workflow.connect("convergence", "switch")
89
- >>> workflow.connect("switch", "processor",
90
- ... condition="false_output", cycle=True)
91
- >>> workflow.connect("switch", "output", condition="true_output")
88
+ >>> workflow.add_connection("convergence", "result", "switch", "input_data")
89
+ >>> # Use CycleBuilder for cyclic connections
90
+ >>> cycle = workflow.create_cycle("convergence_loop")
91
+ >>> cycle.connect("switch", "false_output", "processor", "input")
92
+ >>> cycle.connect("processor", "result", "convergence", "data")
93
+ >>> cycle.max_iterations(50).build()
94
+ >>> # Non-cyclic output connection
95
+ >>> workflow.add_connection("switch", "true_output", "output", "data")
92
96
  """
93
97
 
94
98
  def get_parameters(self) -> dict[str, NodeParameter]:
@@ -636,6 +636,26 @@ class LocalRuntime:
636
636
  if self.debug:
637
637
  self.logger.debug(f"Node {node_id} inputs: {inputs}")
638
638
 
639
+ # CONDITIONAL EXECUTION: Skip nodes that only receive None inputs from conditional routing
640
+ if self._should_skip_conditional_node(workflow, node_id, inputs):
641
+ self.logger.info(
642
+ f"Skipping node {node_id} - all conditional inputs are None"
643
+ )
644
+ # Store None result to indicate the node was skipped
645
+ results[node_id] = None
646
+ node_outputs[node_id] = None
647
+
648
+ # Update task status if tracking is enabled
649
+ if task and task_manager:
650
+ task_manager.update_task_status(
651
+ task.task_id,
652
+ TaskStatus.COMPLETED,
653
+ result=None,
654
+ ended_at=datetime.now(UTC),
655
+ metadata={"skipped": True, "reason": "conditional_routing"},
656
+ )
657
+ continue
658
+
639
659
  # Execute node with unified async/sync support and metrics collection
640
660
  collector = MetricsCollector()
641
661
  with collector.collect(node_id=node_id) as metrics_context:
@@ -1123,6 +1143,88 @@ class LocalRuntime:
1123
1143
  metrics_collector = get_metrics_collector()
1124
1144
  metrics_collector.reset_metrics()
1125
1145
 
1146
+ def _should_skip_conditional_node(
1147
+ self, workflow: Workflow, node_id: str, inputs: dict[str, Any]
1148
+ ) -> bool:
1149
+ """Determine if a node should be skipped due to conditional routing.
1150
+
1151
+ A node should be skipped if:
1152
+ 1. It has incoming connections from conditional nodes (like SwitchNode)
1153
+ 2. All of its connected inputs are None
1154
+ 3. It has no node-level configuration parameters that would make it run independently
1155
+
1156
+ Args:
1157
+ workflow: The workflow being executed.
1158
+ node_id: Node ID to check.
1159
+ inputs: Prepared inputs for the node.
1160
+
1161
+ Returns:
1162
+ True if the node should be skipped, False otherwise.
1163
+ """
1164
+ # Get all incoming edges for this node
1165
+ incoming_edges = list(workflow.graph.in_edges(node_id, data=True))
1166
+
1167
+ # If the node has no incoming connections, don't skip it
1168
+ # (it might be a source node or have configuration parameters)
1169
+ if not incoming_edges:
1170
+ return False
1171
+
1172
+ # Check if any incoming edges are from conditional nodes
1173
+ has_conditional_inputs = False
1174
+ for source_node_id, _, edge_data in incoming_edges:
1175
+ source_node = workflow._node_instances.get(source_node_id)
1176
+ if source_node and source_node.__class__.__name__ in ["SwitchNode"]:
1177
+ has_conditional_inputs = True
1178
+ break
1179
+
1180
+ # If no conditional inputs, don't skip
1181
+ if not has_conditional_inputs:
1182
+ return False
1183
+
1184
+ # Get the node instance to check for configuration parameters
1185
+ node_instance = workflow._node_instances.get(node_id)
1186
+ if not node_instance:
1187
+ return False
1188
+
1189
+ # Check if the node has configuration parameters that would make it run independently
1190
+ # (excluding standard parameters and None values)
1191
+ node_config = getattr(node_instance, "config", {})
1192
+ significant_config = {
1193
+ k: v
1194
+ for k, v in node_config.items()
1195
+ if k not in ["metadata", "name", "id"] and v is not None
1196
+ }
1197
+
1198
+ # If the node has significant configuration, it might still be valuable to run
1199
+ if significant_config:
1200
+ # Check if any connected inputs have actual data (not None)
1201
+ connected_inputs = {}
1202
+ for _, _, edge_data in incoming_edges:
1203
+ mapping = edge_data.get("mapping", {})
1204
+ for source_key, target_key in mapping.items():
1205
+ if target_key in inputs:
1206
+ connected_inputs[target_key] = inputs[target_key]
1207
+
1208
+ # If all connected inputs are None but node has config, still skip
1209
+ # The user can configure the node to run with default values if needed
1210
+ if all(v is None for v in connected_inputs.values()):
1211
+ return True
1212
+
1213
+ # Check if all connected inputs are None
1214
+ # This is the main condition for conditional routing
1215
+ has_non_none_input = False
1216
+ for _, _, edge_data in incoming_edges:
1217
+ mapping = edge_data.get("mapping", {})
1218
+ for source_key, target_key in mapping.items():
1219
+ if target_key in inputs and inputs[target_key] is not None:
1220
+ has_non_none_input = True
1221
+ break
1222
+ if has_non_none_input:
1223
+ break
1224
+
1225
+ # Skip the node if all connected inputs are None
1226
+ return not has_non_none_input
1227
+
1126
1228
  def _should_stop_on_error(self, workflow: Workflow, node_id: str) -> bool:
1127
1229
  """Determine if execution should stop when a node fails.
1128
1230
 
@@ -220,6 +220,60 @@ class CyclicWorkflowExecutor:
220
220
  else:
221
221
  return obj
222
222
 
223
+ def _should_skip_conditional_node_cyclic(
224
+ self, workflow: Workflow, node_id: str, merged_inputs: dict[str, Any]
225
+ ) -> bool:
226
+ """Determine if a node should be skipped due to conditional routing in cyclic execution.
227
+
228
+ This is similar to LocalRuntime._should_skip_conditional_node but adapted for cyclic execution.
229
+
230
+ Args:
231
+ workflow: The workflow being executed.
232
+ node_id: Node ID to check.
233
+ merged_inputs: Merged inputs for the node.
234
+
235
+ Returns:
236
+ True if the node should be skipped, False otherwise.
237
+ """
238
+ # Get all incoming edges for this node
239
+ incoming_edges = list(workflow.graph.in_edges(node_id, data=True))
240
+
241
+ # If the node has no incoming connections, don't skip it
242
+ if not incoming_edges:
243
+ return False
244
+
245
+ # Check if any incoming edges are from conditional nodes
246
+ has_conditional_inputs = False
247
+ for source_node_id, _, edge_data in incoming_edges:
248
+ try:
249
+ source_node = workflow.get_node(source_node_id)
250
+ if source_node and source_node.__class__.__name__ in ["SwitchNode"]:
251
+ has_conditional_inputs = True
252
+ break
253
+ except:
254
+ continue
255
+
256
+ # If no conditional inputs, don't skip
257
+ if not has_conditional_inputs:
258
+ return False
259
+
260
+ # Check if all connected inputs are None
261
+ has_non_none_input = False
262
+ for _, _, edge_data in incoming_edges:
263
+ mapping = edge_data.get("mapping", {})
264
+ for source_key, target_key in mapping.items():
265
+ if (
266
+ target_key in merged_inputs
267
+ and merged_inputs[target_key] is not None
268
+ ):
269
+ has_non_none_input = True
270
+ break
271
+ if has_non_none_input:
272
+ break
273
+
274
+ # Skip the node if all connected inputs are None
275
+ return not has_non_none_input
276
+
223
277
  def _execute_with_cycles(
224
278
  self,
225
279
  workflow: Workflow,
@@ -863,6 +917,20 @@ class CyclicWorkflowExecutor:
863
917
  except Exception as e:
864
918
  logger.warning(f"Failed to create task for node '{node_id}': {e}")
865
919
 
920
+ # CONDITIONAL EXECUTION: Skip nodes that only receive None inputs from conditional routing
921
+ if self._should_skip_conditional_node_cyclic(workflow, node_id, merged_inputs):
922
+ logger.info(f"Skipping node {node_id} - all conditional inputs are None")
923
+ # Store None result to indicate the node was skipped
924
+ if task and task_manager:
925
+ task_manager.update_task_status(
926
+ task.task_id,
927
+ TaskStatus.COMPLETED,
928
+ result=None,
929
+ ended_at=datetime.now(UTC),
930
+ metadata={"skipped": True, "reason": "conditional_routing"},
931
+ )
932
+ return None
933
+
866
934
  # Execute node with metrics collection
867
935
  collector = MetricsCollector()
868
936
  logger.debug(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kailash
3
- Version: 0.8.7
3
+ Version: 0.9.0
4
4
  Summary: Python SDK for the Kailash container-node architecture
5
5
  Home-page: https://github.com/integrum/kailash-python-sdk
6
6
  Author: Integrum
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes