griptape-nodes 0.47.0__tar.gz → 0.48.0__tar.gz
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.
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/PKG-INFO +1 -1
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/pyproject.toml +1 -2
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/app/app.py +1 -1
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/exe_types/core_types.py +64 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/exe_types/node_types.py +8 -12
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/mcp_server/ws_request_manager.py +6 -6
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/library_manager.py +6 -6
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/static_files_manager.py +1 -4
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/workflow_manager.py +19 -14
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/retained_mode.py +3 -3
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/README.md +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/app/.python-version +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/app/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/app/api.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/app/watch.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/bootstrap/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/bootstrap/workflow_executors/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/bootstrap/workflow_executors/local_workflow_executor.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/bootstrap/workflow_executors/subprocess_workflow_executor.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/bootstrap/workflow_executors/workflow_executor.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/drivers/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/drivers/storage/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/drivers/storage/base_storage_driver.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/drivers/storage/griptape_cloud_storage_driver.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/drivers/storage/local_storage_driver.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/drivers/storage/storage_backend.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/exe_types/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/exe_types/connections.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/exe_types/flow.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/exe_types/type_validator.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/machines/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/machines/control_flow.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/machines/fsm.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/machines/node_resolution.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/mcp_server/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/mcp_server/server.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/node_library/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/node_library/advanced_node_library.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/node_library/library_registry.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/node_library/workflow_registry.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/py.typed +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/agent_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/app_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/arbitrary_python_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/base_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/config_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/connection_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/context_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/execution_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/flow_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/generate_request_payload_schemas.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/library_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/logger_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/node_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/object_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/os_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/parameter_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/payload_registry.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/secrets_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/static_file_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/sync_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/validation_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/workflow_events.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/griptape_nodes.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/agent_manager.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/config_manager.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/context_manager.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/engine_identity_manager.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/event_manager.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/flow_manager.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/data_models.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_directory.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_fsm.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/base.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/github.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/local_file.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/package.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/sandbox.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_status.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/node_manager.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/object_manager.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/operation_manager.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/os_manager.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/secrets_manager.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/session_manager.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/settings.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/sync_manager.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/managers/version_compatibility_manager.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/utils/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/utils/engine_identity.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/utils/name_generator.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/traits/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/traits/add_param_button.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/traits/button.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/traits/clamp.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/traits/compare.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/traits/compare_images.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/traits/file_system_picker.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/traits/minmax.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/traits/options.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/traits/slider.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/traits/trait_registry.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/traits/traits.json +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/updater/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/updater/__main__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/utils/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/utils/dict_utils.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/utils/image_preview.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/utils/metaclasses.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/utils/uv_utils.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/utils/version_utils.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/version_compatibility/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/version_compatibility/versions/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/version_compatibility/versions/v0_39_0/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/version_compatibility/versions/v0_39_0/modified_parameters_set_removal.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/version_compatibility/workflow_versions/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/version_compatibility/workflow_versions/v0_7_0/__init__.py +0 -0
- {griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/version_compatibility/workflow_versions/v0_7_0/local_executor_argument_addition.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "griptape-nodes"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.48.0"
|
|
4
4
|
description = "Add your description here"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12.0, <3.13"
|
|
@@ -77,7 +77,6 @@ ignore = [
|
|
|
77
77
|
"E501", # TODO: https://github.com/griptape-ai/griptape-nodes/issues/834
|
|
78
78
|
"D100", # TODO: https://github.com/griptape-ai/griptape-nodes/issues/835
|
|
79
79
|
"BLE001", # TODO: https://github.com/griptape-ai/griptape-nodes/issues/839
|
|
80
|
-
"B026", # TODO: https://github.com/griptape-ai/griptape-nodes/issues/836
|
|
81
80
|
"SLF001", # TODO :https://github.com/griptape-ai/griptape-nodes/issues/838
|
|
82
81
|
"SIM108", # Intentional
|
|
83
82
|
"SIM110", # Intentional
|
|
@@ -118,7 +118,7 @@ def _ensure_api_key() -> str:
|
|
|
118
118
|
"[code]gtn init --api-key <your key>[/code]\n"
|
|
119
119
|
"[bold red]You can generate a new key from [/bold red][bold blue][link=https://nodes.griptape.ai]https://nodes.griptape.ai[/link][/bold blue]",
|
|
120
120
|
),
|
|
121
|
-
title="
|
|
121
|
+
title="[red]X[/red] Missing Nodes API Key",
|
|
122
122
|
border_style="red",
|
|
123
123
|
padding=(1, 4),
|
|
124
124
|
)
|
|
@@ -1450,6 +1450,70 @@ class ParameterList(ParameterContainer):
|
|
|
1450
1450
|
self.remove_child(child)
|
|
1451
1451
|
del child
|
|
1452
1452
|
|
|
1453
|
+
# --- Convenience methods for stable list management ---
|
|
1454
|
+
def get_child_parameters(self) -> list[Parameter]:
|
|
1455
|
+
"""Return direct child parameters only, in order of appearance."""
|
|
1456
|
+
return self.find_elements_by_type(element_type=Parameter, find_recursively=False)
|
|
1457
|
+
|
|
1458
|
+
def append_child_parameter(self, display_name: str | None = None) -> Parameter:
|
|
1459
|
+
"""Append one child parameter and optionally set a display name.
|
|
1460
|
+
|
|
1461
|
+
This preserves existing children and adds a new one at the end.
|
|
1462
|
+
"""
|
|
1463
|
+
child = self.add_child_parameter()
|
|
1464
|
+
if display_name is not None:
|
|
1465
|
+
ui_opts = child.ui_options or {}
|
|
1466
|
+
ui_opts["display_name"] = display_name
|
|
1467
|
+
child.ui_options = ui_opts
|
|
1468
|
+
return child
|
|
1469
|
+
|
|
1470
|
+
def remove_last_child_parameter(self) -> None:
|
|
1471
|
+
"""Remove the last child parameter if one exists.
|
|
1472
|
+
|
|
1473
|
+
This removes from the end to preserve earlier children and their connections.
|
|
1474
|
+
"""
|
|
1475
|
+
children = self.get_child_parameters()
|
|
1476
|
+
if children:
|
|
1477
|
+
last = children[-1]
|
|
1478
|
+
self.remove_child(last)
|
|
1479
|
+
del last
|
|
1480
|
+
|
|
1481
|
+
def ensure_length(self, desired_count: int, display_name_prefix: str | None = None) -> None:
|
|
1482
|
+
"""Grow or shrink the list to the desired length while preserving existing items.
|
|
1483
|
+
|
|
1484
|
+
- If increasing, appends new children to the end.
|
|
1485
|
+
- If decreasing, removes children from the end.
|
|
1486
|
+
- Optionally sets display names like "{prefix} 1", "{prefix} 2", ...
|
|
1487
|
+
"""
|
|
1488
|
+
if desired_count is None:
|
|
1489
|
+
return
|
|
1490
|
+
try:
|
|
1491
|
+
desired_count = int(desired_count)
|
|
1492
|
+
except Exception:
|
|
1493
|
+
desired_count = 0
|
|
1494
|
+
desired_count = max(desired_count, 0)
|
|
1495
|
+
|
|
1496
|
+
current_children = self.get_child_parameters()
|
|
1497
|
+
current_len = len(current_children)
|
|
1498
|
+
|
|
1499
|
+
# Grow
|
|
1500
|
+
if current_len < desired_count:
|
|
1501
|
+
for index in range(current_len, desired_count):
|
|
1502
|
+
name = f"{display_name_prefix} {index + 1}" if display_name_prefix else None
|
|
1503
|
+
self.append_child_parameter(display_name=name)
|
|
1504
|
+
|
|
1505
|
+
# Shrink
|
|
1506
|
+
elif current_len > desired_count:
|
|
1507
|
+
for _ in range(current_len - desired_count):
|
|
1508
|
+
self.remove_last_child_parameter()
|
|
1509
|
+
|
|
1510
|
+
# Optionally re-apply display names to existing children to keep indices tidy
|
|
1511
|
+
if display_name_prefix:
|
|
1512
|
+
for index, child in enumerate(self.get_child_parameters()):
|
|
1513
|
+
ui_opts = child.ui_options or {}
|
|
1514
|
+
ui_opts["display_name"] = f"{display_name_prefix} {index + 1}"
|
|
1515
|
+
child.ui_options = ui_opts
|
|
1516
|
+
|
|
1453
1517
|
def add_child(self, child: BaseNodeElement) -> None:
|
|
1454
1518
|
"""Override to mark parent node as unresolved when children are added.
|
|
1455
1519
|
|
|
@@ -849,21 +849,11 @@ class BaseNode(ABC):
|
|
|
849
849
|
# Create event data using the parameter's to_event method
|
|
850
850
|
if remove:
|
|
851
851
|
# Import logger here to avoid circular dependency
|
|
852
|
-
from griptape_nodes.retained_mode.griptape_nodes import logger
|
|
853
|
-
|
|
854
|
-
logger.info(
|
|
855
|
-
f"RemoveElementEvent: Emitting parameter lifecycle event for element {parameter.name} on node {self.name}"
|
|
856
|
-
)
|
|
857
852
|
event = ExecutionGriptapeNodeEvent(
|
|
858
853
|
wrapped_event=ExecutionEvent(payload=RemoveElementEvent(element_id=parameter.element_id))
|
|
859
854
|
)
|
|
860
855
|
else:
|
|
861
856
|
event_data = parameter.to_event(self)
|
|
862
|
-
from griptape_nodes.retained_mode.griptape_nodes import logger
|
|
863
|
-
|
|
864
|
-
logger.info(
|
|
865
|
-
f"AlterElementEvent: Emitting parameter lifecycle eventfor element {parameter.name} on node {self.name}"
|
|
866
|
-
)
|
|
867
857
|
# Publish the event
|
|
868
858
|
event = ExecutionGriptapeNodeEvent(
|
|
869
859
|
wrapped_event=ExecutionEvent(payload=AlterElementEvent(element_details=event_data))
|
|
@@ -1063,11 +1053,17 @@ class EndNode(BaseNode):
|
|
|
1063
1053
|
|
|
1064
1054
|
|
|
1065
1055
|
class StartLoopNode(BaseNode):
|
|
1066
|
-
finished: bool
|
|
1067
|
-
current_index: int
|
|
1068
1056
|
end_node: EndLoopNode | None = None
|
|
1069
1057
|
"""Creating class for Start Loop Node in order to implement loop functionality in execution."""
|
|
1070
1058
|
|
|
1059
|
+
@abstractmethod
|
|
1060
|
+
def is_loop_finished(self) -> bool:
|
|
1061
|
+
"""Return True if the loop has finished executing.
|
|
1062
|
+
|
|
1063
|
+
This method must be implemented by subclasses to define when
|
|
1064
|
+
the loop should terminate.
|
|
1065
|
+
"""
|
|
1066
|
+
|
|
1071
1067
|
|
|
1072
1068
|
class EndLoopNode(BaseNode):
|
|
1073
1069
|
start_node: StartLoopNode | None = None
|
{griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/mcp_server/ws_request_manager.py
RENAMED
|
@@ -41,7 +41,7 @@ class WebSocketConnectionManager:
|
|
|
41
41
|
try:
|
|
42
42
|
message = json.dumps(data)
|
|
43
43
|
await self.websocket.send(message)
|
|
44
|
-
logger.debug("
|
|
44
|
+
logger.debug("Sent message: %s", message)
|
|
45
45
|
except Exception as e:
|
|
46
46
|
logger.error("Failed to send message: %s", e)
|
|
47
47
|
raise
|
|
@@ -157,7 +157,7 @@ class AsyncRequestManager(Generic[T]): # noqa: UP046
|
|
|
157
157
|
|
|
158
158
|
except Exception as e:
|
|
159
159
|
self.connection_manager.connected = False
|
|
160
|
-
logger.error("
|
|
160
|
+
logger.error("[red]X[/red] WebSocket connection failed: %s", str(e))
|
|
161
161
|
msg = f"Failed to connect to WebSocket: {e!s}"
|
|
162
162
|
raise ConnectionError(msg) from e
|
|
163
163
|
|
|
@@ -192,7 +192,7 @@ class AsyncRequestManager(Generic[T]): # noqa: UP046
|
|
|
192
192
|
"""Send an event to the API without waiting for a response."""
|
|
193
193
|
from griptape_nodes.app.app import _determine_request_topic
|
|
194
194
|
|
|
195
|
-
logger.debug("
|
|
195
|
+
logger.debug("Creating Event: %s - %s", request_type, json.dumps(payload))
|
|
196
196
|
|
|
197
197
|
data = {"event_type": "EventRequest", "request_type": request_type, "request": payload}
|
|
198
198
|
topic = _determine_request_topic()
|
|
@@ -231,7 +231,7 @@ class AsyncRequestManager(Generic[T]): # noqa: UP046
|
|
|
231
231
|
def success_handler(response: Any, _: Any) -> None:
|
|
232
232
|
if not response_future.done():
|
|
233
233
|
result = response.get("payload", {}).get("result", "Success")
|
|
234
|
-
logger.debug("
|
|
234
|
+
logger.debug("[green]OK[/green] Request succeeded: %s", result)
|
|
235
235
|
response_future.set_result(result)
|
|
236
236
|
|
|
237
237
|
def failure_handler(response: Any, _: Any) -> None:
|
|
@@ -239,14 +239,14 @@ class AsyncRequestManager(Generic[T]): # noqa: UP046
|
|
|
239
239
|
error = (
|
|
240
240
|
response.get("payload", {}).get("result", {}).get("exception", "Unknown error") or "Unknown error"
|
|
241
241
|
)
|
|
242
|
-
logger.error("
|
|
242
|
+
logger.error("[red]X[/red] Request failed: %s", error)
|
|
243
243
|
response_future.set_exception(Exception(error))
|
|
244
244
|
|
|
245
245
|
# Generate request ID and subscribe
|
|
246
246
|
request_id = self.connection_manager.subscribe_to_request_event(success_handler, failure_handler)
|
|
247
247
|
payload["request_id"] = request_id
|
|
248
248
|
|
|
249
|
-
logger.debug("
|
|
249
|
+
logger.debug("Request (%s): %s %s", request_id, request_type, json.dumps(payload))
|
|
250
250
|
|
|
251
251
|
try:
|
|
252
252
|
# Send the event
|
|
@@ -240,10 +240,10 @@ class LibraryManager:
|
|
|
240
240
|
|
|
241
241
|
# Status emojis mapping
|
|
242
242
|
status_emoji = {
|
|
243
|
-
LibraryStatus.GOOD: "
|
|
244
|
-
LibraryStatus.FLAWED: "
|
|
245
|
-
LibraryStatus.UNUSABLE: "
|
|
246
|
-
LibraryStatus.MISSING: "
|
|
243
|
+
LibraryStatus.GOOD: "[green]OK[/green]",
|
|
244
|
+
LibraryStatus.FLAWED: "[yellow]![/yellow]",
|
|
245
|
+
LibraryStatus.UNUSABLE: "[red]X[/red]",
|
|
246
|
+
LibraryStatus.MISSING: "[red]?[/red]",
|
|
247
247
|
}
|
|
248
248
|
|
|
249
249
|
# Add rows for each library info
|
|
@@ -256,7 +256,7 @@ class LibraryManager:
|
|
|
256
256
|
# Library name column with emoji based on status
|
|
257
257
|
emoji = status_emoji.get(lib_info.status, "ERROR: Unknown/Unexpected Library Status")
|
|
258
258
|
name = lib_info.library_name if lib_info.library_name else "*UNKNOWN*"
|
|
259
|
-
library_name = f"{emoji} {name}"
|
|
259
|
+
library_name = f"{emoji} - {name}"
|
|
260
260
|
|
|
261
261
|
library_version = lib_info.library_version
|
|
262
262
|
if library_version:
|
|
@@ -1596,7 +1596,7 @@ class LibraryManager:
|
|
|
1596
1596
|
f"[bold blue]Return to: [link={nodes_app_url}]{nodes_app_url}[/link] to access the Workflow Editor[/bold blue]",
|
|
1597
1597
|
vertical="middle",
|
|
1598
1598
|
),
|
|
1599
|
-
title="
|
|
1599
|
+
title="Griptape Nodes Engine Started",
|
|
1600
1600
|
subtitle=f"[green]{engine_version}{session_info}[/green]",
|
|
1601
1601
|
border_style="green",
|
|
1602
1602
|
padding=(1, 4),
|
|
@@ -167,10 +167,7 @@ class StaticFilesManager:
|
|
|
167
167
|
|
|
168
168
|
try:
|
|
169
169
|
response = httpx.request(
|
|
170
|
-
response["method"],
|
|
171
|
-
response["url"],
|
|
172
|
-
content=data,
|
|
173
|
-
headers=response["headers"],
|
|
170
|
+
response["method"], response["url"], content=data, headers=response["headers"], timeout=60
|
|
174
171
|
)
|
|
175
172
|
response.raise_for_status()
|
|
176
173
|
except httpx.HTTPStatusError as e:
|
|
@@ -389,19 +389,19 @@ class WorkflowManager:
|
|
|
389
389
|
|
|
390
390
|
# Status emojis mapping
|
|
391
391
|
status_emoji = {
|
|
392
|
-
self.WorkflowStatus.GOOD: "
|
|
393
|
-
self.WorkflowStatus.FLAWED: "
|
|
394
|
-
self.WorkflowStatus.UNUSABLE: "
|
|
395
|
-
self.WorkflowStatus.MISSING: "
|
|
392
|
+
self.WorkflowStatus.GOOD: "[green]OK[/green]",
|
|
393
|
+
self.WorkflowStatus.FLAWED: "[yellow]![/yellow]",
|
|
394
|
+
self.WorkflowStatus.UNUSABLE: "[red]X[/red]",
|
|
395
|
+
self.WorkflowStatus.MISSING: "[red]?[/red]",
|
|
396
396
|
}
|
|
397
397
|
|
|
398
398
|
dependency_status_emoji = {
|
|
399
|
-
self.WorkflowDependencyStatus.PERFECT: "
|
|
400
|
-
self.WorkflowDependencyStatus.GOOD: "
|
|
401
|
-
self.WorkflowDependencyStatus.CAUTION: "
|
|
402
|
-
self.WorkflowDependencyStatus.BAD: "
|
|
403
|
-
self.WorkflowDependencyStatus.MISSING: "
|
|
404
|
-
self.WorkflowDependencyStatus.UNKNOWN: "
|
|
399
|
+
self.WorkflowDependencyStatus.PERFECT: "[green]OK[/green]",
|
|
400
|
+
self.WorkflowDependencyStatus.GOOD: "[green]GOOD[/green]",
|
|
401
|
+
self.WorkflowDependencyStatus.CAUTION: "[yellow]CAUTION[/yellow]",
|
|
402
|
+
self.WorkflowDependencyStatus.BAD: "[red]BAD[/red]",
|
|
403
|
+
self.WorkflowDependencyStatus.MISSING: "[red]MISSING[/red]",
|
|
404
|
+
self.WorkflowDependencyStatus.UNKNOWN: "[red]UNKNOWN[/red]",
|
|
405
405
|
}
|
|
406
406
|
|
|
407
407
|
# Add rows for each workflow info
|
|
@@ -414,7 +414,7 @@ class WorkflowManager:
|
|
|
414
414
|
# Workflow name column with emoji based on status
|
|
415
415
|
emoji = status_emoji.get(wf_info.status, "ERR: Unknown/Unexpected Workflow Status")
|
|
416
416
|
name = wf_info.workflow_name if wf_info.workflow_name else "*UNKNOWN*"
|
|
417
|
-
workflow_name = f"{emoji} {name}"
|
|
417
|
+
workflow_name = f"{emoji} - {name}"
|
|
418
418
|
|
|
419
419
|
# Problems column - format with numbers if there's more than one
|
|
420
420
|
problems = "\n".join(wf_info.problems) if wf_info.problems else "No problems detected."
|
|
@@ -423,11 +423,11 @@ class WorkflowManager:
|
|
|
423
423
|
if wf_info.status == self.WorkflowStatus.MISSING or (
|
|
424
424
|
wf_info.status == self.WorkflowStatus.UNUSABLE and not wf_info.workflow_dependencies
|
|
425
425
|
):
|
|
426
|
-
dependencies = "
|
|
426
|
+
dependencies = "[red]?[/red] UNKNOWN"
|
|
427
427
|
else:
|
|
428
428
|
dependencies = (
|
|
429
429
|
"\n".join(
|
|
430
|
-
f"{dependency_status_emoji.get(dep.status, '?')} {dep.library_name} ({dep.version_requested}): {dep.status.value}"
|
|
430
|
+
f"{dependency_status_emoji.get(dep.status, '?')} - {dep.library_name} ({dep.version_requested}): {dep.status.value}"
|
|
431
431
|
for dep in wf_info.workflow_dependencies
|
|
432
432
|
)
|
|
433
433
|
if wf_info.workflow_dependencies
|
|
@@ -886,7 +886,12 @@ class WorkflowManager:
|
|
|
886
886
|
# See how our desired version compares against the actual library we (may) have.
|
|
887
887
|
# See if the library exists.
|
|
888
888
|
library_metadata_request = GetLibraryMetadataRequest(library=library_name)
|
|
889
|
-
|
|
889
|
+
# NOTE: Per https://github.com/griptape-ai/griptape-vsl-gui/issues/1123, we
|
|
890
|
+
# generate a FLOOD of error messages here that can swamp the GUI. We'll call
|
|
891
|
+
# directly instead of the usual handle_request() path so we don't generate those.
|
|
892
|
+
library_metadata_result = GriptapeNodes.LibraryManager().get_library_metadata_request(
|
|
893
|
+
library_metadata_request
|
|
894
|
+
)
|
|
890
895
|
if not isinstance(library_metadata_result, GetLibraryMetadataResultSuccess):
|
|
891
896
|
# Metadata failed to be found.
|
|
892
897
|
had_critical_error = True
|
{griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/retained_mode.py
RENAMED
|
@@ -125,10 +125,10 @@ def command_arg_handler(node_param_split_func: Callable) -> Callable:
|
|
|
125
125
|
instance_or_cls,
|
|
126
126
|
node=node,
|
|
127
127
|
param=param,
|
|
128
|
-
*args_to_process,
|
|
128
|
+
*args_to_process, # noqa: B026
|
|
129
129
|
**cleaned_kwargs,
|
|
130
130
|
)
|
|
131
|
-
return func(node=node, param=param, *args_to_process, **cleaned_kwargs)
|
|
131
|
+
return func(node=node, param=param, *args_to_process, **cleaned_kwargs) # noqa: B026
|
|
132
132
|
|
|
133
133
|
return wrapper
|
|
134
134
|
|
|
@@ -1460,7 +1460,7 @@ class RetainedMode:
|
|
|
1460
1460
|
if command_name:
|
|
1461
1461
|
func = getattr(cls, command_name, None)
|
|
1462
1462
|
if not func or not callable(func):
|
|
1463
|
-
return f"
|
|
1463
|
+
return f"[red]X[/red] No such command: {command_name}"
|
|
1464
1464
|
|
|
1465
1465
|
doc = inspect.getdoc(func) or "No documentation available."
|
|
1466
1466
|
sig_lines = _fancy_signature(func)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/drivers/storage/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/exe_types/type_validator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/machines/node_resolution.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/node_library/library_registry.py
RENAMED
|
File without changes
|
{griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/node_library/workflow_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/__init__.py
RENAMED
|
File without changes
|
{griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/events/os_events.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/griptape_nodes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/retained_mode/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/traits/add_param_button.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/traits/file_system_picker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{griptape_nodes-0.47.0 → griptape_nodes-0.48.0}/src/griptape_nodes/version_compatibility/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|