kailash 0.9.1__tar.gz → 0.9.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) hide show
  1. {kailash-0.9.1/src/kailash.egg-info → kailash-0.9.2}/PKG-INFO +1 -1
  2. {kailash-0.9.1 → kailash-0.9.2}/pyproject.toml +1 -1
  3. {kailash-0.9.1 → kailash-0.9.2}/setup.py +1 -1
  4. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/__init__.py +4 -2
  5. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/client.py +371 -6
  6. {kailash-0.9.1 → kailash-0.9.2/src/kailash.egg-info}/PKG-INFO +1 -1
  7. {kailash-0.9.1 → kailash-0.9.2}/LICENSE +0 -0
  8. {kailash-0.9.1 → kailash-0.9.2}/MANIFEST.in +0 -0
  9. {kailash-0.9.1 → kailash-0.9.2}/README.md +0 -0
  10. {kailash-0.9.1 → kailash-0.9.2}/setup.cfg +0 -0
  11. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/__main__.py +0 -0
  12. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/access_control/__init__.py +0 -0
  13. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/access_control/managers.py +0 -0
  14. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/access_control/rule_evaluators.py +0 -0
  15. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/access_control.py +0 -0
  16. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/access_control_abac.py +0 -0
  17. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/adapters/__init__.py +0 -0
  18. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/adapters/mcp_platform_adapter.py +0 -0
  19. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/api/auth.py +0 -0
  20. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/api/custom_nodes.py +0 -0
  21. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/api/custom_nodes_secure.py +0 -0
  22. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/api/gateway.py +0 -0
  23. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/api/mcp_integration.py +0 -0
  24. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/api/studio.py +0 -0
  25. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/api/workflow_api.py +0 -0
  26. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/channels/__init__.py +0 -0
  27. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/channels/api_channel.py +0 -0
  28. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/channels/base.py +0 -0
  29. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/channels/cli_channel.py +0 -0
  30. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/channels/event_router.py +0 -0
  31. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/channels/mcp_channel.py +0 -0
  32. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/channels/session.py +0 -0
  33. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/cli/__init__.py +0 -0
  34. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/cli/commands.py +0 -0
  35. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/cli/validate_imports.py +0 -0
  36. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/cli/validation_audit.py +0 -0
  37. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/client/__init__.py +0 -0
  38. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/client/enhanced_client.py +0 -0
  39. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/config/__init__.py +0 -0
  40. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/config/database_config.py +0 -0
  41. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/core/actors/__init__.py +0 -0
  42. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/core/actors/adaptive_pool_controller.py +0 -0
  43. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/core/actors/connection_actor.py +0 -0
  44. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/core/actors/supervisor.py +0 -0
  45. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/core/ml/__init__.py +0 -0
  46. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/core/ml/query_patterns.py +0 -0
  47. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/core/monitoring/__init__.py +0 -0
  48. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/core/monitoring/connection_metrics.py +0 -0
  49. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/core/optimization/__init__.py +0 -0
  50. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/core/resilience/__init__.py +0 -0
  51. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/core/resilience/bulkhead.py +0 -0
  52. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/core/resilience/circuit_breaker.py +0 -0
  53. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/core/resilience/health_monitor.py +0 -0
  54. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/database/__init__.py +0 -0
  55. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/database/execution_pipeline.py +0 -0
  56. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/__init__.py +0 -0
  57. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/compliance.py +0 -0
  58. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/consistency.py +0 -0
  59. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/coordination/__init__.py +0 -0
  60. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/coordination/global_ordering.py +0 -0
  61. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/coordination/leader_election.py +0 -0
  62. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/coordination/partition_detector.py +0 -0
  63. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/coordination/raft.py +0 -0
  64. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/discovery.py +0 -0
  65. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/location.py +0 -0
  66. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/migration/__init__.py +0 -0
  67. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/migration/edge_migration_service.py +0 -0
  68. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/migration/edge_migrator.py +0 -0
  69. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/monitoring/__init__.py +0 -0
  70. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/monitoring/edge_monitor.py +0 -0
  71. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/prediction/__init__.py +0 -0
  72. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/prediction/predictive_warmer.py +0 -0
  73. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/resource/__init__.py +0 -0
  74. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/resource/cloud_integration.py +0 -0
  75. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/resource/cost_optimizer.py +0 -0
  76. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/resource/docker_integration.py +0 -0
  77. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/resource/kubernetes_integration.py +0 -0
  78. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/resource/platform_integration.py +0 -0
  79. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/resource/predictive_scaler.py +0 -0
  80. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/resource/resource_analyzer.py +0 -0
  81. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/edge/resource/resource_pools.py +0 -0
  82. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/gateway/__init__.py +0 -0
  83. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/gateway/api.py +0 -0
  84. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/gateway/enhanced_gateway.py +0 -0
  85. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/gateway/resource_resolver.py +0 -0
  86. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/gateway/security.py +0 -0
  87. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/integrations/dataflow_edge.py +0 -0
  88. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/manifest.py +0 -0
  89. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/__init__.py +0 -0
  90. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/advanced_features.py +0 -0
  91. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/ai_registry_server.py +0 -0
  92. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/auth.py +0 -0
  93. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/client_new.py +0 -0
  94. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/discovery.py +0 -0
  95. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/errors.py +0 -0
  96. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/oauth.py +0 -0
  97. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/protocol.py +0 -0
  98. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/registry_integration.py +0 -0
  99. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/server.py +0 -0
  100. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/servers/ai_registry.py +0 -0
  101. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/subscriptions.py +0 -0
  102. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/transports.py +0 -0
  103. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/utils/__init__.py +0 -0
  104. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/utils/cache.py +0 -0
  105. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/utils/config.py +0 -0
  106. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/utils/formatters.py +0 -0
  107. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/mcp_server/utils/metrics.py +0 -0
  108. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/__init__.py +0 -0
  109. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/auth/__init__.py +0 -0
  110. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/auth/access_control.py +0 -0
  111. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/auth/auth_manager.py +0 -0
  112. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/auth/exceptions.py +0 -0
  113. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/auth/jwt_auth.py +0 -0
  114. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/auth/models.py +0 -0
  115. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/auth/utils.py +0 -0
  116. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/communication/__init__.py +0 -0
  117. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/communication/ai_chat.py +0 -0
  118. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/communication/api_gateway.py +0 -0
  119. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/communication/events.py +0 -0
  120. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/communication/realtime.py +0 -0
  121. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/core/__init__.py +0 -0
  122. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/core/agent_ui.py +0 -0
  123. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/core/schema.py +0 -0
  124. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/core/workflows.py +0 -0
  125. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/database/__init__.py +0 -0
  126. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/database/base.py +0 -0
  127. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/database/base_models.py +0 -0
  128. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/database/enums.py +0 -0
  129. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/database/migrations.py +0 -0
  130. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/database/models.py +0 -0
  131. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/database/repositories.py +0 -0
  132. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/database/session_manager.py +0 -0
  133. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/gateway/__init__.py +0 -0
  134. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/gateway/checkpoint_manager.py +0 -0
  135. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/gateway/deduplicator.py +0 -0
  136. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/gateway/durable_gateway.py +0 -0
  137. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/gateway/durable_request.py +0 -0
  138. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/gateway/event_store.py +0 -0
  139. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/gateway/storage_backends.py +0 -0
  140. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/mcp/__init__.py +0 -0
  141. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/mcp/client_integration.py +0 -0
  142. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/middleware/mcp/enhanced_server.py +0 -0
  143. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/monitoring/__init__.py +0 -0
  144. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/monitoring/alerts.py +0 -0
  145. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/monitoring/metrics.py +0 -0
  146. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/__init__.py +0 -0
  147. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/admin/__init__.py +0 -0
  148. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/admin/audit_log.py +0 -0
  149. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/admin/permission_check.py +0 -0
  150. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/admin/role_management.py +0 -0
  151. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/admin/schema.sql +0 -0
  152. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/admin/schema_manager.py +0 -0
  153. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/admin/security_event.py +0 -0
  154. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/admin/tenant_isolation.py +0 -0
  155. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/admin/transaction_utils.py +0 -0
  156. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/admin/user_management.py +0 -0
  157. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/ai/__init__.py +0 -0
  158. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/ai/a2a.py +0 -0
  159. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/ai/a2a_backup.py +0 -0
  160. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/ai/agents.py +0 -0
  161. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/ai/ai_providers.py +0 -0
  162. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/ai/embedding_generator.py +0 -0
  163. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/ai/hybrid_search.py +0 -0
  164. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/ai/intelligent_agent_orchestrator.py +0 -0
  165. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/ai/iterative_llm_agent.py +0 -0
  166. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/ai/llm_agent.py +0 -0
  167. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/ai/models.py +0 -0
  168. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/ai/self_organizing.py +0 -0
  169. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/ai/semantic_memory.py +0 -0
  170. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/ai/streaming_analytics.py +0 -0
  171. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/ai/vision_utils.py +0 -0
  172. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/alerts/__init__.py +0 -0
  173. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/alerts/base.py +0 -0
  174. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/alerts/discord.py +0 -0
  175. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/api/__init__.py +0 -0
  176. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/api/auth.py +0 -0
  177. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/api/graphql.py +0 -0
  178. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/api/http.py +0 -0
  179. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/api/monitoring.py +0 -0
  180. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/api/rate_limiting.py +0 -0
  181. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/api/rest.py +0 -0
  182. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/api/security.py +0 -0
  183. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/auth/__init__.py +0 -0
  184. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/auth/directory_integration.py +0 -0
  185. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/auth/enterprise_auth_provider.py +0 -0
  186. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/auth/mfa.py +0 -0
  187. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/auth/risk_assessment.py +0 -0
  188. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/auth/session_management.py +0 -0
  189. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/auth/sso.py +0 -0
  190. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/base.py +0 -0
  191. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/base_async.py +0 -0
  192. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/base_cycle_aware.py +0 -0
  193. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/base_with_acl.py +0 -0
  194. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/cache/__init__.py +0 -0
  195. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/cache/cache.py +0 -0
  196. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/cache/cache_invalidation.py +0 -0
  197. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/cache/redis_pool_manager.py +0 -0
  198. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/code/__init__.py +0 -0
  199. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/code/async_python.py +0 -0
  200. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/code/python.py +0 -0
  201. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/compliance/__init__.py +0 -0
  202. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/compliance/data_retention.py +0 -0
  203. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/compliance/gdpr.py +0 -0
  204. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/__init__.py +0 -0
  205. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/async_connection.py +0 -0
  206. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/async_sql.py +0 -0
  207. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/async_vector.py +0 -0
  208. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/bulk_operations.py +0 -0
  209. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/directory.py +0 -0
  210. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/event_generation.py +0 -0
  211. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/file_discovery.py +0 -0
  212. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/optimistic_locking.py +0 -0
  213. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/query_builder.py +0 -0
  214. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/query_cache.py +0 -0
  215. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/query_pipeline.py +0 -0
  216. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/query_router.py +0 -0
  217. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/readers.py +0 -0
  218. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/redis.py +0 -0
  219. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/retrieval.py +0 -0
  220. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/sharepoint_graph.py +0 -0
  221. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/sources.py +0 -0
  222. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/sql.py +0 -0
  223. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/streaming.py +0 -0
  224. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/vector_db.py +0 -0
  225. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/workflow_connection_pool.py +0 -0
  226. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/data/writers.py +0 -0
  227. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/edge/__init__.py +0 -0
  228. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/edge/base.py +0 -0
  229. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/edge/cloud_node.py +0 -0
  230. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/edge/coordination.py +0 -0
  231. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/edge/docker_node.py +0 -0
  232. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/edge/edge_data.py +0 -0
  233. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/edge/edge_migration_node.py +0 -0
  234. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/edge/edge_monitoring_node.py +0 -0
  235. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/edge/edge_state.py +0 -0
  236. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/edge/edge_warming_node.py +0 -0
  237. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/edge/kubernetes_node.py +0 -0
  238. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/edge/platform_node.py +0 -0
  239. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/edge/resource_analyzer_node.py +0 -0
  240. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/edge/resource_optimizer_node.py +0 -0
  241. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/edge/resource_scaler_node.py +0 -0
  242. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/enterprise/__init__.py +0 -0
  243. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/enterprise/audit_logger.py +0 -0
  244. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/enterprise/batch_processor.py +0 -0
  245. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/enterprise/data_lineage.py +0 -0
  246. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/enterprise/mcp_executor.py +0 -0
  247. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/enterprise/service_discovery.py +0 -0
  248. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/enterprise/tenant_assignment.py +0 -0
  249. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/governance.py +0 -0
  250. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/logic/__init__.py +0 -0
  251. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/logic/async_operations.py +0 -0
  252. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/logic/convergence.py +0 -0
  253. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/logic/loop.py +0 -0
  254. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/logic/operations.py +0 -0
  255. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/logic/workflow.py +0 -0
  256. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/mixins/__init__.py +0 -0
  257. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/mixins/event_emitter.py +0 -0
  258. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/mixins/mcp.py +0 -0
  259. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/mixins/security.py +0 -0
  260. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/mixins.py +0 -0
  261. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/monitoring/__init__.py +0 -0
  262. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/monitoring/connection_dashboard.py +0 -0
  263. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/monitoring/deadlock_detector.py +0 -0
  264. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/monitoring/health_check.py +0 -0
  265. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/monitoring/log_processor.py +0 -0
  266. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/monitoring/metrics_collector.py +0 -0
  267. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/monitoring/performance_anomaly.py +0 -0
  268. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/monitoring/performance_benchmark.py +0 -0
  269. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/monitoring/race_condition_detector.py +0 -0
  270. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/monitoring/transaction_metrics.py +0 -0
  271. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/monitoring/transaction_monitor.py +0 -0
  272. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/ports.py +0 -0
  273. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/__init__.py +0 -0
  274. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/advanced.py +0 -0
  275. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/agentic.py +0 -0
  276. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/conversational.py +0 -0
  277. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/evaluation.py +0 -0
  278. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/federated.py +0 -0
  279. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/graph.py +0 -0
  280. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/multimodal.py +0 -0
  281. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/optimized.py +0 -0
  282. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/privacy.py +0 -0
  283. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/query_processing.py +0 -0
  284. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/realtime.py +0 -0
  285. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/registry.py +0 -0
  286. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/router.py +0 -0
  287. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/similarity.py +0 -0
  288. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/strategies.py +0 -0
  289. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/rag/workflows.py +0 -0
  290. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/security/__init__.py +0 -0
  291. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/security/abac_evaluator.py +0 -0
  292. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/security/audit_log.py +0 -0
  293. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/security/behavior_analysis.py +0 -0
  294. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/security/credential_manager.py +0 -0
  295. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/security/rotating_credentials.py +0 -0
  296. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/security/security_event.py +0 -0
  297. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/security/threat_detection.py +0 -0
  298. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/system/__init__.py +0 -0
  299. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/system/command_parser.py +0 -0
  300. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/testing/__init__.py +0 -0
  301. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/testing/credential_testing.py +0 -0
  302. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/transaction/__init__.py +0 -0
  303. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/transaction/distributed_transaction_manager.py +0 -0
  304. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/transaction/saga_coordinator.py +0 -0
  305. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/transaction/saga_state_storage.py +0 -0
  306. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/transaction/saga_step.py +0 -0
  307. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/transaction/transaction_context.py +0 -0
  308. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/transaction/two_phase_commit.py +0 -0
  309. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/transform/__init__.py +0 -0
  310. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/transform/chunkers.py +0 -0
  311. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/transform/formatters.py +0 -0
  312. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/transform/processors.py +0 -0
  313. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/validation/__init__.py +0 -0
  314. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/validation/test_executor.py +0 -0
  315. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/validation/validation_nodes.py +0 -0
  316. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/nodes/validation.py +0 -0
  317. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/resources/__init__.py +0 -0
  318. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/resources/factory.py +0 -0
  319. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/resources/health.py +0 -0
  320. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/resources/reference.py +0 -0
  321. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/resources/registry.py +0 -0
  322. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/__init__.py +0 -0
  323. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/access_controlled.py +0 -0
  324. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/async_local.py +0 -0
  325. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/docker.py +0 -0
  326. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/local.py +0 -0
  327. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/parallel.py +0 -0
  328. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/parallel_cyclic.py +0 -0
  329. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/parameter_injection.py +0 -0
  330. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/parameter_injector.py +0 -0
  331. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/runner.py +0 -0
  332. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/secret_provider.py +0 -0
  333. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/testing.py +0 -0
  334. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/validation/__init__.py +0 -0
  335. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/validation/connection_context.py +0 -0
  336. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/validation/enhanced_error_formatter.py +0 -0
  337. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/validation/error_categorizer.py +0 -0
  338. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/validation/import_validator.py +0 -0
  339. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/validation/metrics.py +0 -0
  340. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/validation/performance.py +0 -0
  341. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/runtime/validation/suggestion_engine.py +0 -0
  342. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/sdk_exceptions.py +0 -0
  343. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/security.py +0 -0
  344. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/servers/__init__.py +0 -0
  345. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/servers/durable_workflow_server.py +0 -0
  346. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/servers/enterprise_workflow_server.py +0 -0
  347. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/servers/gateway.py +0 -0
  348. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/servers/workflow_server.py +0 -0
  349. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/testing/__init__.py +0 -0
  350. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/testing/async_test_case.py +0 -0
  351. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/testing/async_utils.py +0 -0
  352. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/testing/fixtures.py +0 -0
  353. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/testing/mock_registry.py +0 -0
  354. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/tracking/__init__.py +0 -0
  355. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/tracking/manager.py +0 -0
  356. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/tracking/metrics_collector.py +0 -0
  357. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/tracking/models.py +0 -0
  358. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/tracking/storage/__init__.py +0 -0
  359. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/tracking/storage/base.py +0 -0
  360. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/tracking/storage/database.py +0 -0
  361. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/tracking/storage/filesystem.py +0 -0
  362. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/utils/__init__.py +0 -0
  363. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/utils/data_paths.py +0 -0
  364. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/utils/data_validation.py +0 -0
  365. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/utils/export.py +0 -0
  366. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/utils/migrations/__init__.py +0 -0
  367. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/utils/migrations/generator.py +0 -0
  368. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/utils/migrations/models.py +0 -0
  369. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/utils/migrations/runner.py +0 -0
  370. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/utils/resource_manager.py +0 -0
  371. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/utils/secure_logging.py +0 -0
  372. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/utils/templates.py +0 -0
  373. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/visualization/__init__.py +0 -0
  374. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/visualization/api.py +0 -0
  375. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/visualization/dashboard.py +0 -0
  376. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/visualization/performance.py +0 -0
  377. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/visualization/reports.py +0 -0
  378. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/__init__.py +0 -0
  379. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/async_builder.py +0 -0
  380. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/async_patterns.py +0 -0
  381. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/builder.py +0 -0
  382. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/contracts.py +0 -0
  383. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/convergence.py +0 -0
  384. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/cycle_analyzer.py +0 -0
  385. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/cycle_builder.py +0 -0
  386. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/cycle_config.py +0 -0
  387. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/cycle_debugger.py +0 -0
  388. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/cycle_exceptions.py +0 -0
  389. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/cycle_profiler.py +0 -0
  390. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/cycle_state.py +0 -0
  391. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/cyclic_runner.py +0 -0
  392. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/edge_infrastructure.py +0 -0
  393. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/graph.py +0 -0
  394. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/input_handling.py +0 -0
  395. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/mermaid_visualizer.py +0 -0
  396. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/migration.py +0 -0
  397. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/mock_registry.py +0 -0
  398. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/resilience.py +0 -0
  399. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/runner.py +0 -0
  400. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/safety.py +0 -0
  401. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/state.py +0 -0
  402. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/templates.py +0 -0
  403. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/type_inference.py +0 -0
  404. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/validation.py +0 -0
  405. {kailash-0.9.1 → kailash-0.9.2}/src/kailash/workflow/visualization.py +0 -0
  406. {kailash-0.9.1 → kailash-0.9.2}/src/kailash.egg-info/SOURCES.txt +0 -0
  407. {kailash-0.9.1 → kailash-0.9.2}/src/kailash.egg-info/dependency_links.txt +0 -0
  408. {kailash-0.9.1 → kailash-0.9.2}/src/kailash.egg-info/entry_points.txt +0 -0
  409. {kailash-0.9.1 → kailash-0.9.2}/src/kailash.egg-info/not-zip-safe +0 -0
  410. {kailash-0.9.1 → kailash-0.9.2}/src/kailash.egg-info/requires.txt +0 -0
  411. {kailash-0.9.1 → kailash-0.9.2}/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.9.1
3
+ Version: 0.9.2
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.9.1"
7
+ version = "0.9.2"
8
8
  description = "Python SDK for the Kailash container-node architecture"
9
9
  authors = [
10
10
  {name = "Integrum", email = "info@integrum.com"}
@@ -13,7 +13,7 @@ with open(os.path.join(this_directory, "README.md"), encoding="utf-8") as f:
13
13
  # Package configuration
14
14
  setup(
15
15
  name="kailash",
16
- version="0.8.5",
16
+ version="0.9.2",
17
17
  author="Integrum",
18
18
  author_email="info@integrum.com",
19
19
  description="Python SDK for the Kailash container-node architecture",
@@ -3,7 +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.9.1: DataFlow PostgreSQL parameter conversion verification and comprehensive testing infrastructure.
6
+ New in v0.9.2: WebSocket Transport Support with Enterprise Connection Pooling.
7
+ Fixed "Unsupported transport: websocket" error. Added 73% performance improvement with connection pooling.
8
+ Previous v0.9.1: DataFlow PostgreSQL parameter conversion verification and comprehensive testing infrastructure.
7
9
  Complete validation of parameter conversion chain from DataFlow to AsyncSQLDatabaseNode to PostgreSQL.
8
10
  Previous v0.9.0: Complete migration from cycle=True to modern CycleBuilder API.
9
11
  """
@@ -48,7 +50,7 @@ except ImportError:
48
50
  # For backward compatibility
49
51
  WorkflowGraph = Workflow
50
52
 
51
- __version__ = "0.9.1"
53
+ __version__ = "0.9.2"
52
54
 
53
55
  __all__ = [
54
56
  # Core workflow components
@@ -7,7 +7,7 @@ import os
7
7
  import time
8
8
  import uuid
9
9
  from contextlib import AsyncExitStack
10
- from typing import Any, Dict, List, Optional, Union
10
+ from typing import Any, Dict, List, Optional, Tuple, Union
11
11
 
12
12
  from .auth import AuthManager, AuthProvider, PermissionManager, RateLimiter
13
13
  from .errors import (
@@ -98,7 +98,9 @@ class MCPClient:
98
98
 
99
99
  # Connection pooling
100
100
  self.connection_pool_config = connection_pool_config or {}
101
- self._connection_pools: Dict[str, List[Any]] = {}
101
+ self._websocket_pools: Dict[str, Any] = {} # url -> connection info
102
+ self._pool_lock = asyncio.Lock()
103
+ self._connection_last_used: Dict[str, float] = {}
102
104
 
103
105
  # Metrics
104
106
  if enable_metrics:
@@ -137,6 +139,8 @@ class MCPClient:
137
139
 
138
140
  # Update transport usage metrics
139
141
  if self.metrics:
142
+ if "transport_usage" not in self.metrics:
143
+ self.metrics["transport_usage"] = {}
140
144
  transport_counts = self.metrics["transport_usage"]
141
145
  transport_counts[transport_type] = (
142
146
  transport_counts.get(transport_type, 0) + 1
@@ -148,6 +152,8 @@ class MCPClient:
148
152
  return await self._discover_tools_sse(server_config, timeout)
149
153
  elif transport_type == "http":
150
154
  return await self._discover_tools_http(server_config, timeout)
155
+ elif transport_type == "websocket":
156
+ return await self._discover_tools_websocket(server_config, timeout)
151
157
  else:
152
158
  raise TransportError(
153
159
  f"Unsupported transport: {transport_type}",
@@ -173,7 +179,8 @@ class MCPClient:
173
179
 
174
180
  except Exception as e:
175
181
  if self.metrics:
176
- self.metrics["requests_failed"] += 1
182
+ if "requests_failed" in self.metrics:
183
+ self.metrics["requests_failed"] += 1
177
184
 
178
185
  logger.error(f"Failed to discover tools from {server_key}: {e}")
179
186
  return []
@@ -309,6 +316,67 @@ class MCPClient:
309
316
 
310
317
  return tools
311
318
 
319
+ async def _discover_tools_websocket(
320
+ self, server_config: Union[str, Dict[str, Any]], timeout: Optional[float]
321
+ ) -> List[Dict[str, Any]]:
322
+ """Discover tools using WebSocket transport."""
323
+ from mcp import ClientSession
324
+ from mcp.client.websocket import websocket_client
325
+
326
+ # Extract WebSocket URL from server config
327
+ if isinstance(server_config, str):
328
+ url = server_config
329
+ else:
330
+ url = server_config.get("url")
331
+ if not url:
332
+ raise TransportError(
333
+ "WebSocket URL not provided", transport_type="websocket"
334
+ )
335
+
336
+ # Get or create connection from pool
337
+ session, is_new = await self._get_or_create_websocket_connection(url, timeout)
338
+
339
+ # Update metrics
340
+ if self.metrics:
341
+ if is_new:
342
+ self.metrics["websocket_pool_misses"] = (
343
+ self.metrics.get("websocket_pool_misses", 0) + 1
344
+ )
345
+ self.metrics["websocket_connections_created"] = (
346
+ self.metrics.get("websocket_connections_created", 0) + 1
347
+ )
348
+ else:
349
+ self.metrics["websocket_pool_hits"] = (
350
+ self.metrics.get("websocket_pool_hits", 0) + 1
351
+ )
352
+ self.metrics["websocket_connections_reused"] = (
353
+ self.metrics.get("websocket_connections_reused", 0) + 1
354
+ )
355
+
356
+ try:
357
+ # List tools with timeout
358
+ if timeout:
359
+ result = await asyncio.wait_for(session.list_tools(), timeout=timeout)
360
+ else:
361
+ result = await session.list_tools()
362
+
363
+ # Convert to standard format
364
+ tools = []
365
+ for tool in result.tools:
366
+ tools.append(
367
+ {
368
+ "name": tool.name,
369
+ "description": tool.description,
370
+ "parameters": tool.inputSchema,
371
+ }
372
+ )
373
+
374
+ return tools
375
+ except Exception as e:
376
+ # On error, remove connection from pool
377
+ await self._remove_connection_from_pool(url)
378
+ raise
379
+
312
380
  async def call_tool(
313
381
  self,
314
382
  server_config: Union[str, Dict[str, Any]],
@@ -350,6 +418,10 @@ class MCPClient:
350
418
  return await self._call_tool_http(
351
419
  server_config, tool_name, arguments, timeout
352
420
  )
421
+ elif transport_type == "websocket":
422
+ return await self._call_tool_websocket(
423
+ server_config, tool_name, arguments, timeout
424
+ )
353
425
  else:
354
426
  raise TransportError(
355
427
  f"Unsupported transport: {transport_type}",
@@ -372,7 +444,8 @@ class MCPClient:
372
444
 
373
445
  except Exception as e:
374
446
  if self.metrics:
375
- self.metrics["requests_failed"] += 1
447
+ if "requests_failed" in self.metrics:
448
+ self.metrics["requests_failed"] += 1
376
449
 
377
450
  logger.error(f"Tool call failed for {tool_name}: {e}")
378
451
  return {"success": False, "error": str(e), "tool_name": tool_name}
@@ -524,6 +597,77 @@ class MCPClient:
524
597
  "tool_name": tool_name,
525
598
  }
526
599
 
600
+ async def _call_tool_websocket(
601
+ self,
602
+ server_config: Union[str, Dict[str, Any]],
603
+ tool_name: str,
604
+ arguments: Dict[str, Any],
605
+ timeout: Optional[float],
606
+ ) -> Dict[str, Any]:
607
+ """Call tool using WebSocket transport."""
608
+ from mcp import ClientSession
609
+ from mcp.client.websocket import websocket_client
610
+
611
+ # Extract WebSocket URL from server config
612
+ if isinstance(server_config, str):
613
+ url = server_config
614
+ else:
615
+ url = server_config.get("url")
616
+ if not url:
617
+ raise TransportError(
618
+ "WebSocket URL not provided", transport_type="websocket"
619
+ )
620
+
621
+ # Get or create connection from pool
622
+ session, is_new = await self._get_or_create_websocket_connection(url, timeout)
623
+
624
+ # Update metrics
625
+ if self.metrics:
626
+ if is_new:
627
+ self.metrics["websocket_pool_misses"] = (
628
+ self.metrics.get("websocket_pool_misses", 0) + 1
629
+ )
630
+ self.metrics["websocket_connections_created"] = (
631
+ self.metrics.get("websocket_connections_created", 0) + 1
632
+ )
633
+ else:
634
+ self.metrics["websocket_pool_hits"] = (
635
+ self.metrics.get("websocket_pool_hits", 0) + 1
636
+ )
637
+ self.metrics["websocket_connections_reused"] = (
638
+ self.metrics.get("websocket_connections_reused", 0) + 1
639
+ )
640
+
641
+ try:
642
+ # Call tool with timeout
643
+ if timeout:
644
+ result = await asyncio.wait_for(
645
+ session.call_tool(name=tool_name, arguments=arguments),
646
+ timeout=timeout,
647
+ )
648
+ else:
649
+ result = await session.call_tool(name=tool_name, arguments=arguments)
650
+
651
+ # Extract content from result
652
+ content = []
653
+ if hasattr(result, "content"):
654
+ for item in result.content:
655
+ if hasattr(item, "text"):
656
+ content.append(item.text)
657
+ else:
658
+ content.append(str(item))
659
+
660
+ return {
661
+ "success": True,
662
+ "content": "\n".join(content) if content else "",
663
+ "result": result,
664
+ "tool_name": tool_name,
665
+ }
666
+ except Exception as e:
667
+ # On error, remove connection from pool
668
+ await self._remove_connection_from_pool(url)
669
+ raise
670
+
527
671
  # Additional enhanced methods
528
672
  async def list_resources(
529
673
  self,
@@ -582,7 +726,12 @@ class MCPClient:
582
726
  def _get_transport_type(self, server_config: Union[str, Dict[str, Any]]) -> str:
583
727
  """Determine transport type from server config."""
584
728
  if isinstance(server_config, str):
585
- return "sse" if server_config.startswith("http") else "stdio"
729
+ if server_config.startswith(("ws://", "wss://")):
730
+ return "websocket"
731
+ elif server_config.startswith(("http://", "https://")):
732
+ return "sse"
733
+ else:
734
+ return "stdio"
586
735
  else:
587
736
  return server_config.get("transport", "stdio")
588
737
 
@@ -596,7 +745,7 @@ class MCPClient:
596
745
  command = server_config.get("command", "python")
597
746
  args = server_config.get("args", [])
598
747
  return f"stdio://{command}:{':'.join(args)}"
599
- elif transport in ["sse", "http"]:
748
+ elif transport in ["sse", "http", "websocket"]:
600
749
  return server_config.get("url", "unknown")
601
750
  else:
602
751
  return str(hash(json.dumps(server_config, sort_keys=True)))
@@ -710,3 +859,219 @@ class MCPClient:
710
859
  "timestamp": str(time.time()),
711
860
  },
712
861
  }
862
+
863
+ # WebSocket Connection Pooling Methods
864
+ async def _get_or_create_websocket_connection(
865
+ self, url: str, timeout: Optional[float] = None
866
+ ) -> Tuple[Any, bool]:
867
+ """Get existing connection from pool or create a new one.
868
+
869
+ Returns:
870
+ Tuple of (session, is_new_connection)
871
+ """
872
+ # Check if pooling is enabled
873
+ if not self._should_use_pooling():
874
+ # Create new connection without pooling
875
+ session = await self._create_websocket_connection(url, timeout)
876
+ return session, True
877
+
878
+ async with self._pool_lock:
879
+ # Update last used time
880
+ self._connection_last_used[url] = time.time()
881
+
882
+ # Check if we have an existing healthy connection
883
+ if url in self._websocket_pools:
884
+ conn_info = self._websocket_pools[url]
885
+ session = conn_info.get("session")
886
+
887
+ # Check if connection is still healthy
888
+ if session and await self._is_connection_healthy(session):
889
+ return session, False
890
+ else:
891
+ # Remove unhealthy connection
892
+ del self._websocket_pools[url]
893
+
894
+ # Check pool size limits
895
+ if len(self._websocket_pools) >= self.connection_pool_config.get(
896
+ "max_connections", 10
897
+ ):
898
+ # Evict least recently used connection
899
+ await self._evict_lru_connection()
900
+
901
+ # Create new connection
902
+ session = await self._create_websocket_connection(url, timeout)
903
+
904
+ # Store in pool
905
+ self._websocket_pools[url] = {
906
+ "session": session,
907
+ "created_at": time.time(),
908
+ "url": url,
909
+ }
910
+
911
+ return session, True
912
+
913
+ async def _create_websocket_connection(
914
+ self, url: str, timeout: Optional[float]
915
+ ) -> Any:
916
+ """Create a new WebSocket connection and session."""
917
+ # Create connection using AsyncExitStack for proper lifecycle management
918
+ # This fixes the manual __aenter__/__aexit__ issue
919
+ from contextlib import AsyncExitStack
920
+
921
+ from mcp import ClientSession
922
+ from mcp.client.websocket import websocket_client
923
+
924
+ class WebSocketConnection:
925
+ def __init__(self):
926
+ self.exit_stack = None
927
+ self.session = None
928
+
929
+ async def connect(self, url):
930
+ # Use AsyncExitStack to properly manage async context managers
931
+ self.exit_stack = AsyncExitStack()
932
+
933
+ try:
934
+ # Enter the websocket context using AsyncExitStack
935
+ websocket_context = websocket_client(url=url)
936
+ streams = await self.exit_stack.enter_async_context(
937
+ websocket_context
938
+ )
939
+ self.read_stream, self.write_stream = streams
940
+
941
+ # Create and initialize session using AsyncExitStack
942
+ session = ClientSession(self.read_stream, self.write_stream)
943
+ session_ref = await self.exit_stack.enter_async_context(session)
944
+ await session_ref.initialize()
945
+
946
+ self.session = session_ref
947
+ return session_ref
948
+
949
+ except Exception:
950
+ # If anything fails during setup, clean up
951
+ await self.close()
952
+ raise
953
+
954
+ async def close(self):
955
+ # Handle cleanup with proper exception isolation
956
+ if self.exit_stack:
957
+ exit_stack = self.exit_stack
958
+ self.exit_stack = None
959
+ self.session = None
960
+
961
+ # Schedule cleanup for later to avoid cross-task issues
962
+ # This prevents the "different task" async generator problems
963
+ try:
964
+ # Use create_task to run cleanup independently
965
+ cleanup_task = asyncio.create_task(exit_stack.aclose())
966
+
967
+ # Don't await - let it run in background to avoid blocking
968
+ # But add a callback to log any errors
969
+ def log_cleanup_error(task):
970
+ if task.exception():
971
+ logger.warning(
972
+ f"Background cleanup error: {task.exception()}"
973
+ )
974
+
975
+ cleanup_task.add_done_callback(log_cleanup_error)
976
+ except Exception as e:
977
+ logger.warning(f"Error scheduling connection cleanup: {e}")
978
+
979
+ # Create and connect
980
+ conn = WebSocketConnection()
981
+ session = await conn.connect(url)
982
+
983
+ # Store connection object for cleanup
984
+ if not hasattr(self, "_websocket_connections"):
985
+ self._websocket_connections = {}
986
+ self._websocket_connections[url] = conn
987
+
988
+ return session
989
+
990
+ async def _remove_connection_from_pool(self, url: str):
991
+ """Remove a connection from the pool."""
992
+ async with self._pool_lock:
993
+ if url in self._websocket_pools:
994
+ del self._websocket_pools[url]
995
+
996
+ # Clean up connection
997
+ if (
998
+ hasattr(self, "_websocket_connections")
999
+ and url in self._websocket_connections
1000
+ ):
1001
+ conn = self._websocket_connections[url]
1002
+ try:
1003
+ await conn.close()
1004
+ except Exception as e:
1005
+ logger.warning(f"Error closing WebSocket connection: {e}")
1006
+ finally:
1007
+ del self._websocket_connections[url]
1008
+
1009
+ # Clean up last used tracking
1010
+ if url in self._connection_last_used:
1011
+ del self._connection_last_used[url]
1012
+
1013
+ def _should_use_pooling(self) -> bool:
1014
+ """Check if connection pooling should be used."""
1015
+ return self.connection_pool_config.get("enable_connection_reuse", True)
1016
+
1017
+ def _get_active_connections(self) -> List[str]:
1018
+ """Get list of active connection URLs."""
1019
+ return list(self._websocket_pools.keys())
1020
+
1021
+ def _has_active_connection(self, url: str) -> bool:
1022
+ """Check if URL has an active connection."""
1023
+ return url in self._websocket_pools
1024
+
1025
+ async def _is_connection_healthy(self, session: Any) -> bool:
1026
+ """Check if a connection is healthy."""
1027
+ try:
1028
+ # Try to ping if method exists
1029
+ if hasattr(session, "ping"):
1030
+ await asyncio.wait_for(session.ping(), timeout=5.0)
1031
+ return True
1032
+ except Exception:
1033
+ return False
1034
+
1035
+ async def _check_connection_health(self, url: str):
1036
+ """Check and update health status of a connection."""
1037
+ if url not in self._websocket_pools:
1038
+ return
1039
+
1040
+ session = self._websocket_pools[url].get("session")
1041
+ if session and not await self._is_connection_healthy(session):
1042
+ # Remove unhealthy connection
1043
+ await self._remove_connection_from_pool(url)
1044
+
1045
+ async def _cleanup_idle_connections(self, max_idle_seconds: float = None):
1046
+ """Clean up idle connections."""
1047
+ if max_idle_seconds is None:
1048
+ max_idle_seconds = self.connection_pool_config.get("max_idle_time", 60)
1049
+
1050
+ current_time = time.time()
1051
+ urls_to_remove = []
1052
+
1053
+ async with self._pool_lock:
1054
+ for url, last_used in self._connection_last_used.items():
1055
+ if current_time - last_used > max_idle_seconds:
1056
+ urls_to_remove.append(url)
1057
+
1058
+ # Remove idle connections
1059
+ for url in urls_to_remove:
1060
+ await self._remove_connection_from_pool(url)
1061
+
1062
+ async def _evict_lru_connection(self):
1063
+ """Evict least recently used connection."""
1064
+ if not self._connection_last_used:
1065
+ return
1066
+
1067
+ # Find LRU connection
1068
+ lru_url = min(self._connection_last_used, key=self._connection_last_used.get)
1069
+
1070
+ # Update metrics
1071
+ if self.metrics:
1072
+ self.metrics["websocket_pool_evictions"] = (
1073
+ self.metrics.get("websocket_pool_evictions", 0) + 1
1074
+ )
1075
+
1076
+ # Remove it
1077
+ await self._remove_connection_from_pool(lru_url)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kailash
3
- Version: 0.9.1
3
+ Version: 0.9.2
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