feat(agent): add quickForm escalation tool#876
Merged
Conversation
d9afdce to
56cabe0
Compare
7 tasks
2b82871 to
2cf2c9e
Compare
3d5029c to
0b0c499
Compare
0b0c499 to
d6a4354
Compare
There was a problem hiding this comment.
Pull request overview
Adds support for QuickForm escalation channels (type: actionCenterQuickForm) in the low-code agent escalation tool by routing task creation through a single per-channel dispatch helper, while keeping existing Action Center escalation behavior intact. This extends the agent tools layer to support schema-first inline forms without introducing a new tool/factory branch.
Changes:
- Extend
create_escalation_toolto accept the upstreamEscalationChannelunion and dispatch task creation via newcreate_task_for_channel()(QuickForm →create_quickform_async, Action Center →create_async). - Adjust tool metadata/display name behavior to handle channels without an
app_name(QuickForm falls back to channel name; IXP escalation now guardsdisplay_namevia_channel_app_name). - Add comprehensive QuickForm-focused tests and bump
uipathdependency/lockfile to the version that provides the new channel models +create_quickform_async.
Reviewed changes
Copilot reviewed 6 out of 7 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/uipath_langchain/agent/tools/escalation_tool.py | Adds union-channel handling, per-channel task dispatch, and display name fallback for QuickForm. |
| src/uipath_langchain/agent/tools/ixp_escalation_tool.py | Uses shared channel→app_name derivation for metadata display name. |
| src/uipath_langchain/agent/tools/escalation_memory.py | Formatting-only import/signature wrapping (no behavior change). |
| tests/agent/tools/test_escalation_tool.py | Adds QuickForm coverage (dispatch, metadata, outcome mapping termination, schema-id validation, non-regression). |
| tests/agent/tools/test_tool_factory.py | Ensures QuickForm resources route through the existing escalation tool factory path. |
| pyproject.toml | Version bump to 0.11.14 and updates uipath minimum version. |
| uv.lock | Updates resolved uipath version and lock metadata to match dependency changes. |
andreitava-uip
approved these changes
Jun 9, 2026
d6a4354 to
3b5e880
Compare
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Summary
Adds support for QuickForm escalation channels (
type: actionCenterQuickForm) to the low-code agent escalation tool. A QuickForm channel renders a schema-first FormLib task inline (no deployed Action Center app), while Action Center channels keep dispatching to their app task. The two variants are modeled as the upstream discriminated unionEscalationChannel = AgentEscalationChannel | AgentQuickFormEscalationChanneland flow through the existingcreate_escalation_tool— no separate tool or factory branch. Channel configuration is validated up front at tool construction so malformed escalations fail fast at agent startup rather than mid-run.Changes
escalation_tool.pycreate_escalation_toolconsumeschannel: EscalationChanneland handles both variants.create_task_for_channel(client, channel, *, title, data, recipient, folder_path) -> Taskconcentrates per-channel dispatch: QuickForm →tasks.create_quickform_async(task_schema_key=schema_id, schema=form_schema, …); Action Center →tasks.create_async(app_name=…, …)._resolve_channel(resource)resolves the channel and validates configuration at construction — a QuickForm channel missing itsschema_idraisesAgentStartupError(INVALID_TOOL_CONFIG)(previously a runtimeAgentRuntimeError)._try_get_channel_app_name(channel)derivesapp_name(Action Center → its app name; QuickForm →None), used for bothWaitEscalation.app_nameand the tool'sdisplay_namemetadata (falls back tochannel.name).channel.properties.form_schema(the field;"schema"is its serialization alias) and the id via theschema_idproperty.ixp_escalation_tool.py_resolve_action_center_channel(resource)validates that a VS escalation uses an Action Center channel, rejecting QuickForm withAgentStartupError(INVALID_TOOL_CONFIG). The narrowed type letsdisplay_namereadchannel.properties.app_namedirectly (no lossy helper).pyproject.toml/uv.lock— bumpuipath2.10.74→2.10.79(ships theEscalationChannelunion,AgentQuickFormChannelProperties, andTasksService.create_quickform_async); package version0.11.13→0.11.14.test_escalation_tool.py—TestQuickFormEscalation(dispatch tocreate_quickform_async,app_name=NoneinWaitEscalation, outcome-mapping END termination, tool metadata, Action-Center-does-not-dispatch-to-QuickForm) + construction-time missing-schema_idvalidation.test_ixp_escalation_tool.py—display_nameis the channel app name + VS escalation rejects a QuickForm channel at construction.test_tool_factory.py— a QuickForm resource routes through the existingAgentEscalationResourceConfigpath (no new factory branch).Flow
flowchart TD A[create_escalation_tool] --> B[_resolve_channel] B -->|QuickForm without schemaId| E[AgentStartupError INVALID_TOOL_CONFIG] B -->|valid channel| C[tool invoked] C --> G[create_task_for_channel] G -->|actionCenterQuickForm| D[tasks.create_quickform_async] G -->|actionCenter| F[tasks.create_async with app_name]Testing
ruff check .+ httpx-client linter — passruff format --check .— passmypyon changed files — clean (remaining errors are pre-existing optionalboto3/vertexextras, resolved in CI--all-extras)pytest tests/agent/— 1177 passed# type: ignore/ suppressions addedBreaking changes
None — additive. QuickForm is a new channel variant; existing Action Center escalation behavior is unchanged.