Skip to content

feat(agent): [2/5] conversational agent tool config [PRODEV-1742] - #1931

Draft
ionmincu wants to merge 5 commits into
mainfrom
feat/prodev-1742-conversational-a2a
Draft

ionmincu wants to merge 5 commits into
mainfrom
feat/prodev-1742-conversational-a2a

Conversation

@ionmincu

@ionmincu ionmincu commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

PR stack (PRODEV-1742), merge in this order

  1. [1/5] UiPath/Agents#6529: storage schema: conversationalAgent tool type, plus its process binding in the packager. Wait for the @uipath/agents-storage-schemas 1.44.0 and @uipath/tool-agent 2.2.0 (packager) releases.
  2. [2/5] feat(agent): [2/5] conversational agent tool config [PRODEV-1742] #1931: runtime model: AgentToolType.CONVERSATIONAL_AGENT and AgentConversationalAgentToolResourceConfig. Wait for the uipath 2.14.37 PyPI release. ← this PR
  3. [3/5] feat(a2a): [3/5] call UiPath conversational agents as A2A tools [PRODEV-1742] uipath-langchain-python#1139: runtime tool: resolve the release and call AgentHub a2a/{folderKey}/{releaseId} over A2A. Run uv lock first, then wait for the uipath-langchain 0.18.27 release.
  4. [4/5] UiPath/uipath-agents-python#800: runtime graph: build the A2A tool for conversationalAgent tools (never a job tool), bump dependencies. Run uv lock first, then deploy the runtime.
  5. [5/5] UiPath/flow-workbench#4734: Flow: pick conversational agents as tools, write the conversationalAgent tool resource. Can merge any time after [1/5] is released, with the flag off. First bump @uipath/agents-storage-schemas to ^1.44.0 and @uipath/tool-agent to ^2.2.0 (older packagers emit no process binding for this tool), and set the flag default back to false.

Turn on the Flow flag canvas.nodes.agent-tool-conversational-a2a only after [4/5] is deployed.

Adds a conversationalAgent tool type so an agent can call an existing UiPath conversational agent.

Why a tool type, not an a2a variant

An a2a resource without a slug makes older runtimes reject the whole agent (AgentA2aResourceConfig requires slug, and _normalize_resources keeps a2a). An unknown tool type goes through TOOL_MAP.get(t.lower(), "Unknown"), so older runtimes skip just that tool. A tool type also gets the solution process.<processName> binding from the packager, so @resource_override(process, process_name) takes effect. Precedent: AgentToolType.FLOW / FUNCTION.

Design

  • AgentToolType.CONVERSATIONAL_AGENT = "ConversationalAgent" and the TOOL_MAP entry "conversationalagent", so any casing normalizes.
  • New class AgentConversationalAgentToolResourceConfig(BaseAgentToolResourceConfig) with type: Literal[CONVERSATIONAL_AGENT], properties: AgentConversationalAgentToolProperties (processName optional so a record without it still loads and the runtime reports it at call time, folderPath and cachedAgentCard optional, plus the base exampleCalls / requireConversationalConfirmation), outputSchema, settings and argumentProperties. location and guardrail are extras, as for other tools. It is a separate class, not another literal on AgentProcessToolResourceConfig.type, so langchain's tool_factory cannot route it to the job-start path.
  • It is added to the ToolResourceConfig union nested on type. The a2a code is back to main.

Tests

Mixed agent.json (agent tool, remote a2a, conversational agent tool) parses into the right classes; by-alias round trip keeps type; case variants normalize; optional properties may be missing or null; missing processName still loads the agent; the cross-repo contract fixture parses with every field preserved; an unknown tool type still goes to Unknown.

Version bumped to 2.14.37 in packages/uipath (pyproject and uv.lock).

🤖 Generated with Claude Code

Add AgentA2aConversationalResourceConfig and route a2a resources with
agentType == "conversational" to it through a nested discriminator.
Remote A2A records keep using AgentA2aResourceConfig. An a2a record with
an unrecognised agentType falls back to the Unknown resource.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@ionmincu ionmincu changed the title feat(agent): conversational A2A resource config [PRODEV-1742] feat(agent): [2/5] conversational A2A resource config [PRODEV-1742] Oct 7, 2026
…f an a2a variant

An a2a resource without a slug makes older runtimes reject the whole agent,
while an unknown tool type is skipped on its own and also gets the solution
process binding. Drop AgentA2aConversationalResourceConfig and add
AgentToolType.CONVERSATIONAL_AGENT with AgentConversationalAgentToolResourceConfig.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@ionmincu ionmincu changed the title feat(agent): [2/5] conversational A2A resource config [PRODEV-1742] feat(agent): [2/5] conversational agent tool config [PRODEV-1742] Oct 8, 2026
ionmincu and others added 2 commits October 8, 2026 11:06
…ecord does not reject the agent

Also add the cross-repo contract fixture test.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@github-actions

github-actions Bot commented Oct 8, 2026

Copy link
Copy Markdown

🚨 Heads up: uipath-integrations cross-tests are FAILING 🚨

Your changes may break one or more integrations in uipath-integrations-python:

  • uipath-openai-agents
  • uipath-google-adk
  • uipath-agent-framework
  • uipath-llamaindex
  • uipath-pydantic-ai

⚠️ These checks are NOT enforced by branch protection rules. Please review the failures before merging.

🔍 Inspect the failed run →

@sonarqubecloud

sonarqubecloud Bot commented Oct 8, 2026

Copy link
Copy Markdown

This branch has not been deployed

No deployments
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.

1 participant