Skip to content

feat: forward EntryPointPath when starting a process job [PC-4935] - #1866

Draft
UiPathPetruPopa wants to merge 2 commits into
mainfrom
pc-4935/entry-point-path
Draft

feat: forward EntryPointPath when starting a process job [PC-4935]#1866
UiPathPetruPopa wants to merge 2 commits into
mainfrom
pc-4935/entry-point-path

Conversation

@UiPathPetruPopa

Copy link
Copy Markdown

What changed?

Two packages, one capability: a process tool can name which entry point of the referenced process it invokes.

  • packages/uipathAgentProcessToolProperties gains entry_point_path (alias entryPointPath).
  • packages/uipath-platformProcessesService forwards it to Orchestrator as StartInfo.EntryPointPath.

Inert until something sets it. With the field absent the payload is byte-identical to today's, and Orchestrator resolves the release's configured entry point exactly as it does now. Nothing writes the field yet — the picker that does is gated behind its own flag in the Agents repo and lands after this.

Two things that would have failed silently

**kwargs would not have worked. invoke/invoke_async accept **kwargs, but _invoke_spec is called with an explicit argument list and pulls exactly one name out of it (parent_span_id). An entry_point_path kwarg would have been accepted at the call site, dropped before the payload, and reported as success. It is threaded explicitly through all three.

The key must be the literal "EntryPointPath". This payload is a plain dict of hardcoded PascalCase keys — no alias generator, no conversion layer — so a snake_case name would ship as-is. The model needs the same care for the mirror reason: BaseCfg sets validate_by_name and validate_by_alias but registers no alias generator, so every camelCase alias in that file is hand-written.

Empty is omitted, not sent. "" would make Orchestrator resolve an entry point named "", which fails the release lookup; an absent key selects the configured default.

How has this been tested?

  • tests/services/test_processes_service.py — 11 tests pass. Two added: the path appears in startInfo when given, and an empty string is omitted.
  • The omission test was mutation-checked: weakening the guard from if entry_point_path: to if entry_point_path is not None: makes it fail. It guards the behaviour rather than merely covering the line.
  • The existing test_invoke asserts the exact payload and still passes unchanged — direct evidence the default path is untouched.
  • packages/uipath: full model/agent suite green; ruff check and ruff format --check clean on both packages.

Are there any breaking changes?

  • Under Feature Flag
  • None
  • DB migrations
  • API removals
  • Authentication/Authorization
  • Deployment pipeline
  • Infrastructure

Purely additive: a new optional model field and a new optional keyword argument.

Order

Part of PC-4935. Both packages must publish before uipath-langchain can raise its lower bounds and forward the stored value, and all of that precedes the picker UI — which is what makes the field user-reachable.

🤖 Generated with Claude Code

Lets a process tool name which entry point of the referenced process it invokes.
Inert until something sets it: with the field absent the payload is byte-identical
to today's, and Orchestrator resolves the release's configured entry point.

entry_point_path is threaded explicitly through invoke, invoke_async and
_invoke_spec rather than left to **kwargs. The public methods do accept **kwargs,
but _invoke_spec is called with an explicit argument list and pulls exactly one
name out of it (parent_span_id), so a kwarg would have been accepted at the call
site, dropped before the payload, and reported as success.

The key is written as the literal "EntryPointPath". This payload is a plain dict of
hardcoded PascalCase keys with no alias generator or conversion layer, so a
snake_case name would ship as-is. The model side needs the same care for the
opposite reason: BaseCfg sets validate_by_name and validate_by_alias but registers
no alias generator, so every camelCase alias in that file is written by hand.

Empty is omitted rather than sent: "" would make Orchestrator resolve an entry point
named "", which fails the release lookup, whereas an absent key selects the
configured default. A test pins that, and fails if the guard is weakened to
`is not None`.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added test:uipath-langchain Triggers tests in the uipath-langchain-python repository test:uipath-integrations labels Aug 19, 2026
…[PC-4935]

CI requires a version not already on PyPI for every package a PR touches, and
requires a dependent to raise its floor when it changes an internal dependency in
the same PR -- otherwise a standalone install could resolve an older release that
lacks the new parameter.

uipath 2.14.5 -> 2.14.6, uipath-platform 0.2.19 -> 0.2.20, and uipath's pin raised
from uipath-platform>=0.2.14 to >=0.2.20. Lockfiles refreshed to match.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

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

Your changes may break the uipath-langchain-python integration.

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

🔍 Inspect the failed run →

@sonarqubecloud

Copy link
Copy Markdown

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