From 327387b83461142bf77761b263c22517202eb01a Mon Sep 17 00:00:00 2001 From: Maxwell Du <60411452+maxduu@users.noreply.github.com> Date: Wed, 1 Jul 2026 17:02:16 -0400 Subject: [PATCH 1/4] feat: enable conversational-agent outputs from fpsproperties --- src/uipath/runtime/context.py | 5 +++++ tests/test_context.py | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/uipath/runtime/context.py b/src/uipath/runtime/context.py index 924548c..989cfcc 100644 --- a/src/uipath/runtime/context.py +++ b/src/uipath/runtime/context.py @@ -51,6 +51,10 @@ class UiPathRuntimeContext(BaseModel): True, description="Whether to emit the exchange end event for CAS", ) + conversational_outputs_enabled: bool = Field( + False, + description=("Whether conversational agent should generate structured outputs on its turn."), + ) conversational_user_id: str | None = Field( None, description="Conversation owner id for CAS (a real cloud user id or a synthetic user id)", @@ -408,6 +412,7 @@ def from_config( "conversationalService.exchangeId": "exchange_id", "conversationalService.messageId": "message_id", "conversationalService.endExchange": "end_exchange", + "conversationalService.enableOutputs": "conversational_outputs_enabled", "conversationalService.conversationalUserId": "conversational_user_id", "mcpServer.id": "mcp_server_id", "mcpServer.slug": "mcp_server_slug", diff --git a/tests/test_context.py b/tests/test_context.py index d3ed4ae..30cef65 100644 --- a/tests/test_context.py +++ b/tests/test_context.py @@ -183,6 +183,7 @@ def test_from_config_extracts_fps_properties_without_runtime(tmp_path: Path) -> "conversationalService.conversationId": "conv-123", "conversationalService.exchangeId": "ex-456", "conversationalService.messageId": "msg-789", + "conversationalService.enableOutputs": True, "conversationalService.conversationalUserId": "owner-guid", "mcpServer.id": "server-id-123", "mcpServer.slug": "my-mcp-server", @@ -196,11 +197,30 @@ def test_from_config_extracts_fps_properties_without_runtime(tmp_path: Path) -> assert ctx.conversation_id == "conv-123" assert ctx.exchange_id == "ex-456" assert ctx.message_id == "msg-789" + assert ctx.conversational_outputs_enabled is True assert ctx.conversational_user_id == "owner-guid" assert ctx.mcp_server_id == "server-id-123" assert ctx.mcp_server_slug == "my-mcp-server" +def test_from_config_conversational_outputs_enabled_defaults_false( + tmp_path: Path, +) -> None: + """When enableOutputs isn't in fpsProperties, the field defaults to False — + legacy safe behavior for pre-migration conversational agents.""" + cfg = { + "fpsProperties": { + "conversationalService.conversationId": "conv-legacy", + } + } + config_path = tmp_path / "uipath.json" + config_path.write_text(json.dumps(cfg)) + + ctx = UiPathRuntimeContext.from_config(config_path=str(config_path)) + + assert ctx.conversational_outputs_enabled is False + + def test_from_config_loads_runtime_and_fps_properties(tmp_path: Path) -> None: """runtime.* keys and fpsProperties.* keys should both be applied.""" cfg = { From 6d2712bb70050b5c57b4e5bd0a35b0a6335a7a87 Mon Sep 17 00:00:00 2001 From: Maxwell Du <60411452+maxduu@users.noreply.github.com> Date: Wed, 1 Jul 2026 17:22:27 -0400 Subject: [PATCH 2/4] fix: comment --- src/uipath/runtime/context.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/uipath/runtime/context.py b/src/uipath/runtime/context.py index 989cfcc..4174b20 100644 --- a/src/uipath/runtime/context.py +++ b/src/uipath/runtime/context.py @@ -53,7 +53,7 @@ class UiPathRuntimeContext(BaseModel): ) conversational_outputs_enabled: bool = Field( False, - description=("Whether conversational agent should generate structured outputs on its turn."), + description="Whether conversational agent output-generation is enabled." ) conversational_user_id: str | None = Field( None, From adacf6f446ef8f2ce1ad8866ca844ac939744f8a Mon Sep 17 00:00:00 2001 From: Maxwell Du <60411452+maxduu@users.noreply.github.com> Date: Thu, 2 Jul 2026 12:30:27 -0400 Subject: [PATCH 3/4] chore: formatting --- src/uipath/runtime/context.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/uipath/runtime/context.py b/src/uipath/runtime/context.py index 4174b20..820bb18 100644 --- a/src/uipath/runtime/context.py +++ b/src/uipath/runtime/context.py @@ -52,8 +52,7 @@ class UiPathRuntimeContext(BaseModel): description="Whether to emit the exchange end event for CAS", ) conversational_outputs_enabled: bool = Field( - False, - description="Whether conversational agent output-generation is enabled." + False, description="Whether conversational agent output-generation is enabled." ) conversational_user_id: str | None = Field( None, From 250f14b90a7b0bf48a9b6ed3a0f44fa0d1fcdd7a Mon Sep 17 00:00:00 2001 From: Maxwell Du <60411452+maxduu@users.noreply.github.com> Date: Thu, 2 Jul 2026 16:26:30 -0400 Subject: [PATCH 4/4] chore: bump uipath-runtime version --- pyproject.toml | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7fb9531..b031523 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "uipath-runtime" -version = "0.11.7" +version = "0.11.8" description = "Runtime abstractions and interfaces for building agents and automation scripts in the UiPath ecosystem" readme = { file = "README.md", content-type = "text/markdown" } requires-python = ">=3.11" diff --git a/uv.lock b/uv.lock index 03ad15a..cd8797c 100644 --- a/uv.lock +++ b/uv.lock @@ -1153,7 +1153,7 @@ wheels = [ [[package]] name = "uipath-runtime" -version = "0.11.7" +version = "0.11.8" source = { editable = "." } dependencies = [ { name = "chardet" },