Skip to content

feat: add client side tools to bridge and new cas events [JAR-9629]#1638

Open
norman-le wants to merge 5 commits into
mainfrom
feat/jar-9629-client-side-tools-cas-urt-v2
Open

feat: add client side tools to bridge and new cas events [JAR-9629]#1638
norman-le wants to merge 5 commits into
mainfrom
feat/jar-9629-client-side-tools-cas-urt-v2

Conversation

@norman-le
Copy link
Copy Markdown
Contributor

Had to make new PR (old PR here: #1609)

## uipath-python

- Added ClientSide tool type to agent model so the runtime can distinguish client-side tools from server tools
- Bridge emits executingToolCall event on durable interrupt when is_execution_phase marker is set, enabling the client to know when to execute the tool
- Bridge routes endToolCall from the client back to the agent, completing the interrupt/resume cycle

## uipath-langchain-python

- Client-side tool factory creates StructuredTool instances that use @durable_interrupt to pause the graph and wait for client execution
- @mockable wraps @durable_interrupt (as a separate outer function) so evals can simulate client-side tools without hitting GraphInterrupt
- CLIENT_SIDE_TOOL_MARKER defined in hitl.py as the single source of truth for identifying client-side tools across the codebase
- Error-handling wrapper (RunnableCallableWithTool) now preserves .tool reference for client-side tools, enabling runtime discovery
- Runtime discovers client-side tools from the compiled graph via shared _iter_graph_tools() iterator, used by both confirmation and client-side tool detection
- MessageMapper emits executingToolCall only for server tools without interrupts; client-side and confirmation tools get it from the bridge instead
- MessageMapper suppresses endToolCall for client-side tool results since the client already produced the result
- MessageMapper sets isClientSideTool and outputSchema on startToolCall events so the client knows to show the input form
- 9 new tests covering tool discovery, executingToolCall emission rules, and endToolCall suppression

## uipath-agents-python

- Graph builder strips CLIENT_SIDE_TOOL_MARKER during evals so @durable_interrupt is bypassed and @mockable can intercept

## AgentInterfaces

- CAS tracks is_client_side_tool on tool calls in the database and forwards client-originated endToolCall to the agent
- CAS validates client-side tool declarations against the agent definition and guards against unauthorized endToolCall for non-client-side tools
- React SDK listens for executingToolCall events and renders a form (ClientSideToolWidget) using the tool's output schema for the user to fill in
- ClientSideToolWidget reuses the existing ToolConfirmationFormContent component
- Added type schemas for executingToolCall events and client-side tool declarations

Videos in CAS localhost (Agent Builder changes already published, but this will be the debug experience as well when the sdk is upgraded):

Without tool confirmation for client side tool:

Screen.Recording.2026-05-13.at.9.32.26.PM.mov

With tool confirmation for client side tool:

Screen.Recording.2026-05-13.at.9.27.56.PM.mov

URT Eval:
image

Related to changes in other PRs:
CAS: https://github.com/UiPath/AgentInterfaces/pull/949
uipath-langchain-python (tool definition): UiPath/uipath-langchain-python#819
uipath-python (bridge changes): #1609
uipath-agents-python (skipping for evals, so it can be mocked): https://github.com/UiPath/uipath-agents-python/pull/485
Another Agents PR fixing some issues with debug: https://github.com/UiPath/Agents/pull/5250

Copilot AI review requested due to automatic review settings May 18, 2026 15:09
@github-actions github-actions Bot added test:uipath-langchain Triggers tests in the uipath-langchain-python repository test:uipath-runtime test:uipath-integrations labels May 18, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds client-side tool support to the Python SDK bridge and conversation models, including new tool-call event schemas and agent model parsing for ClientSide tools.

Changes:

  • Adds ClientSide agent tool resource parsing and tests.
  • Adds executingToolCall, client-side tool declaration, and tool schema fields to chat event models.
  • Updates the SocketIO chat bridge to emit execution-phase tool events and resume from client-originated endToolCall.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
packages/uipath/src/uipath/_cli/_chat/_bridge.py Emits executingToolCall and accepts endToolCall as a resume signal.
packages/uipath/src/uipath/agent/models/agent.py Adds ClientSide tool type and resource config support.
packages/uipath-core/src/uipath/core/chat/tool.py Adds client-side/tool execution fields and executingToolCall schema.
packages/uipath-core/src/uipath/core/chat/exchange.py Adds client-side tool declarations to exchange start events.
packages/uipath-core/src/uipath/core/chat/__init__.py Exports the new executing tool-call event model.
packages/uipath/tests/cli/chat/test_bridge.py Adds bridge tests for execution-phase events and resume from tool events.
packages/uipath/tests/agent/models/test_agent.py Adds agent model tests for client-side tool resources.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/uipath-core/src/uipath/core/chat/__init__.py
Comment thread packages/uipath/src/uipath/_cli/_chat/_bridge.py Outdated
Comment thread packages/uipath/src/uipath/_cli/_chat/_bridge.py Outdated
Comment thread packages/uipath/src/uipath/_cli/_chat/_bridge.py Outdated
@sonarqubecloud
Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
87.5% Coverage on New Code (required ≥ 90%)

See analysis details on SonarQube Cloud

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

test:uipath-integrations test:uipath-langchain Triggers tests in the uipath-langchain-python repository test:uipath-runtime

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants