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.
- kailash/__init__.py +1 -1
- kailash/access_control.py +740 -0
- kailash/api/__main__.py +6 -0
- kailash/api/auth.py +668 -0
- kailash/api/custom_nodes.py +285 -0
- kailash/api/custom_nodes_secure.py +377 -0
- kailash/api/database.py +620 -0
- kailash/api/studio.py +915 -0
- kailash/api/studio_secure.py +893 -0
- kailash/mcp/__init__.py +53 -0
- kailash/mcp/__main__.py +13 -0
- kailash/mcp/ai_registry_server.py +712 -0
- kailash/mcp/client.py +447 -0
- kailash/mcp/client_new.py +334 -0
- kailash/mcp/server.py +293 -0
- kailash/mcp/server_new.py +336 -0
- kailash/mcp/servers/__init__.py +12 -0
- kailash/mcp/servers/ai_registry.py +289 -0
- kailash/nodes/__init__.py +4 -2
- kailash/nodes/ai/__init__.py +2 -0
- kailash/nodes/ai/a2a.py +714 -67
- kailash/nodes/ai/intelligent_agent_orchestrator.py +31 -37
- kailash/nodes/ai/iterative_llm_agent.py +1280 -0
- kailash/nodes/ai/llm_agent.py +324 -1
- kailash/nodes/ai/self_organizing.py +5 -6
- kailash/nodes/base.py +15 -2
- kailash/nodes/base_async.py +45 -0
- kailash/nodes/base_cycle_aware.py +374 -0
- kailash/nodes/base_with_acl.py +338 -0
- kailash/nodes/code/python.py +135 -27
- kailash/nodes/data/__init__.py +1 -2
- kailash/nodes/data/readers.py +16 -6
- kailash/nodes/data/sql.py +699 -256
- kailash/nodes/data/writers.py +16 -6
- kailash/nodes/logic/__init__.py +8 -0
- kailash/nodes/logic/convergence.py +642 -0
- kailash/nodes/logic/loop.py +153 -0
- kailash/nodes/logic/operations.py +187 -27
- kailash/nodes/mixins/__init__.py +11 -0
- kailash/nodes/mixins/mcp.py +228 -0
- kailash/nodes/mixins.py +387 -0
- kailash/runtime/__init__.py +2 -1
- kailash/runtime/access_controlled.py +458 -0
- kailash/runtime/local.py +106 -33
- kailash/runtime/parallel_cyclic.py +529 -0
- kailash/sdk_exceptions.py +90 -5
- kailash/security.py +845 -0
- kailash/tracking/manager.py +38 -15
- kailash/tracking/models.py +1 -1
- kailash/tracking/storage/filesystem.py +30 -2
- kailash/utils/__init__.py +8 -0
- kailash/workflow/__init__.py +18 -0
- kailash/workflow/convergence.py +270 -0
- kailash/workflow/cycle_analyzer.py +889 -0
- kailash/workflow/cycle_builder.py +579 -0
- kailash/workflow/cycle_config.py +725 -0
- kailash/workflow/cycle_debugger.py +860 -0
- kailash/workflow/cycle_exceptions.py +615 -0
- kailash/workflow/cycle_profiler.py +741 -0
- kailash/workflow/cycle_state.py +338 -0
- kailash/workflow/cyclic_runner.py +985 -0
- kailash/workflow/graph.py +500 -39
- kailash/workflow/migration.py +809 -0
- kailash/workflow/safety.py +365 -0
- kailash/workflow/templates.py +763 -0
- kailash/workflow/validation.py +751 -0
- {kailash-0.1.5.dist-info → kailash-0.2.1.dist-info}/METADATA +259 -12
- kailash-0.2.1.dist-info/RECORD +125 -0
- kailash/nodes/mcp/__init__.py +0 -11
- kailash/nodes/mcp/client.py +0 -554
- kailash/nodes/mcp/resource.py +0 -682
- kailash/nodes/mcp/server.py +0 -577
- kailash-0.1.5.dist-info/RECORD +0 -88
- {kailash-0.1.5.dist-info → kailash-0.2.1.dist-info}/WHEEL +0 -0
- {kailash-0.1.5.dist-info → kailash-0.2.1.dist-info}/entry_points.txt +0 -0
- {kailash-0.1.5.dist-info → kailash-0.2.1.dist-info}/licenses/LICENSE +0 -0
- {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
|
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-
|
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
|
-
- **
|
1312
|
-
- **
|
1313
|
-
-
|
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
|
-
-
|
1320
|
-
-
|
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**:
|
1339
|
-
- **Test Categories**:
|
1340
|
-
- **Integration Tests**:
|
1341
|
-
- **
|
1342
|
-
- **
|
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,,
|
kailash/nodes/mcp/__init__.py
DELETED