kailash 0.6.6__py3-none-any.whl → 0.8.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 (82) hide show
  1. kailash/__init__.py +35 -5
  2. kailash/access_control.py +64 -46
  3. kailash/adapters/__init__.py +5 -0
  4. kailash/adapters/mcp_platform_adapter.py +273 -0
  5. kailash/api/workflow_api.py +34 -3
  6. kailash/channels/__init__.py +21 -0
  7. kailash/channels/api_channel.py +409 -0
  8. kailash/channels/base.py +271 -0
  9. kailash/channels/cli_channel.py +661 -0
  10. kailash/channels/event_router.py +496 -0
  11. kailash/channels/mcp_channel.py +648 -0
  12. kailash/channels/session.py +423 -0
  13. kailash/mcp_server/discovery.py +57 -18
  14. kailash/middleware/communication/api_gateway.py +23 -3
  15. kailash/middleware/communication/realtime.py +83 -0
  16. kailash/middleware/core/agent_ui.py +1 -1
  17. kailash/middleware/gateway/storage_backends.py +393 -0
  18. kailash/middleware/mcp/enhanced_server.py +22 -16
  19. kailash/nexus/__init__.py +21 -0
  20. kailash/nexus/cli/__init__.py +5 -0
  21. kailash/nexus/cli/__main__.py +6 -0
  22. kailash/nexus/cli/main.py +176 -0
  23. kailash/nexus/factory.py +413 -0
  24. kailash/nexus/gateway.py +545 -0
  25. kailash/nodes/__init__.py +8 -5
  26. kailash/nodes/ai/iterative_llm_agent.py +988 -17
  27. kailash/nodes/ai/llm_agent.py +29 -9
  28. kailash/nodes/api/__init__.py +2 -2
  29. kailash/nodes/api/monitoring.py +1 -1
  30. kailash/nodes/base.py +29 -5
  31. kailash/nodes/base_async.py +54 -14
  32. kailash/nodes/code/async_python.py +1 -1
  33. kailash/nodes/code/python.py +50 -6
  34. kailash/nodes/data/async_sql.py +90 -0
  35. kailash/nodes/data/bulk_operations.py +939 -0
  36. kailash/nodes/data/query_builder.py +373 -0
  37. kailash/nodes/data/query_cache.py +512 -0
  38. kailash/nodes/monitoring/__init__.py +10 -0
  39. kailash/nodes/monitoring/deadlock_detector.py +964 -0
  40. kailash/nodes/monitoring/performance_anomaly.py +1078 -0
  41. kailash/nodes/monitoring/race_condition_detector.py +1151 -0
  42. kailash/nodes/monitoring/transaction_metrics.py +790 -0
  43. kailash/nodes/monitoring/transaction_monitor.py +931 -0
  44. kailash/nodes/security/behavior_analysis.py +414 -0
  45. kailash/nodes/system/__init__.py +17 -0
  46. kailash/nodes/system/command_parser.py +820 -0
  47. kailash/nodes/transaction/__init__.py +48 -0
  48. kailash/nodes/transaction/distributed_transaction_manager.py +983 -0
  49. kailash/nodes/transaction/saga_coordinator.py +652 -0
  50. kailash/nodes/transaction/saga_state_storage.py +411 -0
  51. kailash/nodes/transaction/saga_step.py +467 -0
  52. kailash/nodes/transaction/transaction_context.py +756 -0
  53. kailash/nodes/transaction/two_phase_commit.py +978 -0
  54. kailash/nodes/transform/processors.py +17 -1
  55. kailash/nodes/validation/__init__.py +21 -0
  56. kailash/nodes/validation/test_executor.py +532 -0
  57. kailash/nodes/validation/validation_nodes.py +447 -0
  58. kailash/resources/factory.py +1 -1
  59. kailash/runtime/access_controlled.py +9 -7
  60. kailash/runtime/async_local.py +84 -21
  61. kailash/runtime/local.py +21 -2
  62. kailash/runtime/parameter_injector.py +187 -31
  63. kailash/runtime/runner.py +6 -4
  64. kailash/runtime/testing.py +1 -1
  65. kailash/security.py +22 -3
  66. kailash/servers/__init__.py +32 -0
  67. kailash/servers/durable_workflow_server.py +430 -0
  68. kailash/servers/enterprise_workflow_server.py +522 -0
  69. kailash/servers/gateway.py +183 -0
  70. kailash/servers/workflow_server.py +293 -0
  71. kailash/utils/data_validation.py +192 -0
  72. kailash/workflow/builder.py +382 -15
  73. kailash/workflow/cyclic_runner.py +102 -10
  74. kailash/workflow/validation.py +144 -8
  75. kailash/workflow/visualization.py +99 -27
  76. {kailash-0.6.6.dist-info → kailash-0.8.0.dist-info}/METADATA +3 -2
  77. {kailash-0.6.6.dist-info → kailash-0.8.0.dist-info}/RECORD +81 -40
  78. kailash/workflow/builder_improvements.py +0 -207
  79. {kailash-0.6.6.dist-info → kailash-0.8.0.dist-info}/WHEEL +0 -0
  80. {kailash-0.6.6.dist-info → kailash-0.8.0.dist-info}/entry_points.txt +0 -0
  81. {kailash-0.6.6.dist-info → kailash-0.8.0.dist-info}/licenses/LICENSE +0 -0
  82. {kailash-0.6.6.dist-info → kailash-0.8.0.dist-info}/top_level.txt +0 -0
@@ -1,20 +1,29 @@
1
- kailash/__init__.py,sha256=x9_jsahCoMHqqNJPXD18YiVBoUuNVYtLL_ymWLnWVWI,1796
1
+ kailash/__init__.py,sha256=yCfV0dNXfj0xBIsqAbdMl31CxaSma9AtltRW6rI2AhU,2878
2
2
  kailash/__main__.py,sha256=vr7TVE5o16V6LsTmRFKG6RDKUXHpIWYdZ6Dok2HkHnI,198
3
- kailash/access_control.py,sha256=2ctdRFeSeu-d7DU04Aovxh6Rt_4t3IyQfkKEjTeQiMM,25519
3
+ kailash/access_control.py,sha256=MjKtkoQ2sg1Mgfe7ovGxVwhAbpJKvaepPWr8dxOueMA,26058
4
4
  kailash/access_control_abac.py,sha256=FPfa_8PuDP3AxTjdWfiH3ntwWO8NodA0py9W8SE5dno,30263
5
5
  kailash/manifest.py,sha256=qzOmeMGWz20Sp4IJitSH9gTVbGng7hlimc96VTW4KI8,24814
6
6
  kailash/sdk_exceptions.py,sha256=dueSUxUYqKXmHS5mwl6QtEzP6a0rMGXcBFGCh5sT0tg,10179
7
- kailash/security.py,sha256=eTb5rq92vFz7xU1Ov5gM5izRIAi2JQO3Pmf0xe2U3ls,26433
7
+ kailash/security.py,sha256=GBU93tUXcTZGEjl0f9XXRlF3W-sSulhiatMZzv1dNqc,27228
8
8
  kailash/access_control/__init__.py,sha256=ykR_zGJXQoCU_4gGNFbYzhVdUemxeAAoDQLhKIPVBGE,4018
9
9
  kailash/access_control/managers.py,sha256=Vg2inaZqR2GBXsySvPZcEqQtFHgF94z7A_wUHMtA3qA,14431
10
10
  kailash/access_control/rule_evaluators.py,sha256=niguhjThBjA0jIXvdKdGAXzdSM_bAd0ebphGgRrDFKU,15337
11
+ kailash/adapters/__init__.py,sha256=J6Jg66jyyRypQDxbJbcoSzuoAUi10HZs7JMnU6-0x1U,172
12
+ kailash/adapters/mcp_platform_adapter.py,sha256=RUAxvBFWrG7RhF7VZw28U7U4Z8EawJHO-6_75-MvgUs,9863
11
13
  kailash/api/auth.py,sha256=SnEgCJ2AkFQORDiFHW4-DsMf2HZ4Ox2qfi1iL75wdG0,19913
12
14
  kailash/api/custom_nodes.py,sha256=ATCrfAgYJhspKmgTdpWgPrSHkea6YLHcjjvaL_zfuqk,10614
13
15
  kailash/api/custom_nodes_secure.py,sha256=cMh1FbEtUAEoLmTb5ew_CeX5kjikBzmBsat1GOkZzFY,13196
14
16
  kailash/api/gateway.py,sha256=BVEKyC53JRnBkOyg3YXAPGDzLm3zon0vbO1xiM6yNxU,12540
15
17
  kailash/api/mcp_integration.py,sha256=xY5VjYXh4bFuNyyWBXEuTm4jjwUn8_9QxZpa4hh6a0Q,14521
16
18
  kailash/api/studio.py,sha256=8Gj3R3p_-EpJerkWYLyrqVzJprKOQmTmK-1EgiLoXMc,34892
17
- kailash/api/workflow_api.py,sha256=8g0yOtlartpuVpJpR92xpqjSt-sPohcw9CUp-J_uOus,13147
19
+ kailash/api/workflow_api.py,sha256=S1O_PRtTo2SSk47iUh4-uTh0WY1Tjbl1Gt54QIOLDmE,14330
20
+ kailash/channels/__init__.py,sha256=DP3PxbGDRCLrJkr6gGf1BBJ0MaHsfp_zUSbkyc04ieE,610
21
+ kailash/channels/api_channel.py,sha256=stuJxNJRUobzj1CavwsHWVZWr2kYqyVLjv_ynt6Wy6A,14541
22
+ kailash/channels/base.py,sha256=8-cUYAVMlO67BMZCZscShy0FPYAK31s9bxk0JXA9wIM,7825
23
+ kailash/channels/cli_channel.py,sha256=C7ctIb5V4e6T1Ksu5MPfP0rKOCEciMzOFhjrM9BvRmY,23564
24
+ kailash/channels/event_router.py,sha256=matl4yttgQa3Vl1HtrAUfNvJ-kfnr4pgP8tMHSDYkSM,16632
25
+ kailash/channels/mcp_channel.py,sha256=KZ8JtxMRUiwy0ecYWYdM6YSj7YuI50obXCRg0NdsGj8,22767
26
+ kailash/channels/session.py,sha256=4ZEutfyQ3fhBlBjXa5e32ZL2ZqEuQKwbAk0DGu00X1A,13068
18
27
  kailash/cli/__init__.py,sha256=kJaqsBp3fRmagJhqA6LMwMbEa_Vkz93hIPH3W5Mn5r0,97
19
28
  kailash/cli/commands.py,sha256=lv1S1uB0JQE4tiQCJIa1HCbjYDbFE9KwcK3M1jRtRU4,18168
20
29
  kailash/client/__init__.py,sha256=WNR39t4O6TDQLI14uR_MjQpLza2c6rU3YkQCXcGCiSU,293
@@ -51,7 +60,7 @@ kailash/mcp_server/ai_registry_server.py,sha256=vMNMvWLegKBVp7YAHVKgltWa2vTXKNvV
51
60
  kailash/mcp_server/auth.py,sha256=Y2BztTL2IILCLSHzZIDSXsIKyUTR8gUXwum5rKffUxs,25251
52
61
  kailash/mcp_server/client.py,sha256=uJXOP7Z4q3CFnX_RvRL5NM6PBcEfR7fUkPQIxfa8c8I,25710
53
62
  kailash/mcp_server/client_new.py,sha256=YU671JvAM0uvuX0uhGZCIKI8co3fqz0cs6HqLZ59Xyo,10285
54
- kailash/mcp_server/discovery.py,sha256=eRWgsKtlpXJh4oszs8ZwCOqrsjplATG-7OoRHDewZb0,56467
63
+ kailash/mcp_server/discovery.py,sha256=D8vcwVkbgQCNp0_BlkGeU_dnqgIXN2g0s3_GpndlQu0,57828
55
64
  kailash/mcp_server/errors.py,sha256=_lycwudWP_AJ_KwLO5N3VCKbG1ikfaTyzA2PBF8UAYU,21181
56
65
  kailash/mcp_server/oauth.py,sha256=GFC2O2ueiTTI6V-91Huevhc3K8CxrHe22knuHfuCTqY,56493
57
66
  kailash/mcp_server/protocol.py,sha256=gXeJ-GvSf39WymfS6433SqLKBA40PdeDoBQqu7DUbJE,35129
@@ -74,11 +83,11 @@ kailash/middleware/auth/models.py,sha256=sMQ1JnEDKPId1kLNCi2fDfhgLZX-YguHPnSMfS_
74
83
  kailash/middleware/auth/utils.py,sha256=AW4fYJ2opQvOr_1YgSQi_MsC_RoFPq0XVOEgbxoXWtw,6555
75
84
  kailash/middleware/communication/__init__.py,sha256=keQ2db4WI2-oZ_nJ5sLE1Tum_RkUt7M2VLTmqOlt0zA,778
76
85
  kailash/middleware/communication/ai_chat.py,sha256=2XmnJB2Nz2xm2darsF2DYnSLGLAYdyYooHok5GrHKb8,35994
77
- kailash/middleware/communication/api_gateway.py,sha256=-y2gUyeWXWvn5PO2GXkaDYFIEZb6kM1iHTiKHrm8WYc,31363
86
+ kailash/middleware/communication/api_gateway.py,sha256=hjs3Ued5YhFR1LcGJEB2d-F96imIuS7W7bxctQG3blA,32272
78
87
  kailash/middleware/communication/events.py,sha256=MEjgcibNyjA4tSFK8CeXDn1oCE75My7K_saxdCBz2HY,15367
79
- kailash/middleware/communication/realtime.py,sha256=__34kf61akSibvKYz-myw0BnIxWfMOns-wLh-oRfI-A,24955
88
+ kailash/middleware/communication/realtime.py,sha256=xm0i-TUs82XUtnFfHpdeZcx4uMt_V-fmS_uTuvXqDV0,28647
80
89
  kailash/middleware/core/__init__.py,sha256=4yQkOWC4b88zSogs1YVqtKG1PugbncqNCwNNWxTdIZA,545
81
- kailash/middleware/core/agent_ui.py,sha256=_2mIsseJjAm118iOhPeGrdE8_lmccrv4K29uC3tlPrc,36357
90
+ kailash/middleware/core/agent_ui.py,sha256=Ki5QpsYNM3o3h9KGor4YEXs9Xg8ehXe3w_M8SJnYhxI,36358
82
91
  kailash/middleware/core/schema.py,sha256=uVF-5ZJlLYHOQdsKrG46FnTO1bq_QtDjhUSkIIDL9dY,23584
83
92
  kailash/middleware/core/workflows.py,sha256=kjwwP69-T6eCY7kWIMLUBwVy2CapoPR34cqCETquq0s,12480
84
93
  kailash/middleware/database/__init__.py,sha256=UMws94L-vja94AjfzPWIgn0h4_5BGQzI3YaSdqtzeLk,1682
@@ -95,12 +104,19 @@ kailash/middleware/gateway/deduplicator.py,sha256=CblV3fwc7s4wg6KIvypwyNMYL5AuQi
95
104
  kailash/middleware/gateway/durable_gateway.py,sha256=EsIgMNxS_no2W40AXDyE7FmVdnGNU26kBRC5rfnSzoQ,14626
96
105
  kailash/middleware/gateway/durable_request.py,sha256=SCnp-bF0tQX9oahr9reqcZjJ_YhyJkeYYl-un9rJ6lo,15437
97
106
  kailash/middleware/gateway/event_store.py,sha256=A3Kh2MhVVPbXWvjeo550SqEGPiJYyspAfu6Gv7UZzo4,16131
107
+ kailash/middleware/gateway/storage_backends.py,sha256=HJTi6zU6oBI3R3ffcm_U-Xp9qqb9yOHS7JbRawP8AV8,12974
98
108
  kailash/middleware/mcp/__init__.py,sha256=EdZB8zOMSBEEmudRzs8ksz9QZJYWQMEx7Tm1MOwIWnI,922
99
109
  kailash/middleware/mcp/client_integration.py,sha256=dY1RmX-g5E6JzUFuWxk7viuOYIh8bMwoUSvHQMVEsYk,18265
100
- kailash/middleware/mcp/enhanced_server.py,sha256=e7cIV4jASyhV12ujpRD21jfQl5_R5IVgdPATggJglCI,18450
101
- kailash/nodes/__init__.py,sha256=xXSDm1DRpb0uJM4r1tDcSbX65gYNWwBs7H6Gl0OjK4w,960
102
- kailash/nodes/base.py,sha256=g8hVZYd-XDbyLaJlKHRYb-xJ9wMGresI34UsCrgvURE,55876
103
- kailash/nodes/base_async.py,sha256=B6BB9yVUrmOgqplgsfSY90VNxd3GTQrwNpN6wz7UuT8,7120
110
+ kailash/middleware/mcp/enhanced_server.py,sha256=RUVS7jWHn0ma4F3F23UvuFwUdu7OkSsIRNQmGtkG9I8,18547
111
+ kailash/nexus/__init__.py,sha256=zaOXOHmmxsDDuyVDA7P-EWkXHLsLHcnrZPSlNQ74M1k,463
112
+ kailash/nexus/factory.py,sha256=oqtPJoVvwQUdafs_h92MDpjt6xSO1vNLZHizZ1-XLks,12296
113
+ kailash/nexus/gateway.py,sha256=QzvJVFVmgNI_Z4VHIRpUQ9F8_HNrhINjAiJQ1kTpqJU,19105
114
+ kailash/nexus/cli/__init__.py,sha256=XbGcZSytNg5lJCOZ981prJpzwTXYJcR6_d6Fw9cXUTo,106
115
+ kailash/nexus/cli/__main__.py,sha256=GCIzeLFbdtBoRwfB1r0gxME078qd1e3IIFrGHHZQfAc,117
116
+ kailash/nexus/cli/main.py,sha256=2GqJP5fvP8DgPaeWzOjAG9yS0CbDWhzEl_tI38jO3VQ,5550
117
+ kailash/nodes/__init__.py,sha256=0uT1nGAIZNzk_tkQo1gmEEkroE8qiVWSjDv1hpoKqQA,1009
118
+ kailash/nodes/base.py,sha256=LqxnXG1hl33GY4caZiOCshagq-FfHe_nDHVAww1Dkmg,57125
119
+ kailash/nodes/base_async.py,sha256=whxepCiVplrltfzEQuabmnGCpEV5WgfqwgxbLdCyiDk,8864
104
120
  kailash/nodes/base_cycle_aware.py,sha256=Xpze9xZzLepWeLpi9Y3tMn1dm2LVv-omr5TSQuGTtWo,13377
105
121
  kailash/nodes/base_with_acl.py,sha256=ZfrkLPgrEBcNbG0LKvtq6glDxyOYOMRw3VXX4vWX6bI,11852
106
122
  kailash/nodes/mixins.py,sha256=ncAdNQPe1sphLByeerP6G_s8mjFLt7dM4baiozzIBPA,12083
@@ -121,19 +137,19 @@ kailash/nodes/ai/agents.py,sha256=CRA3cdapQjpuvOniXUh6ZVWAlRxUIepVw1BROW6QzdY,20
121
137
  kailash/nodes/ai/ai_providers.py,sha256=egfiOZzPmZ10d3wBCJ6ST4tRFrrtq0kt1VyCqxVpxas,65390
122
138
  kailash/nodes/ai/embedding_generator.py,sha256=akGCzz7zLRSziqEQCiPwL2qWhRWxuM_1RQh-YtVEddw,31879
123
139
  kailash/nodes/ai/intelligent_agent_orchestrator.py,sha256=LvBqMKc64zSxFWVCjbLKKel2QwEzoTeJAEgna7rZw00,83097
124
- kailash/nodes/ai/iterative_llm_agent.py,sha256=4tkY7HIW0sx5jbZecHz7V2bFZyfl5i2uuMQf1QT9BPI,52899
125
- kailash/nodes/ai/llm_agent.py,sha256=y-ok61PiTo7w6oYROEq1TQEM-LK21mr9vkOz9VuOIo0,89483
140
+ kailash/nodes/ai/iterative_llm_agent.py,sha256=T_Rtmz6E5gB0HugT2Q8FHZE9Giqy5WiBB0UCJ4PflNw,93308
141
+ kailash/nodes/ai/llm_agent.py,sha256=NeNJZbV_VOUbULug2LASwyzLyoUO5wi58Bc9sXTubuc,90181
126
142
  kailash/nodes/ai/models.py,sha256=wsEeUTuegy87mnLtKgSTg7ggCXvC1n3MsL-iZ4qujHs,16393
127
143
  kailash/nodes/ai/self_organizing.py,sha256=B7NwKaBW8OHQBf5b0F9bSs8Wm-5BDJ9IjIkxS9h00mg,62885
128
144
  kailash/nodes/ai/vision_utils.py,sha256=OHD9cVH_mq0WpJyQkNTj_mpipIVWfSV_bF9eA6CdyeA,4166
129
145
  kailash/nodes/alerts/__init__.py,sha256=CY3agJ7VQ4yU68BhxMCaj18EGEaDecYfLxceHHP4o9c,782
130
146
  kailash/nodes/alerts/base.py,sha256=qFU3cBF7jJNjScA0BJv2mTYCUTNQjbr4wTDEEvIGvRE,7598
131
147
  kailash/nodes/alerts/discord.py,sha256=d7tFQy_yFdQSJwNrB-adVwep7-N0vgQ7xX1pXsPCUKE,16996
132
- kailash/nodes/api/__init__.py,sha256=dzK6kiAdJcTQa7NSBkSmd5CCTSefBlMZMewGlTJSr0c,2334
148
+ kailash/nodes/api/__init__.py,sha256=KOcbsEZdx9kyxpUJiplKx1OFIFoAvvUu7x00BUFOy0w,2340
133
149
  kailash/nodes/api/auth.py,sha256=mve8rdshFIfLpkJX6M9opgDDru1LjcTyf3KpuCs1wd0,30869
134
150
  kailash/nodes/api/graphql.py,sha256=IJsL-oi6U_QbeKHzyKBgUZYYR-fUmS7doWw1fqsKjCo,16999
135
151
  kailash/nodes/api/http.py,sha256=1D62v1gtoh91meuT9PBjzPKkIFX31sH2gGCLAxwu1Hg,39324
136
- kailash/nodes/api/monitoring.py,sha256=vV0nLPyqw34YgsZvuegxNMSLyHU59pMdnzkdXelPYFc,17468
152
+ kailash/nodes/api/monitoring.py,sha256=7aa1HUReqXWWcKWMQ5xdSw9ZLCFfCdhBJFGlyAOlBPg,17471
137
153
  kailash/nodes/api/rate_limiting.py,sha256=y_yPkuCfiaD9R3Jc7fTVR6_ABRCqnl8TiCVtH-r0uOs,19673
138
154
  kailash/nodes/api/rest.py,sha256=jrbVROhcsSwmp2zvCVNnd4zDBVhfpglmChcdBJz7TA4,48798
139
155
  kailash/nodes/api/security.py,sha256=VxMl5p7jWF2ViAqzHTFkte6agUiS9QEiQztV9l9PzDk,31134
@@ -149,19 +165,22 @@ kailash/nodes/cache/cache.py,sha256=Qme8fmPVyH_OXSQqjBaQRRu8l9csX39Z3AY1Hi1r6gk,
149
165
  kailash/nodes/cache/cache_invalidation.py,sha256=IUvxrRj3K5EF29Z2EaKl7t6Uze_cssnzTqhOH4fLrio,34044
150
166
  kailash/nodes/cache/redis_pool_manager.py,sha256=GR82GCWxo_gAzRE-091OB6AhKre8CTwM3OoePLb2gvE,21574
151
167
  kailash/nodes/code/__init__.py,sha256=yhEwuMjUEPFfe6hMGMd4E4gZdLUuf2JEQ7knYapiM4o,1283
152
- kailash/nodes/code/async_python.py,sha256=oXSNkP5d0RTJXaro8AKySlK_N51cBcvnfH0wXeSjDHw,37005
153
- kailash/nodes/code/python.py,sha256=lH3GHorFZL4Uz7pkaXliTtLi4rUog5ni5EFip8cNqmY,58509
168
+ kailash/nodes/code/async_python.py,sha256=Ai-iMpmz-sAori73JBk0wZtqmwtmF2GNPDxqB04I2Ck,37058
169
+ kailash/nodes/code/python.py,sha256=u-5lSoxc5ul7zGGSanrcVwXLxlGcDlirdCXT6mLSm40,60331
154
170
  kailash/nodes/compliance/__init__.py,sha256=6a_FL4ofc8MAVuZ-ARW5uYenZLS4mBFVM9AI2QsnoF8,214
155
171
  kailash/nodes/compliance/data_retention.py,sha256=90bH_eGwlcDzUdklAJeXQM-RcuLUGQFQ5fgHOK8a4qk,69443
156
172
  kailash/nodes/compliance/gdpr.py,sha256=ZMoHZjAo4QtGwtFCzGMrAUBFV3TbZOnJ5DZGZS87Bas,70548
157
173
  kailash/nodes/data/__init__.py,sha256=f0h4ysvXxlyFcNJLvDyXrgJ0ixwDF1cS0pJ2QNPakhg,5213
158
174
  kailash/nodes/data/async_connection.py,sha256=wfArHs9svU48bxGZIiixSV2YVn9cukNgEjagwTRu6J4,17250
159
- kailash/nodes/data/async_sql.py,sha256=bb6Qc-QwoTJwzAOjwT_ooQikk4JWoS2ntb71O7KzXbw,99228
175
+ kailash/nodes/data/async_sql.py,sha256=k4zgeHxgZLB06bl8Aos4WdFrHkYvhtAHX3en9wJv1Hw,103160
160
176
  kailash/nodes/data/async_vector.py,sha256=HtwQLO25IXu8Vq80qzU8rMkUAKPQ2qM0x8YxjXHlygU,21005
177
+ kailash/nodes/data/bulk_operations.py,sha256=WVopmosVkIlweFxVt3boLdCPc93EqpYyQ1Ez9mCIt0c,34453
161
178
  kailash/nodes/data/directory.py,sha256=fbfLqD_ijRubk-4xew3604QntPsyDxqaF4k6TpfyjDg,9923
162
179
  kailash/nodes/data/event_generation.py,sha256=Bc1se0tPg1IAGCQDrWqlFmgoOpUyfMN9ku4Lm3akhXU,11579
163
180
  kailash/nodes/data/file_discovery.py,sha256=njLLusndwBFwbaWP8rcaiE0UQ49RpDlNQ-3SXH7Jhi4,21733
164
181
  kailash/nodes/data/optimistic_locking.py,sha256=R3C69Vs4_4jlmnpfrI3GSIfA6zVQ3hyhMr8r-wXuliI,33329
182
+ kailash/nodes/data/query_builder.py,sha256=TyqOEOnlX0dJR4lunKcCCzwy9GCwB_k2HvMq1cPhS1w,13318
183
+ kailash/nodes/data/query_cache.py,sha256=bjednAwXzkGmAQEyFx7HE7MHQDl0hUKHqr_VUuUEXRo,17172
165
184
  kailash/nodes/data/query_pipeline.py,sha256=qX9QdszpMyjTRrljFLtcY_CytSJRDTpGjt4DhwAdPlk,21710
166
185
  kailash/nodes/data/query_router.py,sha256=HExyJlOoz4p5gCYh1zonlFls4Y0r19VvM2TjRztzmqg,32005
167
186
  kailash/nodes/data/readers.py,sha256=MbhILOs7A6XdtvHNqeDLTN4x4MJAzxmlYR7KaPJkDJY,45994
@@ -191,12 +210,17 @@ kailash/nodes/mixins/__init__.py,sha256=0WYfu5kj-lHbFwP9g5vmlbsG8UzvI-vhOyHMEUzX
191
210
  kailash/nodes/mixins/event_emitter.py,sha256=xTeNrBWmuWIf8qYA5DZekymjjrTAD1sboW9dKbAP40w,7492
192
211
  kailash/nodes/mixins/mcp.py,sha256=HSULx66VY-e8h5R4HjcNDI5pPVq3MN9HxD8T9FI9vRo,7040
193
212
  kailash/nodes/mixins/security.py,sha256=oxIwfKHd6Sdmd2GIaoNkRcSzVHUusYKyGNA7rM61fvw,5534
194
- kailash/nodes/monitoring/__init__.py,sha256=INFZx4PYv_i7oJGKhGzeZkP6ACkUQGFYHhQKkWxriXk,476
213
+ kailash/nodes/monitoring/__init__.py,sha256=vuE31gA-8KiHqkvJn1oZ-8L_xQxuzKVZdNvV2Q5OjdI,910
195
214
  kailash/nodes/monitoring/connection_dashboard.py,sha256=mvrBt081SGZ8xNrc_8kdTFQcphxBHUVAPf8xrW4z-3o,29074
215
+ kailash/nodes/monitoring/deadlock_detector.py,sha256=EcYKD6zsuIfBEUNFZ8QDdRUpd4SYTK2ry0yffFSfRZg,37861
196
216
  kailash/nodes/monitoring/health_check.py,sha256=dzCrjUXIx6I-SYrUR9USIt_faougZESHsF0vFnGT-To,16324
197
217
  kailash/nodes/monitoring/log_processor.py,sha256=HicTgz4Y4RGC6jsyvUaVLVqA3-VyBqW0tHcnAaKGNOk,30886
198
218
  kailash/nodes/monitoring/metrics_collector.py,sha256=qTAcZSx9qdR1H4rUswkvKC7K61pVf4MVXA-npi8FWbY,23155
219
+ kailash/nodes/monitoring/performance_anomaly.py,sha256=mSouk3Q6DOa--tX7QVNxIV5AvKKT_MCXwrB4KsroMuU,41416
199
220
  kailash/nodes/monitoring/performance_benchmark.py,sha256=XiCFqvhKdgq3FgBR9C-LbmvwDLE6uKEyfl4e0T5QrOk,93311
221
+ kailash/nodes/monitoring/race_condition_detector.py,sha256=uGhXpGYRxcCTzc0WL0uRm_0oLpPY7mwHN_vYi7-z8Ig,44628
222
+ kailash/nodes/monitoring/transaction_metrics.py,sha256=PAVj5ZWMnSRfeFhaHdxntA0GrwaBkuevS_6FK2wmdbE,29617
223
+ kailash/nodes/monitoring/transaction_monitor.py,sha256=vZJhNOWRC3oQXN3h1xdyAh_HYW50RnguoFasatmPqsI,34775
200
224
  kailash/nodes/rag/__init__.py,sha256=3UdByxZHfz2jtrYtUKYcffYdc9Xtd7skoUbKsA2vtfA,8660
201
225
  kailash/nodes/rag/advanced.py,sha256=FHC9ueZ2CiePf8BumrXoisXOiDtvlKwcQ97SX60uTGE,60293
202
226
  kailash/nodes/rag/agentic.py,sha256=bdhRTWqlxxNM1CQgj8IlanvCkjUQQJxVpGj0on6_qh0,26240
@@ -217,33 +241,50 @@ kailash/nodes/rag/workflows.py,sha256=PL9d3Lk15drwo2QVdNR9B61EpZ8Kc1crjnqFXc10O1
217
241
  kailash/nodes/security/__init__.py,sha256=oaoZdbKhjEZ8vtUHGRPZPDixInzFDmhUZg4ou_Lz6mI,611
218
242
  kailash/nodes/security/abac_evaluator.py,sha256=MAVJrIIQGHdOI-OfzGJFImVaHSq4vO8avEB0bSTprWk,50313
219
243
  kailash/nodes/security/audit_log.py,sha256=zjwLoWHJLhkJiD5rRmE8H2mSEE7-6EHh_FR0FT91uLU,3130
220
- kailash/nodes/security/behavior_analysis.py,sha256=4R2NNC3CKGnePAeVP1gjjyAL7ZjWDjsEXdHebRVNRig,71563
244
+ kailash/nodes/security/behavior_analysis.py,sha256=zFR5Yny0C85JFnR4I4nfWgHX5PI1bmpB1i-cLZjSvq4,90007
221
245
  kailash/nodes/security/credential_manager.py,sha256=kqetmEBUnOOtSJyCpf0o_IRlwzpCv5FeInB4enBfk5E,14968
222
246
  kailash/nodes/security/rotating_credentials.py,sha256=yEDSraBi_M3DKAaodmkkVPXHreUvrLU8xuTky_Z-tT4,28928
223
247
  kailash/nodes/security/security_event.py,sha256=yVP8foaki-LDD16mlRapaPsbaWMwsum5J_V0n1bnqvw,4150
224
248
  kailash/nodes/security/threat_detection.py,sha256=9tgEteZ41daggTb8rZuRYtd8hNZoghCXiSDK8QE5WWE,40097
249
+ kailash/nodes/system/__init__.py,sha256=XYVoqLnSsEPk-lZ3yrk2dDFBCieQtZdpD583hvUtRJk,310
250
+ kailash/nodes/system/command_parser.py,sha256=lbcMTrb3PsxeIhDi7IPmsZ5PyjKjfmGuaR7gCNRtbZA,28086
225
251
  kailash/nodes/testing/__init__.py,sha256=TpaRD5YHwT6R3pI0r0WU99-Vgixj6gmCbZewnt8K8uI,274
226
252
  kailash/nodes/testing/credential_testing.py,sha256=gjoZDL9MbuwkK5Akb8kZA9GF363DlM6WRvi4rxwPbuU,17927
253
+ kailash/nodes/transaction/__init__.py,sha256=W3wfDtseW6I7mq4L9kr0UXOADTV27q5BgX9JTyVlmCM,1414
254
+ kailash/nodes/transaction/distributed_transaction_manager.py,sha256=44R2KDNIQqtxXkZlvR5OaQvXcuusPVmZJ0-16WyfMfc,38195
255
+ kailash/nodes/transaction/saga_coordinator.py,sha256=411I0wF-mC3VOawu-gUNWW0VY9vnUzU3TQN-pApn1ZM,22617
256
+ kailash/nodes/transaction/saga_state_storage.py,sha256=7LU4WLRufzDrexueGD-6k4G0Bz4N8RQqkATewXOHU84,14595
257
+ kailash/nodes/transaction/saga_step.py,sha256=_oOuzTnKAkGYBzliyDw8f0tjIkk07Ey3d2clr_nsp-c,16657
258
+ kailash/nodes/transaction/transaction_context.py,sha256=ZAMZDFSvIpkFYy2XSFMpfIov8LbYrxL7fMbpxWJePuk,27969
259
+ kailash/nodes/transaction/two_phase_commit.py,sha256=kCUN2q3F_CFYiA-XUCahvh4asnI9AiMPdFbLV5KSgJc,37021
227
260
  kailash/nodes/transform/__init__.py,sha256=JWciUYn9y78-tWiYhc4SCXRoy8YP2O3S2dRp-BXVQxA,765
228
261
  kailash/nodes/transform/chunkers.py,sha256=StRuS6-eLE67OVsqqJJF8dqA2jngD-4yp_rjZQfMAAA,24621
229
262
  kailash/nodes/transform/formatters.py,sha256=BWb5depTZ23Bbg41A_nZojIeET7in6WxYvi3Bhjg-bk,3072
230
- kailash/nodes/transform/processors.py,sha256=vPTaPR4IfSJD_yFM3xa_SsKRiCN1fGPQAGQfGYmnwqM,38373
263
+ kailash/nodes/transform/processors.py,sha256=SM6pzH6_8yawc-rsOY_AIKkksL1GArdERHsRkxToj6k,39174
264
+ kailash/nodes/validation/__init__.py,sha256=99aalT9RziuSFqqSAwhnGEeVXTZDOTWwz54u8gZVzsY,617
265
+ kailash/nodes/validation/test_executor.py,sha256=q41ljbL04daWMXY95-Ufsy8rnF4LRVZIqOT1bR0FhrU,18518
266
+ kailash/nodes/validation/validation_nodes.py,sha256=89_v996cMyOaJ3BceYcfoZt2cNxOHJp45W7FNmVewOk,17001
231
267
  kailash/resources/__init__.py,sha256=JM90kDB7k9wTsd6-2jwm-312SeOaXvavyKnPwQwy4PY,1077
232
- kailash/resources/factory.py,sha256=CYqBm3EFjTv_Aoqb3AUFT8emJlUrtwAZGCSVLt8K3KA,15824
268
+ kailash/resources/factory.py,sha256=YJYtznJmS1SL0gecqWl1b3YN83WN83QaNY4xVcqCzIc,15821
233
269
  kailash/resources/health.py,sha256=i6XS0HdL6pUYq8SBdRjvchf-oj0sy3JoRLszNylfQJc,9702
234
270
  kailash/resources/reference.py,sha256=RKfXzJFIdid0cLOwsXSmlXq4NhSEci4GO-q3M3qcjA8,7526
235
271
  kailash/resources/registry.py,sha256=5978e9VcUq0XBi9LRN89swptBSOAOAyNmwe2pxFHMxM,13789
236
272
  kailash/runtime/__init__.py,sha256=CvU-qBMESYYISqFOlYlLsYJrXJu0Gqr4x6yr4Ob_Rng,278
237
- kailash/runtime/access_controlled.py,sha256=Td8Fa8oPxEqlb74bDiH_HtT6J-ku0AudvN7mrUZOacc,17219
238
- kailash/runtime/async_local.py,sha256=XJyJYWmsezZBmAB8Y8xfAbiytPaY1j_zYU_moABP-3E,30313
273
+ kailash/runtime/access_controlled.py,sha256=HtNJZylaB-2FuPsfEOfQ-4ny4HzwJfHaHNMu2xS1Nzs,17324
274
+ kailash/runtime/async_local.py,sha256=sYNggSU0R-oo8cCvU5ayodDBqASzUhxu994ZvZxDSC0,34010
239
275
  kailash/runtime/docker.py,sha256=sZknVl1PCGfAZeyc0-exTuKlllSyjYlFIgJoiB3CRNs,23500
240
- kailash/runtime/local.py,sha256=W6onzSqTDEtQFQmppjugbD7qy5jKEMrejbLcybcjb1w,45630
276
+ kailash/runtime/local.py,sha256=-xqgydrSpg0eiC3MIVfWK3S6H4dUNUojrXFKttN_YGc,46422
241
277
  kailash/runtime/parallel.py,sha256=mz_wPD13-YVc3Q_8HkOs4nPQPdTjnjCcnRL7ZRM70lo,21070
242
278
  kailash/runtime/parallel_cyclic.py,sha256=yANZHnePjhCPuCFbq3lFQA1K6jbCv5Of5-vIKbCsmZk,19863
243
279
  kailash/runtime/parameter_injection.py,sha256=kG4GhmarsRr5t3VDFbc2G1HSbsZJg6UmienHCE2Ru7o,14852
244
- kailash/runtime/parameter_injector.py,sha256=9tMF8mdwwIIs2XnZarkcdyU_G8Ui0ccwjGUO0jnSlaY,24192
245
- kailash/runtime/runner.py,sha256=Lt9ugsk56ICD9XLKJjnhejtqdiz0mJNdlqH7sSxIlWU,3214
246
- kailash/runtime/testing.py,sha256=nHTYKdVCPZpyC5h2J6cvtgsG4lXEZnMYn7VtKDSlutI,19081
280
+ kailash/runtime/parameter_injector.py,sha256=4l-OOKEBzM_cQ17Zz5o24QSV9a1Zqfu3D2qyq6Uy7hE,30810
281
+ kailash/runtime/runner.py,sha256=t_SEumtVn9uXlSzJicb50MpUu6xdqjW0uZ5b2phjVPY,3318
282
+ kailash/runtime/testing.py,sha256=hTrgGnqxwSBYoztVqnZpxzFwm0DwUnaJdChRHikgoio,19089
283
+ kailash/servers/__init__.py,sha256=-2nkB5pIkBjc-klGJcKCuzWRAl_G7hlepvyV_Es64DI,976
284
+ kailash/servers/durable_workflow_server.py,sha256=lMnf-rTUKrjiS9NhNo3qx2lWYC0NR7EEF-4WBUPZ9zI,16588
285
+ kailash/servers/enterprise_workflow_server.py,sha256=HxArcgu5fQwV2KxKkf1n0Yu75zXy_tS8oxd4-1DM5UY,19785
286
+ kailash/servers/gateway.py,sha256=faZTHsHL-3GwX-um3iLT4MaJmub2QIMNPnlkLAJe7Oc,6552
287
+ kailash/servers/workflow_server.py,sha256=nkx8qpZ4xJD767L3M2dTj68SXv8uLUNht6tZ0v2eB5c,9538
247
288
  kailash/testing/__init__.py,sha256=4cqLSbcFz9bDY09vuK5Vpg3UtoAAa93R5tc9zIUvGAE,796
248
289
  kailash/testing/async_test_case.py,sha256=3Pdi13zT-_LduJ5Tfe7yuhz8Qz7KQpcER6G2nMe-t5A,12815
249
290
  kailash/testing/async_utils.py,sha256=gSHcArDJf98mDi--NPFpCoGmAgKHDZ0__tyKAjDjpm0,10745
@@ -258,6 +299,7 @@ kailash/tracking/storage/base.py,sha256=wWkK1XdrMV0EGxlbFDyfuVnDoIG0tdSPPwz_8iwz
258
299
  kailash/tracking/storage/database.py,sha256=O3-qYmgwTccq9jYl25C0L6R398pXPsWkIAoWLL1aZvQ,20048
259
300
  kailash/tracking/storage/filesystem.py,sha256=VhWxNvqf_Ta3mIaGqKuOrcCqQiEvJj7S8NK5yRd1V68,19627
260
301
  kailash/utils/__init__.py,sha256=pFKhHJxU_kyFE9aGT5recw5E-3nbfVF5pMHepBJWB2E,253
302
+ kailash/utils/data_validation.py,sha256=LYQWHtB-BRSAGQDMdZQGUKOZCGeoeia2fIqM0UfJFSU,6851
261
303
  kailash/utils/export.py,sha256=WBazN03LOCI03TsIElNv31wSZ_uTLPl8THnqdohgyTk,37361
262
304
  kailash/utils/resource_manager.py,sha256=xMgcSogLofUIRpRMXzmK4gxBi2lIqEJ7rn2rsBBm9xo,13209
263
305
  kailash/utils/secure_logging.py,sha256=3iEJt7sXnIgvdiRz8qsx0JbcygrsUf0_C8UHFXLNfcs,11325
@@ -274,8 +316,7 @@ kailash/visualization/reports.py,sha256=D7kJ0flHr16d-qSEq8vnw20N8u_dgTrXtKVSXVm8
274
316
  kailash/workflow/__init__.py,sha256=DDQDE9K6RmbX6479guNLLgjiVVV-gQERRvCEJWSVlsM,1836
275
317
  kailash/workflow/async_builder.py,sha256=iv8bDJHdWAUZ77SyMo6sucd92dTdtXesdxycrSE7mM4,20613
276
318
  kailash/workflow/async_patterns.py,sha256=X0ZDXwr6UAu0WC1xnCB7-0V1-tRbKs9UI4JqaBCB6tE,22824
277
- kailash/workflow/builder.py,sha256=fAk5ccPD52zxn_62ZSvc8O6HFd-5nYR5-FI7k7i82KU,15583
278
- kailash/workflow/builder_improvements.py,sha256=MYAf-CJkrXTP8Q6leapnfVZATQxCJJ1cAymNOqXCh2w,7374
319
+ kailash/workflow/builder.py,sha256=3l5wVRtMB1Om_QmeoQ6jsrc_Lm8Hna_pH47UjnfMb9I,31184
279
320
  kailash/workflow/convergence.py,sha256=vfIDR-uNaQE-LVUEzrRtfgKPgX9gL0nLNH-nTg5ra-c,10031
280
321
  kailash/workflow/cycle_analyzer.py,sha256=BGBpgdB-g0-KRI65sVAvHV4lxfoCzMt4uKOHbw8GXT4,32596
281
322
  kailash/workflow/cycle_builder.py,sha256=uWAx8K4ZKMtFC3mWylK4gHT03xeu0xChJlhw50hVqEE,20883
@@ -284,7 +325,7 @@ kailash/workflow/cycle_debugger.py,sha256=eG-Q_kakqyhr1Ts-q4pRnO0EI7mVO9ao1s9WOx
284
325
  kailash/workflow/cycle_exceptions.py,sha256=4_OLnbEXqIiXKzOc3uh8DzFik4wEHwl8bRZhY9Xhf2A,21838
285
326
  kailash/workflow/cycle_profiler.py,sha256=aEWSCm0Xy15SjgLTpPooVJMzpFhtJWt4livR-3Me4N8,28547
286
327
  kailash/workflow/cycle_state.py,sha256=hzRUvciRreWfS56Cf7ZLQPit_mlPTQDoNTawh8yi-2s,10747
287
- kailash/workflow/cyclic_runner.py,sha256=NZqK_GTNbvf-pp08_brvzOlDCytrKscr1XRDy8PD8Is,40816
328
+ kailash/workflow/cyclic_runner.py,sha256=0IlmghTrwYb3ivqP975DprP3aj45-8_Sn5Wq9tEutG0,43888
288
329
  kailash/workflow/graph.py,sha256=zRpGLXeuwtuxFBvE7_16c_bB9yqZirM_uwtfD1_MY4g,59272
289
330
  kailash/workflow/input_handling.py,sha256=HrW--AmelYC8F18nkfmYlF_wXycA24RuNbDRjvM8rqk,6561
290
331
  kailash/workflow/mermaid_visualizer.py,sha256=UsQDvxgIAhy-Th7ZzFnbuziaTx1Cd5yUh6S_25DffoQ,22294
@@ -295,11 +336,11 @@ kailash/workflow/runner.py,sha256=l6jb-H7DwbRlvQ3H3SuTs70rut-u7H3Gi8nybKCEjZU,10
295
336
  kailash/workflow/safety.py,sha256=pS5GKu7UdkzFZcb16Dn-0jBxjULDU-59_M0CbUVMVyw,11298
296
337
  kailash/workflow/state.py,sha256=UTZxs5-Ona6uvBhx1__i6-RX8gB4qazkBIWE7uyRmWQ,7600
297
338
  kailash/workflow/templates.py,sha256=98EN5H4fO9b4xeczk20Hu5L8hNcAuRQNGayT6vnZYCw,48540
298
- kailash/workflow/validation.py,sha256=JIbIajWVIaWHSvWtgZ4WUVJaBaUOCz5B9cyTwM--dL4,33060
299
- kailash/workflow/visualization.py,sha256=ICMWCWqh5fOQ7eJygbvu2PMWHxe-H5_0epwdZuz8cMw,19737
300
- kailash-0.6.6.dist-info/licenses/LICENSE,sha256=Axe6g7bTrJkToK9h9j2SpRUKKNaDZDCo2lQ2zPxCE6s,1065
301
- kailash-0.6.6.dist-info/METADATA,sha256=IIL5xeaymlhaLcnEgM1_P-lxgy-o8nC-H7LX9O9Dx8s,26409
302
- kailash-0.6.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
303
- kailash-0.6.6.dist-info/entry_points.txt,sha256=M_q3b8PG5W4XbhSgESzIJjh3_4OBKtZFYFsOdkr2vO4,45
304
- kailash-0.6.6.dist-info/top_level.txt,sha256=z7GzH2mxl66498pVf5HKwo5wwfPtt9Aq95uZUpH6JV0,8
305
- kailash-0.6.6.dist-info/RECORD,,
339
+ kailash/workflow/validation.py,sha256=rWZNJYA_XAfk_og6Cxz8p1gZ3j5CylPvMTDXg2SfjgM,38574
340
+ kailash/workflow/visualization.py,sha256=_oWiLrd6PjoAnNvCnQtFjxx2SVwhDeuYkuPz_ptIQvQ,23013
341
+ kailash-0.8.0.dist-info/licenses/LICENSE,sha256=Axe6g7bTrJkToK9h9j2SpRUKKNaDZDCo2lQ2zPxCE6s,1065
342
+ kailash-0.8.0.dist-info/METADATA,sha256=xsd4eOqs4Lt3pigjT2SoOKnoQ0-P6YjSXf9zYu66LVY,26441
343
+ kailash-0.8.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
344
+ kailash-0.8.0.dist-info/entry_points.txt,sha256=M_q3b8PG5W4XbhSgESzIJjh3_4OBKtZFYFsOdkr2vO4,45
345
+ kailash-0.8.0.dist-info/top_level.txt,sha256=z7GzH2mxl66498pVf5HKwo5wwfPtt9Aq95uZUpH6JV0,8
346
+ kailash-0.8.0.dist-info/RECORD,,
@@ -1,207 +0,0 @@
1
- """
2
- WorkflowBuilder Improvements for Parameter Passing
3
-
4
- This module contains improvements to the WorkflowBuilder to handle
5
- parameter passing to nodes without incoming connections.
6
- """
7
-
8
- from typing import Any, Dict, List, Optional
9
-
10
- from kailash.workflow.builder import WorkflowBuilder
11
- from kailash.workflow.graph import Workflow
12
-
13
-
14
- class ImprovedWorkflowBuilder(WorkflowBuilder):
15
- """Enhanced WorkflowBuilder that automatically handles parameter passing"""
16
-
17
- def __init__(self):
18
- super().__init__()
19
- self.workflow_parameters: Dict[str, Any] = {}
20
- self.parameter_mappings: Dict[str, Dict[str, str]] = {}
21
-
22
- def set_workflow_parameters(self, **parameters) -> "ImprovedWorkflowBuilder":
23
- """
24
- Set default parameters that will be passed to all nodes.
25
-
26
- Args:
27
- **parameters: Key-value pairs of workflow-level parameters
28
-
29
- Returns:
30
- Self for chaining
31
- """
32
- self.workflow_parameters.update(parameters)
33
- return self
34
-
35
- def add_parameter_mapping(
36
- self, node_id: str, mappings: Dict[str, str]
37
- ) -> "ImprovedWorkflowBuilder":
38
- """
39
- Add parameter mappings for a specific node.
40
-
41
- Args:
42
- node_id: Node to configure
43
- mappings: Dict mapping workflow param names to node param names
44
-
45
- Returns:
46
- Self for chaining
47
- """
48
- if node_id not in self.parameter_mappings:
49
- self.parameter_mappings[node_id] = {}
50
- self.parameter_mappings[node_id].update(mappings)
51
- return self
52
-
53
- def add_input_connection(
54
- self, to_node: str, to_input: str, from_workflow_param: str
55
- ) -> "ImprovedWorkflowBuilder":
56
- """
57
- Connect a workflow parameter directly to a node input.
58
-
59
- Args:
60
- to_node: Target node ID
61
- to_input: Input parameter name on the node
62
- from_workflow_param: Workflow parameter name
63
-
64
- Returns:
65
- Self for chaining
66
- """
67
- # Add a special connection type for workflow inputs
68
- connection = {
69
- "from_node": "__workflow_input__",
70
- "from_output": from_workflow_param,
71
- "to_node": to_node,
72
- "to_input": to_input,
73
- "is_workflow_input": True,
74
- }
75
- self.connections.append(connection)
76
- return self
77
-
78
- def build(self, workflow_id: str | None = None, **kwargs) -> Workflow:
79
- """
80
- Build the workflow with automatic parameter injection.
81
-
82
- Returns:
83
- Enhanced Workflow instance
84
- """
85
- # First, build the base workflow
86
- workflow = super().build(workflow_id, **kwargs)
87
-
88
- # Find nodes without incoming connections
89
- nodes_with_inputs = set()
90
- for conn in self.connections:
91
- if not conn.get("is_workflow_input"):
92
- nodes_with_inputs.add(conn["to_node"])
93
-
94
- nodes_without_inputs = set(self.nodes.keys()) - nodes_with_inputs
95
-
96
- # For each node without inputs, check if it needs workflow parameters
97
- for node_id in nodes_without_inputs:
98
- node = self.nodes[node_id]
99
- node_instance = workflow.get_node(node_id)
100
-
101
- if hasattr(node_instance, "get_parameters"):
102
- params = node_instance.get_parameters()
103
-
104
- # Check which required parameters are missing from config
105
- for param_name, param_def in params.items():
106
- if param_def.required and param_name not in node["config"]:
107
- # Check if this parameter should come from workflow parameters
108
- if param_name in self.workflow_parameters:
109
- # Add to node config
110
- node["config"][param_name] = self.workflow_parameters[
111
- param_name
112
- ]
113
- elif node_id in self.parameter_mappings:
114
- # Check parameter mappings
115
- mapping = self.parameter_mappings[node_id]
116
- if param_name in mapping:
117
- workflow_param = mapping[param_name]
118
- if workflow_param in self.workflow_parameters:
119
- node["config"][param_name] = (
120
- self.workflow_parameters[workflow_param]
121
- )
122
-
123
- # Store workflow parameters in metadata for runtime reference
124
- workflow._metadata["workflow_parameters"] = self.workflow_parameters
125
- workflow._metadata["parameter_mappings"] = self.parameter_mappings
126
-
127
- return workflow
128
-
129
-
130
- def create_user_login_workflow_improved(config: Dict[str, Any]) -> Workflow:
131
- """
132
- Example of creating a login workflow with proper parameter handling.
133
- """
134
- workflow = ImprovedWorkflowBuilder()
135
-
136
- # Set workflow-level parameters that will be shared
137
- workflow.set_workflow_parameters(
138
- tenant_id="default", database_config=config["database_config"]
139
- )
140
-
141
- # Add user fetcher node
142
- workflow.add_node(
143
- "UserManagementNode",
144
- "user_fetcher",
145
- {
146
- "operation": "get_user",
147
- "identifier": "$.email",
148
- "identifier_type": "email",
149
- # tenant_id and database_config will be auto-injected
150
- },
151
- )
152
-
153
- # Map workflow inputs to the first node
154
- workflow.add_input_connection("user_fetcher", "email", "email")
155
- workflow.add_input_connection("user_fetcher", "password", "password")
156
-
157
- # Add other nodes...
158
- workflow.add_node(
159
- "PythonCodeNode",
160
- "password_verifier",
161
- {"code": "# Password verification code here"},
162
- )
163
-
164
- # Connect nodes
165
- workflow.add_connection("user_fetcher", "result", "password_verifier", "input")
166
-
167
- return workflow.build(name="user_login_improved")
168
-
169
-
170
- # Alternative approach: Fix in the existing WorkflowBuilder
171
- def patch_workflow_builder():
172
- """
173
- Monkey patch the existing WorkflowBuilder to handle parameters better.
174
- """
175
- original_build = WorkflowBuilder.build
176
-
177
- def enhanced_build(self, workflow_id: str | None = None, **kwargs) -> Workflow:
178
- # Build the workflow normally
179
- workflow = original_build(self, workflow_id, **kwargs)
180
-
181
- # Enhanced parameter handling
182
- # Find nodes without incoming connections and inject common parameters
183
- nodes_with_inputs = set()
184
- for edge in workflow._graph.edges():
185
- nodes_with_inputs.add(edge[1]) # target node
186
-
187
- # Get all nodes
188
- all_nodes = set(workflow._graph.nodes())
189
- nodes_without_inputs = all_nodes - nodes_with_inputs
190
-
191
- # Common parameters that should be injected
192
- common_params = {
193
- "tenant_id": "default",
194
- "database_config": kwargs.get("database_config", {}),
195
- }
196
-
197
- for node_id in nodes_without_inputs:
198
- if node_id in workflow._nodes:
199
- node_instance = workflow._nodes[node_id]
200
- # Update node config with common parameters if not already set
201
- for param, value in common_params.items():
202
- if param not in node_instance.config:
203
- node_instance.config[param] = value
204
-
205
- return workflow
206
-
207
- WorkflowBuilder.build = enhanced_build