Repository navigation
feat(deps): make uipath-ipc a required dependency - #1900
Merged
Merged
Conversation
uipath-ipc sits behind the `ipc` extra because of a review note on #1809 (2026-07-23): at the time the package was only on the internal feed, so a hard dependency would have broken `pip install uipath` for anyone outside UiPath. uipath-ipc 2.5.2 was published to public PyPI on 2026-07-24, five days before #1809 merged, and the extra stayed behind. That costs us downstream. A consumer cannot tell from the uipath version whether an environment can actually speak IPC: a project declaring plain `uipath` resolves uipath and uipath-runtime but not uipath-ipc, so any caller of `uipath server --ipc-pipe` or `uipath run --handler-ipc-pipe` has to either fail at import time or silently fall back. Version-gating is the normal way to negotiate these channels and it cannot work while the transport is optional. The `ipc` extra stays declared, so an existing `uipath[ipc]` requirement still resolves. Removed from the dev group, where it is now redundant.
eduard-dumitru
requested review from
mihaipetrisor82uip,
radu-mocanu and
robert-ursu
September 16, 2026 09:54
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Three checked-in sample lockfiles must be regenerated to include the new required dependency.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
Promotes uipath-ipc to a required runtime dependency while preserving the existing ipc extra.
Changes:
- Updates dependency declarations and lockfile.
- Removes the redundant development dependency.
- Clarifies IPC missing-dependency messages.
File summaries
| File | Summary |
|---|---|
packages/uipath/uv.lock |
Updates the locked dependency graph. |
packages/uipath/src/uipath/_cli/cli_server_ipc.py |
Updates IPC fallback messaging. |
packages/uipath/src/uipath/_cli/_job_api.py |
Updates handler IPC fallback messaging. |
packages/uipath/pyproject.toml |
Makes uipath-ipc a required dependency. |
Review details
- Files reviewed: 3/4 changed files
- Comments generated: 1
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
The three samples that resolve uipath as an editable path dependency had locked its old dependency set, so a locked sync would have installed a uipath without uipath-ipc. greeter is left alone: it resolves uipath from the registry, so this change does not reach it.
connect_handler_ipc and start_ipc_server each caught ImportError on the uipath-ipc import and re-raised it as a RuntimeError telling the caller to install the extra. Neither can fire now that the package is a base dependency: a uipath new enough to have these code paths already brings it. Both imports stay inside their functions, so nothing new is imported at module load, and a broken install now surfaces as a plain ImportError pointing at the line. Their two tests go with them. The module-level Message import is deliberately left alone. Only its ImportError arm is dead: when uipath-ipc is present the else branch is what binds Message at runtime, and the dispatcher resolves the contract's annotations against it.
robert-ursu
approved these changes
Sep 16, 2026
|
🚨 Heads up:
|
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.



Why
uipath-ipcsits behind theipcextra because of a review note on #1809 (2026-07-23):That was correct at the time — uipath-ipc was only on the internal feed. It was published to public PyPI as 2.5.2 on 2026-07-24, five days before #1809 merged. The extra just stayed behind.
What it costs us
A consumer cannot tell from the
uipathversion whether an environment can actually speak IPC.A project declaring plain
uipathresolvesuipathanduipath-runtimebut notuipath-ipc, because the extra is opt-in. So anything invokinguipath server --ipc-pipeoruipath run --handler-ipc-pipeon that environment either dies at import time or has to silently fall back to another channel — and neither the caller nor the version number can predict which.Version-gating is the normal way to negotiate a transport, and it can't work while the transport itself is optional. This is what blocks the serverless handler from relying on the job-api channel added in #1883.
What changes
uipath-ipc>=2.5.1, <2.6.0moves from[project.optional-dependencies]intodependencies.ipcextra stays declared, so an existinguipath[ipc]requirement keeps resolving. No consumer has to change anything.devgroup, where it is now redundant.ImportErrorguards stay as a broken-install backstop; their messages no longer tell you to install an extra that is now implied.Trade-off
Every
pip install uipathnow pulls one more package. uipath-ipc is pure Python and already resolved for anyone usinguipath[ipc], the pooled serverless runtime, or the dev group.Verification
uipathtest suite greenmypy srcclean — 190 filesuv.lockregenerated