kailash 0.9.14__py3-none-any.whl → 0.9.16__py3-none-any.whl

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 (39) hide show
  1. kailash/__init__.py +1 -0
  2. kailash/cli/validate_imports.py +1 -1
  3. kailash/core/ml/query_patterns.py +2 -2
  4. kailash/edge/resource/platform_integration.py +1 -4
  5. kailash/integrations/dataflow_edge.py +2 -2
  6. kailash/migration/__init__.py +30 -0
  7. kailash/migration/cli.py +340 -0
  8. kailash/migration/compatibility_checker.py +662 -0
  9. kailash/migration/configuration_validator.py +837 -0
  10. kailash/migration/documentation_generator.py +1828 -0
  11. kailash/migration/examples/__init__.py +5 -0
  12. kailash/migration/examples/complete_migration_example.py +692 -0
  13. kailash/migration/migration_assistant.py +715 -0
  14. kailash/migration/performance_comparator.py +760 -0
  15. kailash/migration/regression_detector.py +1141 -0
  16. kailash/migration/tests/__init__.py +6 -0
  17. kailash/migration/tests/test_compatibility_checker.py +403 -0
  18. kailash/migration/tests/test_integration.py +463 -0
  19. kailash/migration/tests/test_migration_assistant.py +397 -0
  20. kailash/migration/tests/test_performance_comparator.py +433 -0
  21. kailash/monitoring/alerts.py +2 -2
  22. kailash/nodes/__init__.py +211 -39
  23. kailash/nodes/__init___original.py +57 -0
  24. kailash/nodes/ai/iterative_llm_agent.py +2 -2
  25. kailash/nodes/data/async_sql.py +1507 -6
  26. kailash/runtime/local.py +1255 -8
  27. kailash/runtime/monitoring/__init__.py +1 -0
  28. kailash/runtime/monitoring/runtime_monitor.py +780 -0
  29. kailash/runtime/resource_manager.py +3033 -0
  30. kailash/sdk_exceptions.py +21 -0
  31. kailash/utils/circular_dependency_detector.py +319 -0
  32. kailash/workflow/cyclic_runner.py +18 -2
  33. {kailash-0.9.14.dist-info → kailash-0.9.16.dist-info}/METADATA +1 -1
  34. {kailash-0.9.14.dist-info → kailash-0.9.16.dist-info}/RECORD +39 -19
  35. {kailash-0.9.14.dist-info → kailash-0.9.16.dist-info}/WHEEL +0 -0
  36. {kailash-0.9.14.dist-info → kailash-0.9.16.dist-info}/entry_points.txt +0 -0
  37. {kailash-0.9.14.dist-info → kailash-0.9.16.dist-info}/licenses/LICENSE +0 -0
  38. {kailash-0.9.14.dist-info → kailash-0.9.16.dist-info}/licenses/NOTICE +0 -0
  39. {kailash-0.9.14.dist-info → kailash-0.9.16.dist-info}/top_level.txt +0 -0
kailash/sdk_exceptions.py CHANGED
@@ -196,6 +196,27 @@ class RuntimeExecutionError(RuntimeException):
196
196
  """
197
197
 
198
198
 
199
+ class ResourceLimitExceededError(RuntimeException):
200
+ """Raised when runtime resource limits are exceeded.
201
+
202
+ This typically occurs when:
203
+ - Connection pool limits are exceeded
204
+ - Memory usage exceeds configured limits
205
+ - CPU usage exceeds thresholds
206
+ - Too many concurrent workflows
207
+ """
208
+
209
+
210
+ class CircuitBreakerOpenError(RuntimeException):
211
+ """Raised when circuit breaker is open.
212
+
213
+ This typically occurs when:
214
+ - Service has exceeded failure threshold
215
+ - Circuit breaker is protecting against cascading failures
216
+ - Service is temporarily unavailable
217
+ """
218
+
219
+
199
220
  # Task tracking exceptions
200
221
  class TaskException(KailashException):
201
222
  """Base exception for task tracking errors."""
@@ -0,0 +1,319 @@
1
+ """
2
+ Circular Dependency Detector for Kailash SDK
3
+
4
+ This module provides tools to detect and report circular dependencies in the codebase,
5
+ ensuring that lazy loading doesn't mask architectural issues.
6
+ """
7
+
8
+ import ast
9
+ import importlib
10
+ import os
11
+ import sys
12
+ from collections import defaultdict, deque
13
+ from pathlib import Path
14
+ from typing import Dict, List, Optional, Set, Tuple
15
+
16
+
17
+ class CircularDependencyDetector:
18
+ """Detects circular dependencies in Python modules."""
19
+
20
+ def __init__(self, root_path: str):
21
+ """Initialize the detector with the root path of the codebase."""
22
+ self.root_path = Path(root_path)
23
+ self.import_graph: Dict[str, Set[str]] = defaultdict(set)
24
+ self.visited_files: Set[str] = set()
25
+ self.circular_deps: List[List[str]] = []
26
+
27
+ def analyze_file(self, file_path: Path) -> Set[str]:
28
+ """Extract all imports from a Python file."""
29
+ imports = set()
30
+
31
+ try:
32
+ with open(file_path, "r", encoding="utf-8") as f:
33
+ tree = ast.parse(f.read(), str(file_path))
34
+
35
+ for node in ast.walk(tree):
36
+ if isinstance(node, ast.Import):
37
+ for alias in node.names:
38
+ imports.add(alias.name)
39
+ elif isinstance(node, ast.ImportFrom):
40
+ if node.module:
41
+ # Handle relative imports
42
+ if node.level > 0:
43
+ # Relative import
44
+ module_parts = (
45
+ str(file_path.relative_to(self.root_path))
46
+ .replace(".py", "")
47
+ .split("/")
48
+ )
49
+ parent_parts = (
50
+ module_parts[: -node.level]
51
+ if node.level < len(module_parts)
52
+ else []
53
+ )
54
+ if node.module:
55
+ full_module = ".".join(
56
+ parent_parts + node.module.split(".")
57
+ )
58
+ else:
59
+ full_module = ".".join(parent_parts)
60
+ imports.add(full_module.replace("/", "."))
61
+ else:
62
+ imports.add(node.module)
63
+
64
+ except (SyntaxError, FileNotFoundError) as e:
65
+ print(f"Error analyzing {file_path}: {e}")
66
+
67
+ return imports
68
+
69
+ def build_import_graph(self, start_dir: str = "src/kailash"):
70
+ """Build the complete import dependency graph."""
71
+ start_path = self.root_path / start_dir
72
+
73
+ for py_file in start_path.rglob("*.py"):
74
+ # Skip test files and __pycache__
75
+ if "__pycache__" in str(py_file) or "test_" in py_file.name:
76
+ continue
77
+
78
+ module_name = self._path_to_module(py_file)
79
+ imports = self.analyze_file(py_file)
80
+
81
+ # Filter to only internal imports
82
+ internal_imports = {
83
+ imp
84
+ for imp in imports
85
+ if imp.startswith("kailash") or imp.startswith(".")
86
+ }
87
+
88
+ self.import_graph[module_name].update(internal_imports)
89
+
90
+ def _path_to_module(self, file_path: Path) -> str:
91
+ """Convert file path to module name."""
92
+ relative = file_path.relative_to(self.root_path / "src")
93
+ module = str(relative).replace(".py", "").replace("/", ".")
94
+ return module
95
+
96
+ def detect_cycles(self) -> List[List[str]]:
97
+ """Detect all circular dependencies using DFS."""
98
+ visited = set()
99
+ rec_stack = set()
100
+ path = []
101
+ cycles = []
102
+
103
+ def dfs(module: str) -> bool:
104
+ visited.add(module)
105
+ rec_stack.add(module)
106
+ path.append(module)
107
+
108
+ for imported in self.import_graph.get(module, set()):
109
+ if imported not in visited:
110
+ if dfs(imported):
111
+ return True
112
+ elif imported in rec_stack:
113
+ # Found a cycle
114
+ cycle_start = path.index(imported)
115
+ cycle = path[cycle_start:] + [imported]
116
+ cycles.append(cycle)
117
+
118
+ path.pop()
119
+ rec_stack.remove(module)
120
+ return False
121
+
122
+ for module in self.import_graph:
123
+ if module not in visited:
124
+ dfs(module)
125
+
126
+ # Remove duplicate cycles
127
+ unique_cycles = []
128
+ seen = set()
129
+ for cycle in cycles:
130
+ # Normalize cycle to start with smallest element
131
+ min_idx = cycle.index(min(cycle))
132
+ normalized = tuple(cycle[min_idx:] + cycle[:min_idx])
133
+ if normalized not in seen:
134
+ seen.add(normalized)
135
+ unique_cycles.append(
136
+ list(normalized)[:-1]
137
+ ) # Remove duplicate last element
138
+
139
+ return unique_cycles
140
+
141
+ def check_lazy_loading_safety(self, module_path: str) -> Dict[str, any]:
142
+ """Check if lazy loading is safe for a given module."""
143
+ result = {
144
+ "module": module_path,
145
+ "has_circular_deps": False,
146
+ "circular_chains": [],
147
+ "safe_for_lazy_loading": True,
148
+ "warnings": [],
149
+ }
150
+
151
+ # Check if module is involved in any circular dependencies
152
+ for cycle in self.circular_deps:
153
+ if module_path in cycle:
154
+ result["has_circular_deps"] = True
155
+ result["circular_chains"].append(cycle)
156
+ result["safe_for_lazy_loading"] = False
157
+ result["warnings"].append(
158
+ f"Module is part of circular dependency: {' -> '.join(cycle)}"
159
+ )
160
+
161
+ return result
162
+
163
+ def generate_report(self) -> str:
164
+ """Generate a comprehensive circular dependency report."""
165
+ self.build_import_graph()
166
+ self.circular_deps = self.detect_cycles()
167
+
168
+ report = []
169
+ report.append("=" * 80)
170
+ report.append("CIRCULAR DEPENDENCY ANALYSIS REPORT")
171
+ report.append("=" * 80)
172
+ report.append("")
173
+
174
+ if not self.circular_deps:
175
+ report.append("✅ No circular dependencies detected!")
176
+ else:
177
+ report.append(
178
+ f"⚠️ Found {len(self.circular_deps)} circular dependency chains:"
179
+ )
180
+ report.append("")
181
+
182
+ for i, cycle in enumerate(self.circular_deps, 1):
183
+ report.append(f"{i}. Circular dependency chain:")
184
+ report.append(f" {' -> '.join(cycle)} -> {cycle[0]}")
185
+ report.append("")
186
+
187
+ # Analyze specific high-risk modules
188
+ high_risk_modules = [
189
+ "kailash.nodes.ai.a2a",
190
+ "kailash.nodes.ai.self_organizing",
191
+ "kailash.nodes.ai.intelligent_agent_orchestrator",
192
+ "kailash.nodes.__init__",
193
+ ]
194
+
195
+ report.append("-" * 80)
196
+ report.append("HIGH-RISK MODULE ANALYSIS")
197
+ report.append("-" * 80)
198
+
199
+ for module in high_risk_modules:
200
+ safety = self.check_lazy_loading_safety(module)
201
+ if safety["has_circular_deps"]:
202
+ report.append(f"\n❌ {module}:")
203
+ for warning in safety["warnings"]:
204
+ report.append(f" - {warning}")
205
+ else:
206
+ report.append(f"\n✅ {module}: No circular dependencies")
207
+
208
+ report.append("")
209
+ report.append("=" * 80)
210
+
211
+ return "\n".join(report)
212
+
213
+
214
+ class CircularImportResolver:
215
+ """Provides solutions for resolving circular dependencies."""
216
+
217
+ @staticmethod
218
+ def create_lazy_import_wrapper(
219
+ module_name: str, attribute_name: Optional[str] = None
220
+ ) -> str:
221
+ """Generate code for a lazy import wrapper."""
222
+ if attribute_name:
223
+ return f"""
224
+ def get_{attribute_name}():
225
+ \"\"\"Lazy import of {module_name}.{attribute_name}\"\"\"
226
+ from {module_name} import {attribute_name}
227
+ return {attribute_name}
228
+ """
229
+ else:
230
+ return f"""
231
+ def get_{module_name.split('.')[-1]}():
232
+ \"\"\"Lazy import of {module_name}\"\"\"
233
+ import {module_name}
234
+ return {module_name}
235
+ """
236
+
237
+ @staticmethod
238
+ def create_type_checking_import(module_name: str, types: List[str]) -> str:
239
+ """Generate code for TYPE_CHECKING imports to avoid runtime circular deps."""
240
+ return f"""
241
+ from typing import TYPE_CHECKING
242
+
243
+ if TYPE_CHECKING:
244
+ from {module_name} import {', '.join(types)}
245
+ """
246
+
247
+ @staticmethod
248
+ def suggest_refactoring(cycles: List[List[str]]) -> List[str]:
249
+ """Suggest refactoring strategies for circular dependencies."""
250
+ suggestions = []
251
+
252
+ for cycle in cycles:
253
+ if len(cycle) == 2:
254
+ suggestions.append(
255
+ f"""
256
+ Circular dependency between {cycle[0]} and {cycle[1]}:
257
+ 1. Extract shared functionality to a common base module
258
+ 2. Use dependency injection instead of direct imports
259
+ 3. Consider if one module should be a submodule of the other
260
+ """
261
+ )
262
+ elif "ai" in str(cycle):
263
+ suggestions.append(
264
+ f"""
265
+ AI module circular dependency in {' -> '.join(cycle)}:
266
+ 1. Create an ai.base module for shared components
267
+ 2. Use factory pattern for agent creation
268
+ 3. Move orchestration logic to a separate coordinator module
269
+ """
270
+ )
271
+ else:
272
+ suggestions.append(
273
+ f"""
274
+ Complex circular dependency in {' -> '.join(cycle)}:
275
+ 1. Apply Dependency Inversion Principle
276
+ 2. Create interfaces/protocols for cross-module communication
277
+ 3. Use event-driven architecture to decouple modules
278
+ """
279
+ )
280
+
281
+ return suggestions
282
+
283
+
284
+ def main():
285
+ """Run circular dependency detection on Kailash SDK."""
286
+ # Get the SDK root directory
287
+ sdk_root = Path(__file__).parent.parent.parent.parent
288
+
289
+ detector = CircularDependencyDetector(sdk_root)
290
+ report = detector.generate_report()
291
+
292
+ print(report)
293
+
294
+ if detector.circular_deps:
295
+ print("\n" + "=" * 80)
296
+ print("REFACTORING SUGGESTIONS")
297
+ print("=" * 80)
298
+
299
+ resolver = CircularImportResolver()
300
+ suggestions = resolver.suggest_refactoring(detector.circular_deps)
301
+
302
+ for i, suggestion in enumerate(suggestions, 1):
303
+ print(f"\n{i}. {suggestion}")
304
+
305
+ print("\n" + "=" * 80)
306
+ print("IMMEDIATE ACTION REQUIRED")
307
+ print("=" * 80)
308
+ print(
309
+ """
310
+ 1. Fix AI module circular dependencies (critical)
311
+ 2. Clean up duplicate __init__.py files
312
+ 3. Implement lazy loading WITH circular dependency checks
313
+ 4. Add this detector to CI/CD pipeline
314
+ """
315
+ )
316
+
317
+
318
+ if __name__ == "__main__":
319
+ main()
@@ -130,6 +130,7 @@ class WorkflowState:
130
130
  self.node_outputs: dict[str, Any] = {}
131
131
  self.execution_order: list[str] = []
132
132
  self.metadata: dict[str, Any] = {}
133
+ self.runtime = None # Will be set by executor for enterprise features
133
134
 
134
135
 
135
136
  class CyclicWorkflowExecutor:
@@ -151,6 +152,7 @@ class CyclicWorkflowExecutor:
151
152
  parameters: dict[str, Any] | None = None,
152
153
  task_manager: TaskManager | None = None,
153
154
  run_id: str | None = None,
155
+ runtime=None,
154
156
  ) -> tuple[dict[str, Any], str]:
155
157
  """Execute workflow with cycle support.
156
158
 
@@ -159,6 +161,7 @@ class CyclicWorkflowExecutor:
159
161
  parameters: Initial parameters/overrides
160
162
  task_manager: Optional task manager for tracking execution
161
163
  run_id: Optional run ID to use (if not provided, one will be generated)
164
+ runtime: Optional runtime instance for enterprise features (LocalRuntime)
162
165
 
163
166
  Returns:
164
167
  Tuple of (results dict, run_id)
@@ -189,7 +192,7 @@ class CyclicWorkflowExecutor:
189
192
  # Execute with cycle support
190
193
  try:
191
194
  results = self._execute_with_cycles(
192
- workflow, parameters, run_id, task_manager
195
+ workflow, parameters, run_id, task_manager, runtime
193
196
  )
194
197
  logger.info(f"Cyclic workflow execution completed: {workflow.name}")
195
198
  return results, run_id
@@ -280,6 +283,7 @@ class CyclicWorkflowExecutor:
280
283
  parameters: dict[str, Any] | None,
281
284
  run_id: str,
282
285
  task_manager: TaskManager | None = None,
286
+ runtime=None,
283
287
  ) -> dict[str, Any]:
284
288
  """Execute workflow with cycle handling.
285
289
 
@@ -304,6 +308,8 @@ class CyclicWorkflowExecutor:
304
308
 
305
309
  # Store initial parameters separately (don't treat them as outputs!)
306
310
  state.initial_parameters = parameters or {}
311
+ # Store runtime for enterprise features
312
+ state.runtime = runtime
307
313
 
308
314
  # Execute the plan
309
315
  results = self._execute_plan(workflow, execution_plan, state, task_manager)
@@ -1284,7 +1290,17 @@ class CyclicWorkflowExecutor:
1284
1290
 
1285
1291
  try:
1286
1292
  with collector.collect(node_id=node_id) as metrics_context:
1287
- result = node.execute(context=context, **merged_inputs)
1293
+ # Use enterprise node execution if runtime is available
1294
+ if state.runtime and hasattr(
1295
+ state.runtime, "execute_node_with_enterprise_features_sync"
1296
+ ):
1297
+ # Use sync enterprise wrapper for automatic feature integration
1298
+ result = state.runtime.execute_node_with_enterprise_features_sync(
1299
+ node, node_id, dict(context=context, **merged_inputs)
1300
+ )
1301
+ else:
1302
+ # Standard node execution (backward compatibility)
1303
+ result = node.execute(context=context, **merged_inputs)
1288
1304
 
1289
1305
  # Get performance metrics
1290
1306
  performance_metrics = metrics_context.result()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kailash
3
- Version: 0.9.14
3
+ Version: 0.9.16
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
@@ -1,9 +1,9 @@
1
- kailash/__init__.py,sha256=5ah04rxNTa7lqceRYS0LAu2U7VHLfU09Jek3rd7Rm2k,2853
1
+ kailash/__init__.py,sha256=ffp6pb2WvAiU8rhVtGWfCtb7StsOQLbshcvPDd7NY2o,2946
2
2
  kailash/__main__.py,sha256=vr7TVE5o16V6LsTmRFKG6RDKUXHpIWYdZ6Dok2HkHnI,198
3
3
  kailash/access_control.py,sha256=MjKtkoQ2sg1Mgfe7ovGxVwhAbpJKvaepPWr8dxOueMA,26058
4
4
  kailash/access_control_abac.py,sha256=FPfa_8PuDP3AxTjdWfiH3ntwWO8NodA0py9W8SE5dno,30263
5
5
  kailash/manifest.py,sha256=qzOmeMGWz20Sp4IJitSH9gTVbGng7hlimc96VTW4KI8,24814
6
- kailash/sdk_exceptions.py,sha256=dueSUxUYqKXmHS5mwl6QtEzP6a0rMGXcBFGCh5sT0tg,10179
6
+ kailash/sdk_exceptions.py,sha256=MeFNmFzDzs5g9PveymivIBp1vN6PI7eenGv-Dj62Gog,10774
7
7
  kailash/security.py,sha256=GBU93tUXcTZGEjl0f9XXRlF3W-sSulhiatMZzv1dNqc,27228
8
8
  kailash/access_control/__init__.py,sha256=ykR_zGJXQoCU_4gGNFbYzhVdUemxeAAoDQLhKIPVBGE,4018
9
9
  kailash/access_control/managers.py,sha256=Vg2inaZqR2GBXsySvPZcEqQtFHgF94z7A_wUHMtA3qA,14431
@@ -28,7 +28,7 @@ kailash/channels/mcp_channel.py,sha256=V_BqYXHFb26V_8C6XOasgGZiDxLyN-BiRi5hsBgry
28
28
  kailash/channels/session.py,sha256=4ZEutfyQ3fhBlBjXa5e32ZL2ZqEuQKwbAk0DGu00X1A,13068
29
29
  kailash/cli/__init__.py,sha256=TvNjX0Q-2IxdWeh6w8rkqyONuFbSleStlRF8b-Aa8Iw,302
30
30
  kailash/cli/commands.py,sha256=lv1S1uB0JQE4tiQCJIa1HCbjYDbFE9KwcK3M1jRtRU4,18168
31
- kailash/cli/validate_imports.py,sha256=ebmruTzNyy_k9EGoXunO_7rntcoqH88lkbN6XyFtZXE,6093
31
+ kailash/cli/validate_imports.py,sha256=fJswjiuXLtZcDjzc7SRRPBBA7hDXgVRwiG04e_f547E,6091
32
32
  kailash/cli/validation_audit.py,sha256=0WBzOdh1pkaqYm011bpnumyMf30blvPzq9_nsUQoGno,20308
33
33
  kailash/client/__init__.py,sha256=WNR39t4O6TDQLI14uR_MjQpLza2c6rU3YkQCXcGCiSU,293
34
34
  kailash/client/enhanced_client.py,sha256=trcDWQsON0Hphj14WozVMbfU7HKuxauknzDfoy1fTlo,9431
@@ -39,7 +39,7 @@ kailash/core/actors/adaptive_pool_controller.py,sha256=tque9heLsLwjrNlM1wZSAYi1R
39
39
  kailash/core/actors/connection_actor.py,sha256=M8fOX1a3jvH5PUkfQyk0eBJqCk0SD9KGZCw0TXLON_o,18979
40
40
  kailash/core/actors/supervisor.py,sha256=GaTbRRA0REHNnsn0a8NXao-aj9Eh8KkZt6H2YJm7I4w,11975
41
41
  kailash/core/ml/__init__.py,sha256=eaD-bmoxMXtwwtKWePsoX1IkcpysX0bMAGyMR7jaAqI,64
42
- kailash/core/ml/query_patterns.py,sha256=4wV1pBOwUiK80UTKuMXSoRgR0pojtjg2BMNoa5qWpc0,20290
42
+ kailash/core/ml/query_patterns.py,sha256=gDr_WVg_7JK6HSisKZ28Gtrm95M4XVlwtIesXXu4olM,20290
43
43
  kailash/core/monitoring/__init__.py,sha256=Qua4i50JYUQcRkWHy1wGyuXGqzqsDVMmdPtud746xts,371
44
44
  kailash/core/monitoring/connection_metrics.py,sha256=fvFyHOgMU5lgRB2EB7d-D_F5XERjlmcGAfkrIL0I_OQ,16805
45
45
  kailash/core/optimization/__init__.py,sha256=FY5SLLNedH0_aawLYdXHj2rsGdBaaB49QuJ_R9ctHOE,65
@@ -71,7 +71,7 @@ kailash/edge/resource/cloud_integration.py,sha256=0zBBuWKaN5yqoBGLj5c5YcfmLwxCkj
71
71
  kailash/edge/resource/cost_optimizer.py,sha256=pPp985nMp6r4MzlR0k8D5PyNEKtkV7EIKkxwfIcZXiA,32916
72
72
  kailash/edge/resource/docker_integration.py,sha256=2CnhKF5P4cgwgk-r01Nr3IObJPTLvmk_Yu757Uu8vNg,30375
73
73
  kailash/edge/resource/kubernetes_integration.py,sha256=g703nAN3rVQK65lcphnth_6VOZHLo6FGprUYVgc5poQ,33123
74
- kailash/edge/resource/platform_integration.py,sha256=Rdc3bqz1MYFzPNSKKTkKwNGkl5-HzjvG0xtzwblDy1o,33522
74
+ kailash/edge/resource/platform_integration.py,sha256=EOH_Kw_4MVS71pa3oNkgDxsXEUo0q9qdLBv0GnrGjCc,33509
75
75
  kailash/edge/resource/predictive_scaler.py,sha256=FxoYIq1Xd6HOilWydOlxWn0jCIzKcaJqrxePw_YQH2Y,32728
76
76
  kailash/edge/resource/resource_analyzer.py,sha256=tcQM2uS_b985fY_-YOOhN_DiDjjVGo1k5c1GFHHE9P8,30043
77
77
  kailash/edge/resource/resource_pools.py,sha256=YlKa3d1MMCw2lOv7gz-KIkOg-uLfFbW_uy6nwo3mefU,20107
@@ -80,7 +80,7 @@ kailash/gateway/api.py,sha256=xpK8PIamsqQPpKAJwacyV7RA_Snjv2pc_0ljnnU9Oy4,9534
80
80
  kailash/gateway/enhanced_gateway.py,sha256=IlN1XV01FQrF4rGcq_z9LE4uUHAAAQoVsRNToXENen0,13399
81
81
  kailash/gateway/resource_resolver.py,sha256=IC1dceiKfjfUWToYCIBcrUapuR3LlDG6RJ4o7haLY10,7746
82
82
  kailash/gateway/security.py,sha256=kf4Quf6u7dqhs80fQQ982eHbRb4weDKG0DaYNeKntT4,7557
83
- kailash/integrations/dataflow_edge.py,sha256=R3Is8JJZcqLNn4op7gidp1dtbT82oY5vn9tXVAWLOrg,8994
83
+ kailash/integrations/dataflow_edge.py,sha256=UqQMrTHmVYkgJt9T3bfcumBexMnvcTtNUIDUYFonuPo,8989
84
84
  kailash/mcp_server/__init__.py,sha256=AzrCEat5gdl9Nes8xOs7D4Wj3HpGlms3xLbOrx2diPA,8791
85
85
  kailash/mcp_server/advanced_features.py,sha256=76dmttUa0M61ReBbgexf7Igu4CXaXS-CUmFhvTDjKyI,30673
86
86
  kailash/mcp_server/ai_registry_server.py,sha256=vMNMvWLegKBVp7YAHVKgltWa2vTXKNvV-_Ni_z1argM,28973
@@ -136,10 +136,26 @@ kailash/middleware/gateway/storage_backends.py,sha256=HJTi6zU6oBI3R3ffcm_U-Xp9qq
136
136
  kailash/middleware/mcp/__init__.py,sha256=EdZB8zOMSBEEmudRzs8ksz9QZJYWQMEx7Tm1MOwIWnI,922
137
137
  kailash/middleware/mcp/client_integration.py,sha256=dY1RmX-g5E6JzUFuWxk7viuOYIh8bMwoUSvHQMVEsYk,18265
138
138
  kailash/middleware/mcp/enhanced_server.py,sha256=RUVS7jWHn0ma4F3F23UvuFwUdu7OkSsIRNQmGtkG9I8,18547
139
+ kailash/migration/__init__.py,sha256=WFFeTikHkG1Y9s93vjYyeRJnPLNoDNoVPcOZxw-PSy0,1186
140
+ kailash/migration/cli.py,sha256=yheFAFhqUv5efTxX4kbUzsiYWBJq9bM92KSkgIoK3X4,12186
141
+ kailash/migration/compatibility_checker.py,sha256=-B9KxVXe0THq6GRbhXtAUVGh_xJEB6UPZLPskTOv9Oo,27352
142
+ kailash/migration/configuration_validator.py,sha256=s2TIG30Q_21LDQFcpcV-UH6ygeEyOjLMeFoQXVjN9VI,35494
143
+ kailash/migration/documentation_generator.py,sha256=dxR-lA3we2h-ozmfGnX3Q47eiU2ZRlv-A1g1Rr4Q67s,75289
144
+ kailash/migration/migration_assistant.py,sha256=GEixPyL_ctkxATXhA6QtcjP4in7X6GmMVy0nLP0j2iw,26014
145
+ kailash/migration/performance_comparator.py,sha256=zUv1VjSwjaRKiDx3QMrr6cG5zdHAKFyE64C_NQRKNCE,27967
146
+ kailash/migration/regression_detector.py,sha256=UxKfJcBqkXYFYyogQn_LBM6g_9mr_6e8ukHVMHgRECs,41837
147
+ kailash/migration/examples/__init__.py,sha256=JjomEr2XAiUW1Ffx7ZDgBlb2-H6gG_G5rvTtKU16l0E,206
148
+ kailash/migration/examples/complete_migration_example.py,sha256=gLlVrQ8lJUIOI_ThRODECNmeM1guE0bSjz6CggrBfWw,24875
149
+ kailash/migration/tests/__init__.py,sha256=CfeE7D6D8YEnvPYnoGxShrhExQ1GV-lKRDBjy78JLeI,292
150
+ kailash/migration/tests/test_compatibility_checker.py,sha256=Gx_lTedk1K-1sIhGDapiLrvLk1z-2hrmFN8Mst00rdg,14097
151
+ kailash/migration/tests/test_integration.py,sha256=-3j3LZdoaZ5HUcwY99wVM30FrE473rHjSH3i_tu3xNY,17202
152
+ kailash/migration/tests/test_migration_assistant.py,sha256=H0td6dL3Xkw8ivImFcQP_Cuh0WeqDRpbEKJFzuQ1LEc,14615
153
+ kailash/migration/tests/test_performance_comparator.py,sha256=cQgX4DHfqXYGmcKrl77qtlMBRYDs7xjaFxTih0M3XdE,15257
139
154
  kailash/monitoring/__init__.py,sha256=C5WmkNpk_mmAScqMWiCfkUbjhM5W16dsnRnc3Ial-Uc,475
140
- kailash/monitoring/alerts.py,sha256=eKX4ooPw1EicumPuswlR_nU18UgRETWvFg8FzCW5pVU,21416
155
+ kailash/monitoring/alerts.py,sha256=Hk3Xs0EEkOIBH2ZhlejJBOsLYaPlvRejAAEGqNQISc0,21400
141
156
  kailash/monitoring/metrics.py,sha256=SiAnL3o6K0QaJHgfAuWBa-0pTkW5zymhuPEsj4bgOgM,22022
142
- kailash/nodes/__init__.py,sha256=p2KSo0dyUBCLClU123qpQ0tyv5S_36PTxosNyW58nyY,1031
157
+ kailash/nodes/__init__.py,sha256=zn4M0f-sIPAq8bG5golQIxmEY8lG5d55Kzg8UNL2lAY,6392
158
+ kailash/nodes/__init___original.py,sha256=p2KSo0dyUBCLClU123qpQ0tyv5S_36PTxosNyW58nyY,1031
143
159
  kailash/nodes/base.py,sha256=GR2E1fWf8j1yMvJic7m2NAih7kjY1NtoDi47hHwoZ40,85437
144
160
  kailash/nodes/base_async.py,sha256=whxepCiVplrltfzEQuabmnGCpEV5WgfqwgxbLdCyiDk,8864
145
161
  kailash/nodes/base_cycle_aware.py,sha256=Xpze9xZzLepWeLpi9Y3tMn1dm2LVv-omr5TSQuGTtWo,13377
@@ -166,7 +182,7 @@ kailash/nodes/ai/ai_providers.py,sha256=egfiOZzPmZ10d3wBCJ6ST4tRFrrtq0kt1VyCqxVp
166
182
  kailash/nodes/ai/embedding_generator.py,sha256=akGCzz7zLRSziqEQCiPwL2qWhRWxuM_1RQh-YtVEddw,31879
167
183
  kailash/nodes/ai/hybrid_search.py,sha256=k26uDDP_bwrIpv7Yl7PBCPvWSyQEmTlBjI1IpbgDsO4,35446
168
184
  kailash/nodes/ai/intelligent_agent_orchestrator.py,sha256=LvBqMKc64zSxFWVCjbLKKel2QwEzoTeJAEgna7rZw00,83097
169
- kailash/nodes/ai/iterative_llm_agent.py,sha256=Q_letP5mHtO225LBX0Tq5GlPkXkk-yWf3oFEOJTP6Z0,100289
185
+ kailash/nodes/ai/iterative_llm_agent.py,sha256=h8iP1KFhB_eCDs7UvmY_9y0OUBuprYMj2MLM6dR0W2c,100287
170
186
  kailash/nodes/ai/llm_agent.py,sha256=NeNJZbV_VOUbULug2LASwyzLyoUO5wi58Bc9sXTubuc,90181
171
187
  kailash/nodes/ai/models.py,sha256=wsEeUTuegy87mnLtKgSTg7ggCXvC1n3MsL-iZ4qujHs,16393
172
188
  kailash/nodes/ai/self_organizing.py,sha256=B7NwKaBW8OHQBf5b0F9bSs8Wm-5BDJ9IjIkxS9h00mg,62885
@@ -203,7 +219,7 @@ kailash/nodes/compliance/data_retention.py,sha256=90bH_eGwlcDzUdklAJeXQM-RcuLUGQ
203
219
  kailash/nodes/compliance/gdpr.py,sha256=ZMoHZjAo4QtGwtFCzGMrAUBFV3TbZOnJ5DZGZS87Bas,70548
204
220
  kailash/nodes/data/__init__.py,sha256=f0h4ysvXxlyFcNJLvDyXrgJ0ixwDF1cS0pJ2QNPakhg,5213
205
221
  kailash/nodes/data/async_connection.py,sha256=wfArHs9svU48bxGZIiixSV2YVn9cukNgEjagwTRu6J4,17250
206
- kailash/nodes/data/async_sql.py,sha256=lVNbYaKnanK4Ejm6VZSPSUuPqBItlP7rAQ3Zvp-KeYg,114285
222
+ kailash/nodes/data/async_sql.py,sha256=YWxRJEliOpA33vVkdZeFSOFBX5UGPUKUeULEYdH3AWQ,172747
207
223
  kailash/nodes/data/async_vector.py,sha256=HtwQLO25IXu8Vq80qzU8rMkUAKPQ2qM0x8YxjXHlygU,21005
208
224
  kailash/nodes/data/bulk_operations.py,sha256=WVopmosVkIlweFxVt3boLdCPc93EqpYyQ1Ez9mCIt0c,34453
209
225
  kailash/nodes/data/directory.py,sha256=fbfLqD_ijRubk-4xew3604QntPsyDxqaF4k6TpfyjDg,9923
@@ -324,15 +340,18 @@ kailash/runtime/async_local.py,sha256=sYNggSU0R-oo8cCvU5ayodDBqASzUhxu994ZvZxDSC
324
340
  kailash/runtime/compatibility_reporter.py,sha256=TOQD0ODnJdsxEPyNSYOV_zQxu60X_yvHeu26seFOMEA,19807
325
341
  kailash/runtime/docker.py,sha256=sZknVl1PCGfAZeyc0-exTuKlllSyjYlFIgJoiB3CRNs,23500
326
342
  kailash/runtime/hierarchical_switch_executor.py,sha256=k6aPGbpf6z2m6dTbHrEyuDR8ZCvOqUanBGYp70arQn0,20782
327
- kailash/runtime/local.py,sha256=xDJ7Z9UwqR432rRRUzkOyHJr1ejPE751VB-oW-BuBGE,147155
343
+ kailash/runtime/local.py,sha256=6c2RtT3YisYPnBAOho6lbd4fYyMiJG8EyUBOGmcei_U,201159
328
344
  kailash/runtime/parallel.py,sha256=-M9VVG36RxnrrmdbcBe9IjQWb58tAEEo76RQQ2uIXaE,21084
329
345
  kailash/runtime/parallel_cyclic.py,sha256=yANZHnePjhCPuCFbq3lFQA1K6jbCv5Of5-vIKbCsmZk,19863
330
346
  kailash/runtime/parameter_injection.py,sha256=kG4GhmarsRr5t3VDFbc2G1HSbsZJg6UmienHCE2Ru7o,14852
331
347
  kailash/runtime/parameter_injector.py,sha256=4l-OOKEBzM_cQ17Zz5o24QSV9a1Zqfu3D2qyq6Uy7hE,30810
332
348
  kailash/runtime/performance_monitor.py,sha256=8K9dApYQJSQ2Vb6lUQxvGzBdvPqyTlDl_aixniSuXqU,7585
349
+ kailash/runtime/resource_manager.py,sha256=mBXWDLbVscRGv4CFa7J0uC6zJ_H64g-y-ePh9_V_Nr0,110390
333
350
  kailash/runtime/runner.py,sha256=t_SEumtVn9uXlSzJicb50MpUu6xdqjW0uZ5b2phjVPY,3318
334
351
  kailash/runtime/secret_provider.py,sha256=wKhasHnm_Ialo7Q4KGMcmI2qVyrKLuS22ypEnVv4NcU,8757
335
352
  kailash/runtime/testing.py,sha256=hTrgGnqxwSBYoztVqnZpxzFwm0DwUnaJdChRHikgoio,19089
353
+ kailash/runtime/monitoring/__init__.py,sha256=9how7RsobJ2FCcMK2c_zutU6vd8NEjQXAtFzKZiyEG0,37
354
+ kailash/runtime/monitoring/runtime_monitor.py,sha256=68uIHI15kra_qiq3rfuoMttpEMknOab9apyUmt0b1Sg,25793
336
355
  kailash/runtime/validation/__init__.py,sha256=tvSnBo59Ku0b6mDwi4MWU162-jDHm9O2rQD1MKXuEZU,432
337
356
  kailash/runtime/validation/connection_context.py,sha256=NAvcyew8e6F0x_sORwszZ-SR3nn7y0Yzskv3X_3AjbU,3286
338
357
  kailash/runtime/validation/enhanced_error_formatter.py,sha256=tFmKbJ9pTXQd28oM9bu01sfVVmT3QIDQK1nkQjMqHfk,7642
@@ -360,6 +379,7 @@ kailash/tracking/storage/base.py,sha256=wWkK1XdrMV0EGxlbFDyfuVnDoIG0tdSPPwz_8iwz
360
379
  kailash/tracking/storage/database.py,sha256=O3-qYmgwTccq9jYl25C0L6R398pXPsWkIAoWLL1aZvQ,20048
361
380
  kailash/tracking/storage/filesystem.py,sha256=VhWxNvqf_Ta3mIaGqKuOrcCqQiEvJj7S8NK5yRd1V68,19627
362
381
  kailash/utils/__init__.py,sha256=pFKhHJxU_kyFE9aGT5recw5E-3nbfVF5pMHepBJWB2E,253
382
+ kailash/utils/circular_dependency_detector.py,sha256=YqhaD_rAfubGebLyXtICX_K7WN2qB6p_T84jVqR4TaA,10821
363
383
  kailash/utils/data_paths.py,sha256=pZWoqXPc62kB1iJlIXRUZSzXTglEUrJ3hML0YmXuC5k,2148
364
384
  kailash/utils/data_validation.py,sha256=LYQWHtB-BRSAGQDMdZQGUKOZCGeoeia2fIqM0UfJFSU,6851
365
385
  kailash/utils/export.py,sha256=WBazN03LOCI03TsIElNv31wSZ_uTLPl8THnqdohgyTk,37361
@@ -388,7 +408,7 @@ kailash/workflow/cycle_debugger.py,sha256=eG-Q_kakqyhr1Ts-q4pRnO0EI7mVO9ao1s9WOx
388
408
  kailash/workflow/cycle_exceptions.py,sha256=4_OLnbEXqIiXKzOc3uh8DzFik4wEHwl8bRZhY9Xhf2A,21838
389
409
  kailash/workflow/cycle_profiler.py,sha256=aEWSCm0Xy15SjgLTpPooVJMzpFhtJWt4livR-3Me4N8,28547
390
410
  kailash/workflow/cycle_state.py,sha256=hzRUvciRreWfS56Cf7ZLQPit_mlPTQDoNTawh8yi-2s,10747
391
- kailash/workflow/cyclic_runner.py,sha256=-pj-bIiSJuVX9cGdNNMNKgPzx9HqIR1r1Xwneab_0RE,70363
411
+ kailash/workflow/cyclic_runner.py,sha256=Zo2Rakp-N5pPSarndYPdkkpWgY9yHpYrrpUh-znoCKQ,71246
392
412
  kailash/workflow/edge_infrastructure.py,sha256=lQDzs0-KdoCMqI4KAXAGbhHbwadM6t-ffJEWLlRuSNo,12448
393
413
  kailash/workflow/graph.py,sha256=zRpGLXeuwtuxFBvE7_16c_bB9yqZirM_uwtfD1_MY4g,59272
394
414
  kailash/workflow/input_handling.py,sha256=HrW--AmelYC8F18nkfmYlF_wXycA24RuNbDRjvM8rqk,6561
@@ -403,10 +423,10 @@ kailash/workflow/templates.py,sha256=XQMAKZXC2dlxgMMQhSEOWAF3hIbe9JJt9j_THchhAm8
403
423
  kailash/workflow/type_inference.py,sha256=i1F7Yd_Z3elTXrthsLpqGbOnQBIVVVEjhRpI0HrIjd0,24492
404
424
  kailash/workflow/validation.py,sha256=LdbIPQSokCqSLfWTBhJR82pa_0va44pcVu9dpEM4rvY,45177
405
425
  kailash/workflow/visualization.py,sha256=nHBW-Ai8QBMZtn2Nf3EE1_aiMGi9S6Ui_BfpA5KbJPU,23187
406
- kailash-0.9.14.dist-info/licenses/LICENSE,sha256=9GYZHXVUmx6FdFRNzOeE_w7a_aEGeYbqTVmFtJlrbGk,13438
407
- kailash-0.9.14.dist-info/licenses/NOTICE,sha256=9ssIK4LcHSTFqriXGdteMpBPTS1rSLlYtjppZ_bsjZ0,723
408
- kailash-0.9.14.dist-info/METADATA,sha256=4j6DBNRv5DSiH0VPQ1H3IhTw8vh06MYdDAJebLSmGg0,23528
409
- kailash-0.9.14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
410
- kailash-0.9.14.dist-info/entry_points.txt,sha256=M_q3b8PG5W4XbhSgESzIJjh3_4OBKtZFYFsOdkr2vO4,45
411
- kailash-0.9.14.dist-info/top_level.txt,sha256=z7GzH2mxl66498pVf5HKwo5wwfPtt9Aq95uZUpH6JV0,8
412
- kailash-0.9.14.dist-info/RECORD,,
426
+ kailash-0.9.16.dist-info/licenses/LICENSE,sha256=9GYZHXVUmx6FdFRNzOeE_w7a_aEGeYbqTVmFtJlrbGk,13438
427
+ kailash-0.9.16.dist-info/licenses/NOTICE,sha256=9ssIK4LcHSTFqriXGdteMpBPTS1rSLlYtjppZ_bsjZ0,723
428
+ kailash-0.9.16.dist-info/METADATA,sha256=wT0i6zQQiwMQWpN6CP4czfXTTpwESneUQPLI75sV4SA,23528
429
+ kailash-0.9.16.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
430
+ kailash-0.9.16.dist-info/entry_points.txt,sha256=M_q3b8PG5W4XbhSgESzIJjh3_4OBKtZFYFsOdkr2vO4,45
431
+ kailash-0.9.16.dist-info/top_level.txt,sha256=z7GzH2mxl66498pVf5HKwo5wwfPtt9Aq95uZUpH6JV0,8
432
+ kailash-0.9.16.dist-info/RECORD,,