kailash 0.1.5__py3-none-any.whl → 0.2.0__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 (75) 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/readers.py +16 -6
  32. kailash/nodes/data/writers.py +16 -6
  33. kailash/nodes/logic/__init__.py +8 -0
  34. kailash/nodes/logic/convergence.py +642 -0
  35. kailash/nodes/logic/loop.py +153 -0
  36. kailash/nodes/logic/operations.py +187 -27
  37. kailash/nodes/mixins/__init__.py +11 -0
  38. kailash/nodes/mixins/mcp.py +228 -0
  39. kailash/nodes/mixins.py +387 -0
  40. kailash/runtime/__init__.py +2 -1
  41. kailash/runtime/access_controlled.py +458 -0
  42. kailash/runtime/local.py +106 -33
  43. kailash/runtime/parallel_cyclic.py +529 -0
  44. kailash/sdk_exceptions.py +90 -5
  45. kailash/security.py +845 -0
  46. kailash/tracking/manager.py +38 -15
  47. kailash/tracking/models.py +1 -1
  48. kailash/tracking/storage/filesystem.py +30 -2
  49. kailash/utils/__init__.py +8 -0
  50. kailash/workflow/__init__.py +18 -0
  51. kailash/workflow/convergence.py +270 -0
  52. kailash/workflow/cycle_analyzer.py +768 -0
  53. kailash/workflow/cycle_builder.py +573 -0
  54. kailash/workflow/cycle_config.py +709 -0
  55. kailash/workflow/cycle_debugger.py +760 -0
  56. kailash/workflow/cycle_exceptions.py +601 -0
  57. kailash/workflow/cycle_profiler.py +671 -0
  58. kailash/workflow/cycle_state.py +338 -0
  59. kailash/workflow/cyclic_runner.py +985 -0
  60. kailash/workflow/graph.py +500 -39
  61. kailash/workflow/migration.py +768 -0
  62. kailash/workflow/safety.py +365 -0
  63. kailash/workflow/templates.py +744 -0
  64. kailash/workflow/validation.py +693 -0
  65. {kailash-0.1.5.dist-info → kailash-0.2.0.dist-info}/METADATA +256 -12
  66. kailash-0.2.0.dist-info/RECORD +125 -0
  67. kailash/nodes/mcp/__init__.py +0 -11
  68. kailash/nodes/mcp/client.py +0 -554
  69. kailash/nodes/mcp/resource.py +0 -682
  70. kailash/nodes/mcp/server.py +0 -577
  71. kailash-0.1.5.dist-info/RECORD +0 -88
  72. {kailash-0.1.5.dist-info → kailash-0.2.0.dist-info}/WHEEL +0 -0
  73. {kailash-0.1.5.dist-info → kailash-0.2.0.dist-info}/entry_points.txt +0 -0
  74. {kailash-0.1.5.dist-info → kailash-0.2.0.dist-info}/licenses/LICENSE +0 -0
  75. {kailash-0.1.5.dist-info → kailash-0.2.0.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.0
4
4
  Summary: Python SDK for the Kailash container-node architecture
5
5
  Home-page: https://github.com/integrum/kailash-python-sdk
6
6
  Author: Integrum
@@ -47,6 +47,13 @@ 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: websockets>=12.0
52
+ Requires-Dist: httpx>=0.25.0
53
+ Requires-Dist: python-jose>=3.5.0
54
+ Requires-Dist: pytest-xdist>=3.6.0
55
+ Requires-Dist: pytest-timeout>=2.3.0
56
+ Requires-Dist: pytest-split>=0.9.0
50
57
  Provides-Extra: dev
51
58
  Requires-Dist: pytest>=7.0; extra == "dev"
52
59
  Requires-Dist: pytest-cov>=3.0; extra == "dev"
@@ -66,7 +73,7 @@ Dynamic: requires-python
66
73
  <a href="https://pepy.tech/project/kailash"><img src="https://static.pepy.tech/badge/kailash" alt="Downloads"></a>
67
74
  <img src="https://img.shields.io/badge/license-MIT-green.svg" alt="MIT License">
68
75
  <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">
76
+ <img src="https://img.shields.io/badge/tests-734%20passing-brightgreen.svg" alt="Tests: 734 passing">
70
77
  <img src="https://img.shields.io/badge/coverage-100%25-brightgreen.svg" alt="Coverage: 100%">
71
78
  </p>
72
79
 
@@ -94,6 +101,11 @@ Dynamic: requires-python
94
101
  - 🚪 **Multi-Workflow Gateway**: Manage multiple workflows through unified API with MCP integration
95
102
  - 🤖 **Self-Organizing Agents**: Autonomous agent pools with intelligent team formation and convergence detection
96
103
  - 🧠 **Agent-to-Agent Communication**: Shared memory pools and intelligent caching for coordinated multi-agent systems
104
+ - 🔒 **Production Security**: Comprehensive security framework with path traversal prevention, code sandboxing, and audit logging
105
+ - 🎨 **Visual Workflow Builder**: Kailash Workflow Studio - drag-and-drop interface for creating and managing workflows (coming soon)
106
+ - 🔁 **Cyclic Workflows (v0.2.0)**: Universal Hybrid Cyclic Graph Architecture with 30,000+ iterations/second performance
107
+ - 🛠️ **Developer Tools**: CycleAnalyzer, CycleDebugger, CycleProfiler for production-ready cyclic workflows
108
+ - 📈 **High Performance**: Optimized execution engine supporting 100,000+ iteration workflows
97
109
 
98
110
  ## 🎯 Who Is This For?
99
111
 
@@ -278,6 +290,141 @@ results, run_id = runtime.execute(workflow)
278
290
  print("RAG Response:", results["llm_agent"]["response"])
279
291
  ```
280
292
 
293
+ ### Cyclic Workflows - Iterative Processing with Convergence
294
+
295
+ Build workflows that iterate until a condition is met, perfect for optimization, retries, and ML training:
296
+
297
+ ```python
298
+ from kailash.workflow import Workflow
299
+ from kailash.nodes.base_cycle_aware import CycleAwareNode
300
+ from kailash.nodes.base import NodeParameter
301
+ from kailash.runtime.local import LocalRuntime
302
+ from typing import Any, Dict
303
+
304
+ # Create a custom cycle-aware node for data quality improvement
305
+ class DataQualityImproverNode(CycleAwareNode):
306
+ def get_parameters(self) -> Dict[str, NodeParameter]:
307
+ return {
308
+ "data": NodeParameter(name="data", type=list, required=True),
309
+ "target_quality": NodeParameter(name="target_quality", type=float, required=False, default=0.95)
310
+ }
311
+
312
+ def run(self, context: Dict[str, Any], **kwargs) -> Dict[str, Any]:
313
+ """Iteratively improve data quality."""
314
+ data = kwargs["data"]
315
+ target_quality = kwargs.get("target_quality", 0.95)
316
+
317
+ # Get current iteration and previous state
318
+ iteration = self.get_iteration(context)
319
+ prev_state = self.get_previous_state(context)
320
+
321
+ # Calculate current quality
322
+ quality = prev_state.get("quality", 0.5) + 0.1 # Improve by 10% each iteration
323
+ quality = min(quality, 1.0)
324
+
325
+ # Process data (simplified)
326
+ processed_data = [item for item in data if item is not None]
327
+
328
+ # Track quality history
329
+ quality_history = self.accumulate_values(context, "quality_history", quality, max_history=10)
330
+
331
+ # Detect convergence trend
332
+ trend = self.detect_convergence_trend(context, "quality_history", window_size=5)
333
+ converged = quality >= target_quality or (trend and trend["slope"] < 0.01)
334
+
335
+ # Log progress
336
+ self.log_cycle_info(context, f"Iteration {iteration}: Quality={quality:.2%}")
337
+
338
+ # Save state for next iteration
339
+ self.set_cycle_state({"quality": quality, "processed_count": len(processed_data)})
340
+
341
+ return {
342
+ "data": processed_data,
343
+ "quality": quality,
344
+ "converged": converged,
345
+ "iteration": iteration,
346
+ "history": quality_history
347
+ }
348
+
349
+ # Build cyclic workflow
350
+ workflow = Workflow("quality_improvement", "Iterative Data Quality")
351
+ workflow.add_node("improver", DataQualityImproverNode())
352
+
353
+ # Create a cycle - node connects to itself!
354
+ workflow.connect("improver", "improver",
355
+ mapping={"data": "data"}, # Pass data to next iteration
356
+ cycle=True, # This is a cycle
357
+ max_iterations=20, # Safety limit
358
+ convergence_check="converged == True") # Stop condition
359
+
360
+ # Execute with automatic iteration management
361
+ runtime = LocalRuntime()
362
+ results, run_id = runtime.execute(workflow, parameters={
363
+ "improver": {
364
+ "data": [1, None, 3, None, 5, 6, None, 8, 9, 10],
365
+ "target_quality": 0.9
366
+ }
367
+ })
368
+
369
+ print(f"Converged after {results['improver']['iteration']} iterations")
370
+ print(f"Final quality: {results['improver']['quality']:.2%}")
371
+ print(f"Quality history: {results['improver']['history']}")
372
+ ```
373
+
374
+ ### NEW in v0.2.0: CycleBuilder API
375
+
376
+ The new CycleBuilder API provides a fluent interface for creating cyclic workflows:
377
+
378
+ ```python
379
+ # Modern approach with CycleBuilder
380
+ workflow.create_cycle("optimization_loop")
381
+ .connect("gradient", "optimizer")
382
+ .connect("optimizer", "evaluator")
383
+ .connect("evaluator", "gradient")
384
+ .max_iterations(100)
385
+ .converge_when("loss < 0.01")
386
+ .early_stop_when("gradient_norm < 1e-6")
387
+ .checkpoint_every(10)
388
+ .build()
389
+
390
+ # Developer tools for production workflows
391
+ from kailash.workflow import CycleAnalyzer, CycleDebugger, CycleProfiler
392
+
393
+ # Analyze cycle patterns
394
+ analyzer = CycleAnalyzer(workflow)
395
+ report = analyzer.analyze()
396
+ print(f"Found {len(report.cycles)} cycles")
397
+ print(f"Max depth: {report.max_cycle_depth}")
398
+
399
+ # Debug with breakpoints
400
+ debugger = CycleDebugger(workflow)
401
+ debugger.set_breakpoint("optimizer", iteration=50)
402
+ debugger.set_trace("gradient_norm", lambda x: x < 0.001)
403
+
404
+ # Profile performance
405
+ profiler = CycleProfiler(workflow)
406
+ profile_data = profiler.profile(runtime, parameters)
407
+ print(f"Bottleneck: {profile_data.bottleneck_node}")
408
+ print(f"Iterations/sec: {profile_data.iterations_per_second}")
409
+ ```
410
+
411
+ #### Cyclic Workflow Features
412
+
413
+ - **Built-in Iteration Management**: No manual loops or recursion needed
414
+ - **State Persistence**: Maintain state across iterations with `get_previous_state()` and `set_cycle_state()`
415
+ - **Convergence Detection**: Automatic trend analysis with `detect_convergence_trend()`
416
+ - **Value Accumulation**: Track metrics over time with `accumulate_values()`
417
+ - **Safety Limits**: Max iterations prevent infinite loops
418
+ - **Performance**: Optimized execution with ~30,000 iterations/second
419
+ - **Developer Tools**: CycleAnalyzer, CycleDebugger, CycleProfiler for production workflows
420
+
421
+ Common cyclic patterns include:
422
+ - **Retry with Backoff**: ETL pipelines with automatic retry
423
+ - **Optimization Loops**: Iterative parameter tuning
424
+ - **ML Training**: Training until accuracy threshold
425
+ - **Polling**: API polling with rate limiting
426
+ - **Stream Processing**: Windowed data processing
427
+
281
428
  ### Workflow API Wrapper - Expose Workflows as REST APIs
282
429
 
283
430
  Transform any Kailash workflow into a production-ready REST API in just 3 lines of code:
@@ -1102,6 +1249,95 @@ This example demonstrates:
1102
1249
  - **Context formatting** for LLM input
1103
1250
  - **Answer generation** using Ollama's llama3.2 model
1104
1251
 
1252
+ ### 🔒 Access Control and Security
1253
+
1254
+ Kailash SDK provides comprehensive access control and security features for enterprise deployments:
1255
+
1256
+ #### Role-Based Access Control (RBAC)
1257
+ ```python
1258
+ from kailash.access_control import UserContext, PermissionRule, NodePermission
1259
+ from kailash.runtime.access_controlled import AccessControlledRuntime
1260
+
1261
+ # Define user with roles
1262
+ user = UserContext(
1263
+ user_id="analyst_001",
1264
+ tenant_id="company_abc",
1265
+ email="analyst@company.com",
1266
+ roles=["analyst", "viewer"]
1267
+ )
1268
+
1269
+ # Create secure runtime
1270
+ runtime = AccessControlledRuntime(user_context=user)
1271
+
1272
+ # Execute workflow with automatic permission checks
1273
+ results, run_id = runtime.execute(workflow, parameters={})
1274
+ ```
1275
+
1276
+ #### Multi-Tenant Isolation
1277
+ ```python
1278
+ from kailash.access_control import get_access_control_manager, PermissionEffect, WorkflowPermission
1279
+
1280
+ # Configure tenant-based access rules
1281
+ acm = get_access_control_manager()
1282
+ acm.enabled = True
1283
+
1284
+ # Tenant isolation rule
1285
+ acm.add_rule(PermissionRule(
1286
+ id="tenant_isolation",
1287
+ resource_type="workflow",
1288
+ resource_id="customer_analytics",
1289
+ permission=WorkflowPermission.EXECUTE,
1290
+ effect=PermissionEffect.ALLOW,
1291
+ tenant_id="company_abc" # Only this tenant can access
1292
+ ))
1293
+ ```
1294
+
1295
+ #### Data Masking and Field Protection
1296
+ ```python
1297
+ from kailash.nodes.base_with_acl import add_access_control
1298
+
1299
+ # Add access control to sensitive data nodes
1300
+ secure_reader = add_access_control(
1301
+ CSVReaderNode(file_path="customers.csv"),
1302
+ enable_access_control=True,
1303
+ required_permission=NodePermission.READ_OUTPUT,
1304
+ mask_output_fields=["ssn", "phone"] # Mask for non-admin users
1305
+ )
1306
+
1307
+ workflow.add_node("secure_data", secure_reader)
1308
+ ```
1309
+
1310
+ #### Permission-Based Routing
1311
+ ```python
1312
+ # Different execution paths based on user permissions
1313
+ from kailash.access_control import NodePermission
1314
+
1315
+ # Admin users get full processing
1316
+ admin_processor = PythonCodeNode.from_function(
1317
+ lambda data: {"result": process_all_data(data)},
1318
+ name="admin_processor"
1319
+ )
1320
+
1321
+ # Analyst users get limited processing
1322
+ analyst_processor = PythonCodeNode.from_function(
1323
+ lambda data: {"result": process_limited_data(data)},
1324
+ name="analyst_processor"
1325
+ )
1326
+
1327
+ # Runtime automatically routes based on user permissions
1328
+ workflow.add_node("admin_path", admin_processor)
1329
+ workflow.add_node("analyst_path", analyst_processor)
1330
+ ```
1331
+
1332
+ **Security Features:**
1333
+ - 🔐 **JWT Authentication**: Token-based authentication with refresh support
1334
+ - 👥 **Multi-Tenant Isolation**: Complete data separation between tenants
1335
+ - 🛡️ **Field-Level Security**: Mask sensitive data based on user roles
1336
+ - 📊 **Audit Logging**: Complete access attempt logging for compliance
1337
+ - 🚫 **Path Traversal Prevention**: Built-in protection against directory attacks
1338
+ - 🏗️ **Backward Compatibility**: Existing workflows work unchanged
1339
+ - ⚡ **Performance Optimized**: Minimal overhead with caching
1340
+
1105
1341
  ## 💻 CLI Commands
1106
1342
 
1107
1343
  The SDK includes a comprehensive CLI for workflow management:
@@ -1298,6 +1534,10 @@ pre-commit run pytest-check
1298
1534
  - Immutable state management
1299
1535
  - API integration with rate limiting
1300
1536
  - OAuth 2.0 authentication
1537
+ - Production security framework
1538
+ - Path traversal prevention
1539
+ - Code execution sandboxing
1540
+ - Comprehensive security testing
1301
1541
  - SharePoint Graph API integration
1302
1542
  - **Self-organizing agent pools with 13 specialized nodes**
1303
1543
  - **Agent-to-agent communication and shared memory**
@@ -1308,16 +1548,19 @@ pre-commit run pytest-check
1308
1548
  - **Performance visualization dashboards**
1309
1549
  - **Real-time monitoring dashboard with WebSocket streaming**
1310
1550
  - **Comprehensive performance reports (HTML, Markdown, JSON)**
1311
- - **89% test coverage (571 tests)**
1312
- - **15 test categories all passing**
1313
- - 37 working examples
1551
+ - **100% test coverage (591 tests)**
1552
+ - **All test categories passing**
1553
+ - 68 working examples
1314
1554
 
1315
1555
  </td>
1316
1556
  <td width="30%">
1317
1557
 
1318
1558
  ### 🚧 In Progress
1319
- - Comprehensive API documentation
1320
- - Security audit & hardening
1559
+ - **Kailash Workflow Studio** - Visual workflow builder UI
1560
+ - React-based drag-and-drop interface
1561
+ - Multi-tenant architecture with Docker
1562
+ - WorkflowStudioAPI backend
1563
+ - Real-time execution monitoring
1321
1564
  - Performance optimizations
1322
1565
  - Docker runtime finalization
1323
1566
 
@@ -1335,11 +1578,12 @@ pre-commit run pytest-check
1335
1578
  </table>
1336
1579
 
1337
1580
  ### 🎯 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%
1581
+ - **Total Tests**: 591 passing (100%)
1582
+ - **Test Categories**: All passing
1583
+ - **Integration Tests**: All passing
1584
+ - **Security Tests**: 10 consolidated comprehensive tests
1585
+ - **Examples**: 68/68 working
1586
+ - **Code Coverage**: 100%
1343
1587
 
1344
1588
  ## ⚠️ Known Issues
1345
1589
 
@@ -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=97Tugk_mMheDIrQ43o_EDui9yYNYBpMONbLd7bYoYiI,10946
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=dIPx7Dfk3ZQ_SZvU4qYhAtYMTDCj4DeeXOSqMMW92mI,4107
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=agu-ZCdHAJKsJI1GCnNrGv7a5WhudpPGYz650vuCUE0,12860
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=iarNvUysLWWOZuLt01Pnk6lkKgVjAtUPUMeYDe_rafs,31616
103
+ kailash/workflow/cycle_builder.py,sha256=4w5X0417d5xP-LxAYNGNY50dn12N5S5nsLdivT0XbsM,21190
104
+ kailash/workflow/cycle_config.py,sha256=QOG-JHfD7PfVrSCH1ahAfC0Qj2cIgDcSCR53TGcY4dw,28188
105
+ kailash/workflow/cycle_debugger.py,sha256=Zu0lkvrfzP8vQZkD6Q5UJqwwkaBLN-G37yIrxuz0PBs,31024
106
+ kailash/workflow/cycle_exceptions.py,sha256=LBHqRvMqEBvAOdU1bKiGXXxCBxJiNmHuCGYTl7k9udg,21744
107
+ kailash/workflow/cycle_profiler.py,sha256=gWH02JIZSFydqMHT_ijZbo3bo2SMEk7G9hHJTbjIHOw,28204
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=WGSR6MVxo1NBF9reKRiDQR17ChyokjcSzC-Tp8jz97Y,31725
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=A8sHsFT6zsj20cAK8pnf8IthXMAVzydAm8QnU4HBRfI,24750
118
+ kailash/workflow/validation.py,sha256=50tt7LCNvU3zqWYGFeumtqv6qwR5PftKt45-cBm8QPE,32024
119
+ kailash/workflow/visualization.py,sha256=gSMT-jaSzQBufV4mDArWVPJj5bpNIxTa_NE796Rm8I8,19536
120
+ kailash-0.2.0.dist-info/licenses/LICENSE,sha256=Axe6g7bTrJkToK9h9j2SpRUKKNaDZDCo2lQ2zPxCE6s,1065
121
+ kailash-0.2.0.dist-info/METADATA,sha256=SMk5X-J_SYfKnlDizdsIVIVsyTafI_pDNy6z5XmIcTo,53406
122
+ kailash-0.2.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
123
+ kailash-0.2.0.dist-info/entry_points.txt,sha256=M_q3b8PG5W4XbhSgESzIJjh3_4OBKtZFYFsOdkr2vO4,45
124
+ kailash-0.2.0.dist-info/top_level.txt,sha256=z7GzH2mxl66498pVf5HKwo5wwfPtt9Aq95uZUpH6JV0,8
125
+ kailash-0.2.0.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
- ]