From 4db60674334051d099e08e77e3ad6e8832ebe805 Mon Sep 17 00:00:00 2001 From: Josh Park <50765702+JoshParkSJ@users.noreply.github.com> Date: Tue, 30 Jun 2026 09:55:40 -0400 Subject: [PATCH 1/4] fix: allow maestro flow voice mode --- src/uipath/runtime/context.py | 2 +- tests/test_context.py | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/uipath/runtime/context.py b/src/uipath/runtime/context.py index 820bb18..d59c6a0 100644 --- a/src/uipath/runtime/context.py +++ b/src/uipath/runtime/context.py @@ -58,7 +58,7 @@ class UiPathRuntimeContext(BaseModel): None, description="Conversation owner id for CAS (a real cloud user id or a synthetic user id)", ) - voice_mode: Literal["session"] | None = Field( + voice_mode: Literal["session", "maestro_flow"] | None = Field( None, description="Voice job type for CAS" ) mcp_server_id: str | None = None diff --git a/tests/test_context.py b/tests/test_context.py index 30cef65..5ba3a0b 100644 --- a/tests/test_context.py +++ b/tests/test_context.py @@ -3,6 +3,7 @@ from typing import Any import pytest +from pydantic import ValidationError from uipath.core.errors import ErrorCategory, UiPathFaultedTriggerError from uipath.runtime.context import UiPathRuntimeContext @@ -391,3 +392,29 @@ def test_explicit_execution_source_not_overwritten() -> None: ctx = UiPathRuntimeContext(command="run", execution_source="custom") assert ctx.execution_source == "custom" + + +@pytest.mark.parametrize("voice_mode", ["session", "maestro_flow"]) +def test_constructor_accepts_supported_voice_modes(voice_mode: str) -> None: + ctx = UiPathRuntimeContext(voice_mode=voice_mode) + + assert ctx.voice_mode == voice_mode + + +@pytest.mark.parametrize("voice_mode", ["session", "maestro_flow"]) +def test_from_config_accepts_supported_voice_modes( + voice_mode: str, tmp_path: Path +) -> None: + config_path = tmp_path / "uipath.json" + config_path.write_text( + json.dumps({"fpsProperties": {"voice.mode": voice_mode}}) + ) + + ctx = UiPathRuntimeContext.from_config(str(config_path)) + + assert ctx.voice_mode == voice_mode + + +def test_constructor_rejects_unknown_voice_mode() -> None: + with pytest.raises(ValidationError): + UiPathRuntimeContext(voice_mode="chat") From d869e918049aad937ceff1583705ed9fe1b463b0 Mon Sep 17 00:00:00 2001 From: Josh Park <50765702+JoshParkSJ@users.noreply.github.com> Date: Sun, 5 Jul 2026 15:30:44 -0400 Subject: [PATCH 2/4] test: simplify maestro flow voice mode coverage --- tests/test_context.py | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/tests/test_context.py b/tests/test_context.py index 5ba3a0b..23fb212 100644 --- a/tests/test_context.py +++ b/tests/test_context.py @@ -3,7 +3,6 @@ from typing import Any import pytest -from pydantic import ValidationError from uipath.core.errors import ErrorCategory, UiPathFaultedTriggerError from uipath.runtime.context import UiPathRuntimeContext @@ -394,27 +393,12 @@ def test_explicit_execution_source_not_overwritten() -> None: assert ctx.execution_source == "custom" -@pytest.mark.parametrize("voice_mode", ["session", "maestro_flow"]) -def test_constructor_accepts_supported_voice_modes(voice_mode: str) -> None: - ctx = UiPathRuntimeContext(voice_mode=voice_mode) - - assert ctx.voice_mode == voice_mode - - -@pytest.mark.parametrize("voice_mode", ["session", "maestro_flow"]) -def test_from_config_accepts_supported_voice_modes( - voice_mode: str, tmp_path: Path -) -> None: +def test_from_config_accepts_maestro_flow_voice_mode(tmp_path: Path) -> None: config_path = tmp_path / "uipath.json" config_path.write_text( - json.dumps({"fpsProperties": {"voice.mode": voice_mode}}) + json.dumps({"fpsProperties": {"voice.mode": "maestro_flow"}}) ) ctx = UiPathRuntimeContext.from_config(str(config_path)) - assert ctx.voice_mode == voice_mode - - -def test_constructor_rejects_unknown_voice_mode() -> None: - with pytest.raises(ValidationError): - UiPathRuntimeContext(voice_mode="chat") + assert ctx.voice_mode == "maestro_flow" From 303b931d1a2583f83a98992a33c2e542692cfe99 Mon Sep 17 00:00:00 2001 From: Josh Park <50765702+JoshParkSJ@users.noreply.github.com> Date: Sun, 5 Jul 2026 15:47:46 -0400 Subject: [PATCH 3/4] test: validate maestro flow voice mode construction --- tests/test_context.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/test_context.py b/tests/test_context.py index 23fb212..9b99b7e 100644 --- a/tests/test_context.py +++ b/tests/test_context.py @@ -393,6 +393,12 @@ def test_explicit_execution_source_not_overwritten() -> None: assert ctx.execution_source == "custom" +def test_constructor_accepts_maestro_flow_voice_mode() -> None: + ctx = UiPathRuntimeContext(voice_mode="maestro_flow") + + assert ctx.voice_mode == "maestro_flow" + + def test_from_config_accepts_maestro_flow_voice_mode(tmp_path: Path) -> None: config_path = tmp_path / "uipath.json" config_path.write_text( From 91220c0aed4f808b97897d9458875e78763a26f3 Mon Sep 17 00:00:00 2001 From: Josh Park <50765702+JoshParkSJ@users.noreply.github.com> Date: Mon, 6 Jul 2026 00:22:37 -0400 Subject: [PATCH 4/4] chore: bump uipath-runtime version to 0.11.9 --- pyproject.toml | 2 +- uv.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index b031523..fae5204 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "uipath-runtime" -version = "0.11.8" +version = "0.11.9" 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 cd8797c..aaf4df8 100644 --- a/uv.lock +++ b/uv.lock @@ -1153,7 +1153,7 @@ wheels = [ [[package]] name = "uipath-runtime" -version = "0.11.8" +version = "0.11.9" source = { editable = "." } dependencies = [ { name = "chardet" },