kailash 0.1.5__py3-none-any.whl → 0.2.1__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 (77) hide show
  1. kailash/__init__.py +1 -1
  2. kailash/access_control.py +740 -0
  3. kailash/api/__main__.py +6 -0
  4. kailash/api/auth.py +668 -0
  5. kailash/api/custom_nodes.py +285 -0
  6. kailash/api/custom_nodes_secure.py +377 -0
  7. kailash/api/database.py +620 -0
  8. kailash/api/studio.py +915 -0
  9. kailash/api/studio_secure.py +893 -0
  10. kailash/mcp/__init__.py +53 -0
  11. kailash/mcp/__main__.py +13 -0
  12. kailash/mcp/ai_registry_server.py +712 -0
  13. kailash/mcp/client.py +447 -0
  14. kailash/mcp/client_new.py +334 -0
  15. kailash/mcp/server.py +293 -0
  16. kailash/mcp/server_new.py +336 -0
  17. kailash/mcp/servers/__init__.py +12 -0
  18. kailash/mcp/servers/ai_registry.py +289 -0
  19. kailash/nodes/__init__.py +4 -2
  20. kailash/nodes/ai/__init__.py +2 -0
  21. kailash/nodes/ai/a2a.py +714 -67
  22. kailash/nodes/ai/intelligent_agent_orchestrator.py +31 -37
  23. kailash/nodes/ai/iterative_llm_agent.py +1280 -0
  24. kailash/nodes/ai/llm_agent.py +324 -1
  25. kailash/nodes/ai/self_organizing.py +5 -6
  26. kailash/nodes/base.py +15 -2
  27. kailash/nodes/base_async.py +45 -0
  28. kailash/nodes/base_cycle_aware.py +374 -0
  29. kailash/nodes/base_with_acl.py +338 -0
  30. kailash/nodes/code/python.py +135 -27
  31. kailash/nodes/data/__init__.py +1 -2
  32. kailash/nodes/data/readers.py +16 -6
  33. kailash/nodes/data/sql.py +699 -256
  34. kailash/nodes/data/writers.py +16 -6
  35. kailash/nodes/logic/__init__.py +8 -0
  36. kailash/nodes/logic/convergence.py +642 -0
  37. kailash/nodes/logic/loop.py +153 -0
  38. kailash/nodes/logic/operations.py +187 -27
  39. kailash/nodes/mixins/__init__.py +11 -0
  40. kailash/nodes/mixins/mcp.py +228 -0
  41. kailash/nodes/mixins.py +387 -0
  42. kailash/runtime/__init__.py +2 -1
  43. kailash/runtime/access_controlled.py +458 -0
  44. kailash/runtime/local.py +106 -33
  45. kailash/runtime/parallel_cyclic.py +529 -0
  46. kailash/sdk_exceptions.py +90 -5
  47. kailash/security.py +845 -0
  48. kailash/tracking/manager.py +38 -15
  49. kailash/tracking/models.py +1 -1
  50. kailash/tracking/storage/filesystem.py +30 -2
  51. kailash/utils/__init__.py +8 -0
  52. kailash/workflow/__init__.py +18 -0
  53. kailash/workflow/convergence.py +270 -0
  54. kailash/workflow/cycle_analyzer.py +889 -0
  55. kailash/workflow/cycle_builder.py +579 -0
  56. kailash/workflow/cycle_config.py +725 -0
  57. kailash/workflow/cycle_debugger.py +860 -0
  58. kailash/workflow/cycle_exceptions.py +615 -0
  59. kailash/workflow/cycle_profiler.py +741 -0
  60. kailash/workflow/cycle_state.py +338 -0
  61. kailash/workflow/cyclic_runner.py +985 -0
  62. kailash/workflow/graph.py +500 -39
  63. kailash/workflow/migration.py +809 -0
  64. kailash/workflow/safety.py +365 -0
  65. kailash/workflow/templates.py +763 -0
  66. kailash/workflow/validation.py +751 -0
  67. {kailash-0.1.5.dist-info → kailash-0.2.1.dist-info}/METADATA +259 -12
  68. kailash-0.2.1.dist-info/RECORD +125 -0
  69. kailash/nodes/mcp/__init__.py +0 -11
  70. kailash/nodes/mcp/client.py +0 -554
  71. kailash/nodes/mcp/resource.py +0 -682
  72. kailash/nodes/mcp/server.py +0 -577
  73. kailash-0.1.5.dist-info/RECORD +0 -88
  74. {kailash-0.1.5.dist-info → kailash-0.2.1.dist-info}/WHEEL +0 -0
  75. {kailash-0.1.5.dist-info → kailash-0.2.1.dist-info}/entry_points.txt +0 -0
  76. {kailash-0.1.5.dist-info → kailash-0.2.1.dist-info}/licenses/LICENSE +0 -0
  77. {kailash-0.1.5.dist-info → kailash-0.2.1.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kailash
3
- Version: 0.1.5
3
+ Version: 0.2.1
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
@@ -47,6 +47,16 @@ Requires-Dist: pytest-asyncio>=1.0.0
47
47
  Requires-Dist: pre-commit>=4.2.0
48
48
  Requires-Dist: twine>=6.1.0
49
49
  Requires-Dist: ollama>=0.5.1
50
+ Requires-Dist: sqlalchemy>=2.0.0
51
+ Requires-Dist: psycopg2-binary>=2.9.0
52
+ Requires-Dist: pymysql>=1.1.0
53
+ Requires-Dist: aiosqlite>=0.19.0
54
+ Requires-Dist: websockets>=12.0
55
+ Requires-Dist: httpx>=0.25.0
56
+ Requires-Dist: python-jose>=3.5.0
57
+ Requires-Dist: pytest-xdist>=3.6.0
58
+ Requires-Dist: pytest-timeout>=2.3.0
59
+ Requires-Dist: pytest-split>=0.9.0
50
60
  Provides-Extra: dev
51
61
  Requires-Dist: pytest>=7.0; extra == "dev"
52
62
  Requires-Dist: pytest-cov>=3.0; extra == "dev"
@@ -66,7 +76,7 @@ Dynamic: requires-python
66
76
  <a href="https://pepy.tech/project/kailash"><img src="https://static.pepy.tech/badge/kailash" alt="Downloads"></a>
67
77
  <img src="https://img.shields.io/badge/license-MIT-green.svg" alt="MIT License">
68
78
  <img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code style: black">
69
- <img src="https://img.shields.io/badge/tests-753%20passing-brightgreen.svg" alt="Tests: 753 passing">
79
+ <img src="https://img.shields.io/badge/tests-734%20passing-brightgreen.svg" alt="Tests: 734 passing">
70
80
  <img src="https://img.shields.io/badge/coverage-100%25-brightgreen.svg" alt="Coverage: 100%">
71
81
  </p>
72
82
 
@@ -94,6 +104,11 @@ Dynamic: requires-python
94
104
  - 🚪 **Multi-Workflow Gateway**: Manage multiple workflows through unified API with MCP integration
95
105
  - 🤖 **Self-Organizing Agents**: Autonomous agent pools with intelligent team formation and convergence detection
96
106
  - 🧠 **Agent-to-Agent Communication**: Shared memory pools and intelligent caching for coordinated multi-agent systems
107
+ - 🔒 **Production Security**: Comprehensive security framework with path traversal prevention, code sandboxing, and audit logging
108
+ - 🎨 **Visual Workflow Builder**: Kailash Workflow Studio - drag-and-drop interface for creating and managing workflows (coming soon)
109
+ - 🔁 **Cyclic Workflows (v0.2.0)**: Universal Hybrid Cyclic Graph Architecture with 30,000+ iterations/second performance
110
+ - 🛠️ **Developer Tools**: CycleAnalyzer, CycleDebugger, CycleProfiler for production-ready cyclic workflows
111
+ - 📈 **High Performance**: Optimized execution engine supporting 100,000+ iteration workflows
97
112
 
98
113
  ## 🎯 Who Is This For?
99
114
 
@@ -278,6 +293,141 @@ results, run_id = runtime.execute(workflow)
278
293
  print("RAG Response:", results["llm_agent"]["response"])
279
294
  ```
280
295
 
296
+ ### Cyclic Workflows - Iterative Processing with Convergence
297
+
298
+ Build workflows that iterate until a condition is met, perfect for optimization, retries, and ML training:
299
+
300
+ ```python
301
+ from kailash.workflow import Workflow
302
+ from kailash.nodes.base_cycle_aware import CycleAwareNode
303
+ from kailash.nodes.base import NodeParameter
304
+ from kailash.runtime.local import LocalRuntime
305
+ from typing import Any, Dict
306
+
307
+ # Create a custom cycle-aware node for data quality improvement
308
+ class DataQualityImproverNode(CycleAwareNode):
309
+ def get_parameters(self) -> Dict[str, NodeParameter]:
310
+ return {
311
+ "data": NodeParameter(name="data", type=list, required=True),
312
+ "target_quality": NodeParameter(name="target_quality", type=float, required=False, default=0.95)
313
+ }
314
+
315
+ def run(self, context: Dict[str, Any], **kwargs) -> Dict[str, Any]:
316
+ """Iteratively improve data quality."""
317
+ data = kwargs["data"]
318
+ target_quality = kwargs.get("target_quality", 0.95)
319
+
320
+ # Get current iteration and previous state
321
+ iteration = self.get_iteration(context)
322
+ prev_state = self.get_previous_state(context)
323
+
324
+ # Calculate current quality
325
+ quality = prev_state.get("quality", 0.5) + 0.1 # Improve by 10% each iteration
326
+ quality = min(quality, 1.0)
327
+
328
+ # Process data (simplified)
329
+ processed_data = [item for item in data if item is not None]
330
+
331
+ # Track quality history
332
+ quality_history = self.accumulate_values(context, "quality_history", quality, max_history=10)
333
+
334
+ # Detect convergence trend
335
+ trend = self.detect_convergence_trend(context, "quality_history", window_size=5)
336
+ converged = quality >= target_quality or (trend and trend["slope"] < 0.01)
337
+
338
+ # Log progress
339
+ self.log_cycle_info(context, f"Iteration {iteration}: Quality={quality:.2%}")
340
+
341
+ # Save state for next iteration
342
+ self.set_cycle_state({"quality": quality, "processed_count": len(processed_data)})
343
+
344
+ return {
345
+ "data": processed_data,
346
+ "quality": quality,
347
+ "converged": converged,
348
+ "iteration": iteration,
349
+ "history": quality_history
350
+ }
351
+
352
+ # Build cyclic workflow
353
+ workflow = Workflow("quality_improvement", "Iterative Data Quality")
354
+ workflow.add_node("improver", DataQualityImproverNode())
355
+
356
+ # Create a cycle - node connects to itself!
357
+ workflow.connect("improver", "improver",
358
+ mapping={"data": "data"}, # Pass data to next iteration
359
+ cycle=True, # This is a cycle
360
+ max_iterations=20, # Safety limit
361
+ convergence_check="converged == True") # Stop condition
362
+
363
+ # Execute with automatic iteration management
364
+ runtime = LocalRuntime()
365
+ results, run_id = runtime.execute(workflow, parameters={
366
+ "improver": {
367
+ "data": [1, None, 3, None, 5, 6, None, 8, 9, 10],
368
+ "target_quality": 0.9
369
+ }
370
+ })
371
+
372
+ print(f"Converged after {results['improver']['iteration']} iterations")
373
+ print(f"Final quality: {results['improver']['quality']:.2%}")
374
+ print(f"Quality history: {results['improver']['history']}")
375
+ ```
376
+
377
+ ### NEW in v0.2.0: CycleBuilder API
378
+
379
+ The new CycleBuilder API provides a fluent interface for creating cyclic workflows:
380
+
381
+ ```python
382
+ # Modern approach with CycleBuilder
383
+ workflow.create_cycle("optimization_loop")
384
+ .connect("gradient", "optimizer")
385
+ .connect("optimizer", "evaluator")
386
+ .connect("evaluator", "gradient")
387
+ .max_iterations(100)
388
+ .converge_when("loss < 0.01")
389
+ .early_stop_when("gradient_norm < 1e-6")
390
+ .checkpoint_every(10)
391
+ .build()
392
+
393
+ # Developer tools for production workflows
394
+ from kailash.workflow import CycleAnalyzer, CycleDebugger, CycleProfiler
395
+
396
+ # Analyze cycle patterns
397
+ analyzer = CycleAnalyzer(workflow)
398
+ report = analyzer.analyze()
399
+ print(f"Found {len(report.cycles)} cycles")
400
+ print(f"Max depth: {report.max_cycle_depth}")
401
+
402
+ # Debug with breakpoints
403
+ debugger = CycleDebugger(workflow)
404
+ debugger.set_breakpoint("optimizer", iteration=50)
405
+ debugger.set_trace("gradient_norm", lambda x: x < 0.001)
406
+
407
+ # Profile performance
408
+ profiler = CycleProfiler(workflow)
409
+ profile_data = profiler.profile(runtime, parameters)
410
+ print(f"Bottleneck: {profile_data.bottleneck_node}")
411
+ print(f"Iterations/sec: {profile_data.iterations_per_second}")
412
+ ```
413
+
414
+ #### Cyclic Workflow Features
415
+
416
+ - **Built-in Iteration Management**: No manual loops or recursion needed
417
+ - **State Persistence**: Maintain state across iterations with `get_previous_state()` and `set_cycle_state()`
418
+ - **Convergence Detection**: Automatic trend analysis with `detect_convergence_trend()`
419
+ - **Value Accumulation**: Track metrics over time with `accumulate_values()`
420
+ - **Safety Limits**: Max iterations prevent infinite loops
421
+ - **Performance**: Optimized execution with ~30,000 iterations/second
422
+ - **Developer Tools**: CycleAnalyzer, CycleDebugger, CycleProfiler for production workflows
423
+
424
+ Common cyclic patterns include:
425
+ - **Retry with Backoff**: ETL pipelines with automatic retry
426
+ - **Optimization Loops**: Iterative parameter tuning
427
+ - **ML Training**: Training until accuracy threshold
428
+ - **Polling**: API polling with rate limiting
429
+ - **Stream Processing**: Windowed data processing
430
+
281
431
  ### Workflow API Wrapper - Expose Workflows as REST APIs
282
432
 
283
433
  Transform any Kailash workflow into a production-ready REST API in just 3 lines of code:
@@ -1102,6 +1252,95 @@ This example demonstrates:
1102
1252
  - **Context formatting** for LLM input
1103
1253
  - **Answer generation** using Ollama's llama3.2 model
1104
1254
 
1255
+ ### 🔒 Access Control and Security
1256
+
1257
+ Kailash SDK provides comprehensive access control and security features for enterprise deployments:
1258
+
1259
+ #### Role-Based Access Control (RBAC)
1260
+ ```python
1261
+ from kailash.access_control import UserContext, PermissionRule, NodePermission
1262
+ from kailash.runtime.access_controlled import AccessControlledRuntime
1263
+
1264
+ # Define user with roles
1265
+ user = UserContext(
1266
+ user_id="analyst_001",
1267
+ tenant_id="company_abc",
1268
+ email="analyst@company.com",
1269
+ roles=["analyst", "viewer"]
1270
+ )
1271
+
1272
+ # Create secure runtime
1273
+ runtime = AccessControlledRuntime(user_context=user)
1274
+
1275
+ # Execute workflow with automatic permission checks
1276
+ results, run_id = runtime.execute(workflow, parameters={})
1277
+ ```
1278
+
1279
+ #### Multi-Tenant Isolation
1280
+ ```python
1281
+ from kailash.access_control import get_access_control_manager, PermissionEffect, WorkflowPermission
1282
+
1283
+ # Configure tenant-based access rules
1284
+ acm = get_access_control_manager()
1285
+ acm.enabled = True
1286
+
1287
+ # Tenant isolation rule
1288
+ acm.add_rule(PermissionRule(
1289
+ id="tenant_isolation",
1290
+ resource_type="workflow",
1291
+ resource_id="customer_analytics",
1292
+ permission=WorkflowPermission.EXECUTE,
1293
+ effect=PermissionEffect.ALLOW,
1294
+ tenant_id="company_abc" # Only this tenant can access
1295
+ ))
1296
+ ```
1297
+
1298
+ #### Data Masking and Field Protection
1299
+ ```python
1300
+ from kailash.nodes.base_with_acl import add_access_control
1301
+
1302
+ # Add access control to sensitive data nodes
1303
+ secure_reader = add_access_control(
1304
+ CSVReaderNode(file_path="customers.csv"),
1305
+ enable_access_control=True,
1306
+ required_permission=NodePermission.READ_OUTPUT,
1307
+ mask_output_fields=["ssn", "phone"] # Mask for non-admin users
1308
+ )
1309
+
1310
+ workflow.add_node("secure_data", secure_reader)
1311
+ ```
1312
+
1313
+ #### Permission-Based Routing
1314
+ ```python
1315
+ # Different execution paths based on user permissions
1316
+ from kailash.access_control import NodePermission
1317
+
1318
+ # Admin users get full processing
1319
+ admin_processor = PythonCodeNode.from_function(
1320
+ lambda data: {"result": process_all_data(data)},
1321
+ name="admin_processor"
1322
+ )
1323
+
1324
+ # Analyst users get limited processing
1325
+ analyst_processor = PythonCodeNode.from_function(
1326
+ lambda data: {"result": process_limited_data(data)},
1327
+ name="analyst_processor"
1328
+ )
1329
+
1330
+ # Runtime automatically routes based on user permissions
1331
+ workflow.add_node("admin_path", admin_processor)
1332
+ workflow.add_node("analyst_path", analyst_processor)
1333
+ ```
1334
+
1335
+ **Security Features:**
1336
+ - 🔐 **JWT Authentication**: Token-based authentication with refresh support
1337
+ - 👥 **Multi-Tenant Isolation**: Complete data separation between tenants
1338
+ - 🛡️ **Field-Level Security**: Mask sensitive data based on user roles
1339
+ - 📊 **Audit Logging**: Complete access attempt logging for compliance
1340
+ - 🚫 **Path Traversal Prevention**: Built-in protection against directory attacks
1341
+ - 🏗️ **Backward Compatibility**: Existing workflows work unchanged
1342
+ - ⚡ **Performance Optimized**: Minimal overhead with caching
1343
+
1105
1344
  ## 💻 CLI Commands
1106
1345
 
1107
1346
  The SDK includes a comprehensive CLI for workflow management:
@@ -1298,6 +1537,10 @@ pre-commit run pytest-check
1298
1537
  - Immutable state management
1299
1538
  - API integration with rate limiting
1300
1539
  - OAuth 2.0 authentication
1540
+ - Production security framework
1541
+ - Path traversal prevention
1542
+ - Code execution sandboxing
1543
+ - Comprehensive security testing
1301
1544
  - SharePoint Graph API integration
1302
1545
  - **Self-organizing agent pools with 13 specialized nodes**
1303
1546
  - **Agent-to-agent communication and shared memory**
@@ -1308,16 +1551,19 @@ pre-commit run pytest-check
1308
1551
  - **Performance visualization dashboards**
1309
1552
  - **Real-time monitoring dashboard with WebSocket streaming**
1310
1553
  - **Comprehensive performance reports (HTML, Markdown, JSON)**
1311
- - **89% test coverage (571 tests)**
1312
- - **15 test categories all passing**
1313
- - 37 working examples
1554
+ - **100% test coverage (591 tests)**
1555
+ - **All test categories passing**
1556
+ - 68 working examples
1314
1557
 
1315
1558
  </td>
1316
1559
  <td width="30%">
1317
1560
 
1318
1561
  ### 🚧 In Progress
1319
- - Comprehensive API documentation
1320
- - Security audit & hardening
1562
+ - **Kailash Workflow Studio** - Visual workflow builder UI
1563
+ - React-based drag-and-drop interface
1564
+ - Multi-tenant architecture with Docker
1565
+ - WorkflowStudioAPI backend
1566
+ - Real-time execution monitoring
1321
1567
  - Performance optimizations
1322
1568
  - Docker runtime finalization
1323
1569
 
@@ -1335,11 +1581,12 @@ pre-commit run pytest-check
1335
1581
  </table>
1336
1582
 
1337
1583
  ### 🎯 Test Suite Status
1338
- - **Total Tests**: 571 passing (89%)
1339
- - **Test Categories**: 15/15 at 100%
1340
- - **Integration Tests**: 65 passing
1341
- - **Examples**: 37/37 working
1342
- - **Code Coverage**: 89%
1584
+ - **Total Tests**: 591 passing (100%)
1585
+ - **Test Categories**: All passing
1586
+ - **Integration Tests**: All passing
1587
+ - **Security Tests**: 10 consolidated comprehensive tests
1588
+ - **Examples**: 68/68 working
1589
+ - **Code Coverage**: 100%
1343
1590
 
1344
1591
  ## ⚠️ Known Issues
1345
1592
 
@@ -0,0 +1,125 @@
1
+ kailash/__init__.py,sha256=18nnQJjpf6wotVZ4nNepy5fR8UVttlbAktoQxTepsgk,902
2
+ kailash/__main__.py,sha256=vr7TVE5o16V6LsTmRFKG6RDKUXHpIWYdZ6Dok2HkHnI,198
3
+ kailash/access_control.py,sha256=zLJ6vrBQj9VDO4SP9Mfci9OOu8II5tYq4ERSmWhycg8,25600
4
+ kailash/manifest.py,sha256=8H4ObT3qvdV0FQDXYUF49ppbmOvnK1PmmpdC6h5npn8,24892
5
+ kailash/sdk_exceptions.py,sha256=_l0_xPjkXeFy_4jDW46gjHw_Rj_TndZ9X7NtnU9a298,10469
6
+ kailash/security.py,sha256=jKBMtVLZ4xjbR7vh8aVW4Fcnp-NGflWIakML9zSL_zE,26585
7
+ kailash/api/__init__.py,sha256=9Ofp4qTZCry_hovrtSjPjqyZbrccoPqyz9za_TfSHVg,445
8
+ kailash/api/__main__.py,sha256=79v7N6eCFQ2Otcv66wAv2iM2hD6mwJ__pNiR9yy_qd4,120
9
+ kailash/api/auth.py,sha256=UTGnslYwQxRsz0-kzLiu_pn0QjUrjwDU1EFVCHv15DI,20167
10
+ kailash/api/custom_nodes.py,sha256=e4xqdm4i8bGMGyt3H3Tv7cXSALdgFFyqRL031IDmI9M,10690
11
+ kailash/api/custom_nodes_secure.py,sha256=GAyH2WTvUnvTfdSa6IWKz5d1DW_gbaSQAWTFYiu4k2M,13258
12
+ kailash/api/database.py,sha256=tBslJjpM6cHdicnQGnGXUuc-V6Qkm6UrEfpFP8WwtsU,19477
13
+ kailash/api/gateway.py,sha256=rp0Doz7HaEgLFXRqZvzMk6EfK-M6HmMHcSAJSv28FL8,12576
14
+ kailash/api/mcp_integration.py,sha256=Pvm65Nb1g4-QGKqweeRE-hMJe0HvqhljHB-UTtItnVc,14541
15
+ kailash/api/studio.py,sha256=HNauboOnWTHNcxyulgng4E8MRiZJGqd80u5d8SxPtXU,35056
16
+ kailash/api/studio_secure.py,sha256=sUqvsaTF7P-d2riviuvfFc_sujhjAnnhGcdhqi0H8Ls,32191
17
+ kailash/api/workflow_api.py,sha256=8e4YSeeTQQT_9GJ_5-kWQFhL8v5-qqVWFv3ToREzBXE,13177
18
+ kailash/cli/__init__.py,sha256=kJaqsBp3fRmagJhqA6LMwMbEa_Vkz93hIPH3W5Mn5r0,97
19
+ kailash/cli/commands.py,sha256=K5slsaoYSw7ZpVgePvobN6K4w9_dXJugBTIY0aifKik,18236
20
+ kailash/mcp/__init__.py,sha256=ZEhYIsPcy3sgywvdcr4w2FBjtqorOGXxHCngxK4sy9k,1804
21
+ kailash/mcp/__main__.py,sha256=ohgrksZZ8Z5IDZToH12IUVtW3dl5NtQ63UmprNzGFZ0,215
22
+ kailash/mcp/ai_registry_server.py,sha256=mOVNyQdtiWIalWzXFILl6rt0TfnbJ4RD5ZiADjT3kdk,28155
23
+ kailash/mcp/client.py,sha256=X914ddaAY7NdOxIin-5lLQKDZOLT86u12q0fxXgzGFk,16121
24
+ kailash/mcp/client_new.py,sha256=I9a68gSMWaBv7WRgvDRvHAfm7fdMO_0sbJL0eM9b3gw,10322
25
+ kailash/mcp/server.py,sha256=ESwOulBkEjHJp22lzmCQt33YCz2CQmMFZzhPL0AV4ac,8250
26
+ kailash/mcp/server_new.py,sha256=GukeeVSNuJG99hYo0cQs-oiPhT8UUaxr9yl96NYClXc,10914
27
+ kailash/mcp/servers/__init__.py,sha256=Ajho8j0chg36_DlMsyP6DLsvODgGesOvO0f95BgLxro,325
28
+ kailash/mcp/servers/ai_registry.py,sha256=NLqhsOTD6L8HFOprY6IwaYD-kkgdZD3eg_sIuUPiAhY,10003
29
+ kailash/nodes/__init__.py,sha256=MO2N1k-lq68CuQvsWiYV2GQG0T15X41E1aRkLFL46kU,650
30
+ kailash/nodes/base.py,sha256=k8sKGsMriENzjg0cUtBZ2rUNuD6cvMNZX-DUfdZXxNg,38189
31
+ kailash/nodes/base_async.py,sha256=t9Hf3F30q6CMDfgd2BFkXYIJMEGdEir8xdWCl9euqAs,6622
32
+ kailash/nodes/base_cycle_aware.py,sha256=NJh-8zOfdgBzAK_3faMl9i2aqCp3f4RG1aQ-IJbSSxo,13293
33
+ kailash/nodes/base_with_acl.py,sha256=aeIhLX3B17twYe_B-tba6e47bj7tZ9CstnlCana0aps,11868
34
+ kailash/nodes/mixins.py,sha256=wIG0No-nUSnk6EBnrW4vQt6m_nDVQHhcR2UOHbIyWRE,12116
35
+ kailash/nodes/ai/__init__.py,sha256=rslxIS8jlovshiNgWqVzQjD_kfT_3h3Ct03sk-iRe6U,2202
36
+ kailash/nodes/ai/a2a.py,sha256=U1nDjWkSxlN98b1EwRN-74HtuONHdOoVc-jYEnpQA80,69303
37
+ kailash/nodes/ai/agents.py,sha256=yygZw8eJPt7iuRm4jZR-I2wtfIVrIH8OxoorgZ2HNrw,20379
38
+ kailash/nodes/ai/ai_providers.py,sha256=rtFOvsyUlcoD0voeiCHyBR7ELcRMfJa5T2T7wFyB5js,53026
39
+ kailash/nodes/ai/embedding_generator.py,sha256=UZagRpoybTlV_LMCt0HMUuc1TYFh5yLfs38mqdLItEI,31846
40
+ kailash/nodes/ai/intelligent_agent_orchestrator.py,sha256=8rlP-xOmqE5Y6imRqrXYvLyMq11uF6uKVG4S7seH8HE,80329
41
+ kailash/nodes/ai/iterative_llm_agent.py,sha256=pUPIPt5TcvfCmw9Tw8fp3gQ6AfrLNAEIH4eRmA_CGOE,52912
42
+ kailash/nodes/ai/llm_agent.py,sha256=huU3GwJVOukn0qyJc6T7Nh2v-y-JvJsK-53bCUAZAg0,60780
43
+ kailash/nodes/ai/models.py,sha256=t90NvEIEJJxdBXwW0DhKACQG1Um-sJPm-lBdPBt8-ZA,16399
44
+ kailash/nodes/ai/self_organizing.py,sha256=NCUoq8y3aYZOJNToZhwgl0ExsE9vQaWN0CWAAWR4U7E,60584
45
+ kailash/nodes/api/__init__.py,sha256=1yFcWVYyc-bsilknBT5aAGV7jcp-Ysu_afRilNJlD0A,1529
46
+ kailash/nodes/api/auth.py,sha256=cpHUIZ6-YFo3jkW0K4-eBP38EZCl7Lrfibg5XTZaPWo,19427
47
+ kailash/nodes/api/graphql.py,sha256=PH1ccwbw-fsBfKHl8L_whkZSRMgGAPKM7kkLTmwci5s,16994
48
+ kailash/nodes/api/http.py,sha256=XTkHmmVnGyvIqpNhmjUsRNuk-qYzvWdyF89cg5zHxI8,38396
49
+ kailash/nodes/api/rate_limiting.py,sha256=f-cY_ee5juWHyKT3FqtaTk-SjEgMWX2DxU10Y41DZG4,19728
50
+ kailash/nodes/api/rest.py,sha256=yRLcNuIGVq5Nc1z759tc3Nqt3c2d7UnMqE7lZ8tVKMM,43357
51
+ kailash/nodes/code/__init__.py,sha256=L3QBfnITPb6v-Wbq2ezNWt8xDlC4uGaTgrkqIJ9vGKU,1191
52
+ kailash/nodes/code/python.py,sha256=hUOdS2_dWEcLWkH5m_VeFgJ8tajY0FjJLmDQfHYbbRs,38775
53
+ kailash/nodes/data/__init__.py,sha256=TjMgG-Z7JzbVklnT12EZLt06RzxhXYMRMINWyZ46xm8,4059
54
+ kailash/nodes/data/readers.py,sha256=zVAXHAX8yZp5fomlnjc8eXODjjiO8oaxeRWrg7uRk6s,19375
55
+ kailash/nodes/data/retrieval.py,sha256=ANQXk0h5QI_NX_VdgABJEHbKWI3wtiRXCNgoap27M04,7516
56
+ kailash/nodes/data/sharepoint_graph.py,sha256=UIyy8Q-9bGTzj-hjcxne8DkBJvr6Eig1HgY1JqGZqss,22437
57
+ kailash/nodes/data/sources.py,sha256=MaXFPSDg4VN7TN5iNMZxwhxgj6nNpH43tQYmkxhHxjE,3638
58
+ kailash/nodes/data/sql.py,sha256=wQNcK_5BPW0d6czTRMnxLfpsWQVd-Y-Xhmxg4afi8Fo,30443
59
+ kailash/nodes/data/streaming.py,sha256=OAME3quVU9NbQFMBM6X-Yiri8Q5WGlEi91U4oGs78Fw,35223
60
+ kailash/nodes/data/vector_db.py,sha256=rywRU65g7ou9v1QPSZmC5esnqC-O0DezGOJS37wKdJs,30556
61
+ kailash/nodes/data/writers.py,sha256=07gDN44i3k0nRv1qRVJYMWmvhyJxcQ4OiDPZ9dzfDIc,17543
62
+ kailash/nodes/logic/__init__.py,sha256=JKGFXwBDfY3s1MWQkx3ivdvCMm3b3HIXCn-wH9uMoG4,603
63
+ kailash/nodes/logic/async_operations.py,sha256=WLV05FG3u02tuHNFbce-aYhiTL0s45fOrGQcvog3mLU,27512
64
+ kailash/nodes/logic/convergence.py,sha256=TrL8nUCqdUp4UxJwjuI-6BdStLcZbb_nP0xgYBhZnmI,24207
65
+ kailash/nodes/logic/loop.py,sha256=lPlLmwz6iMtY89xNvwx7Icvx75sHE6DzurkNPu0G2Zg,5775
66
+ kailash/nodes/logic/operations.py,sha256=zz2Hn4eUM52EkmqTTjb2ujSs1YfG5dSyPga39rZ-dEs,28179
67
+ kailash/nodes/logic/workflow.py,sha256=xo5IS_dB3bz4ApaCOa0LZXkCoornCcBspQs2laA-eBQ,17178
68
+ kailash/nodes/mixins/__init__.py,sha256=AUYcxnBTLZCc_RHFsfcwLYa88yW3pyQHJqfMdcZV-pE,263
69
+ kailash/nodes/mixins/mcp.py,sha256=kE3qhqHlyfUquPyk13u73zfj9oYWuhfrsjWo6q1xbIM,6892
70
+ kailash/nodes/transform/__init__.py,sha256=sIUk7XMEl3x_XKNiRIyVtHmbLRUa0jHj1fEuUyELT_s,584
71
+ kailash/nodes/transform/chunkers.py,sha256=qh2wYq6bdo5qGoDRLrowDrpl4VinRO4hDOj05DOr3RY,2580
72
+ kailash/nodes/transform/formatters.py,sha256=02T87cQ4nVJoUKV9spEBzKa1YxtbV_KurngbhnfkVao,3078
73
+ kailash/nodes/transform/processors.py,sha256=BZjDigpHD5pFxyZ0sty7-jpdEmD11euQip9N3U4Uzlw,18490
74
+ kailash/runtime/__init__.py,sha256=CvU-qBMESYYISqFOlYlLsYJrXJu0Gqr4x6yr4Ob_Rng,278
75
+ kailash/runtime/access_controlled.py,sha256=hEpLv9hwaaJoD03YTkUnr4rWEatFvgRrhu4sa1RTUU4,17274
76
+ kailash/runtime/async_local.py,sha256=h8NrwgXOEX-pgozPS1_TPLCrWeSorf0AqridKX1yI2w,12264
77
+ kailash/runtime/docker.py,sha256=U0nU4fGTLA59H25mBDFC6EkTXry-5bwXkWUgRw1qBqc,23559
78
+ kailash/runtime/local.py,sha256=HCMOkezJ9L3sTWO1x4dAnLMGroaFWwm42MvU-9PCPZs,19001
79
+ kailash/runtime/parallel.py,sha256=VPVSBglVqdnMyyHMgThDedbghK47f6-2Jx7434BAlz4,21129
80
+ kailash/runtime/parallel_cyclic.py,sha256=vAlg_XvdMrrBuDbdhXhI88FCPYgIJ_t--zjKi1kJB1A,19942
81
+ kailash/runtime/runner.py,sha256=wzTiC8hHoy3dca5NRImaw2qfjH1bkUJR2UaFwCkTV6Y,3246
82
+ kailash/runtime/testing.py,sha256=UJdLD7Eh45sa3oIWy6Pe0LA6yf9NcY_9r8YXWUwSuEQ,11578
83
+ kailash/tracking/__init__.py,sha256=nhyecV24JuB_D-veJ3qw7h4oO8Sbdmyb6RvPS6VQktU,305
84
+ kailash/tracking/manager.py,sha256=C7DEMLJN6oQwKnISHqwRbDuGdYs0_j0ATEE3FJjF8eA,28135
85
+ kailash/tracking/metrics_collector.py,sha256=8CvNK3lUIN7BfGy0Re-2WrNKM3J0vx8vjfd-uyvaJJs,11820
86
+ kailash/tracking/models.py,sha256=iMbD60YYkGUik6-cDd_jxG6uiIttS7iR1ALYRug_FDY,18113
87
+ kailash/tracking/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
+ kailash/tracking/storage/base.py,sha256=bw4WWoG40G8zJCS0zVQ18-BiBYbt3fnZPx64xq0BY0c,2468
89
+ kailash/tracking/storage/database.py,sha256=3pHaohN_tuP3bfV2gCD8vOdqJSZhuKlGRjigWVme0FQ,20022
90
+ kailash/tracking/storage/filesystem.py,sha256=7Cmpd1CEWhtQu7Buf71d2Nda0r1btJEa7FuilctDP5w,19891
91
+ kailash/utils/__init__.py,sha256=pFKhHJxU_kyFE9aGT5recw5E-3nbfVF5pMHepBJWB2E,253
92
+ kailash/utils/export.py,sha256=LIahj_qIM0vaC5rFnV_iVGaL92jRp1WkYmi8pEgf6yE,31964
93
+ kailash/utils/templates.py,sha256=WBZMd8-HoGB47nhJTSwxEkJi9etfNppOTiwtlZe2DFI,22049
94
+ kailash/visualization/__init__.py,sha256=6bvgE_Rt8z3Rf4kSvdWvZNaTYvbofRHc_QbGlC0xDYE,1880
95
+ kailash/visualization/api.py,sha256=jKjfxuufSsXZEsEWIu6_FF7XHQsjjO2d5MJfO0F8S20,28890
96
+ kailash/visualization/dashboard.py,sha256=euAyqTu5QWwcUOhLBcdYrKnJdFVX_pQThlNLp-yYbaA,32874
97
+ kailash/visualization/performance.py,sha256=qW4sI8ios8__j5-qXUhN7Pa3mE-9E3JTEBkFkt7fSY8,28053
98
+ kailash/visualization/reports.py,sha256=FKERee_SUm12P3QEBwm4Up_WZYcgXPJfx_0ZAzcUNug,52671
99
+ kailash/workflow/__init__.py,sha256=x-yL8h6tsXq5gZj_fVYKJhyYJOEMFbaVXTNIomE-CDo,1011
100
+ kailash/workflow/builder.py,sha256=zoNQT2LUym1ykkoVz5RK4O2aqsmZWGNXHkAnCi8xyUg,7683
101
+ kailash/workflow/convergence.py,sha256=OFoQvnVfFjjhIjncz_16uG8koKVLQC7QhfLP4G7mmH8,10039
102
+ kailash/workflow/cycle_analyzer.py,sha256=x8nY8mvMsAIfatNdDr9WUUV1G-qOevuqBIv9PLZ-cnE,32355
103
+ kailash/workflow/cycle_builder.py,sha256=UqxXYSGsHg7KTZY-pKJSECB8XVXR4XB6NePo6nTIi0Q,20932
104
+ kailash/workflow/cycle_config.py,sha256=KjbbA5jnqPwyqey8AacLEvu4CJAI4hJtAuXSxZA6Ew0,28417
105
+ kailash/workflow/cycle_debugger.py,sha256=fTdxMpLYtRZYSkmVd9YL9xuZnx6Vy4ZOrn6KEskcb6o,31642
106
+ kailash/workflow/cycle_exceptions.py,sha256=9MY_AmRFwqweideAQjfVA8oYgCDMvqiFKb9WLtEvDMU,21944
107
+ kailash/workflow/cycle_profiler.py,sha256=vZb5KO8zadN5aDktlZrpsFRonJhSptAkrfRkQlSN4WY,28582
108
+ kailash/workflow/cycle_state.py,sha256=M7f60R8idkHpgNhziutiZV3TPV-cSCz5K_VChHfkj1o,10834
109
+ kailash/workflow/cyclic_runner.py,sha256=VUPU-OMiZB_hBGBtfFwvMAVgzAONNt62C5HuUeNXO4w,37222
110
+ kailash/workflow/graph.py,sha256=D0FyHlHAg1YVpiJrE-6yl5Tkj1uqk1SgT5ygObuSMLQ,51514
111
+ kailash/workflow/mermaid_visualizer.py,sha256=PU_uVeYqR1m59z-qhbQOJHztf0um3FYw9jpF3j22QYA,22351
112
+ kailash/workflow/migration.py,sha256=h67EGYnMg32dukHBF9AdPeQh7mYTCO9O07pNsBTSeVc,31515
113
+ kailash/workflow/mock_registry.py,sha256=oweiPQ-mBuDdzTUbo3qZAW6OaBKNqST_1vX32xMtcL4,1704
114
+ kailash/workflow/runner.py,sha256=QATm4y7botMoOFltcHe8CreeUlobJX0M5nLHQ9usRgo,10839
115
+ kailash/workflow/safety.py,sha256=pWXpl1ED76HejNoTn-M5fY4hVB-_-WBWP2_2uo4WGd0,11364
116
+ kailash/workflow/state.py,sha256=3vZkptVfPYqN-Q9aFwO2sUpmy-l1h5vIMVwh67uTwE4,7722
117
+ kailash/workflow/templates.py,sha256=WCgN_Xeu9kpdC2Fqdh0NqyJc8ebvQyAK6ZfYyQM2lFM,24410
118
+ kailash/workflow/validation.py,sha256=6Cgs_uTiznywJS6OQz0VuXpHdAjs2XfF88CGj7D3R7k,33094
119
+ kailash/workflow/visualization.py,sha256=gSMT-jaSzQBufV4mDArWVPJj5bpNIxTa_NE796Rm8I8,19536
120
+ kailash-0.2.1.dist-info/licenses/LICENSE,sha256=Axe6g7bTrJkToK9h9j2SpRUKKNaDZDCo2lQ2zPxCE6s,1065
121
+ kailash-0.2.1.dist-info/METADATA,sha256=4rH2C-FhkntFmp5azX2YHbaks4E350YMj9V-ceOkgs4,53507
122
+ kailash-0.2.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
123
+ kailash-0.2.1.dist-info/entry_points.txt,sha256=M_q3b8PG5W4XbhSgESzIJjh3_4OBKtZFYFsOdkr2vO4,45
124
+ kailash-0.2.1.dist-info/top_level.txt,sha256=z7GzH2mxl66498pVf5HKwo5wwfPtt9Aq95uZUpH6JV0,8
125
+ kailash-0.2.1.dist-info/RECORD,,
@@ -1,11 +0,0 @@
1
- """Model Context Protocol (MCP) nodes for the Kailash SDK."""
2
-
3
- from .client import MCPClient
4
- from .resource import MCPResource
5
- from .server import MCPServer
6
-
7
- __all__ = [
8
- "MCPClient",
9
- "MCPServer",
10
- "MCPResource",
11
- ]