Skip to content

Commit d54728d

Browse files
committed
feat: include folder info for actions
1 parent 8425c8d commit d54728d

File tree

4 files changed

+46
-14
lines changed

4 files changed

+46
-14
lines changed

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
[project]
22
name = "uipath-langchain"
3-
version = "0.0.89"
3+
version = "0.0.90"
44
description = "UiPath Langchain"
55
readme = { file = "README.md", content-type = "text/markdown" }
66
requires-python = ">=3.10"
77
dependencies = [
8-
"uipath>=2.0.7, <2.1.0",
8+
"uipath>=2.0.8, <2.1.0",
99
"langgraph>=0.2.70",
1010
"langchain-core>=0.3.34",
1111
"langgraph-checkpoint-sqlite>=2.0.3",

src/uipath_langchain/_cli/_runtime/_input.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,12 @@ async def process(self) -> Any:
5858
if not trigger:
5959
return Command(resume=self.context.input_json)
6060

61-
type, key = trigger
61+
type, key, folder_path, folder_key, payload = trigger
6262
logger.debug(f"ResumeTrigger: {type} {key}")
6363
if type == UiPathResumeTriggerType.ACTION.value and key:
64-
action = self.uipath.actions.retrieve(key)
64+
action = await self.uipath.actions.retrieve_async(
65+
key, app_folder_key=folder_key, app_folder_path=folder_path
66+
)
6567
logger.debug(f"Action: {action}")
6668
if action.data is None:
6769
return Command(resume={})
@@ -95,7 +97,7 @@ async def process(self) -> Any:
9597
return Command(resume=try_convert_to_json_format(job.output_arguments))
9698
return Command(resume=self.context.input_json)
9799

98-
async def _get_latest_trigger(self) -> Optional[tuple[str, str]]:
100+
async def _get_latest_trigger(self) -> Optional[tuple[str, str, str, str, str]]:
99101
"""Fetch the most recent trigger from the database."""
100102
if self.context.memory is None:
101103
return None
@@ -106,15 +108,15 @@ async def _get_latest_trigger(self) -> Optional[tuple[str, str]]:
106108
self.context.memory.conn.cursor() as cur,
107109
):
108110
await cur.execute(f"""
109-
SELECT type, key
111+
SELECT type, key, folder_path, folder_key, payload
110112
FROM {self.context.resume_triggers_table}
111113
ORDER BY timestamp DESC
112114
LIMIT 1
113115
""")
114116
result = await cur.fetchone()
115117
if result is None:
116118
return None
117-
return cast(tuple[str, str], tuple(result))
119+
return cast(tuple[str, str, str, str, str], tuple(result))
118120
except Exception as e:
119121
raise LangGraphRuntimeError(
120122
"DB_QUERY_FAILED",

src/uipath_langchain/_cli/_runtime/_output.py

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,9 @@ async def _save_resume_trigger(self) -> None:
232232
id INTEGER PRIMARY KEY AUTOINCREMENT,
233233
type TEXT NOT NULL,
234234
key TEXT,
235+
folder_key TEXT,
236+
folder_path TEXT,
237+
payload TEXT,
235238
timestamp DATETIME DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'utc'))
236239
)
237240
""")
@@ -280,6 +283,12 @@ async def _save_resume_trigger(self) -> None:
280283
app_name=self.interrupt_value.app_name
281284
if self.interrupt_value.app_name
282285
else "",
286+
app_folder_path=self.interrupt_value.app_folder_path
287+
if self.interrupt_value.app_folder_path
288+
else "",
289+
app_folder_key=self.interrupt_value.app_folder_key
290+
if self.interrupt_value.app_folder_key
291+
else "",
283292
app_key=self.interrupt_value.app_key
284293
if self.interrupt_value.app_key
285294
else "",
@@ -295,11 +304,25 @@ async def _save_resume_trigger(self) -> None:
295304
self._resume_trigger = UiPathResumeTrigger(
296305
trigger_type=UiPathResumeTriggerType.ACTION,
297306
item_key=action.key,
307+
payload=self.interrupt_value.model_dump_json(),
308+
folder_path=self.interrupt_value.app_folder_path
309+
if self.interrupt_value.app_folder_path
310+
else None,
311+
folder_key=self.interrupt_value.app_folder_key
312+
if self.interrupt_value.app_folder_key
313+
else None,
298314
)
299315
elif isinstance(self.interrupt_value, WaitAction):
300316
self._resume_trigger = UiPathResumeTrigger(
301317
triggerType=UiPathResumeTriggerType.ACTION,
302318
itemKey=self.interrupt_value.action.key,
319+
payload=self.interrupt_value.model_dump_json(),
320+
folder_path=self.interrupt_value.app_folder_path
321+
if self.interrupt_value.app_folder_path
322+
else None,
323+
folder_key=self.interrupt_value.app_folder_key
324+
if self.interrupt_value.app_folder_key
325+
else None,
303326
)
304327

305328
except Exception as e:
@@ -324,8 +347,14 @@ async def _save_resume_trigger(self) -> None:
324347
try:
325348
logger.debug(f"ResumeTrigger: {trigger_type} {trigger_key}")
326349
await cur.execute(
327-
f"INSERT INTO {self.context.resume_triggers_table} (type, key) VALUES (?, ?)",
328-
(trigger_type, trigger_key),
350+
f"INSERT INTO {self.context.resume_triggers_table} (type, key, payload, folder_path, folder_key) VALUES (?, ?, ?, ?, ?)",
351+
(
352+
trigger_type,
353+
trigger_key,
354+
self.resume_trigger.payload,
355+
self.resume_trigger.folder_path,
356+
self.resume_trigger.folder_key,
357+
),
329358
)
330359
await self.context.memory.conn.commit()
331360
except Exception as e:

uv.lock

Lines changed: 6 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)