kailash 0.6.4__py3-none-any.whl → 0.6.5__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 +2 -2
- kailash/api/studio.py +2 -1
- kailash/api/workflow_api.py +2 -1
- kailash/core/resilience/bulkhead.py +21 -6
- kailash/core/resilience/health_monitor.py +578 -0
- kailash/mcp_server/ai_registry_server.py +3 -3
- kailash/mcp_server/server.py +33 -16
- kailash/middleware/communication/api_gateway.py +8 -1
- kailash/nodes/admin/security_event.py +5 -1
- kailash/nodes/admin/user_management.py +1 -0
- kailash/nodes/api/http.py +7 -2
- kailash/nodes/auth/mfa.py +1 -0
- kailash/nodes/base.py +3 -1
- kailash/nodes/cache/cache_invalidation.py +18 -14
- kailash/nodes/code/python.py +5 -2
- kailash/nodes/data/async_sql.py +1956 -129
- kailash/nodes/data/redis.py +52 -23
- kailash/nodes/rag/registry.py +5 -1
- kailash/nodes/security/behavior_analysis.py +1 -0
- kailash/runtime/local.py +9 -3
- kailash/runtime/parameter_injector.py +5 -5
- kailash/workflow/builder.py +19 -15
- {kailash-0.6.4.dist-info → kailash-0.6.5.dist-info}/METADATA +1 -1
- {kailash-0.6.4.dist-info → kailash-0.6.5.dist-info}/RECORD +28 -27
- {kailash-0.6.4.dist-info → kailash-0.6.5.dist-info}/WHEEL +0 -0
- {kailash-0.6.4.dist-info → kailash-0.6.5.dist-info}/entry_points.txt +0 -0
- {kailash-0.6.4.dist-info → kailash-0.6.5.dist-info}/licenses/LICENSE +0 -0
- {kailash-0.6.4.dist-info → kailash-0.6.5.dist-info}/top_level.txt +0 -0
kailash/nodes/data/redis.py
CHANGED
@@ -82,22 +82,24 @@ class RedisNode(Node):
|
|
82
82
|
**kwargs: Additional parameters
|
83
83
|
"""
|
84
84
|
super().__init__(**kwargs)
|
85
|
-
|
85
|
+
|
86
86
|
# Store all parameters in config for validation
|
87
|
-
self.config.update(
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
87
|
+
self.config.update(
|
88
|
+
{
|
89
|
+
"host": host,
|
90
|
+
"port": port,
|
91
|
+
"db": db,
|
92
|
+
"password": password,
|
93
|
+
"operation": operation,
|
94
|
+
"key": key,
|
95
|
+
"value": value,
|
96
|
+
"field": field,
|
97
|
+
"fields": fields,
|
98
|
+
"ttl": ttl,
|
99
|
+
"decode_responses": decode_responses,
|
100
|
+
}
|
101
|
+
)
|
102
|
+
|
101
103
|
# Also store as instance attributes for backward compatibility
|
102
104
|
self.host = host
|
103
105
|
self.port = port
|
@@ -117,13 +119,25 @@ class RedisNode(Node):
|
|
117
119
|
"""Define node parameters."""
|
118
120
|
return {
|
119
121
|
"host": NodeParameter(
|
120
|
-
name="host",
|
122
|
+
name="host",
|
123
|
+
type=str,
|
124
|
+
required=False,
|
125
|
+
default="localhost",
|
126
|
+
description="Redis host",
|
121
127
|
),
|
122
128
|
"port": NodeParameter(
|
123
|
-
name="port",
|
129
|
+
name="port",
|
130
|
+
type=int,
|
131
|
+
required=False,
|
132
|
+
default=6379,
|
133
|
+
description="Redis port",
|
124
134
|
),
|
125
135
|
"db": NodeParameter(
|
126
|
-
name="db",
|
136
|
+
name="db",
|
137
|
+
type=int,
|
138
|
+
required=False,
|
139
|
+
default=0,
|
140
|
+
description="Redis database number",
|
127
141
|
),
|
128
142
|
"password": NodeParameter(
|
129
143
|
name="password", type=str, required=False, description="Redis password"
|
@@ -135,7 +149,11 @@ class RedisNode(Node):
|
|
135
149
|
description="Redis operation (get, set, hget, hset, hgetall, etc.)",
|
136
150
|
),
|
137
151
|
"key": NodeParameter(
|
138
|
-
name="key",
|
152
|
+
name="key",
|
153
|
+
type=str,
|
154
|
+
required=False,
|
155
|
+
description="Redis key",
|
156
|
+
input=True,
|
139
157
|
),
|
140
158
|
"value": NodeParameter(
|
141
159
|
name="value",
|
@@ -148,19 +166,30 @@ class RedisNode(Node):
|
|
148
166
|
name="field", type=str, required=False, description="Hash field name"
|
149
167
|
),
|
150
168
|
"fields": NodeParameter(
|
151
|
-
name="fields",
|
169
|
+
name="fields",
|
170
|
+
type=list,
|
171
|
+
required=False,
|
172
|
+
description="Multiple hash fields",
|
152
173
|
),
|
153
174
|
"ttl": NodeParameter(
|
154
|
-
name="ttl",
|
175
|
+
name="ttl",
|
176
|
+
type=int,
|
177
|
+
required=False,
|
178
|
+
description="Time to live in seconds",
|
155
179
|
),
|
156
180
|
"decode_responses": NodeParameter(
|
157
|
-
name="decode_responses",
|
181
|
+
name="decode_responses",
|
182
|
+
type=bool,
|
158
183
|
required=False,
|
159
184
|
default=True,
|
160
185
|
description="Decode byte responses to strings",
|
161
186
|
),
|
162
187
|
"result": NodeParameter(
|
163
|
-
name="result",
|
188
|
+
name="result",
|
189
|
+
type=Any,
|
190
|
+
required=False,
|
191
|
+
description="Operation result",
|
192
|
+
output=True,
|
164
193
|
),
|
165
194
|
"success": NodeParameter(
|
166
195
|
name="success",
|
kailash/nodes/rag/registry.py
CHANGED
@@ -8,7 +8,11 @@ Provides a unified interface for users to find the right RAG approach.
|
|
8
8
|
import logging
|
9
9
|
from typing import Any, Dict, List, Optional, Type
|
10
10
|
|
11
|
-
from .router import
|
11
|
+
from .router import (
|
12
|
+
RAGPerformanceMonitorNode,
|
13
|
+
RAGQualityAnalyzerNode,
|
14
|
+
RAGStrategyRouterNode,
|
15
|
+
)
|
12
16
|
from .strategies import (
|
13
17
|
HierarchicalRAGNode,
|
14
18
|
HybridRAGNode,
|
@@ -16,6 +16,7 @@ from datetime import UTC, datetime, timedelta
|
|
16
16
|
from typing import Any, Dict, List, Optional, Set, Tuple
|
17
17
|
|
18
18
|
import numpy as np
|
19
|
+
|
19
20
|
from kailash.nodes.ai.llm_agent import LLMAgentNode
|
20
21
|
from kailash.nodes.base import Node, NodeParameter, register_node
|
21
22
|
from kailash.nodes.mixins import LoggingMixin, PerformanceMixin, SecurityMixin
|
kailash/runtime/local.py
CHANGED
@@ -40,6 +40,7 @@ from datetime import UTC, datetime
|
|
40
40
|
from typing import Any, Optional
|
41
41
|
|
42
42
|
import networkx as nx
|
43
|
+
|
43
44
|
from kailash.nodes import Node
|
44
45
|
from kailash.runtime.parameter_injector import WorkflowParameterInjector
|
45
46
|
from kailash.sdk_exceptions import (
|
@@ -548,14 +549,16 @@ class LocalRuntime:
|
|
548
549
|
# Update node config with parameters (Session 061: direct config update)
|
549
550
|
{**node_instance.config, **parameters.get(node_id, {})}
|
550
551
|
node_instance.config.update(parameters.get(node_id, {}))
|
551
|
-
|
552
|
+
|
552
553
|
# ENTERPRISE PARAMETER INJECTION FIX: Injected parameters should override connection inputs
|
553
554
|
# This ensures workflow parameters take precedence over connection inputs for the same parameter names
|
554
555
|
injected_params = parameters.get(node_id, {})
|
555
556
|
if injected_params:
|
556
557
|
inputs.update(injected_params)
|
557
558
|
if self.debug:
|
558
|
-
self.logger.debug(
|
559
|
+
self.logger.debug(
|
560
|
+
f"Applied parameter injections for {node_id}: {list(injected_params.keys())}"
|
561
|
+
)
|
559
562
|
|
560
563
|
if self.debug:
|
561
564
|
self.logger.debug(f"Node {node_id} inputs: {inputs}")
|
@@ -869,7 +872,10 @@ class LocalRuntime:
|
|
869
872
|
|
870
873
|
try:
|
871
874
|
# Use existing AccessControlManager pattern
|
872
|
-
from kailash.access_control import
|
875
|
+
from kailash.access_control import (
|
876
|
+
WorkflowPermission,
|
877
|
+
get_access_control_manager,
|
878
|
+
)
|
873
879
|
|
874
880
|
if self._access_control_manager is None:
|
875
881
|
self._access_control_manager = get_access_control_manager()
|
@@ -392,28 +392,28 @@ class WorkflowParameterInjector:
|
|
392
392
|
|
393
393
|
def _get_nested_parameter(self, parameters: Dict[str, Any], path: str) -> Any:
|
394
394
|
"""Get a nested parameter value using dot notation.
|
395
|
-
|
395
|
+
|
396
396
|
Args:
|
397
397
|
parameters: Parameters dictionary
|
398
398
|
path: Dot-separated path (e.g., "data.user_id")
|
399
|
-
|
399
|
+
|
400
400
|
Returns:
|
401
401
|
Value at the specified path or None if not found
|
402
402
|
"""
|
403
403
|
if "." not in path:
|
404
404
|
# Simple parameter lookup
|
405
405
|
return parameters.get(path)
|
406
|
-
|
406
|
+
|
407
407
|
# Handle nested parameter access
|
408
408
|
parts = path.split(".")
|
409
409
|
current = parameters
|
410
|
-
|
410
|
+
|
411
411
|
for part in parts:
|
412
412
|
if isinstance(current, dict) and part in current:
|
413
413
|
current = current[part]
|
414
414
|
else:
|
415
415
|
return None
|
416
|
-
|
416
|
+
|
417
417
|
return current
|
418
418
|
|
419
419
|
def validate_parameters(self, parameters: Dict[str, Any]) -> list[str]:
|
kailash/workflow/builder.py
CHANGED
@@ -239,33 +239,35 @@ class WorkflowBuilder:
|
|
239
239
|
self._metadata["_workflow_inputs"][input_node_id] = input_mappings
|
240
240
|
return self
|
241
241
|
|
242
|
-
def update_node(
|
242
|
+
def update_node(
|
243
|
+
self, node_id: str, config_updates: dict[str, Any]
|
244
|
+
) -> "WorkflowBuilder":
|
243
245
|
"""
|
244
246
|
Update the configuration of an existing node.
|
245
|
-
|
247
|
+
|
246
248
|
This is essential for enterprise scenarios like:
|
247
249
|
- Dynamic environment-specific configuration
|
248
|
-
- Runtime parameter injection
|
250
|
+
- Runtime parameter injection
|
249
251
|
- Security context updates
|
250
252
|
- A/B testing and feature flags
|
251
|
-
|
253
|
+
|
252
254
|
Args:
|
253
255
|
node_id: ID of the node to update
|
254
256
|
config_updates: Dictionary of configuration updates to apply
|
255
|
-
|
257
|
+
|
256
258
|
Returns:
|
257
259
|
Self for chaining
|
258
|
-
|
260
|
+
|
259
261
|
Raises:
|
260
262
|
WorkflowValidationError: If node doesn't exist
|
261
263
|
"""
|
262
264
|
if node_id not in self.nodes:
|
263
265
|
raise WorkflowValidationError(f"Node '{node_id}' not found in workflow")
|
264
|
-
|
266
|
+
|
265
267
|
# Deep merge the configuration updates
|
266
268
|
if "config" not in self.nodes[node_id]:
|
267
269
|
self.nodes[node_id]["config"] = {}
|
268
|
-
|
270
|
+
|
269
271
|
self.nodes[node_id]["config"].update(config_updates)
|
270
272
|
return self
|
271
273
|
|
@@ -392,18 +394,20 @@ class WorkflowBuilder:
|
|
392
394
|
|
393
395
|
# Add nodes - handle both dict and list formats
|
394
396
|
nodes_config = config.get("nodes", [])
|
395
|
-
|
397
|
+
|
396
398
|
if isinstance(nodes_config, dict):
|
397
399
|
# Dict format: {node_id: {type: "...", parameters: {...}}}
|
398
400
|
for node_id, node_config in nodes_config.items():
|
399
401
|
node_type = node_config.get("type")
|
400
|
-
node_params = node_config.get(
|
401
|
-
|
402
|
+
node_params = node_config.get(
|
403
|
+
"parameters", node_config.get("config", {})
|
404
|
+
)
|
405
|
+
|
402
406
|
if not node_type:
|
403
407
|
raise WorkflowValidationError(
|
404
408
|
f"Node type is required for node '{node_id}'"
|
405
409
|
)
|
406
|
-
|
410
|
+
|
407
411
|
builder.add_node(node_type, node_id, node_params)
|
408
412
|
else:
|
409
413
|
# List format: [{id: "...", type: "...", config: {...}}]
|
@@ -426,9 +430,9 @@ class WorkflowBuilder:
|
|
426
430
|
# Try full format first: {from_node, from_output, to_node, to_input}
|
427
431
|
from_node = conn.get("from_node")
|
428
432
|
from_output = conn.get("from_output")
|
429
|
-
to_node = conn.get("to_node")
|
433
|
+
to_node = conn.get("to_node")
|
430
434
|
to_input = conn.get("to_input")
|
431
|
-
|
435
|
+
|
432
436
|
# Handle simple format: {from, to} with default outputs/inputs
|
433
437
|
if not from_node:
|
434
438
|
from_node = conn.get("from")
|
@@ -441,7 +445,7 @@ class WorkflowBuilder:
|
|
441
445
|
raise WorkflowValidationError(
|
442
446
|
f"Invalid connection: missing from_node and to_node. Connection data: {conn}"
|
443
447
|
)
|
444
|
-
|
448
|
+
|
445
449
|
# Use defaults if not specified
|
446
450
|
from_output = from_output or "result"
|
447
451
|
to_input = to_input or "input"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
kailash/__init__.py,sha256=
|
1
|
+
kailash/__init__.py,sha256=reggYy-eUa41lAYNvQkOazy2C6hAF7tG6igQWuh5-cY,1706
|
2
2
|
kailash/__main__.py,sha256=vr7TVE5o16V6LsTmRFKG6RDKUXHpIWYdZ6Dok2HkHnI,198
|
3
3
|
kailash/access_control.py,sha256=2ctdRFeSeu-d7DU04Aovxh6Rt_4t3IyQfkKEjTeQiMM,25519
|
4
4
|
kailash/access_control_abac.py,sha256=FPfa_8PuDP3AxTjdWfiH3ntwWO8NodA0py9W8SE5dno,30263
|
@@ -13,8 +13,8 @@ kailash/api/custom_nodes.py,sha256=ATCrfAgYJhspKmgTdpWgPrSHkea6YLHcjjvaL_zfuqk,1
|
|
13
13
|
kailash/api/custom_nodes_secure.py,sha256=cMh1FbEtUAEoLmTb5ew_CeX5kjikBzmBsat1GOkZzFY,13196
|
14
14
|
kailash/api/gateway.py,sha256=BVEKyC53JRnBkOyg3YXAPGDzLm3zon0vbO1xiM6yNxU,12540
|
15
15
|
kailash/api/mcp_integration.py,sha256=xY5VjYXh4bFuNyyWBXEuTm4jjwUn8_9QxZpa4hh6a0Q,14521
|
16
|
-
kailash/api/studio.py,sha256=
|
17
|
-
kailash/api/workflow_api.py,sha256=
|
16
|
+
kailash/api/studio.py,sha256=8Gj3R3p_-EpJerkWYLyrqVzJprKOQmTmK-1EgiLoXMc,34892
|
17
|
+
kailash/api/workflow_api.py,sha256=8g0yOtlartpuVpJpR92xpqjSt-sPohcw9CUp-J_uOus,13147
|
18
18
|
kailash/cli/__init__.py,sha256=kJaqsBp3fRmagJhqA6LMwMbEa_Vkz93hIPH3W5Mn5r0,97
|
19
19
|
kailash/cli/commands.py,sha256=lv1S1uB0JQE4tiQCJIa1HCbjYDbFE9KwcK3M1jRtRU4,18168
|
20
20
|
kailash/client/__init__.py,sha256=WNR39t4O6TDQLI14uR_MjQpLza2c6rU3YkQCXcGCiSU,293
|
@@ -31,8 +31,9 @@ kailash/core/monitoring/__init__.py,sha256=Qua4i50JYUQcRkWHy1wGyuXGqzqsDVMmdPtud
|
|
31
31
|
kailash/core/monitoring/connection_metrics.py,sha256=fvFyHOgMU5lgRB2EB7d-D_F5XERjlmcGAfkrIL0I_OQ,16805
|
32
32
|
kailash/core/optimization/__init__.py,sha256=FY5SLLNedH0_aawLYdXHj2rsGdBaaB49QuJ_R9ctHOE,65
|
33
33
|
kailash/core/resilience/__init__.py,sha256=nYfMU_hK0CHeK_ZZGZWM3oeI2YjcNg5Wop7bnjPt28c,364
|
34
|
-
kailash/core/resilience/bulkhead.py,sha256=
|
34
|
+
kailash/core/resilience/bulkhead.py,sha256=Op02MjnucieSsJ5CIPHlONEJfP36DRGKn6L9nxYOpR8,17202
|
35
35
|
kailash/core/resilience/circuit_breaker.py,sha256=uL_jaY4xAhHAi1kYHe6qyVZCG0FBS08EmWYBM-5Jrew,18294
|
36
|
+
kailash/core/resilience/health_monitor.py,sha256=w-Pb-hmQO3HA5-UxRA8qHv3PQR97ipwUh7eMcjnVd5E,20164
|
36
37
|
kailash/database/__init__.py,sha256=keUIl-BhRMSR7ohW4kojaEYCzKmeb_pb4IpWqDqfnOk,686
|
37
38
|
kailash/database/execution_pipeline.py,sha256=1Y-iVXKPoCED3dRoQvOZe1lQyff92NJ__q77NPI0CRQ,16453
|
38
39
|
kailash/edge/__init__.py,sha256=-jhM4xaDAUCbwrq6jJjRCdlf49XDULVTcvfsUiqz_qg,447
|
@@ -46,7 +47,7 @@ kailash/gateway/resource_resolver.py,sha256=IC1dceiKfjfUWToYCIBcrUapuR3LlDG6RJ4o
|
|
46
47
|
kailash/gateway/security.py,sha256=kf4Quf6u7dqhs80fQQ982eHbRb4weDKG0DaYNeKntT4,7557
|
47
48
|
kailash/mcp_server/__init__.py,sha256=AzrCEat5gdl9Nes8xOs7D4Wj3HpGlms3xLbOrx2diPA,8791
|
48
49
|
kailash/mcp_server/advanced_features.py,sha256=76dmttUa0M61ReBbgexf7Igu4CXaXS-CUmFhvTDjKyI,30673
|
49
|
-
kailash/mcp_server/ai_registry_server.py,sha256=
|
50
|
+
kailash/mcp_server/ai_registry_server.py,sha256=vMNMvWLegKBVp7YAHVKgltWa2vTXKNvV-_Ni_z1argM,28973
|
50
51
|
kailash/mcp_server/auth.py,sha256=Y2BztTL2IILCLSHzZIDSXsIKyUTR8gUXwum5rKffUxs,25251
|
51
52
|
kailash/mcp_server/client.py,sha256=uJXOP7Z4q3CFnX_RvRL5NM6PBcEfR7fUkPQIxfa8c8I,25710
|
52
53
|
kailash/mcp_server/client_new.py,sha256=YU671JvAM0uvuX0uhGZCIKI8co3fqz0cs6HqLZ59Xyo,10285
|
@@ -55,7 +56,7 @@ kailash/mcp_server/errors.py,sha256=_lycwudWP_AJ_KwLO5N3VCKbG1ikfaTyzA2PBF8UAYU,
|
|
55
56
|
kailash/mcp_server/oauth.py,sha256=GFC2O2ueiTTI6V-91Huevhc3K8CxrHe22knuHfuCTqY,56493
|
56
57
|
kailash/mcp_server/protocol.py,sha256=gXeJ-GvSf39WymfS6433SqLKBA40PdeDoBQqu7DUbJE,35129
|
57
58
|
kailash/mcp_server/registry_integration.py,sha256=Iv_vg-0gFjOFBj-kqqnCD-AnnDcA35Zu67mnCoylVJQ,19787
|
58
|
-
kailash/mcp_server/server.py,sha256=
|
59
|
+
kailash/mcp_server/server.py,sha256=5pb5eIiB-qGi8UF-nL81D3mF8t066-O1_Q94GhLVplY,67441
|
59
60
|
kailash/mcp_server/transports.py,sha256=wl7EbImvmBxjPvvPhRW4VJc6Xp9H3_upqFKL4UCFK7o,39289
|
60
61
|
kailash/mcp_server/servers/ai_registry.py,sha256=IdF_keUuJlMsvjLjSAykxxbm46K4qA7eCj7T-lYSrzk,10007
|
61
62
|
kailash/mcp_server/utils/__init__.py,sha256=R20N-iiKXUPxc9MOh6vPO1vIfkPmwhEQ5KNFgGd4xSs,771
|
@@ -73,7 +74,7 @@ kailash/middleware/auth/models.py,sha256=sMQ1JnEDKPId1kLNCi2fDfhgLZX-YguHPnSMfS_
|
|
73
74
|
kailash/middleware/auth/utils.py,sha256=AW4fYJ2opQvOr_1YgSQi_MsC_RoFPq0XVOEgbxoXWtw,6555
|
74
75
|
kailash/middleware/communication/__init__.py,sha256=keQ2db4WI2-oZ_nJ5sLE1Tum_RkUt7M2VLTmqOlt0zA,778
|
75
76
|
kailash/middleware/communication/ai_chat.py,sha256=2XmnJB2Nz2xm2darsF2DYnSLGLAYdyYooHok5GrHKb8,35994
|
76
|
-
kailash/middleware/communication/api_gateway.py,sha256
|
77
|
+
kailash/middleware/communication/api_gateway.py,sha256=-y2gUyeWXWvn5PO2GXkaDYFIEZb6kM1iHTiKHrm8WYc,31363
|
77
78
|
kailash/middleware/communication/events.py,sha256=MEjgcibNyjA4tSFK8CeXDn1oCE75My7K_saxdCBz2HY,15367
|
78
79
|
kailash/middleware/communication/realtime.py,sha256=__34kf61akSibvKYz-myw0BnIxWfMOns-wLh-oRfI-A,24955
|
79
80
|
kailash/middleware/core/__init__.py,sha256=4yQkOWC4b88zSogs1YVqtKG1PugbncqNCwNNWxTdIZA,545
|
@@ -98,7 +99,7 @@ kailash/middleware/mcp/__init__.py,sha256=EdZB8zOMSBEEmudRzs8ksz9QZJYWQMEx7Tm1MO
|
|
98
99
|
kailash/middleware/mcp/client_integration.py,sha256=dY1RmX-g5E6JzUFuWxk7viuOYIh8bMwoUSvHQMVEsYk,18265
|
99
100
|
kailash/middleware/mcp/enhanced_server.py,sha256=e7cIV4jASyhV12ujpRD21jfQl5_R5IVgdPATggJglCI,18450
|
100
101
|
kailash/nodes/__init__.py,sha256=xXSDm1DRpb0uJM4r1tDcSbX65gYNWwBs7H6Gl0OjK4w,960
|
101
|
-
kailash/nodes/base.py,sha256=
|
102
|
+
kailash/nodes/base.py,sha256=g8hVZYd-XDbyLaJlKHRYb-xJ9wMGresI34UsCrgvURE,55876
|
102
103
|
kailash/nodes/base_async.py,sha256=B6BB9yVUrmOgqplgsfSY90VNxd3GTQrwNpN6wz7UuT8,7120
|
103
104
|
kailash/nodes/base_cycle_aware.py,sha256=Xpze9xZzLepWeLpi9Y3tMn1dm2LVv-omr5TSQuGTtWo,13377
|
104
105
|
kailash/nodes/base_with_acl.py,sha256=ZfrkLPgrEBcNbG0LKvtq6glDxyOYOMRw3VXX4vWX6bI,11852
|
@@ -110,10 +111,10 @@ kailash/nodes/admin/permission_check.py,sha256=m2-i8gisA8U-ERt3yPA6D03XbGzPqbzgW
|
|
110
111
|
kailash/nodes/admin/role_management.py,sha256=F5OFTf9rP6Jbux5-E10q2gDl0kY0-R0kQmzkEM1vupg,73050
|
111
112
|
kailash/nodes/admin/schema.sql,sha256=MZ_hS7U1U8q_oQ5rJMOn4BD9aYx1moTCg1AhBEZ1UOU,14398
|
112
113
|
kailash/nodes/admin/schema_manager.py,sha256=_m9D2yTXpIyoag7ljwCg_TYffh6VFd-xy3_ceYrA2To,15125
|
113
|
-
kailash/nodes/admin/security_event.py,sha256=
|
114
|
+
kailash/nodes/admin/security_event.py,sha256=SSxVHhufMBnqZmAKKDQ3Z2OUpHjY7tB3sGfMy__EiDs,56396
|
114
115
|
kailash/nodes/admin/tenant_isolation.py,sha256=AKEARuUQ9-cF3DAkYFgRhshWRcooFtfahTuWe4ja02M,8282
|
115
116
|
kailash/nodes/admin/transaction_utils.py,sha256=IAAdIiQ5Q4kTT5ul4hv1iSfoXG3CeFAkYd2xs7zxrnk,7896
|
116
|
-
kailash/nodes/admin/user_management.py,sha256=
|
117
|
+
kailash/nodes/admin/user_management.py,sha256=Al9mKgTx3ASDSefZaIcPxL4zSjASI3cGdZIs33uwpvg,54707
|
117
118
|
kailash/nodes/ai/__init__.py,sha256=rslxIS8jlovshiNgWqVzQjD_kfT_3h3Ct03sk-iRe6U,2202
|
118
119
|
kailash/nodes/ai/a2a.py,sha256=fDSnihMFQ6MuhKSzL9ueWGAQLrKZQRkq9HqArdotf_w,70048
|
119
120
|
kailash/nodes/ai/agents.py,sha256=CRA3cdapQjpuvOniXUh6ZVWAlRxUIepVw1BROW6QzdY,20373
|
@@ -131,7 +132,7 @@ kailash/nodes/alerts/discord.py,sha256=d7tFQy_yFdQSJwNrB-adVwep7-N0vgQ7xX1pXsPCU
|
|
131
132
|
kailash/nodes/api/__init__.py,sha256=dzK6kiAdJcTQa7NSBkSmd5CCTSefBlMZMewGlTJSr0c,2334
|
132
133
|
kailash/nodes/api/auth.py,sha256=mve8rdshFIfLpkJX6M9opgDDru1LjcTyf3KpuCs1wd0,30869
|
133
134
|
kailash/nodes/api/graphql.py,sha256=IJsL-oi6U_QbeKHzyKBgUZYYR-fUmS7doWw1fqsKjCo,16999
|
134
|
-
kailash/nodes/api/http.py,sha256=
|
135
|
+
kailash/nodes/api/http.py,sha256=1D62v1gtoh91meuT9PBjzPKkIFX31sH2gGCLAxwu1Hg,39324
|
135
136
|
kailash/nodes/api/monitoring.py,sha256=vV0nLPyqw34YgsZvuegxNMSLyHU59pMdnzkdXelPYFc,17468
|
136
137
|
kailash/nodes/api/rate_limiting.py,sha256=y_yPkuCfiaD9R3Jc7fTVR6_ABRCqnl8TiCVtH-r0uOs,19673
|
137
138
|
kailash/nodes/api/rest.py,sha256=jrbVROhcsSwmp2zvCVNnd4zDBVhfpglmChcdBJz7TA4,48798
|
@@ -139,23 +140,23 @@ kailash/nodes/api/security.py,sha256=VxMl5p7jWF2ViAqzHTFkte6agUiS9QEiQztV9l9PzDk
|
|
139
140
|
kailash/nodes/auth/__init__.py,sha256=8d6OJCuyDytejA9_o_PDdRBFxuTdoTCScc4qRi5wlK4,562
|
140
141
|
kailash/nodes/auth/directory_integration.py,sha256=tzXyLdHMR2ja1Wf659BzSfSSd1P256D3LEfzPCgBUyE,47010
|
141
142
|
kailash/nodes/auth/enterprise_auth_provider.py,sha256=ggWgRTYPBXFtNG1XuYv3cE-3JyEGgMQMWqaBu8MjyMs,50368
|
142
|
-
kailash/nodes/auth/mfa.py,sha256=
|
143
|
+
kailash/nodes/auth/mfa.py,sha256=_cD_5VNPM7D5hDg0HVSwF33wZAK6ECNl8pccwhHvwXI,85406
|
143
144
|
kailash/nodes/auth/risk_assessment.py,sha256=UbSvbAMGNyEYOF3p51_hrQKexFg8MTkl0emZQyt4XU4,30165
|
144
145
|
kailash/nodes/auth/session_management.py,sha256=mQcSNn84PsqBIzthCtvcMhpACsirJ_fKxkrCDQKau0E,38714
|
145
146
|
kailash/nodes/auth/sso.py,sha256=eL_WGRGPuHbuBA9AQdsMI85Dnz_tE0Bh4lCtv-P4MqE,43716
|
146
147
|
kailash/nodes/cache/__init__.py,sha256=4E--KXBF_8BzuEMeOZWBKEqG9zHy39hnezfp-D4IFGk,184
|
147
148
|
kailash/nodes/cache/cache.py,sha256=Qme8fmPVyH_OXSQqjBaQRRu8l9csX39Z3AY1Hi1r6gk,44166
|
148
|
-
kailash/nodes/cache/cache_invalidation.py,sha256=
|
149
|
+
kailash/nodes/cache/cache_invalidation.py,sha256=IUvxrRj3K5EF29Z2EaKl7t6Uze_cssnzTqhOH4fLrio,34044
|
149
150
|
kailash/nodes/cache/redis_pool_manager.py,sha256=GR82GCWxo_gAzRE-091OB6AhKre8CTwM3OoePLb2gvE,21574
|
150
151
|
kailash/nodes/code/__init__.py,sha256=yhEwuMjUEPFfe6hMGMd4E4gZdLUuf2JEQ7knYapiM4o,1283
|
151
152
|
kailash/nodes/code/async_python.py,sha256=oXSNkP5d0RTJXaro8AKySlK_N51cBcvnfH0wXeSjDHw,37005
|
152
|
-
kailash/nodes/code/python.py,sha256=
|
153
|
+
kailash/nodes/code/python.py,sha256=lH3GHorFZL4Uz7pkaXliTtLi4rUog5ni5EFip8cNqmY,58509
|
153
154
|
kailash/nodes/compliance/__init__.py,sha256=6a_FL4ofc8MAVuZ-ARW5uYenZLS4mBFVM9AI2QsnoF8,214
|
154
155
|
kailash/nodes/compliance/data_retention.py,sha256=90bH_eGwlcDzUdklAJeXQM-RcuLUGQFQ5fgHOK8a4qk,69443
|
155
156
|
kailash/nodes/compliance/gdpr.py,sha256=ZMoHZjAo4QtGwtFCzGMrAUBFV3TbZOnJ5DZGZS87Bas,70548
|
156
157
|
kailash/nodes/data/__init__.py,sha256=f0h4ysvXxlyFcNJLvDyXrgJ0ixwDF1cS0pJ2QNPakhg,5213
|
157
158
|
kailash/nodes/data/async_connection.py,sha256=wfArHs9svU48bxGZIiixSV2YVn9cukNgEjagwTRu6J4,17250
|
158
|
-
kailash/nodes/data/async_sql.py,sha256=
|
159
|
+
kailash/nodes/data/async_sql.py,sha256=bb6Qc-QwoTJwzAOjwT_ooQikk4JWoS2ntb71O7KzXbw,99228
|
159
160
|
kailash/nodes/data/async_vector.py,sha256=HtwQLO25IXu8Vq80qzU8rMkUAKPQ2qM0x8YxjXHlygU,21005
|
160
161
|
kailash/nodes/data/directory.py,sha256=fbfLqD_ijRubk-4xew3604QntPsyDxqaF4k6TpfyjDg,9923
|
161
162
|
kailash/nodes/data/event_generation.py,sha256=Bc1se0tPg1IAGCQDrWqlFmgoOpUyfMN9ku4Lm3akhXU,11579
|
@@ -164,7 +165,7 @@ kailash/nodes/data/optimistic_locking.py,sha256=R3C69Vs4_4jlmnpfrI3GSIfA6zVQ3hyh
|
|
164
165
|
kailash/nodes/data/query_pipeline.py,sha256=qX9QdszpMyjTRrljFLtcY_CytSJRDTpGjt4DhwAdPlk,21710
|
165
166
|
kailash/nodes/data/query_router.py,sha256=HExyJlOoz4p5gCYh1zonlFls4Y0r19VvM2TjRztzmqg,32005
|
166
167
|
kailash/nodes/data/readers.py,sha256=MbhILOs7A6XdtvHNqeDLTN4x4MJAzxmlYR7KaPJkDJY,45994
|
167
|
-
kailash/nodes/data/redis.py,sha256=
|
168
|
+
kailash/nodes/data/redis.py,sha256=A7aEMRo8xzEkEPOZXmyj6D_SFUeWAmllMzmnjXd-aXo,12564
|
168
169
|
kailash/nodes/data/retrieval.py,sha256=H8Qb2R64fQ_OeaQBh6jVn7-xLuygiF3fjzbh4ssNOrU,20591
|
169
170
|
kailash/nodes/data/sharepoint_graph.py,sha256=J1_KZQ5s8yXkjGY1PjsMY7T8viKARi3os5P8CXpmn2U,37160
|
170
171
|
kailash/nodes/data/sources.py,sha256=tvgDDDerWELD6QkAm73ciKmNakD_SYMd50idlOjpbF0,3632
|
@@ -208,7 +209,7 @@ kailash/nodes/rag/optimized.py,sha256=zTYHs7pxO9nkqTcPjKjjuY0QZEJd2WTd_0G6tzHOcK
|
|
208
209
|
kailash/nodes/rag/privacy.py,sha256=XyMsW1ZcUfPy5arGgte-AR_X40Ho9wy25RrMbwi0m6I,36724
|
209
210
|
kailash/nodes/rag/query_processing.py,sha256=ivZYrwX4Agb4iWeTXIVwWuZm2WDOL75aSDa9Zy8kQxw,44698
|
210
211
|
kailash/nodes/rag/realtime.py,sha256=9Lmay0RbsQWfaXFRfXyO30wFK_xtZZ6xomDNwB8YQh4,24758
|
211
|
-
kailash/nodes/rag/registry.py,sha256=
|
212
|
+
kailash/nodes/rag/registry.py,sha256=ocb2iyhuffA3KiK3IOHgYfUvUX52y1-DKKqP5gZBizQ,19279
|
212
213
|
kailash/nodes/rag/router.py,sha256=3FvPBXcT-LYCxEpapwaeXy3ISWSfTGs5bPvFrOORqyA,30143
|
213
214
|
kailash/nodes/rag/similarity.py,sha256=bngtAcx_WjnXlDcXgP5IQeKWScPywH7qu_I7uPD-j6M,61285
|
214
215
|
kailash/nodes/rag/strategies.py,sha256=cOSn-JaGfF56EYm3PVDSMx3TOtqFtP4JEaVbpjt2wMw,18460
|
@@ -216,7 +217,7 @@ kailash/nodes/rag/workflows.py,sha256=PL9d3Lk15drwo2QVdNR9B61EpZ8Kc1crjnqFXc10O1
|
|
216
217
|
kailash/nodes/security/__init__.py,sha256=oaoZdbKhjEZ8vtUHGRPZPDixInzFDmhUZg4ou_Lz6mI,611
|
217
218
|
kailash/nodes/security/abac_evaluator.py,sha256=MAVJrIIQGHdOI-OfzGJFImVaHSq4vO8avEB0bSTprWk,50313
|
218
219
|
kailash/nodes/security/audit_log.py,sha256=zjwLoWHJLhkJiD5rRmE8H2mSEE7-6EHh_FR0FT91uLU,3130
|
219
|
-
kailash/nodes/security/behavior_analysis.py,sha256=
|
220
|
+
kailash/nodes/security/behavior_analysis.py,sha256=4R2NNC3CKGnePAeVP1gjjyAL7ZjWDjsEXdHebRVNRig,71563
|
220
221
|
kailash/nodes/security/credential_manager.py,sha256=kqetmEBUnOOtSJyCpf0o_IRlwzpCv5FeInB4enBfk5E,14968
|
221
222
|
kailash/nodes/security/rotating_credentials.py,sha256=yEDSraBi_M3DKAaodmkkVPXHreUvrLU8xuTky_Z-tT4,28928
|
222
223
|
kailash/nodes/security/security_event.py,sha256=yVP8foaki-LDD16mlRapaPsbaWMwsum5J_V0n1bnqvw,4150
|
@@ -236,11 +237,11 @@ kailash/runtime/__init__.py,sha256=CvU-qBMESYYISqFOlYlLsYJrXJu0Gqr4x6yr4Ob_Rng,2
|
|
236
237
|
kailash/runtime/access_controlled.py,sha256=Td8Fa8oPxEqlb74bDiH_HtT6J-ku0AudvN7mrUZOacc,17219
|
237
238
|
kailash/runtime/async_local.py,sha256=XJyJYWmsezZBmAB8Y8xfAbiytPaY1j_zYU_moABP-3E,30313
|
238
239
|
kailash/runtime/docker.py,sha256=sZknVl1PCGfAZeyc0-exTuKlllSyjYlFIgJoiB3CRNs,23500
|
239
|
-
kailash/runtime/local.py,sha256=
|
240
|
+
kailash/runtime/local.py,sha256=W6onzSqTDEtQFQmppjugbD7qy5jKEMrejbLcybcjb1w,45630
|
240
241
|
kailash/runtime/parallel.py,sha256=mz_wPD13-YVc3Q_8HkOs4nPQPdTjnjCcnRL7ZRM70lo,21070
|
241
242
|
kailash/runtime/parallel_cyclic.py,sha256=yANZHnePjhCPuCFbq3lFQA1K6jbCv5Of5-vIKbCsmZk,19863
|
242
243
|
kailash/runtime/parameter_injection.py,sha256=kG4GhmarsRr5t3VDFbc2G1HSbsZJg6UmienHCE2Ru7o,14852
|
243
|
-
kailash/runtime/parameter_injector.py,sha256=
|
244
|
+
kailash/runtime/parameter_injector.py,sha256=9tMF8mdwwIIs2XnZarkcdyU_G8Ui0ccwjGUO0jnSlaY,24192
|
244
245
|
kailash/runtime/runner.py,sha256=Lt9ugsk56ICD9XLKJjnhejtqdiz0mJNdlqH7sSxIlWU,3214
|
245
246
|
kailash/runtime/testing.py,sha256=nHTYKdVCPZpyC5h2J6cvtgsG4lXEZnMYn7VtKDSlutI,19081
|
246
247
|
kailash/testing/__init__.py,sha256=4cqLSbcFz9bDY09vuK5Vpg3UtoAAa93R5tc9zIUvGAE,796
|
@@ -273,7 +274,7 @@ kailash/visualization/reports.py,sha256=D7kJ0flHr16d-qSEq8vnw20N8u_dgTrXtKVSXVm8
|
|
273
274
|
kailash/workflow/__init__.py,sha256=DDQDE9K6RmbX6479guNLLgjiVVV-gQERRvCEJWSVlsM,1836
|
274
275
|
kailash/workflow/async_builder.py,sha256=iv8bDJHdWAUZ77SyMo6sucd92dTdtXesdxycrSE7mM4,20613
|
275
276
|
kailash/workflow/async_patterns.py,sha256=X0ZDXwr6UAu0WC1xnCB7-0V1-tRbKs9UI4JqaBCB6tE,22824
|
276
|
-
kailash/workflow/builder.py,sha256=
|
277
|
+
kailash/workflow/builder.py,sha256=fAk5ccPD52zxn_62ZSvc8O6HFd-5nYR5-FI7k7i82KU,15583
|
277
278
|
kailash/workflow/builder_improvements.py,sha256=MYAf-CJkrXTP8Q6leapnfVZATQxCJJ1cAymNOqXCh2w,7374
|
278
279
|
kailash/workflow/convergence.py,sha256=vfIDR-uNaQE-LVUEzrRtfgKPgX9gL0nLNH-nTg5ra-c,10031
|
279
280
|
kailash/workflow/cycle_analyzer.py,sha256=BGBpgdB-g0-KRI65sVAvHV4lxfoCzMt4uKOHbw8GXT4,32596
|
@@ -296,9 +297,9 @@ kailash/workflow/state.py,sha256=UTZxs5-Ona6uvBhx1__i6-RX8gB4qazkBIWE7uyRmWQ,760
|
|
296
297
|
kailash/workflow/templates.py,sha256=98EN5H4fO9b4xeczk20Hu5L8hNcAuRQNGayT6vnZYCw,48540
|
297
298
|
kailash/workflow/validation.py,sha256=JIbIajWVIaWHSvWtgZ4WUVJaBaUOCz5B9cyTwM--dL4,33060
|
298
299
|
kailash/workflow/visualization.py,sha256=ICMWCWqh5fOQ7eJygbvu2PMWHxe-H5_0epwdZuz8cMw,19737
|
299
|
-
kailash-0.6.
|
300
|
-
kailash-0.6.
|
301
|
-
kailash-0.6.
|
302
|
-
kailash-0.6.
|
303
|
-
kailash-0.6.
|
304
|
-
kailash-0.6.
|
300
|
+
kailash-0.6.5.dist-info/licenses/LICENSE,sha256=Axe6g7bTrJkToK9h9j2SpRUKKNaDZDCo2lQ2zPxCE6s,1065
|
301
|
+
kailash-0.6.5.dist-info/METADATA,sha256=GHWeIAAuztagta6OfXH_Xn4Qk2NryTKZNfifufO1ohY,26409
|
302
|
+
kailash-0.6.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
303
|
+
kailash-0.6.5.dist-info/entry_points.txt,sha256=M_q3b8PG5W4XbhSgESzIJjh3_4OBKtZFYFsOdkr2vO4,45
|
304
|
+
kailash-0.6.5.dist-info/top_level.txt,sha256=z7GzH2mxl66498pVf5HKwo5wwfPtt9Aq95uZUpH6JV0,8
|
305
|
+
kailash-0.6.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|