griptape-nodes 0.40.0__py3-none-any.whl → 0.42.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.
- griptape_nodes/app/__init__.py +1 -5
- griptape_nodes/app/app.py +12 -9
- griptape_nodes/app/app_sessions.py +132 -36
- griptape_nodes/app/watch.py +3 -1
- griptape_nodes/drivers/storage/local_storage_driver.py +3 -2
- griptape_nodes/exe_types/flow.py +68 -368
- griptape_nodes/machines/control_flow.py +16 -13
- griptape_nodes/machines/node_resolution.py +16 -14
- griptape_nodes/node_library/workflow_registry.py +2 -2
- griptape_nodes/retained_mode/events/agent_events.py +70 -8
- griptape_nodes/retained_mode/events/app_events.py +132 -11
- griptape_nodes/retained_mode/events/arbitrary_python_events.py +23 -0
- griptape_nodes/retained_mode/events/base_events.py +7 -25
- griptape_nodes/retained_mode/events/config_events.py +87 -11
- griptape_nodes/retained_mode/events/connection_events.py +56 -5
- griptape_nodes/retained_mode/events/context_events.py +27 -4
- griptape_nodes/retained_mode/events/execution_events.py +99 -14
- griptape_nodes/retained_mode/events/flow_events.py +165 -7
- griptape_nodes/retained_mode/events/library_events.py +193 -15
- griptape_nodes/retained_mode/events/logger_events.py +11 -0
- griptape_nodes/retained_mode/events/node_events.py +243 -22
- griptape_nodes/retained_mode/events/object_events.py +40 -4
- griptape_nodes/retained_mode/events/os_events.py +13 -2
- griptape_nodes/retained_mode/events/parameter_events.py +212 -8
- griptape_nodes/retained_mode/events/secrets_events.py +59 -7
- griptape_nodes/retained_mode/events/static_file_events.py +57 -4
- griptape_nodes/retained_mode/events/validation_events.py +39 -4
- griptape_nodes/retained_mode/events/workflow_events.py +188 -17
- griptape_nodes/retained_mode/griptape_nodes.py +46 -323
- griptape_nodes/retained_mode/managers/agent_manager.py +1 -1
- griptape_nodes/retained_mode/managers/engine_identity_manager.py +146 -0
- griptape_nodes/retained_mode/managers/event_manager.py +14 -2
- griptape_nodes/retained_mode/managers/flow_manager.py +749 -64
- griptape_nodes/retained_mode/managers/library_manager.py +112 -2
- griptape_nodes/retained_mode/managers/node_manager.py +35 -32
- griptape_nodes/retained_mode/managers/object_manager.py +11 -3
- griptape_nodes/retained_mode/managers/os_manager.py +70 -1
- griptape_nodes/retained_mode/managers/secrets_manager.py +4 -0
- griptape_nodes/retained_mode/managers/session_manager.py +328 -0
- griptape_nodes/retained_mode/managers/settings.py +7 -0
- griptape_nodes/retained_mode/managers/workflow_manager.py +523 -454
- griptape_nodes/retained_mode/retained_mode.py +44 -0
- griptape_nodes/retained_mode/utils/engine_identity.py +141 -27
- {griptape_nodes-0.40.0.dist-info → griptape_nodes-0.42.0.dist-info}/METADATA +2 -2
- {griptape_nodes-0.40.0.dist-info → griptape_nodes-0.42.0.dist-info}/RECORD +48 -47
- griptape_nodes/retained_mode/utils/session_persistence.py +0 -105
- {griptape_nodes-0.40.0.dist-info → griptape_nodes-0.42.0.dist-info}/WHEEL +0 -0
- {griptape_nodes-0.40.0.dist-info → griptape_nodes-0.42.0.dist-info}/entry_points.txt +0 -0
- {griptape_nodes-0.40.0.dist-info → griptape_nodes-0.42.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -32,8 +32,10 @@ from griptape_nodes.retained_mode.events.execution_events import (
|
|
|
32
32
|
from griptape_nodes.retained_mode.events.flow_events import (
|
|
33
33
|
CreateFlowRequest,
|
|
34
34
|
DeleteFlowRequest,
|
|
35
|
+
GetFlowMetadataRequest,
|
|
35
36
|
ListFlowsInFlowRequest,
|
|
36
37
|
ListNodesInFlowRequest,
|
|
38
|
+
SetFlowMetadataRequest,
|
|
37
39
|
)
|
|
38
40
|
from griptape_nodes.retained_mode.events.library_events import (
|
|
39
41
|
GetNodeMetadataFromLibraryRequest,
|
|
@@ -1247,6 +1249,48 @@ class RetainedMode:
|
|
|
1247
1249
|
request = GetFlowStateRequest(flow_name=flow_name)
|
|
1248
1250
|
return GriptapeNodes().handle_request(request)
|
|
1249
1251
|
|
|
1252
|
+
@classmethod
|
|
1253
|
+
def get_metadata_for_flow(cls, flow_name: str) -> ResultPayload:
|
|
1254
|
+
"""Retrieves metadata associated with a flow.
|
|
1255
|
+
|
|
1256
|
+
Flow metadata can include UI position, display name, tags, and other custom properties.
|
|
1257
|
+
|
|
1258
|
+
Args:
|
|
1259
|
+
flow_name (str): Name of the flow to get metadata for.
|
|
1260
|
+
|
|
1261
|
+
Returns:
|
|
1262
|
+
ResultPayload: Contains the flow's metadata.
|
|
1263
|
+
|
|
1264
|
+
Example:
|
|
1265
|
+
# Get flow metadata
|
|
1266
|
+
result = cmd.get_metadata_for_flow("my_flow")
|
|
1267
|
+
"""
|
|
1268
|
+
request = GetFlowMetadataRequest(flow_name=flow_name)
|
|
1269
|
+
result = GriptapeNodes().handle_request(request)
|
|
1270
|
+
return result
|
|
1271
|
+
|
|
1272
|
+
@classmethod
|
|
1273
|
+
def set_metadata_for_flow(cls, flow_name: str, metadata: dict[Any, Any]) -> ResultPayload:
|
|
1274
|
+
"""Sets metadata for a flow.
|
|
1275
|
+
|
|
1276
|
+
Args:
|
|
1277
|
+
flow_name (str): Name of the flow to set metadata for.
|
|
1278
|
+
metadata (dict): Dictionary containing the metadata to set.
|
|
1279
|
+
|
|
1280
|
+
Returns:
|
|
1281
|
+
ResultPayload: Contains the result of the metadata update operation.
|
|
1282
|
+
|
|
1283
|
+
Example:
|
|
1284
|
+
# Set flow position
|
|
1285
|
+
metadata = {
|
|
1286
|
+
"position": {"x": 100, "y": 200}
|
|
1287
|
+
}
|
|
1288
|
+
result = cmd.set_metadata_for_flow("my_flow", metadata)
|
|
1289
|
+
"""
|
|
1290
|
+
request = SetFlowMetadataRequest(flow_name=flow_name, metadata=metadata)
|
|
1291
|
+
result = GriptapeNodes().handle_request(request)
|
|
1292
|
+
return result
|
|
1293
|
+
|
|
1250
1294
|
# ARBITRARY PYTHON EXECUTION
|
|
1251
1295
|
@classmethod
|
|
1252
1296
|
def run_arbitrary_python(cls, python_str: str) -> ResultPayload:
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
"""Manages engine identity for
|
|
1
|
+
"""Manages engine identity for multiple engines per machine.
|
|
2
2
|
|
|
3
3
|
Handles engine ID, name storage, and generation for unique engine identification.
|
|
4
|
+
Supports multiple engines with selection via GTN_ENGINE_ID environment variable.
|
|
4
5
|
"""
|
|
5
6
|
|
|
6
7
|
import json
|
|
@@ -15,9 +16,9 @@ from .name_generator import generate_engine_name
|
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
class EngineIdentity:
|
|
18
|
-
"""Manages engine identity for
|
|
19
|
+
"""Manages engine identity for multiple engines per machine."""
|
|
19
20
|
|
|
20
|
-
_ENGINE_DATA_FILE = "
|
|
21
|
+
_ENGINE_DATA_FILE = "engines.json"
|
|
21
22
|
|
|
22
23
|
@classmethod
|
|
23
24
|
def _get_engine_data_dir(cls) -> Path:
|
|
@@ -30,11 +31,11 @@ class EngineIdentity:
|
|
|
30
31
|
return cls._get_engine_data_dir() / cls._ENGINE_DATA_FILE
|
|
31
32
|
|
|
32
33
|
@classmethod
|
|
33
|
-
def
|
|
34
|
-
"""Load
|
|
34
|
+
def _load_engines_data(cls) -> dict:
|
|
35
|
+
"""Load engines data from storage.
|
|
35
36
|
|
|
36
37
|
Returns:
|
|
37
|
-
dict:
|
|
38
|
+
dict: Engines data structure with engines array and default_engine_id
|
|
38
39
|
"""
|
|
39
40
|
engine_data_file = cls._get_engine_data_file()
|
|
40
41
|
|
|
@@ -42,48 +43,124 @@ class EngineIdentity:
|
|
|
42
43
|
try:
|
|
43
44
|
with engine_data_file.open("r") as f:
|
|
44
45
|
data = json.load(f)
|
|
45
|
-
if isinstance(data, dict):
|
|
46
|
+
if isinstance(data, dict) and "engines" in data:
|
|
46
47
|
return data
|
|
47
48
|
except (json.JSONDecodeError, OSError):
|
|
48
|
-
# If file is corrupted, return empty dict
|
|
49
49
|
pass
|
|
50
50
|
|
|
51
|
-
return {}
|
|
51
|
+
return {"engines": [], "default_engine_id": None}
|
|
52
52
|
|
|
53
53
|
@classmethod
|
|
54
|
-
def
|
|
55
|
-
"""Save
|
|
54
|
+
def _save_engines_data(cls, engines_data: dict) -> None:
|
|
55
|
+
"""Save engines data to storage.
|
|
56
56
|
|
|
57
57
|
Args:
|
|
58
|
-
|
|
58
|
+
engines_data: Engines data structure to save
|
|
59
59
|
"""
|
|
60
60
|
engine_data_dir = cls._get_engine_data_dir()
|
|
61
61
|
engine_data_dir.mkdir(parents=True, exist_ok=True)
|
|
62
62
|
|
|
63
63
|
engine_data_file = cls._get_engine_data_file()
|
|
64
64
|
with engine_data_file.open("w") as f:
|
|
65
|
-
json.dump(
|
|
65
|
+
json.dump(engines_data, f, indent=2)
|
|
66
|
+
|
|
67
|
+
@classmethod
|
|
68
|
+
def _get_selected_engine_id(cls) -> str | None:
|
|
69
|
+
"""Get the selected engine ID from environment variable or default.
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
str | None: The selected engine ID or None if not specified
|
|
73
|
+
"""
|
|
74
|
+
return os.getenv("GTN_ENGINE_ID")
|
|
75
|
+
|
|
76
|
+
@classmethod
|
|
77
|
+
def _find_engine_by_id(cls, engines_data: dict, engine_id: str) -> dict | None:
|
|
78
|
+
"""Find an engine by ID in the engines data.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
engines_data: The engines data structure
|
|
82
|
+
engine_id: The engine ID to find
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
dict | None: The engine data if found, None otherwise
|
|
86
|
+
"""
|
|
87
|
+
for engine in engines_data.get("engines", []):
|
|
88
|
+
if engine.get("id") == engine_id:
|
|
89
|
+
return engine
|
|
90
|
+
return None
|
|
66
91
|
|
|
67
92
|
@classmethod
|
|
68
93
|
def get_engine_data(cls) -> dict:
|
|
69
|
-
"""Get the engine data, creating default if it doesn't exist.
|
|
94
|
+
"""Get the current engine data, creating default if it doesn't exist.
|
|
70
95
|
|
|
71
96
|
Returns:
|
|
72
|
-
dict: The engine data
|
|
97
|
+
dict: The current engine data
|
|
73
98
|
"""
|
|
74
|
-
|
|
99
|
+
engines_data = cls._load_engines_data()
|
|
100
|
+
|
|
101
|
+
# Determine which engine to use
|
|
102
|
+
selected_engine_id = cls._get_selected_engine_id()
|
|
75
103
|
|
|
76
|
-
if
|
|
77
|
-
#
|
|
104
|
+
if selected_engine_id:
|
|
105
|
+
# Use specified engine ID
|
|
106
|
+
engine_data = cls._find_engine_by_id(engines_data, selected_engine_id)
|
|
107
|
+
if engine_data:
|
|
108
|
+
return engine_data
|
|
109
|
+
# If specified engine not found, create it
|
|
110
|
+
engine_data = {
|
|
111
|
+
"id": selected_engine_id,
|
|
112
|
+
"name": generate_engine_name(),
|
|
113
|
+
"created_at": datetime.now(tz=UTC).isoformat(),
|
|
114
|
+
}
|
|
115
|
+
else:
|
|
116
|
+
# Use default engine (first one) or create new one
|
|
117
|
+
if engines_data.get("engines"):
|
|
118
|
+
default_id = engines_data.get("default_engine_id")
|
|
119
|
+
if default_id:
|
|
120
|
+
engine_data = cls._find_engine_by_id(engines_data, default_id)
|
|
121
|
+
if engine_data:
|
|
122
|
+
return engine_data
|
|
123
|
+
# Fall back to first engine
|
|
124
|
+
return engines_data["engines"][0]
|
|
125
|
+
|
|
126
|
+
# Create new engine
|
|
78
127
|
engine_data = {
|
|
79
|
-
"id":
|
|
128
|
+
"id": str(uuid.uuid4()),
|
|
80
129
|
"name": generate_engine_name(),
|
|
81
130
|
"created_at": datetime.now(tz=UTC).isoformat(),
|
|
82
131
|
}
|
|
83
|
-
cls._save_engine_data(engine_data)
|
|
84
132
|
|
|
133
|
+
# Add or update engine in the data structure
|
|
134
|
+
cls._add_or_update_engine(engine_data)
|
|
85
135
|
return engine_data
|
|
86
136
|
|
|
137
|
+
@classmethod
|
|
138
|
+
def _add_or_update_engine(cls, engine_data: dict) -> None:
|
|
139
|
+
"""Add or update an engine in the engines data structure.
|
|
140
|
+
|
|
141
|
+
Args:
|
|
142
|
+
engine_data: The engine data to add or update
|
|
143
|
+
"""
|
|
144
|
+
engines_data = cls._load_engines_data()
|
|
145
|
+
|
|
146
|
+
# Find existing engine
|
|
147
|
+
engine_id = engine_data["id"]
|
|
148
|
+
existing_engine = cls._find_engine_by_id(engines_data, engine_id)
|
|
149
|
+
|
|
150
|
+
if existing_engine:
|
|
151
|
+
# Update existing engine
|
|
152
|
+
existing_engine.update(engine_data)
|
|
153
|
+
existing_engine["updated_at"] = datetime.now(tz=UTC).isoformat()
|
|
154
|
+
else:
|
|
155
|
+
# Add new engine
|
|
156
|
+
engines_data.setdefault("engines", []).append(engine_data)
|
|
157
|
+
|
|
158
|
+
# Set as default if it's the first engine
|
|
159
|
+
if not engines_data.get("default_engine_id") and len(engines_data["engines"]) == 1:
|
|
160
|
+
engines_data["default_engine_id"] = engine_id
|
|
161
|
+
|
|
162
|
+
cls._save_engines_data(engines_data)
|
|
163
|
+
|
|
87
164
|
@classmethod
|
|
88
165
|
def get_engine_id(cls) -> str:
|
|
89
166
|
"""Get the engine ID.
|
|
@@ -106,20 +183,57 @@ class EngineIdentity:
|
|
|
106
183
|
|
|
107
184
|
@classmethod
|
|
108
185
|
def set_engine_name(cls, engine_name: str) -> None:
|
|
109
|
-
"""Set and persist the engine name.
|
|
186
|
+
"""Set and persist the current engine name.
|
|
110
187
|
|
|
111
188
|
Args:
|
|
112
189
|
engine_name: The new engine name to set
|
|
113
190
|
"""
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
# Ensure we have basic engine data
|
|
117
|
-
if not engine_data or "id" not in engine_data:
|
|
118
|
-
engine_data = cls.get_engine_data()
|
|
191
|
+
# Get current engine data
|
|
192
|
+
engine_data = cls.get_engine_data()
|
|
119
193
|
|
|
194
|
+
# Update the name
|
|
120
195
|
engine_data["name"] = engine_name
|
|
121
196
|
engine_data["updated_at"] = datetime.now(tz=UTC).isoformat()
|
|
122
|
-
|
|
197
|
+
|
|
198
|
+
# Save updated engine data
|
|
199
|
+
cls._add_or_update_engine(engine_data)
|
|
200
|
+
|
|
201
|
+
@classmethod
|
|
202
|
+
def get_all_engines(cls) -> list[dict]:
|
|
203
|
+
"""Get all registered engines.
|
|
204
|
+
|
|
205
|
+
Returns:
|
|
206
|
+
list[dict]: List of all engine data
|
|
207
|
+
"""
|
|
208
|
+
engines_data = cls._load_engines_data()
|
|
209
|
+
return engines_data.get("engines", [])
|
|
210
|
+
|
|
211
|
+
@classmethod
|
|
212
|
+
def get_default_engine_id(cls) -> str | None:
|
|
213
|
+
"""Get the default engine ID.
|
|
214
|
+
|
|
215
|
+
Returns:
|
|
216
|
+
str | None: The default engine ID or None if not set
|
|
217
|
+
"""
|
|
218
|
+
engines_data = cls._load_engines_data()
|
|
219
|
+
return engines_data.get("default_engine_id")
|
|
220
|
+
|
|
221
|
+
@classmethod
|
|
222
|
+
def set_default_engine_id(cls, engine_id: str) -> None:
|
|
223
|
+
"""Set the default engine ID.
|
|
224
|
+
|
|
225
|
+
Args:
|
|
226
|
+
engine_id: The engine ID to set as default
|
|
227
|
+
"""
|
|
228
|
+
engines_data = cls._load_engines_data()
|
|
229
|
+
|
|
230
|
+
# Verify the engine exists
|
|
231
|
+
if cls._find_engine_by_id(engines_data, engine_id):
|
|
232
|
+
engines_data["default_engine_id"] = engine_id
|
|
233
|
+
cls._save_engines_data(engines_data)
|
|
234
|
+
else:
|
|
235
|
+
msg = f"Engine with ID {engine_id} not found"
|
|
236
|
+
raise ValueError(msg)
|
|
123
237
|
|
|
124
238
|
@classmethod
|
|
125
239
|
def get_engine_data_file_path(cls) -> Path:
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: griptape-nodes
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.42.0
|
|
4
4
|
Summary: Add your description here
|
|
5
5
|
License-File: LICENSE
|
|
6
|
-
Requires-Python:
|
|
6
|
+
Requires-Python: <3.13,>=3.12.0
|
|
7
7
|
Requires-Dist: fastapi>=0.115.12
|
|
8
8
|
Requires-Dist: griptape[drivers-prompt-amazon-bedrock,drivers-prompt-anthropic,drivers-prompt-cohere,drivers-prompt-ollama,drivers-web-scraper-trafilatura,drivers-web-search-duckduckgo,drivers-web-search-exa,loaders-image]>=1.7.1
|
|
9
9
|
Requires-Dist: httpx<1.0.0,>=0.28.0
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
griptape_nodes/__init__.py,sha256=49jcr4gyvTjpdZDKCek0UqtAMeMdJr-OL_Hx7Ira8CE,37026
|
|
2
2
|
griptape_nodes/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
3
|
griptape_nodes/app/.python-version,sha256=e1X45ntWI8S-8_ppEojalDfXnTq6FW3kjUgdsyrH0W0,5
|
|
4
|
-
griptape_nodes/app/__init__.py,sha256=
|
|
5
|
-
griptape_nodes/app/app.py,sha256=
|
|
6
|
-
griptape_nodes/app/app_sessions.py,sha256=
|
|
7
|
-
griptape_nodes/app/watch.py,sha256=
|
|
4
|
+
griptape_nodes/app/__init__.py,sha256=2wdMRsCWieR9md72tBX2UqJowD-WBLLN3VWPzpTIJqw,229
|
|
5
|
+
griptape_nodes/app/app.py,sha256=5RG03clRZWwZeFpeKc3hwxO8TTCbBHblWvZZnG9LPU4,18942
|
|
6
|
+
griptape_nodes/app/app_sessions.py,sha256=sgVIOEmxcQt0oErvfMciOaVWStPh-qNtPZXtXpw1Q-o,21852
|
|
7
|
+
griptape_nodes/app/watch.py,sha256=SkK9ajCEGswjXpujyIlW90YDgTpNDFyDM_jjAhS0t0Y,1988
|
|
8
8
|
griptape_nodes/bootstrap/__init__.py,sha256=ENv3SIzQ9TtlRrg1y4e4CnoBpJaFpFSkNpTFBV8X5Ls,25
|
|
9
9
|
griptape_nodes/bootstrap/bootstrap_script.py,sha256=QLLu3wu1VGmoUU8SKGeyLGDOijKBLGAJYv1RlI9sub0,1312
|
|
10
10
|
griptape_nodes/bootstrap/post_build_install_script.sh,sha256=t2ItVve_2Vk7jMFsfAfVHCAc5sFSDSQkmjglr1USZ7s,48
|
|
@@ -23,68 +23,69 @@ griptape_nodes/drivers/__init__.py,sha256=tHmiFQn6uJyFVhC2PrqHgRUH3d3yDsqMQpWqRa
|
|
|
23
23
|
griptape_nodes/drivers/storage/__init__.py,sha256=_7p8vJt3YnnF6sD3Uxxw38c-gazuMIHSS-m3G6sa2Qk,208
|
|
24
24
|
griptape_nodes/drivers/storage/base_storage_driver.py,sha256=di1tqC-o8tEeZ8h_asUxb5KgixwJbTlQLe_lUtqcunQ,1050
|
|
25
25
|
griptape_nodes/drivers/storage/griptape_cloud_storage_driver.py,sha256=zYQHzHxlE3TcOitytk9WpD3YTKTRyfrzW-H_vXpgTLQ,6083
|
|
26
|
-
griptape_nodes/drivers/storage/local_storage_driver.py,sha256=
|
|
26
|
+
griptape_nodes/drivers/storage/local_storage_driver.py,sha256=fXtT6NEPeTZgS-mNsy66zd9Cdw17WddjAp4aQdR_oug,2257
|
|
27
27
|
griptape_nodes/drivers/storage/storage_backend.py,sha256=3QBIwrgPc1krBIiPYLoK2swhIPDiKJnnucOEdyx7y3c,184
|
|
28
28
|
griptape_nodes/exe_types/__init__.py,sha256=wGGwKGX9-TSarUFbXpDvdU_J7eXIbWTBl_NCLOZa-G8,32
|
|
29
29
|
griptape_nodes/exe_types/connections.py,sha256=_-VNzf6Kay62QzJlSX-LlHTUhz-CKF-UDsbZLJ0l6Wk,12435
|
|
30
30
|
griptape_nodes/exe_types/core_types.py,sha256=gkWSehpB28kFwgKl8KNrW4MaxB2rcEEPTuOThCOg6ms,58259
|
|
31
|
-
griptape_nodes/exe_types/flow.py,sha256=
|
|
31
|
+
griptape_nodes/exe_types/flow.py,sha256=pCeTrx8yrUgLw1U9yQxC7arzJjyP2vag-pG0QTKut-M,5716
|
|
32
32
|
griptape_nodes/exe_types/node_types.py,sha256=MwrZCFPsKU3VV1GoG6jeuGyyLjkCQ_7EZHfiuKcm0hU,45514
|
|
33
33
|
griptape_nodes/exe_types/type_validator.py,sha256=RTz1vX09jzQpHhozITMJ0siOZUXvsERDhrApjdaM1WM,1120
|
|
34
34
|
griptape_nodes/machines/__init__.py,sha256=v0jkwr-CFOLmfEYUQvX8BKQLOdvhSsA6toXkdHcPGUE,30
|
|
35
|
-
griptape_nodes/machines/control_flow.py,sha256=
|
|
35
|
+
griptape_nodes/machines/control_flow.py,sha256=qOyf00hEas310kToQBKGOXrhmwcY5agWu8ct4i-0nnA,8643
|
|
36
36
|
griptape_nodes/machines/fsm.py,sha256=JwNz32UmcajoADDMm_fL5MqDRNjr6t8CIUzck-7TFhE,1784
|
|
37
|
-
griptape_nodes/machines/node_resolution.py,sha256=
|
|
37
|
+
griptape_nodes/machines/node_resolution.py,sha256=HfmREZKhJLCo2vR_6LsOpff5KTiRQ71O5iNrUY31eT4,20049
|
|
38
38
|
griptape_nodes/node_library/__init__.py,sha256=U3FcSdmq6UW7qt6E3Up3NWKvUEn5_5lqL-u5qbzfxMQ,28
|
|
39
39
|
griptape_nodes/node_library/advanced_node_library.py,sha256=B1ZaxuFIzQ6tx_3MLIxlsHuahthEC1Hw_t6K_ByIdzs,2104
|
|
40
40
|
griptape_nodes/node_library/library_registry.py,sha256=fE1NF-9SeRPK_pWPQgfeDBsMzvxiAlShPBvi71DCG9Q,12099
|
|
41
|
-
griptape_nodes/node_library/workflow_registry.py,sha256=
|
|
41
|
+
griptape_nodes/node_library/workflow_registry.py,sha256=EMqQgx7DaR3mEgBWQEgMHhgxYalaotda8Uo9wD8d9i4,4247
|
|
42
42
|
griptape_nodes/retained_mode/__init__.py,sha256=X12DKL6KhLsiRTPIlrPj2h76_sJ0q0eH4r0kMQkodm0,29
|
|
43
|
-
griptape_nodes/retained_mode/griptape_nodes.py,sha256=
|
|
44
|
-
griptape_nodes/retained_mode/retained_mode.py,sha256=
|
|
43
|
+
griptape_nodes/retained_mode/griptape_nodes.py,sha256=dOI8A_Dd2O9ndDUOXoHhhe9xjckbUDct9qsLURNMmQk,24040
|
|
44
|
+
griptape_nodes/retained_mode/retained_mode.py,sha256=2cjSD1F_ABpuL8km_nGpAn2h5TijeV77qr1ePH_BWZg,56272
|
|
45
45
|
griptape_nodes/retained_mode/events/__init__.py,sha256=7B1C-c0jVvnShtHJ2lfX6BZPE0U1DgQwg1e4DorhKG0,22
|
|
46
|
-
griptape_nodes/retained_mode/events/agent_events.py,sha256=
|
|
47
|
-
griptape_nodes/retained_mode/events/app_events.py,sha256=
|
|
48
|
-
griptape_nodes/retained_mode/events/arbitrary_python_events.py,sha256=
|
|
49
|
-
griptape_nodes/retained_mode/events/base_events.py,sha256=
|
|
50
|
-
griptape_nodes/retained_mode/events/config_events.py,sha256=
|
|
51
|
-
griptape_nodes/retained_mode/events/connection_events.py,sha256=
|
|
52
|
-
griptape_nodes/retained_mode/events/context_events.py,sha256
|
|
53
|
-
griptape_nodes/retained_mode/events/execution_events.py,sha256=
|
|
54
|
-
griptape_nodes/retained_mode/events/flow_events.py,sha256=
|
|
46
|
+
griptape_nodes/retained_mode/events/agent_events.py,sha256=xyCtR-Hf1vv6Ft-z0At0ytIMYBRckYympxdByVZXrCE,4880
|
|
47
|
+
griptape_nodes/retained_mode/events/app_events.py,sha256=aKrXFOgNZZmQ_6fgdCIjzW5l5LUfNFlFhtS492hnqQM,8477
|
|
48
|
+
griptape_nodes/retained_mode/events/arbitrary_python_events.py,sha256=uhep1c1xjUc-YQO5nIStAE48PS6rFZLTDQIr_Qb3we8,1460
|
|
49
|
+
griptape_nodes/retained_mode/events/base_events.py,sha256=pSiePAzG7ddzHCtmX4C-56vByEUA4GgIDqkIa4yllFo,19756
|
|
50
|
+
griptape_nodes/retained_mode/events/config_events.py,sha256=9WhFx6mD7QF_h1ldFAPRE_iLtrQBAFEvA6_MzhGOomk,6129
|
|
51
|
+
griptape_nodes/retained_mode/events/connection_events.py,sha256=QjHAp0SeCbRSG-dF_nU_CPaOcSKItq2DWJ_FHWgF1b4,4744
|
|
52
|
+
griptape_nodes/retained_mode/events/context_events.py,sha256=-FIwjI0hJodDhfM4BF-3GTRycu80v1TlSSOX34oA9nA,2122
|
|
53
|
+
griptape_nodes/retained_mode/events/execution_events.py,sha256=z1RakAGJQrNUmU6SU6evXSldPdlSlw0gBm7_S15JaEo,9946
|
|
54
|
+
griptape_nodes/retained_mode/events/flow_events.py,sha256=BKEftgN6pIMCFpLF9yIwkcloIWVY6FSIwUX5a4fc5KU,14019
|
|
55
55
|
griptape_nodes/retained_mode/events/generate_request_payload_schemas.py,sha256=PQ0QRZAUBljSIGjB8QhYUeRmSrfmLsJ6XVcygJKi13I,1102
|
|
56
|
-
griptape_nodes/retained_mode/events/library_events.py,sha256=
|
|
57
|
-
griptape_nodes/retained_mode/events/logger_events.py,sha256=
|
|
58
|
-
griptape_nodes/retained_mode/events/node_events.py,sha256
|
|
59
|
-
griptape_nodes/retained_mode/events/object_events.py,sha256=
|
|
60
|
-
griptape_nodes/retained_mode/events/os_events.py,sha256=
|
|
61
|
-
griptape_nodes/retained_mode/events/parameter_events.py,sha256=
|
|
56
|
+
griptape_nodes/retained_mode/events/library_events.py,sha256=xE-yOAmjIWcyNhR_3qNK9ucnbW-f_hyFoXPGgXnmlQQ,17628
|
|
57
|
+
griptape_nodes/retained_mode/events/logger_events.py,sha256=jYlxzPomgCsJuPtJ0znWBhD8QJfC8qC4xfChDiuVuyg,705
|
|
58
|
+
griptape_nodes/retained_mode/events/node_events.py,sha256=V9Kf0G2l2UQxu3kpnlWupC7vMYShkGpYrLe62v4e9AU,24526
|
|
59
|
+
griptape_nodes/retained_mode/events/object_events.py,sha256=cJaqEU73Lzf1RRxJrFqEpl8eTr-gDhKpXKywJ-vVCJQ,2631
|
|
60
|
+
griptape_nodes/retained_mode/events/os_events.py,sha256=GrEfWKEM8s9t950KeAQKX9amAQI_fXst9vc9V66vBPA,1243
|
|
61
|
+
griptape_nodes/retained_mode/events/parameter_events.py,sha256=n5PCL_T5zxktX3hSyqpDseztJrT6_RjS9lu6AmNBDq0,18411
|
|
62
62
|
griptape_nodes/retained_mode/events/payload_registry.py,sha256=q-wxUqp63vhNj-Pl1JGJHnBkhUefcCArPoMN3KBREEI,1691
|
|
63
|
-
griptape_nodes/retained_mode/events/secrets_events.py,sha256=
|
|
64
|
-
griptape_nodes/retained_mode/events/static_file_events.py,sha256=
|
|
65
|
-
griptape_nodes/retained_mode/events/validation_events.py,sha256=
|
|
66
|
-
griptape_nodes/retained_mode/events/workflow_events.py,sha256=
|
|
63
|
+
griptape_nodes/retained_mode/events/secrets_events.py,sha256=UniLR-fH7OO-caSGCPDCZYf8Z0drBKqoRcjvNY7Y3Hs,4021
|
|
64
|
+
griptape_nodes/retained_mode/events/static_file_events.py,sha256=c8kKkrxAPZxrE9fsldpWtweK1C4T-1-dHWw_76SRehM,3764
|
|
65
|
+
griptape_nodes/retained_mode/events/validation_events.py,sha256=H2yWoHp2t7QwGV_fDQXRy7JojYnK4k6SOAlEvRYST_Q,3062
|
|
66
|
+
griptape_nodes/retained_mode/events/workflow_events.py,sha256=6V8zsWnf8MbBZ2Oi36zaM_a7dZO5oOlq_iIxPL-g8Jk,11138
|
|
67
67
|
griptape_nodes/retained_mode/managers/__init__.py,sha256=OTXysKusqYCQeAYwnVj4PbE3MxvAUTq9xOZT6vUE3JA,24
|
|
68
|
-
griptape_nodes/retained_mode/managers/agent_manager.py,sha256=
|
|
68
|
+
griptape_nodes/retained_mode/managers/agent_manager.py,sha256=lSOyY2j2DE8qJh3OYCdqWnLKlXzywr5ItzzU7dfKwRM,10238
|
|
69
69
|
griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py,sha256=QnqI2_IkDpc9SHzbb-jwsyYkm91W0V9kLlxARUbbVUI,1777
|
|
70
70
|
griptape_nodes/retained_mode/managers/config_manager.py,sha256=0fs-xd6vpetBGYrsm6sqPBhWb0qChMdtUcxco92qTqQ,25344
|
|
71
71
|
griptape_nodes/retained_mode/managers/context_manager.py,sha256=DiGNh09TZ7rsLEcXqqB9Yrh2ietBy59LPF7GM0OBQS8,22930
|
|
72
|
-
griptape_nodes/retained_mode/managers/
|
|
73
|
-
griptape_nodes/retained_mode/managers/
|
|
74
|
-
griptape_nodes/retained_mode/managers/
|
|
75
|
-
griptape_nodes/retained_mode/managers/
|
|
76
|
-
griptape_nodes/retained_mode/managers/
|
|
72
|
+
griptape_nodes/retained_mode/managers/engine_identity_manager.py,sha256=GBBz7HJBJVNyXLGRdAvqDgihMRB_YjWqdEwLMCnadUg,4409
|
|
73
|
+
griptape_nodes/retained_mode/managers/event_manager.py,sha256=rGoeGO0ATZd9w8Gm1RDHoODDYyJ-XqxiGJidYijH_QY,7201
|
|
74
|
+
griptape_nodes/retained_mode/managers/flow_manager.py,sha256=JDLedAGIfP_RZ5Qlj7C-0mYXlHvw8N4_Nt9I0bCetx0,106297
|
|
75
|
+
griptape_nodes/retained_mode/managers/library_manager.py,sha256=WnNqabpTvANic7ww0E_78zj8zsBMJxcW3eXMJ4Ma730,93627
|
|
76
|
+
griptape_nodes/retained_mode/managers/node_manager.py,sha256=ygWeAHQeZcP_PCrDgA5tK4yeUrnAtoXb_l2MHLSaXH0,127460
|
|
77
|
+
griptape_nodes/retained_mode/managers/object_manager.py,sha256=HAMyW2OnrbdYmOzRSqmvbpyKg6eO3wUEk6-2CP9EQcw,12243
|
|
77
78
|
griptape_nodes/retained_mode/managers/operation_manager.py,sha256=6nHx1fADdj7nyt5dIrNNuSkR362XgR1AMVESI1UCF6o,19746
|
|
78
|
-
griptape_nodes/retained_mode/managers/os_manager.py,sha256
|
|
79
|
-
griptape_nodes/retained_mode/managers/secrets_manager.py,sha256=
|
|
80
|
-
griptape_nodes/retained_mode/managers/
|
|
79
|
+
griptape_nodes/retained_mode/managers/os_manager.py,sha256=-Uz74v5Ysw8JSqxGooG30bUP2kO4e-LNxpa8SqxUXdg,7463
|
|
80
|
+
griptape_nodes/retained_mode/managers/secrets_manager.py,sha256=uGlj5MAL5kfShwE0yRn5ywuIcNGUP9qOq9SLt3vkTjI,6219
|
|
81
|
+
griptape_nodes/retained_mode/managers/session_manager.py,sha256=fLjtBvgGY3daq1vbpJPXq069n35Z-Zr5dF3B0XyD2JY,11817
|
|
82
|
+
griptape_nodes/retained_mode/managers/settings.py,sha256=oS-TDmz8IWIBK-OsjIbThNfinAOzaoJbDUSGlTOT_nw,4439
|
|
81
83
|
griptape_nodes/retained_mode/managers/static_files_manager.py,sha256=RbQHGeJgRa7tCGJwif0hGVMbEVkHgaUt4FB44McRxWA,7129
|
|
82
84
|
griptape_nodes/retained_mode/managers/version_compatibility_manager.py,sha256=1lwwuof4C6Ho1xh59Re_ajmvcc2lUyxpO1-RkHfKBYc,4385
|
|
83
|
-
griptape_nodes/retained_mode/managers/workflow_manager.py,sha256=
|
|
85
|
+
griptape_nodes/retained_mode/managers/workflow_manager.py,sha256=jj7cM1s1E7PkY1uER2P3WozS1ZuIZDZFfPXRO_dT9Hk,131627
|
|
84
86
|
griptape_nodes/retained_mode/utils/__init__.py,sha256=W5dvv8YwvVVq_8eVTgMd3Z_VB_Dtq1sIIVq8745QH_I,52
|
|
85
|
-
griptape_nodes/retained_mode/utils/engine_identity.py,sha256=
|
|
87
|
+
griptape_nodes/retained_mode/utils/engine_identity.py,sha256=PZmdlYM69-B-6Z1F4iJfZyVm2twJY5cSGoiUJCMj0xU,7846
|
|
86
88
|
griptape_nodes/retained_mode/utils/name_generator.py,sha256=IZLahtfP3XC79XApLdGoZ0IKKUkgiITpd16RK7NbyEs,2524
|
|
87
|
-
griptape_nodes/retained_mode/utils/session_persistence.py,sha256=zhCeE7_5zHXBtNoVjEjwWSdLQbFQn_mI3Ybq5TkWjPA,3339
|
|
88
89
|
griptape_nodes/traits/__init__.py,sha256=bTLXTiZTJz2z15RRLoPI4nvLnNW9FiLcKL_2pT4E10g,32
|
|
89
90
|
griptape_nodes/traits/add_param_button.py,sha256=Xtc39SfvYY6JDjhxu2wmdeaHW2X4LkpNAQufSTCP3hY,655
|
|
90
91
|
griptape_nodes/traits/button.py,sha256=rpQQ77ASKH3YJabc5WWw9DpEHQiMg1jx0i0sdkwH-SA,611
|
|
@@ -105,8 +106,8 @@ griptape_nodes/version_compatibility/__init__.py,sha256=JMz1sB7Zsj6pS1S5sdsPR0kn
|
|
|
105
106
|
griptape_nodes/version_compatibility/versions/__init__.py,sha256=PWSxM28LPUdBdRPA98j4RUWvuZ4NqfX1day2VU6SqPw,74
|
|
106
107
|
griptape_nodes/version_compatibility/versions/v0_39_0/__init__.py,sha256=21iKlFpsmBW4WsAexSD0WMAJnsYmMq2sIbDeYC831fc,62
|
|
107
108
|
griptape_nodes/version_compatibility/versions/v0_39_0/modified_parameters_set_removal.py,sha256=KJeyhyn_iUaDx32FRi1-__yxw6rp9tG4eTBCimpurBM,5306
|
|
108
|
-
griptape_nodes-0.
|
|
109
|
-
griptape_nodes-0.
|
|
110
|
-
griptape_nodes-0.
|
|
111
|
-
griptape_nodes-0.
|
|
112
|
-
griptape_nodes-0.
|
|
109
|
+
griptape_nodes-0.42.0.dist-info/METADATA,sha256=ApwIVvUYJC8oYo43PxlzKXcY8CKdQxVQoAJjNob8wP8,4110
|
|
110
|
+
griptape_nodes-0.42.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
111
|
+
griptape_nodes-0.42.0.dist-info/entry_points.txt,sha256=Q8V3Ydy7PNfJgTjNEVkPui25AwZ4HJ3kZCU3oh4mq-c,81
|
|
112
|
+
griptape_nodes-0.42.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
113
|
+
griptape_nodes-0.42.0.dist-info/RECORD,,
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
"""Manages session persistence using XDG state directory.
|
|
2
|
-
|
|
3
|
-
Handles storing and retrieving active session information across engine restarts.
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
import json
|
|
7
|
-
from datetime import UTC, datetime
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
|
|
10
|
-
from xdg_base_dirs import xdg_state_home
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class SessionPersistence:
|
|
14
|
-
"""Manages session persistence for active session tracking."""
|
|
15
|
-
|
|
16
|
-
_SESSION_STATE_FILE = "session.json"
|
|
17
|
-
|
|
18
|
-
@classmethod
|
|
19
|
-
def _get_session_state_dir(cls) -> Path:
|
|
20
|
-
"""Get the XDG state directory for session persistence."""
|
|
21
|
-
return xdg_state_home() / "griptape_nodes"
|
|
22
|
-
|
|
23
|
-
@classmethod
|
|
24
|
-
def _get_session_state_file(cls) -> Path:
|
|
25
|
-
"""Get the path to the session state storage file."""
|
|
26
|
-
return cls._get_session_state_dir() / cls._SESSION_STATE_FILE
|
|
27
|
-
|
|
28
|
-
@classmethod
|
|
29
|
-
def _load_session_data(cls) -> dict:
|
|
30
|
-
"""Load session data from storage.
|
|
31
|
-
|
|
32
|
-
Returns:
|
|
33
|
-
dict: Session data including id, timestamps
|
|
34
|
-
"""
|
|
35
|
-
session_state_file = cls._get_session_state_file()
|
|
36
|
-
|
|
37
|
-
if session_state_file.exists():
|
|
38
|
-
try:
|
|
39
|
-
with session_state_file.open("r") as f:
|
|
40
|
-
data = json.load(f)
|
|
41
|
-
if isinstance(data, dict):
|
|
42
|
-
return data
|
|
43
|
-
except (json.JSONDecodeError, OSError):
|
|
44
|
-
# If file is corrupted, return empty dict
|
|
45
|
-
pass
|
|
46
|
-
|
|
47
|
-
return {}
|
|
48
|
-
|
|
49
|
-
@classmethod
|
|
50
|
-
def _save_session_data(cls, session_data: dict) -> None:
|
|
51
|
-
"""Save session data to storage.
|
|
52
|
-
|
|
53
|
-
Args:
|
|
54
|
-
session_data: Session data to save
|
|
55
|
-
"""
|
|
56
|
-
session_state_dir = cls._get_session_state_dir()
|
|
57
|
-
session_state_dir.mkdir(parents=True, exist_ok=True)
|
|
58
|
-
|
|
59
|
-
session_state_file = cls._get_session_state_file()
|
|
60
|
-
with session_state_file.open("w") as f:
|
|
61
|
-
json.dump(session_data, f, indent=2)
|
|
62
|
-
|
|
63
|
-
@classmethod
|
|
64
|
-
def persist_session(cls, session_id: str) -> None:
|
|
65
|
-
"""Persist the active session ID to storage.
|
|
66
|
-
|
|
67
|
-
Args:
|
|
68
|
-
session_id: The session ID to persist
|
|
69
|
-
"""
|
|
70
|
-
session_data = {
|
|
71
|
-
"session_id": session_id,
|
|
72
|
-
"started_at": datetime.now(tz=UTC).isoformat(),
|
|
73
|
-
"last_updated": datetime.now(tz=UTC).isoformat(),
|
|
74
|
-
}
|
|
75
|
-
cls._save_session_data(session_data)
|
|
76
|
-
|
|
77
|
-
@classmethod
|
|
78
|
-
def get_persisted_session_id(cls) -> str | None:
|
|
79
|
-
"""Get the persisted session ID if it exists.
|
|
80
|
-
|
|
81
|
-
Returns:
|
|
82
|
-
str | None: The persisted session ID or None if no session is persisted
|
|
83
|
-
"""
|
|
84
|
-
session_data = cls._load_session_data()
|
|
85
|
-
return session_data.get("session_id")
|
|
86
|
-
|
|
87
|
-
@classmethod
|
|
88
|
-
def clear_persisted_session(cls) -> None:
|
|
89
|
-
"""Clear the persisted session data."""
|
|
90
|
-
session_state_file = cls._get_session_state_file()
|
|
91
|
-
if session_state_file.exists():
|
|
92
|
-
try:
|
|
93
|
-
session_state_file.unlink()
|
|
94
|
-
except OSError:
|
|
95
|
-
# If we can't delete the file, just clear its contents
|
|
96
|
-
cls._save_session_data({})
|
|
97
|
-
|
|
98
|
-
@classmethod
|
|
99
|
-
def has_persisted_session(cls) -> bool:
|
|
100
|
-
"""Check if there is a persisted session.
|
|
101
|
-
|
|
102
|
-
Returns:
|
|
103
|
-
bool: True if there is a persisted session, False otherwise
|
|
104
|
-
"""
|
|
105
|
-
return cls.get_persisted_session_id() is not None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|