griptape-nodes 0.52.1__py3-none-any.whl → 0.53.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 (46) hide show
  1. griptape_nodes/__init__.py +6 -943
  2. griptape_nodes/__main__.py +6 -0
  3. griptape_nodes/app/app.py +45 -61
  4. griptape_nodes/cli/__init__.py +1 -0
  5. griptape_nodes/cli/commands/__init__.py +1 -0
  6. griptape_nodes/cli/commands/config.py +71 -0
  7. griptape_nodes/cli/commands/engine.py +80 -0
  8. griptape_nodes/cli/commands/init.py +548 -0
  9. griptape_nodes/cli/commands/libraries.py +90 -0
  10. griptape_nodes/cli/commands/self.py +117 -0
  11. griptape_nodes/cli/main.py +46 -0
  12. griptape_nodes/cli/shared.py +84 -0
  13. griptape_nodes/common/__init__.py +1 -0
  14. griptape_nodes/common/directed_graph.py +55 -0
  15. griptape_nodes/drivers/storage/local_storage_driver.py +7 -2
  16. griptape_nodes/exe_types/core_types.py +60 -2
  17. griptape_nodes/exe_types/node_types.py +38 -24
  18. griptape_nodes/machines/control_flow.py +86 -22
  19. griptape_nodes/machines/fsm.py +10 -1
  20. griptape_nodes/machines/parallel_resolution.py +570 -0
  21. griptape_nodes/machines/{node_resolution.py → sequential_resolution.py} +22 -51
  22. griptape_nodes/retained_mode/events/base_events.py +2 -2
  23. griptape_nodes/retained_mode/events/node_events.py +4 -3
  24. griptape_nodes/retained_mode/griptape_nodes.py +25 -12
  25. griptape_nodes/retained_mode/managers/agent_manager.py +9 -5
  26. griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py +3 -1
  27. griptape_nodes/retained_mode/managers/context_manager.py +6 -5
  28. griptape_nodes/retained_mode/managers/flow_manager.py +117 -204
  29. griptape_nodes/retained_mode/managers/library_lifecycle/library_directory.py +1 -1
  30. griptape_nodes/retained_mode/managers/library_manager.py +35 -25
  31. griptape_nodes/retained_mode/managers/node_manager.py +81 -199
  32. griptape_nodes/retained_mode/managers/object_manager.py +11 -5
  33. griptape_nodes/retained_mode/managers/os_manager.py +24 -9
  34. griptape_nodes/retained_mode/managers/secrets_manager.py +8 -4
  35. griptape_nodes/retained_mode/managers/settings.py +32 -1
  36. griptape_nodes/retained_mode/managers/static_files_manager.py +8 -3
  37. griptape_nodes/retained_mode/managers/sync_manager.py +8 -5
  38. griptape_nodes/retained_mode/managers/workflow_manager.py +110 -122
  39. griptape_nodes/traits/add_param_button.py +1 -1
  40. griptape_nodes/traits/button.py +216 -6
  41. griptape_nodes/traits/color_picker.py +66 -0
  42. griptape_nodes/traits/traits.json +4 -0
  43. {griptape_nodes-0.52.1.dist-info → griptape_nodes-0.53.0.dist-info}/METADATA +2 -1
  44. {griptape_nodes-0.52.1.dist-info → griptape_nodes-0.53.0.dist-info}/RECORD +46 -32
  45. {griptape_nodes-0.52.1.dist-info → griptape_nodes-0.53.0.dist-info}/WHEEL +0 -0
  46. {griptape_nodes-0.52.1.dist-info → griptape_nodes-0.53.0.dist-info}/entry_points.txt +0 -0
@@ -11,7 +11,7 @@ class AddParameterButton(Trait):
11
11
 
12
12
  def __init__(self) -> None:
13
13
  super().__init__(element_id="AddParameterButton")
14
- self.add_child(Button(button_type="AddParameter"))
14
+ self.add_child(Button(label="AddParameter"))
15
15
 
16
16
  @classmethod
17
17
  def get_trait_keys(cls) -> list[str]:
@@ -1,21 +1,231 @@
1
+ import logging
1
2
  from dataclasses import dataclass, field
3
+ from typing import TYPE_CHECKING, Literal
2
4
 
3
- from griptape_nodes.exe_types.core_types import Trait
5
+ from griptape_nodes.exe_types.core_types import NodeMessagePayload, NodeMessageResult, Trait
6
+
7
+ if TYPE_CHECKING:
8
+ from collections.abc import Callable
9
+
10
+ # Don't export callback types - let users import explicitly
11
+
12
+ logger = logging.getLogger("griptape_nodes")
13
+
14
+
15
+ # Type aliases using Literals
16
+ ButtonVariant = Literal[
17
+ "default",
18
+ "secondary",
19
+ "destructive",
20
+ "outline",
21
+ "ghost",
22
+ "link",
23
+ ]
24
+
25
+ ButtonSize = Literal[
26
+ "default",
27
+ "sm",
28
+ "icon",
29
+ ]
30
+
31
+ ButtonState = Literal[
32
+ "normal",
33
+ "disabled",
34
+ "loading",
35
+ "hidden",
36
+ ]
37
+
38
+ IconPosition = Literal[
39
+ "left",
40
+ "right",
41
+ ]
42
+
43
+
44
+ class ButtonDetailsMessagePayload(NodeMessagePayload):
45
+ """Payload containing complete button details and status information."""
46
+
47
+ label: str
48
+ variant: str
49
+ size: str
50
+ state: str
51
+ icon: str | None = None
52
+ icon_class: str | None = None
53
+ icon_position: str | None = None
54
+ full_width: bool = False
55
+ loading_label: str | None = None
56
+ loading_icon: str | None = None
57
+ loading_icon_class: str | None = None
58
+
59
+
60
+ class OnClickMessageResultPayload(NodeMessagePayload):
61
+ """Payload for button click result messages."""
62
+
63
+ button_details: ButtonDetailsMessagePayload
4
64
 
5
65
 
6
66
  @dataclass(eq=False)
7
67
  class Button(Trait):
8
- type: str = field(default_factory=lambda: "Generic")
68
+ # Specific callback types for better type safety and clarity
69
+ type OnClickCallback = Callable[[Button, ButtonDetailsMessagePayload], NodeMessageResult]
70
+ type GetButtonStateCallback = Callable[[Button, ButtonDetailsMessagePayload], NodeMessageResult]
71
+
72
+ # Static message type constants
73
+ ON_CLICK_MESSAGE_TYPE = "on_click"
74
+ GET_BUTTON_STATUS_MESSAGE_TYPE = "get_button_status"
75
+
76
+ # Button styling and behavior properties
77
+ label: str = "Button"
78
+ variant: ButtonVariant = "default"
79
+ size: ButtonSize = "default"
80
+ state: ButtonState = "normal"
81
+ icon: str | None = None
82
+ icon_class: str | None = None
83
+ icon_position: IconPosition | None = None
84
+ full_width: bool = False
85
+ loading_label: str | None = None
86
+ loading_icon: str | None = None
87
+ loading_icon_class: str | None = None
88
+
9
89
  element_id: str = field(default_factory=lambda: "Button")
90
+ on_click_callback: OnClickCallback | None = field(default=None, init=False)
91
+ get_button_state_callback: GetButtonStateCallback | None = field(default=None, init=False)
10
92
 
11
- def __init__(self, button_type: str | None = None) -> None:
93
+ def __init__( # noqa: PLR0913
94
+ self,
95
+ *,
96
+ label: str = "", # Allows a button with no text.
97
+ variant: ButtonVariant = "secondary",
98
+ size: ButtonSize = "default",
99
+ state: ButtonState = "normal",
100
+ icon: str | None = None,
101
+ icon_class: str | None = None,
102
+ icon_position: IconPosition | None = None,
103
+ full_width: bool = False,
104
+ loading_label: str | None = None,
105
+ loading_icon: str | None = None,
106
+ loading_icon_class: str | None = None,
107
+ on_click: OnClickCallback | None = None,
108
+ get_button_state: GetButtonStateCallback | None = None,
109
+ ) -> None:
12
110
  super().__init__(element_id="Button")
13
- if button_type:
14
- self.type = button_type
111
+ self.label = label
112
+ self.variant = variant
113
+ self.size = size
114
+ self.state = state
115
+ self.icon = icon
116
+ self.icon_class = icon_class
117
+ self.icon_position = icon_position
118
+ self.full_width = full_width
119
+ self.loading_label = loading_label
120
+ self.loading_icon = loading_icon
121
+ self.loading_icon_class = loading_icon_class
122
+ self.on_click_callback = on_click
123
+ self.get_button_state_callback = get_button_state
15
124
 
16
125
  @classmethod
17
126
  def get_trait_keys(cls) -> list[str]:
18
127
  return ["button", "addbutton"]
19
128
 
129
+ def get_button_details(self, state: ButtonState | None = None) -> ButtonDetailsMessagePayload:
130
+ """Create a ButtonDetailsMessagePayload with current or specified button state."""
131
+ return ButtonDetailsMessagePayload(
132
+ label=self.label,
133
+ variant=self.variant,
134
+ size=self.size,
135
+ state=state or self.state,
136
+ icon=self.icon,
137
+ icon_class=self.icon_class,
138
+ icon_position=self.icon_position,
139
+ full_width=self.full_width,
140
+ loading_label=self.loading_label,
141
+ loading_icon=self.loading_icon,
142
+ loading_icon_class=self.loading_icon_class,
143
+ )
144
+
20
145
  def ui_options_for_trait(self) -> dict:
21
- return {"button": self.type}
146
+ """Generate UI options for the button trait with all styling properties."""
147
+ options = {
148
+ "button_label": self.label,
149
+ "variant": self.variant,
150
+ "size": self.size,
151
+ "state": self.state,
152
+ "full_width": self.full_width,
153
+ }
154
+
155
+ # Only include icon properties if icon is specified
156
+ if self.icon:
157
+ options["button_icon"] = self.icon
158
+ options["iconPosition"] = self.icon_position or "left"
159
+ if self.icon_class:
160
+ options["icon_class"] = self.icon_class
161
+
162
+ # Include loading properties if specified
163
+ if self.loading_label:
164
+ options["loading_label"] = self.loading_label
165
+ if self.loading_icon:
166
+ options["loading_icon"] = self.loading_icon
167
+ if self.loading_icon_class:
168
+ options["loading_icon_class"] = self.loading_icon_class
169
+
170
+ return options
171
+
172
+ def on_message_received(self, message_type: str, message: NodeMessagePayload | None) -> NodeMessageResult | None:
173
+ """Handle messages sent to this button trait.
174
+
175
+ Args:
176
+ message_type: String indicating the message type for parsing
177
+ message: Message payload as NodeMessagePayload or None
178
+
179
+ Returns:
180
+ NodeMessageResult | None: Result if handled, None if no handler available
181
+ """
182
+ match message_type.lower():
183
+ case self.ON_CLICK_MESSAGE_TYPE:
184
+ if self.on_click_callback is not None:
185
+ try:
186
+ # Pre-fill button details with current state and pass to callback
187
+ button_details = self.get_button_details()
188
+ return self.on_click_callback(self, button_details)
189
+ except Exception as e:
190
+ return NodeMessageResult(
191
+ success=False,
192
+ details=f"Button '{self.label}' callback failed: {e!s}",
193
+ response=None,
194
+ )
195
+
196
+ # Log debug message and fall through if no callback specified
197
+ logger.debug("Button '%s' was clicked, but no on_click_callback was specified.", self.label)
198
+
199
+ case self.GET_BUTTON_STATUS_MESSAGE_TYPE:
200
+ # Use custom callback if provided, otherwise use default implementation
201
+ if self.get_button_state_callback is not None:
202
+ try:
203
+ # Pre-fill button details with current state and pass to callback
204
+ button_details = self.get_button_details()
205
+ return self.get_button_state_callback(self, button_details)
206
+ except Exception as e:
207
+ return NodeMessageResult(
208
+ success=False,
209
+ details=f"Button '{self.label}' get_button_state callback failed: {e!s}",
210
+ response=None,
211
+ )
212
+ else:
213
+ return self._default_get_button_status(message_type, message)
214
+
215
+ # Delegate to parent implementation for unhandled messages or no callback
216
+ return super().on_message_received(message_type, message)
217
+
218
+ def _default_get_button_status(
219
+ self,
220
+ message_type: str, # noqa: ARG002
221
+ message: NodeMessagePayload | None, # noqa: ARG002
222
+ ) -> NodeMessageResult:
223
+ """Default implementation for get_button_status that returns current button details."""
224
+ button_details = self.get_button_details()
225
+
226
+ return NodeMessageResult(
227
+ success=True,
228
+ details=f"Button '{self.label}' details retrieved",
229
+ response=button_details,
230
+ altered_workflow_state=False,
231
+ )
@@ -0,0 +1,66 @@
1
+ from collections.abc import Callable
2
+ from dataclasses import dataclass, field
3
+ from typing import Any, Literal
4
+
5
+ from griptape_nodes.exe_types.core_types import Parameter, ParameterMode, Trait
6
+
7
+
8
+ @dataclass(eq=False)
9
+ class ColorPicker(Trait):
10
+ format: Literal["hex", "hexa", "rgb", "rgba", "hsl", "hsla", "hsv", "hsva"] = "hex"
11
+ element_id: str = field(default_factory=lambda: "ColorPicker")
12
+
13
+ _allowed_modes: set = field(default_factory=lambda: {ParameterMode.PROPERTY})
14
+
15
+ def __init__(self, format: Literal["hex", "hexa", "rgb", "rgba", "hsl", "hsla", "hsv", "hsva"] = "hex") -> None: # noqa: A002
16
+ super().__init__()
17
+ self.format = format
18
+
19
+ @classmethod
20
+ def get_trait_keys(cls) -> list[str]:
21
+ return ["color_picker"]
22
+
23
+ def ui_options_for_trait(self) -> dict:
24
+ return {"color_picker": {"format": self.format}}
25
+
26
+ def _validate_hex_format(self, value: str) -> None:
27
+ """Validate hex and hexa color formats."""
28
+ if not value.startswith("#"):
29
+ # Allow hex without # prefix
30
+ if len(value) in [6, 8] and all(c in "0123456789ABCDEFabcdef" for c in value):
31
+ return # Valid hex without # prefix
32
+ msg = f"Invalid {self.format} format: {value}. Expected format like #FF0000 or #FF000088"
33
+ raise ValueError(msg)
34
+ if self.format == "hex" and len(value) not in [4, 7]: # #fff or #ffffff
35
+ msg = f"Invalid hex format: {value}. Expected format like #FF0000 or #FFF"
36
+ raise ValueError(msg)
37
+ if self.format == "hexa" and len(value) not in [5, 9]: # #ffff or #ffffffff
38
+ msg = f"Invalid hexa format: {value}. Expected format like #FF000088 or #FFFF"
39
+ raise ValueError(msg)
40
+
41
+ def _validate_function_format(self, value: str, prefixes: tuple[str, ...], example: str) -> None:
42
+ """Validate function-based color formats (rgb, hsl, hsv)."""
43
+ if not value.startswith(prefixes):
44
+ msg = f"Invalid {self.format} format: {value}. Expected format like {example}"
45
+ raise ValueError(msg)
46
+
47
+ def validators_for_trait(self) -> list[Callable[..., Any]]:
48
+ def validate(param: Parameter, value: Any) -> None: # noqa: ARG001
49
+ if value is None:
50
+ return
51
+
52
+ if not isinstance(value, str):
53
+ msg = f"Color value must be a string for format {self.format}"
54
+ raise TypeError(msg)
55
+
56
+ # Validate based on format
57
+ if self.format in ["hex", "hexa"]:
58
+ self._validate_hex_format(value)
59
+ elif self.format in ["rgb", "rgba"]:
60
+ self._validate_function_format(value, ("rgb(", "rgba("), "rgb(255, 255, 255)")
61
+ elif self.format in ["hsl", "hsla"]:
62
+ self._validate_function_format(value, ("hsl(", "hsla("), "hsl(0, 0%, 100%)")
63
+ elif self.format in ["hsv", "hsva"]:
64
+ self._validate_function_format(value, ("hsv(", "hsva("), "hsv(0, 0%, 100%)")
65
+
66
+ return [validate]
@@ -1,4 +1,8 @@
1
1
  {
2
2
  "class_name": "MinMax",
3
3
  "file_name": "minmax.py"
4
+ },
5
+ {
6
+ "class_name": "ColorPicker",
7
+ "file_name": "color_picker.py"
4
8
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: griptape-nodes
3
- Version: 0.52.1
3
+ Version: 0.53.0
4
4
  Summary: Add your description here
5
5
  Requires-Dist: griptape>=1.8.2
6
6
  Requires-Dist: pydantic>=2.10.6
@@ -19,6 +19,7 @@ Requires-Dist: mcp[ws]>=1.10.1
19
19
  Requires-Dist: binaryornot>=0.4.4
20
20
  Requires-Dist: pillow>=11.3.0
21
21
  Requires-Dist: watchfiles>=1.1.0
22
+ Requires-Dist: typer>=0.15.0
22
23
  Requires-Dist: austin-dist>=3.7.0 ; extra == 'profiling'
23
24
  Requires-Python: >=3.12.0, <3.13
24
25
  Provides-Extra: profiling
@@ -1,29 +1,42 @@
1
- griptape_nodes/__init__.py,sha256=gKRELLnKTgmejKncdssrWFz7k0Aj_Fx7TatcEJB9H-A,37424
1
+ griptape_nodes/__init__.py,sha256=Mrq0BBoPD2Auta_0Li8mS-geMqM7l4H17DX56qZzpBg,560
2
+ griptape_nodes/__main__.py,sha256=fJhor6_1A27abwbnceyNheONP1iXkPzjjsV5jBEfF2M,144
2
3
  griptape_nodes/app/.python-version,sha256=e1X45ntWI8S-8_ppEojalDfXnTq6FW3kjUgdsyrH0W0,5
3
4
  griptape_nodes/app/__init__.py,sha256=DB-DTsgcNnbmEClXEouwzGhrmo3gHBCWXB9BkPGpdQI,90
4
5
  griptape_nodes/app/api.py,sha256=5IQgyXtcJeppwBpGmLdAQCOc5kh0KX2t1WOqkpo8P30,6579
5
- griptape_nodes/app/app.py,sha256=OoRVe4QR5DTOVPywZF_ffLsGWt7cBR33VviFGSY_cmA,20727
6
+ griptape_nodes/app/app.py,sha256=QtsLXAaqT_eAhoVW2DCEnNXKl2GmVbeDrhB1fGacTxo,20047
6
7
  griptape_nodes/app/watch.py,sha256=WE3P0Hl_jDezqy_UetNK2K5NTQFYKcoEbcKwzRWY4MU,2648
7
8
  griptape_nodes/bootstrap/__init__.py,sha256=ENv3SIzQ9TtlRrg1y4e4CnoBpJaFpFSkNpTFBV8X5Ls,25
8
9
  griptape_nodes/bootstrap/workflow_executors/__init__.py,sha256=pyjN81-eLtjyECFYLXOtMCixiiI9qBi5yald86iM7Ek,34
9
10
  griptape_nodes/bootstrap/workflow_executors/local_workflow_executor.py,sha256=SNRJax-GEqMp6_y6JHLcLV1AQejQbKKBYodHea98MHQ,7615
10
11
  griptape_nodes/bootstrap/workflow_executors/workflow_executor.py,sha256=ersKKwf1jcwyKr4UVlqvFMfvjKblvVx0Vf9oRfEoeRk,768
12
+ griptape_nodes/cli/__init__.py,sha256=HuXHtxqDMtpYRokxiFYuNB7R5EgkOshPil273kTmgNg,33
13
+ griptape_nodes/cli/commands/__init__.py,sha256=8EbS15rm9xrbcPocuQO2RmOwSD1BBwa8iDgPSdsvzuU,35
14
+ griptape_nodes/cli/commands/config.py,sha256=-hKkuQ0HDtSs-ZggIxcHxL2az5Kf3aVom_Ju1iR0Rkw,2200
15
+ griptape_nodes/cli/commands/engine.py,sha256=r6Qz3pWYCKdy4hv2cg7W5dFbBGvNVXnsll2LXVtDJZ4,2869
16
+ griptape_nodes/cli/commands/init.py,sha256=ucJ4yBp-Fai9EgJ7Xn1-kBpCQKIa4wDGNywrjbuSkaM,21595
17
+ griptape_nodes/cli/commands/libraries.py,sha256=jmiP8XXRHjeQrC0J8XXBFvkXzXN1rOb106X2K65WX8s,3452
18
+ griptape_nodes/cli/commands/self.py,sha256=VYhyHSqQLTeeBh-KdtITFpyxl5KAnf7SHcaGVtqumqs,3851
19
+ griptape_nodes/cli/main.py,sha256=8OniOQt9m_bufI6wqB3D5mEW65rQcHsKXiWeF1wQDzY,1176
20
+ griptape_nodes/cli/shared.py,sha256=wMV7yedNY6HQ0i7QbHE7ZuR33tJJQ0bM2nAoOsCThp8,2930
21
+ griptape_nodes/common/__init__.py,sha256=HTbJfTpu6-nU91zFCZW2qUNeW6bitNWNDayWqH6fpbA,22
22
+ griptape_nodes/common/directed_graph.py,sha256=LNtLLPmUCR0MiBWSaKj-mtbxXmuD8joTkGIWiFnaiAY,1781
11
23
  griptape_nodes/drivers/__init__.py,sha256=tHmiFQn6uJyFVhC2PrqHgRUH3d3yDsqMQpWqRasmaqA,42
12
24
  griptape_nodes/drivers/storage/__init__.py,sha256=_7p8vJt3YnnF6sD3Uxxw38c-gazuMIHSS-m3G6sa2Qk,208
13
25
  griptape_nodes/drivers/storage/base_storage_driver.py,sha256=so2Syl3QSN3iPvllEST6yuYOLaGg5h5Nwo3m8I51N-Y,3734
14
26
  griptape_nodes/drivers/storage/griptape_cloud_storage_driver.py,sha256=DTi1S--uxG6xi1U_EMQyu42vEc07ZIy-egLFu0tJ8-c,7847
15
- griptape_nodes/drivers/storage/local_storage_driver.py,sha256=PpEvtB_TWg5c0E5fr-PD_VW1fYBTNsm4BF1IDWUVPUY,3488
27
+ griptape_nodes/drivers/storage/local_storage_driver.py,sha256=YLVT-4PCmov6YtZ2h_DTaSjWwBrSNU0woMZb1Gl7Gzw,3524
16
28
  griptape_nodes/drivers/storage/storage_backend.py,sha256=3QBIwrgPc1krBIiPYLoK2swhIPDiKJnnucOEdyx7y3c,184
17
29
  griptape_nodes/exe_types/__init__.py,sha256=wGGwKGX9-TSarUFbXpDvdU_J7eXIbWTBl_NCLOZa-G8,32
18
30
  griptape_nodes/exe_types/connections.py,sha256=_-VNzf6Kay62QzJlSX-LlHTUhz-CKF-UDsbZLJ0l6Wk,12435
19
- griptape_nodes/exe_types/core_types.py,sha256=WA1U8KN2lAcPXfx1lYkQ7mrtnCvuuaRHauSAZPZDi0A,71743
31
+ griptape_nodes/exe_types/core_types.py,sha256=eG7rUjQl9tc_BRwqWqeJ8RGqZWoqNuO0khVAYlzva3I,73985
20
32
  griptape_nodes/exe_types/flow.py,sha256=pCeTrx8yrUgLw1U9yQxC7arzJjyP2vag-pG0QTKut-M,5716
21
- griptape_nodes/exe_types/node_types.py,sha256=m_Yaf9tUMW8g_ERI5p1kPJ3_MYN3b3qfPBeLA1xhsqA,62015
33
+ griptape_nodes/exe_types/node_types.py,sha256=k6hXDLYllAxd44L4idkNkKeRbpV_qkZD6TlIg85hPZ0,62907
22
34
  griptape_nodes/exe_types/type_validator.py,sha256=RTz1vX09jzQpHhozITMJ0siOZUXvsERDhrApjdaM1WM,1120
23
35
  griptape_nodes/machines/__init__.py,sha256=v0jkwr-CFOLmfEYUQvX8BKQLOdvhSsA6toXkdHcPGUE,30
24
- griptape_nodes/machines/control_flow.py,sha256=x-GlCjfMp-B1BvElcIOxOHtXADx1eK1JNReJ0uzqvS4,9859
25
- griptape_nodes/machines/fsm.py,sha256=JXf4VgaLMEcjDuCxuKyWlAmK5PCOrWHsMau6OPjhL3s,2344
26
- griptape_nodes/machines/node_resolution.py,sha256=ruvSI5_q6S1O5kNypavxT-feduQpVEvRKrF5ZTPJdL8,18458
36
+ griptape_nodes/machines/control_flow.py,sha256=70-tkgMS3gnkuMq19INNJ7vPZoBl3Axs8gSUPdGIKEk,12890
37
+ griptape_nodes/machines/fsm.py,sha256=WNo2w5c9Gbgzo5odcvbRT02EhCMFf3n3WYbZ0GYk1WI,2553
38
+ griptape_nodes/machines/parallel_resolution.py,sha256=F1_4Wz8upqzXbWJtFVCq8H1T4k_luIJFCrxJViLNHf8,24264
39
+ griptape_nodes/machines/sequential_resolution.py,sha256=VmtSg6RxXZ7Up9vU1lNXYNQwlCs5A05diDSUPpNRYiY,16847
27
40
  griptape_nodes/mcp_server/__init__.py,sha256=GSpJWqE4lICaryhsQR1okeMH2x6j1bBL0HVxtr52WLg,42
28
41
  griptape_nodes/mcp_server/server.py,sha256=X1ulGyHqQCFiRnJ8PgJh4lf83k62a_D9vFQThgKUaMw,5217
29
42
  griptape_nodes/mcp_server/ws_request_manager.py,sha256=UpXOKNq_VauQmJ0Rx0C7OrzcwjeCoDfjpx3IE38NgsE,10949
@@ -37,7 +50,7 @@ griptape_nodes/retained_mode/events/__init__.py,sha256=7B1C-c0jVvnShtHJ2lfX6BZPE
37
50
  griptape_nodes/retained_mode/events/agent_events.py,sha256=xyCtR-Hf1vv6Ft-z0At0ytIMYBRckYympxdByVZXrCE,4880
38
51
  griptape_nodes/retained_mode/events/app_events.py,sha256=_1Hq2ynjeyry8WlJ8psvfYSAGHJtRmUowqypksF8Nfs,8416
39
52
  griptape_nodes/retained_mode/events/arbitrary_python_events.py,sha256=uhep1c1xjUc-YQO5nIStAE48PS6rFZLTDQIr_Qb3we8,1460
40
- griptape_nodes/retained_mode/events/base_events.py,sha256=Bv8qiYDUD6p6YoZpBPM8tteqP34BnVY5VLeEQ5iwR08,23256
53
+ griptape_nodes/retained_mode/events/base_events.py,sha256=9DYHnOVuSew6Qj8t6Hfd2I4YECNQP_cKJudmWmxM4wo,23232
41
54
  griptape_nodes/retained_mode/events/config_events.py,sha256=9WhFx6mD7QF_h1ldFAPRE_iLtrQBAFEvA6_MzhGOomk,6129
42
55
  griptape_nodes/retained_mode/events/connection_events.py,sha256=QjHAp0SeCbRSG-dF_nU_CPaOcSKItq2DWJ_FHWgF1b4,4744
43
56
  griptape_nodes/retained_mode/events/context_events.py,sha256=-FIwjI0hJodDhfM4BF-3GTRycu80v1TlSSOX34oA9nA,2122
@@ -46,7 +59,7 @@ griptape_nodes/retained_mode/events/flow_events.py,sha256=CE7aFHvByY6ii0hI-_Q9uk
46
59
  griptape_nodes/retained_mode/events/generate_request_payload_schemas.py,sha256=PQ0QRZAUBljSIGjB8QhYUeRmSrfmLsJ6XVcygJKi13I,1102
47
60
  griptape_nodes/retained_mode/events/library_events.py,sha256=9KVMHA5VazY3fXEIm31Zmy-rJ43AxNgna4SzVPmy8Pg,17629
48
61
  griptape_nodes/retained_mode/events/logger_events.py,sha256=jYlxzPomgCsJuPtJ0znWBhD8QJfC8qC4xfChDiuVuyg,705
49
- griptape_nodes/retained_mode/events/node_events.py,sha256=qO7JDWEAjPitcCgH55Ux7Eqw_xXqkcugBkvGiSgJMYQ,29929
62
+ griptape_nodes/retained_mode/events/node_events.py,sha256=bVB7y_2C2NdAfXZWoTUyzuWs3z11Nlz8qXyDNsy-0Uo,30062
50
63
  griptape_nodes/retained_mode/events/object_events.py,sha256=cJaqEU73Lzf1RRxJrFqEpl8eTr-gDhKpXKywJ-vVCJQ,2631
51
64
  griptape_nodes/retained_mode/events/os_events.py,sha256=X0mmyk_r5t6upaQ8eWClD7J25AiX2ggsAuxMZSW9Vx0,8085
52
65
  griptape_nodes/retained_mode/events/parameter_events.py,sha256=32dDaVe9oV_fNRtz5xv4_9GP_yr_EXUMsRi2i1rTSNI,19276
@@ -57,18 +70,18 @@ griptape_nodes/retained_mode/events/sync_events.py,sha256=AoxBZLPPdzx4S5CiOJVRDe
57
70
  griptape_nodes/retained_mode/events/validation_events.py,sha256=H2yWoHp2t7QwGV_fDQXRy7JojYnK4k6SOAlEvRYST_Q,3062
58
71
  griptape_nodes/retained_mode/events/variable_events.py,sha256=fnl_sY8GWI_R4UJQTEJSlmsyCD9TiEW0U2UD2seBabs,10587
59
72
  griptape_nodes/retained_mode/events/workflow_events.py,sha256=MwNmOC6RZXcsXvIzk6zMIH-gEPcKkkphkPe03YocOaI,19703
60
- griptape_nodes/retained_mode/griptape_nodes.py,sha256=-jWwZPlJaqEj4ae_Po6lL01HypYr14wKqykgYJG-2RQ,26353
73
+ griptape_nodes/retained_mode/griptape_nodes.py,sha256=s86_1nqH7q1k0f1rPQWSnqljP98XhJY3kwGh7zBUSh4,26997
61
74
  griptape_nodes/retained_mode/managers/__init__.py,sha256=OTXysKusqYCQeAYwnVj4PbE3MxvAUTq9xOZT6vUE3JA,24
62
- griptape_nodes/retained_mode/managers/agent_manager.py,sha256=MjJ-g-bs8vVDwXvUV_ImdjHqjDrXGYb3bWW_gMpqdoo,11267
63
- griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py,sha256=9c3-taR1mKTNbUHxT_Znw__cYZ4DTnDs5JB8Vb9Mm6s,1807
75
+ griptape_nodes/retained_mode/managers/agent_manager.py,sha256=gxLKpxJmJWQvo7vwv8p8Xl9WQYazHmhb-fGpMQ4qtQI,11618
76
+ griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py,sha256=3IRIrpKR62MvTdGWfQa1ARUVxCmMUNtzUU4xMcQdlCY,1891
64
77
  griptape_nodes/retained_mode/managers/config_manager.py,sha256=11shHccjKfS3WvCYH4F2s2HIKnbPMsZ6iWBVgZkxPDA,25676
65
- griptape_nodes/retained_mode/managers/context_manager.py,sha256=DiGNh09TZ7rsLEcXqqB9Yrh2ietBy59LPF7GM0OBQS8,22930
78
+ griptape_nodes/retained_mode/managers/context_manager.py,sha256=eb44_CAZhCg2iYIoodlAPpYc67tG3sHyq9dPNoiq_1s,23031
66
79
  griptape_nodes/retained_mode/managers/engine_identity_manager.py,sha256=GBBz7HJBJVNyXLGRdAvqDgihMRB_YjWqdEwLMCnadUg,4409
67
80
  griptape_nodes/retained_mode/managers/event_manager.py,sha256=VYSYf5_ydTGjmjqY2PcT_l0enTafAGn3IQzTE7qVvbs,11715
68
- griptape_nodes/retained_mode/managers/flow_manager.py,sha256=XBIJ2hnOlyXIYv_t1cnJv9flJ-SwgXKsmjBOMqW_1z4,112503
81
+ griptape_nodes/retained_mode/managers/flow_manager.py,sha256=6ipC1hypDJqa7usE8oXYDbhkRMHFbnQgZxlFZUNXO_4,109726
69
82
  griptape_nodes/retained_mode/managers/library_lifecycle/__init__.py,sha256=Iq79VxTdETiExBfFWXceJggDZqS6X3OkzXE9XwFclVw,1340
70
83
  griptape_nodes/retained_mode/managers/library_lifecycle/data_models.py,sha256=fvAP0VaYGPHYl_Kg3RL4gdJlpqya8UTvpP-C49r950k,6723
71
- griptape_nodes/retained_mode/managers/library_lifecycle/library_directory.py,sha256=5Gpz11cCA4hL8VaRIsbFvHxx6HIOY1ftcH3Vgxj4EIY,14842
84
+ griptape_nodes/retained_mode/managers/library_lifecycle/library_directory.py,sha256=Ywno93eVJH4sAtQ1dgHG2Pw9B3vw8fN8oAL0gn_l6OI,14836
72
85
  griptape_nodes/retained_mode/managers/library_lifecycle/library_fsm.py,sha256=ZlX-FMhGxqafpLjHGftN3iV1r5LVxV9Qa6mWshBla8w,18669
73
86
  griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/__init__.py,sha256=X0SnqNuEtBVPvccfrUr_wBQQ9i5xJzcaWJLwFJTRRco,814
74
87
  griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/base.py,sha256=eVV6p9B-aQeaoDbA-c4s1MPpkKtESV7KS1Fxr2E9z4Q,2615
@@ -78,28 +91,29 @@ griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/packa
78
91
  griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/sandbox.py,sha256=XgG7whE74zWDxX1pOvhASW0pwjOei1EDLvIH19xdzT0,6117
79
92
  griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance.py,sha256=cCGr-MQ1RlVBiUTZepYEKdVhPgC4ebcYrmpv8rI3VeM,894
80
93
  griptape_nodes/retained_mode/managers/library_lifecycle/library_status.py,sha256=K3UEBzAdCY9wphyBbLxDYP0Q43aYvhLZ_Pz7_SzcPec,443
81
- griptape_nodes/retained_mode/managers/library_manager.py,sha256=-m2G0J-eGxlWUyIRYCZw2oj0vrSluPaHLitBhNxT7Jo,98947
82
- griptape_nodes/retained_mode/managers/node_manager.py,sha256=Flcc5LIOEYmb-4l3-auMaRimMUOoihU6cxhuW7fnvBI,153070
83
- griptape_nodes/retained_mode/managers/object_manager.py,sha256=t4YdKGBt0amFLAV6dpKKAsZBzoNtWyVTpqNPcIFc2U4,12515
94
+ griptape_nodes/retained_mode/managers/library_manager.py,sha256=0_2qeFSal_zZETUUrReD2Otke2_NLvt8qaWkbONLEW8,99626
95
+ griptape_nodes/retained_mode/managers/node_manager.py,sha256=cL299xfz3nOBt-9GCKwFGe1Wf22nCg8jfsgW1gQWjwM,150174
96
+ griptape_nodes/retained_mode/managers/object_manager.py,sha256=BOgKqoEFQbO9LhxKLezKUovdLQZXwip1PiZsQKSVfJ4,12808
84
97
  griptape_nodes/retained_mode/managers/operation_manager.py,sha256=lTkMZlaacTgtV5oV-YF6HG8xsx9V_LwX1eg074WTs2k,20137
85
- griptape_nodes/retained_mode/managers/os_manager.py,sha256=bPJYCkJASisbWuA9qDKCXTquGEaVOMdgBTWOO10WmbA,34347
86
- griptape_nodes/retained_mode/managers/secrets_manager.py,sha256=6MTvnXQUjYXuCzXIlhozKYoF1jTk6BrDiML-vepqafY,6384
98
+ griptape_nodes/retained_mode/managers/os_manager.py,sha256=ke1S-vHVDMBAdApaUbV3kOY7Bw1WkOmS1SgX8CAvkO8,35050
99
+ griptape_nodes/retained_mode/managers/secrets_manager.py,sha256=tYiUpUhQYdpfu6Tvj98xGNHLc2ytSjH1tOshubD7BHI,6712
87
100
  griptape_nodes/retained_mode/managers/session_manager.py,sha256=fLjtBvgGY3daq1vbpJPXq069n35Z-Zr5dF3B0XyD2JY,11817
88
- griptape_nodes/retained_mode/managers/settings.py,sha256=bG_nE9o-bsivcQaYrxKrWKq8t5GwPS6CYHxH0jhSPeo,4726
89
- griptape_nodes/retained_mode/managers/static_files_manager.py,sha256=cEtzWoTsl1sJyYyVWrd2O7kPSpQ1rjRYx7P_Lm5wtF8,7339
90
- griptape_nodes/retained_mode/managers/sync_manager.py,sha256=HDKn5Aa79-QTByIaGtNh7tyfCviuu0KMcC47-I3dM7g,20460
101
+ griptape_nodes/retained_mode/managers/settings.py,sha256=GACKlaB6NjZ5TcinO_-omFY-Sjt0lhz_ZWT_Hf7Eg_Y,5896
102
+ griptape_nodes/retained_mode/managers/static_files_manager.py,sha256=qCuvnghnsCamvB6Ce3hnSTu6NQiz7P7ISNn_BuQT7K4,7583
103
+ griptape_nodes/retained_mode/managers/sync_manager.py,sha256=qyQbPX0L0zjst_NhtPe-blvy7GpN9J3FXEsMzDMALj8,20599
91
104
  griptape_nodes/retained_mode/managers/variable_manager.py,sha256=TnuqHSRK9Yiu_EtKxQksF9SyyQb72lbFQuTQZdpBxeE,24116
92
105
  griptape_nodes/retained_mode/managers/version_compatibility_manager.py,sha256=85gpl9WCgHbWNifxoiAidHmsXyqpUCTjuEW-FziFYME,8375
93
- griptape_nodes/retained_mode/managers/workflow_manager.py,sha256=4NFWVUwhe18cp1LXtJEJ-dUQuMmfgbhbHUAf5O1ZaMw,182806
106
+ griptape_nodes/retained_mode/managers/workflow_manager.py,sha256=GFOvCj8sD5lzieNwCjJABAzsQm1xsYxDVr7p_DP8sZQ,183890
94
107
  griptape_nodes/retained_mode/retained_mode.py,sha256=NmpAQ3NksDdAZ9SMGRfbSDKBr5cDRjSu06SJNGH2Vvw,56903
95
108
  griptape_nodes/retained_mode/utils/__init__.py,sha256=W5dvv8YwvVVq_8eVTgMd3Z_VB_Dtq1sIIVq8745QH_I,52
96
109
  griptape_nodes/retained_mode/utils/engine_identity.py,sha256=PZmdlYM69-B-6Z1F4iJfZyVm2twJY5cSGoiUJCMj0xU,7846
97
110
  griptape_nodes/retained_mode/utils/name_generator.py,sha256=IZLahtfP3XC79XApLdGoZ0IKKUkgiITpd16RK7NbyEs,2524
98
111
  griptape_nodes/retained_mode/variable_types.py,sha256=GVrSWMB3gEDAufSPOBXbNfIRhA9M43MoxpqLyuIg_HE,435
99
112
  griptape_nodes/traits/__init__.py,sha256=bTLXTiZTJz2z15RRLoPI4nvLnNW9FiLcKL_2pT4E10g,32
100
- griptape_nodes/traits/add_param_button.py,sha256=Xtc39SfvYY6JDjhxu2wmdeaHW2X4LkpNAQufSTCP3hY,655
101
- griptape_nodes/traits/button.py,sha256=rpQQ77ASKH3YJabc5WWw9DpEHQiMg1jx0i0sdkwH-SA,611
113
+ griptape_nodes/traits/add_param_button.py,sha256=27RZDVLMD0HmRF6hjfz7iV7LBau92vMc_d2eD2Ey8fA,649
114
+ griptape_nodes/traits/button.py,sha256=b-N1aFfhlgb4PUOtrj3eCc7pEweSpJxU21QvNyFPTdc,8250
102
115
  griptape_nodes/traits/clamp.py,sha256=BZVHiWfBNePWaPMaLyOgtcWzkM7Ls4hcPlm_afmGiIs,1030
116
+ griptape_nodes/traits/color_picker.py,sha256=ySKaoZw319yfuTSEtkVT2vSR6Goy9pBm4rusjx95F0c,3024
103
117
  griptape_nodes/traits/compare.py,sha256=X-BXGemRDxQV4EX8X24LdtcwMWwfQ1jGqDvH2bSiSuc,521
104
118
  griptape_nodes/traits/compare_images.py,sha256=KW0WlwsJP6nBoC1irdeRnUWUnZIJvlROlDhyWhX8iEs,1594
105
119
  griptape_nodes/traits/file_system_picker.py,sha256=p-RaH4xwb2Fo0wuFsYbsiL66W23KdESX0Qq6EAtDFj8,5806
@@ -107,7 +121,7 @@ griptape_nodes/traits/minmax.py,sha256=eVySrz02WPvpwbSrqW7FRTmetNBOBKyf8YrXrzyOG
107
121
  griptape_nodes/traits/options.py,sha256=Kj7isw0XkhI1jmCCYuXP63Td8K8rg21nGC77ultNXnI,1096
108
122
  griptape_nodes/traits/slider.py,sha256=bLe46gtCmjhMCHaGzUstIWMJv2Zl2Yee7fkT6g4Q6Rk,1236
109
123
  griptape_nodes/traits/trait_registry.py,sha256=pU26mW2ztfu1UARGYloflsTPqJ1X_-u013cMNoel9Hw,1171
110
- griptape_nodes/traits/traits.json,sha256=xtY7lcMzeUPiyh494xj4LyRl44c0VBFL-LRAkywuxD4,60
124
+ griptape_nodes/traits/traits.json,sha256=JwFsOaFfLeR1ohcyh6XApc5N2-mWMPGSaYbpA-mD7mk,133
111
125
  griptape_nodes/updater/__init__.py,sha256=eWalSt_N5a0RPT2YkXeIee_YPiCL47OB0G9GB0gn3pY,2522
112
126
  griptape_nodes/updater/__main__.py,sha256=lhMMctbBeni57ximitvkwqJ1TQzk79Jg9w0rkKjtp5Y,79
113
127
  griptape_nodes/utils/__init__.py,sha256=kzDZW_VPyxWJFonM3kYTl7A91_JmtHPK0Io4KPLTYT4,122
@@ -124,7 +138,7 @@ griptape_nodes/version_compatibility/versions/v0_39_0/modified_parameters_set_re
124
138
  griptape_nodes/version_compatibility/workflow_versions/__init__.py,sha256=z5XDgkizoNByCXpyo34hfsJKFsWlOHbD6hgzfYH9ubc,52
125
139
  griptape_nodes/version_compatibility/workflow_versions/v0_7_0/__init__.py,sha256=IzPPmGK86h2swfGGTOHyVcBIlOng6SjgWQzlbf3ngmo,51
126
140
  griptape_nodes/version_compatibility/workflow_versions/v0_7_0/local_executor_argument_addition.py,sha256=9PclAp_Mm5IPtd5yj5XSS5-x7QYmifvhTly20CgBZmo,2018
127
- griptape_nodes-0.52.1.dist-info/WHEEL,sha256=Jb20R3Ili4n9P1fcwuLup21eQ5r9WXhs4_qy7VTrgPI,79
128
- griptape_nodes-0.52.1.dist-info/entry_points.txt,sha256=qvevqd3BVbAV5TcantnAm0ouqaqYKhsRO3pkFymWLWM,82
129
- griptape_nodes-0.52.1.dist-info/METADATA,sha256=SvH75XQLx75G84IO6Sgb2Q8yq8PRzFKPeJ3dt5uaB3A,4943
130
- griptape_nodes-0.52.1.dist-info/RECORD,,
141
+ griptape_nodes-0.53.0.dist-info/WHEEL,sha256=Jb20R3Ili4n9P1fcwuLup21eQ5r9WXhs4_qy7VTrgPI,79
142
+ griptape_nodes-0.53.0.dist-info/entry_points.txt,sha256=qvevqd3BVbAV5TcantnAm0ouqaqYKhsRO3pkFymWLWM,82
143
+ griptape_nodes-0.53.0.dist-info/METADATA,sha256=mlgE0MxmT5zO0tsjLeu00yhEbDiYbiGESUShY0SCi_Y,4972
144
+ griptape_nodes-0.53.0.dist-info/RECORD,,