@uipath/solution-tool 1.201.0-preview.133 → 1.202.0-preview.134

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/deploy.d.ts +6 -1
  2. package/dist/deploy.js +15 -16
  3. package/dist/{index-2fj08e7n.js → index-gpd94m28.js} +27 -27
  4. package/dist/{index-w03qc9m8.js → index-sby22td6.js} +4 -4
  5. package/dist/index.js +16 -19
  6. package/dist/init.js +10 -13
  7. package/dist/{js-yaml-4ypbq2tt.js → js-yaml-b2jq67kn.js} +16 -16
  8. package/dist/{list-skbehtq2.js → list-3mrc9s3f.js} +7 -11
  9. package/dist/models/pack-command-types.d.ts +8 -0
  10. package/dist/pack.js +9 -12
  11. package/dist/{packager-tool-krd5v2r5.js → packager-tool-0qva0ebq.js} +129 -53
  12. package/dist/{packager-tool-0v6na3yp.js → packager-tool-1de529jm.js} +9 -7
  13. package/dist/{packager-tool-9vehmnke.js → packager-tool-3hbsdwjm.js} +6 -661
  14. package/dist/{packager-tool-fzwxq48d.js → packager-tool-3y92zbg2.js} +3 -3
  15. package/dist/{packager-tool-f7kj5fpa.js → packager-tool-5pfxgc8z.js} +19 -11
  16. package/dist/{packager-tool-9w3k4e77.js → packager-tool-b16qemg2.js} +494 -198
  17. package/dist/{packager-tool-zbp5p149.js → packager-tool-bahvrjbv.js} +592 -264
  18. package/dist/{packager-tool-129wn232.js → packager-tool-dfrk01gn.js} +198 -2
  19. package/dist/{packager-tool-67ssxgph.js → packager-tool-fh8pb2th.js} +3 -5
  20. package/dist/{packager-tool-c29pg93e.js → packager-tool-hc6ybtdw.js} +5 -5
  21. package/dist/{packager-tool-bcpknnr8.js → packager-tool-hgx66d1p.js} +1656 -558
  22. package/dist/{packager-tool-2yz7m5ny.js → packager-tool-nq2nq71y.js} +21282 -20197
  23. package/dist/{packager-tool-wjhn59ft.js → packager-tool-t89r1edr.js} +596 -180
  24. package/dist/{packager-tool-vpr77gre.js → packager-tool-x3ehbhsn.js} +3 -2
  25. package/dist/{packager-tool-yktm4v4r.js → packager-tool-xntjj1bt.js} +1 -1
  26. package/dist/packager-tool.d.ts +4 -3
  27. package/dist/packager-tool.js +4 -4
  28. package/dist/publish.js +8 -11
  29. package/dist/resource.js +7 -10
  30. package/dist/services/activation.d.ts +9 -1
  31. package/dist/services/deploy-run-service.d.ts +25 -1
  32. package/dist/services/deploy-uninstall-service.d.ts +20 -1
  33. package/dist/services/deploy-upgrade-service.d.ts +94 -0
  34. package/dist/services/deployment-feed-locator.d.ts +36 -0
  35. package/dist/services/deployment-search.d.ts +88 -7
  36. package/dist/services/pack-command-service.d.ts +15 -0
  37. package/dist/services/package-metadata-rewrite.d.ts +9 -5
  38. package/dist/services/publish-service.d.ts +11 -9
  39. package/dist/services/solution-path.d.ts +34 -0
  40. package/dist/templates/AGENTS.md +183 -16
  41. package/dist/tool.js +18 -21
  42. package/package.json +2 -2
  43. package/dist/browser-strategy-yccf8mtd.js +0 -99
  44. package/dist/node-strategy-12qfy0nv.js +0 -348
  45. package/dist/packager-tool-5arsyj36.js +0 -11
  46. package/dist/packager-tool-7eva0peq.js +0 -265
  47. package/dist/packager-tool-9qecd4wb.js +0 -14
@@ -1,8 +1,8 @@
1
1
  # UiPath Solution Workspace
2
2
 
3
- > **A `.uipx` file in this directory marks a UiPath solution. Drive every solution operation through the `uip` CLI — packing, publishing, deploying, and deployment configuration.** Do not hand-edit `.uipx`; manage projects via `uip solution projects ...` so the manifest stays internally consistent.
3
+ > **A `.uipx` file in this directory marks a UiPath solution. Drive every solution operation through the `uip` CLI — packing, publishing, deploying, and deployment configuration.** Do not hand-edit `.uipx`; manage projects via `uip solution projects ...` so the manifest stays internally consistent. Load the `uipath-solution` skill before running `uip solution` commands or editing `.uipx` (`uip skills install`).
4
4
 
5
- This file is a static snapshot, scaffolded by the `uip` CLI version `{{cli_version}}`. If the CLI version you have access to is different, there may be inconsistencies in the commands or options listed below. When you encounter one, look up the current form with `uip <group> --help` and **edit this file in place** — find and replace the stale command with the working one.
5
+ This file is a static snapshot, scaffolded by the `uip` CLI version `{{cli_version}}`. If the CLI version you have access to is different, there may be inconsistencies in the commands or options listed below. When you encounter one, look up the current form with `uip <group> --help` and **edit this file in place** — find and replace the stale command with the working one. Do the same for anything missing: if `--help` lists a command, subcommand, or option this file does not cover, add it to the table or section where it belongs.
6
6
 
7
7
  ## The `.uipx` Manifest
8
8
 
@@ -49,7 +49,7 @@ You must manage membership via the CLI, never by editing the manifest. All these
49
49
  | Unregister a project (does not delete the project files on disk) | `uip solution projects remove <project-path> [<solution-file>]` |
50
50
  | List projects in the solution | `uip solution projects list` |
51
51
 
52
- The `uip ... init` scaffolders (`agent init`, `maestro flow init`, `maestro bpmn init`, `maestro case init`, `api-workflow init`) **auto-register** the new project when run inside a solution directory — they walk up for the enclosing `.uipx` and add it to `Projects[]` automatically, so a separate `project add` is not needed. Pass `--skip-solution-registration` to scaffold standalone without registering; the output's `Data.SolutionRegistration.Status` is then `OptedOut`. The full set of `Status` values is: `Registered` / `AlreadyRegistered` (added in this run / already present), `NotInSolution` (no enclosing `.uipx` found), `OptedOut` (`--skip-solution-registration` passed), `Skipped` (a candidate solution was found but registration was not safe to attempt — e.g. multiple `.uipx` in one directory, or the project sits outside the solution dir), and `Failed` (manifest read/parse/write error).
52
+ The `uip ...` scaffolders (`agent init`, `maestro flow init`, `maestro bpmn init`, `maestro case init`, `api-workflow init`, `codedapp init`, and `function init` for Python functions only) **auto-register** the new project when run inside a solution directory — they walk up for the enclosing `.uipx` and add it to `Projects[]` automatically, so a separate `project add` is not needed. Pass `--skip-solution-registration` to scaffold standalone without registering; the output's `Data.SolutionRegistration.Status` is then `OptedOut`. The full set of `Status` values is: `Registered` / `AlreadyRegistered` (added in this run / already present), `NotInSolution` (no enclosing `.uipx` found), `OptedOut` (`--skip-solution-registration` passed), `Skipped` (a candidate solution was found but registration was not safe to attempt — e.g. multiple `.uipx` in one directory, or the project sits outside the solution dir), and `Failed` (manifest read/parse/write error).
53
53
 
54
54
  ## Project Types
55
55
 
@@ -64,12 +64,16 @@ A solution can contain multiple projects of different types. The table below lis
64
64
  | `ProcessOrchestration` | Maestro BPMN — long-running orchestrated process | `uip maestro bpmn init <name>` | `uipath-maestro-bpmn` |
65
65
  | `Agent` | LLM agent project — **low-code** (configured via `agent.json`; no Python) or **coded** (Python: LangGraph / LlamaIndex / OpenAI Agents). Both subtypes share `ProjectType: "Agent"`; the discriminator is `agent.json#type`. | `uip agent init <path>` (low-code) · `uip codedagent new [name]` (coded — see the `uipath-agents` skill for the full flow) | `uipath-agents` |
66
66
  | `AppV2` | Coded App — web application | `uip codedapp init <path>` | `uipath-coded-apps` |
67
- | `Function` | UiPath Function (JS / TS / Python) | `uip function new [name]` | none |
68
- | `Api` | API Workflow project | `uip api-workflow init <name>` | none |
69
- | `Connector` | Integration Service connector | no CLI scaffolding use `uip is connectors` to list / get / export existing connectors | none |
67
+ | `Function` | UiPath Function (JS / TS / Python) | `uip function new [name]` | `uipath-functions` |
68
+ | `Api` | API Workflow project | `uip api-workflow init <name>` | `uipath-api-workflow` |
69
+ | `BusinessRules` | Business rule a single DMN decision. Ships as the `.dmn` file itself, not wrapped in a `.nupkg`, and the solution's `businessRule` resource points at it by file name. `restore` and `validate` are no-ops for this type. | no CLI scaffolding — authored in Studio Web | none |
70
+ | `Entity` | Data Fabric entity project — one folder per project, one `.entity` pointer file per entity; the schema itself lives in `resources/solution_folder/entity/native/<Name>.json`. Emits no package: the entity resources are the deployable payload, so `solution pack` validates the project instead of building it. | no CLI scaffolding — entity projects are modelled in the UiPath VS Code extension. Do not hand-write the `.entity` file or its resource: the pointer and the schema must stay in step, and `solution pack` fails if they do not. | `uipath-platform` (covers `uip df` entities, records and choice sets) |
71
+ | `Connector` | Integration Service connector | no CLI scaffolding — use `uip is connectors` to list / get / export existing connectors | `uipath-connector-builder` |
70
72
  | `WebApp` | Legacy low-code UiPath App (the coded variant is `AppV2`) | no CLI scaffolding | none |
71
73
 
72
- All skill should be installed by running the command: `uip skills install`. The general-purpose `uipath-platform` skill covers what isn't in a type-specific skill.
74
+ Install the skills with `uip skills install`. The general-purpose `uipath-platform` skill covers what isn't in a type-specific skill, and `uipath-solution` covers the solution lifecycle itself.
75
+
76
+ `BusinessRules`, `Library` and `Tests` projects declare no solution resources — `uip solution resources refresh` skips them instead of minting anything.
73
77
 
74
78
  **`Library` is not a project type here.** A library is a reusable `.nupkg` consumed as a NuGet dependency, so `projects add` / `import` reject it and auto-registration returns `SolutionRegistration.Status: "Skipped"`. Publish it on its own (`uip rpa pack <project-dir> <output-path>`, then `uip or libraries upload --file <nupkg-path>`) and either reference it from a project's dependencies or attach it to this solution as a resource: `uip solution resources add --source remote --kind Library --name <library-name>`.
75
79
 
@@ -88,9 +92,9 @@ uip login --client-id <ID> --client-secret <SECRET> --tenant <TENANT>
88
92
 
89
93
  # 1a. (Optional) Restore project dependencies before packing. Resolves NuGet
90
94
  # deps (including authenticated Orchestrator feeds) so pack can compile.
91
- # Useful in CI: login -> restore -> pack. Takes <solutionPath> only; it
92
- # does not produce a package. Pack also restores internally, so this is an
93
- # optimization, not a requirement.
95
+ # Useful in CI: login -> restore -> pack. Takes <solutionPath> as its only
96
+ # positional arg and does not produce a package. Pack also restores
97
+ # internally, so this is an optimization, not a requirement.
94
98
  uip solution restore .
95
99
 
96
100
  # 2. Pack the solution into a .zip. Two positional args:
@@ -126,6 +130,20 @@ uip solution deploy status <pipeline-deployment-id>
126
130
  uip solution deploy list
127
131
  ```
128
132
 
133
+ `deploy run` also takes `--parent-folder-key <key>` in place of `--parent-folder-path`, and `--personal-workspace` to deploy into your Personal Workspace instead of the tenant.
134
+
135
+ **A Personal Workspace deploy does not wait.** A tenant deploy polls until the install reaches a terminal state and reports `Status: "DeploymentSucceeded"`. `--personal-workspace` goes through a different endpoint that answers as soon as the install is accepted, so it reports `Status: "DeploymentStarted"` plus a `NextSteps` line and returns while the install is still running. Anything you do to that deployment next — `deploy uninstall`, `deploy activate`, an upgrade — is refused with `HTTP 400 … cannot be uninstalled` (or the equivalent) for as long as the operation is in progress.
136
+
137
+ Add `--wait` when the next step needs the deployment settled:
138
+
139
+ ```bash
140
+ uip solution deploy run ... --personal-workspace --wait --timeout 300
141
+ ```
142
+
143
+ With `--wait` the command polls the deployment to a terminal state inside `--timeout`, reports `Status: "DeploymentSucceeded"` and drops `NextSteps` (there is nothing left to check). A terminal failure exits `1` and names the operation status; still running when the timeout expires exits `2` with `ErrorCode: timeout` and `Retry: RetryLater` — "may still be running", so retry or check `deploy list` rather than treating it as a failed install. Without `--wait` nothing changes, so poll `uip solution deploy list` yourself if you skip it.
144
+
145
+ **One deployment per package.** `deploy run` always creates a *new* deployment in a *new* Orchestrator folder — it never updates an existing one, and it cannot deploy into a folder that already exists (Orchestrator renames the folder instead, `MySolution` -> `MySolution 1`). So if the package is already deployed, the command stops and lists the existing deployments rather than quietly adding another folder. That check is best-effort, not a guarantee: it reads the Solutions search, which needs a user session, so a CI job signed in with an application (client-credentials) account deploys without it, and a failed lookup only logs a warning. In automation, track what you have already deployed instead of relying on the stop. To ship a new version, upgrade the existing deployment in place with `uip solution deploy upgrade <deployment-key>`; to start over, `deploy uninstall` first. Pass `--yes` only when you really do want a second, independent copy. While you are still iterating, validate locally (`solution pack --dry-run`) instead of deploying each attempt.
146
+
129
147
  **Activation lifecycle.** `deploy run` activates by default. To split the steps:
130
148
 
131
149
  ```bash
@@ -136,6 +154,28 @@ uip solution deploy uninstall <deployment-name> --yes # remove the deployment
136
154
 
137
155
  `uninstall` and `activate` take the deployment name as a **positional** argument (no `--name` flag). `status` takes the **pipeline deployment ID** (the GUID returned by `deploy run`), also positional.
138
156
 
157
+ `uninstall` waits out an operation that blocks it: when Orchestrator refuses because the deployment still has something running, the CLI polls until that finishes and then sends the request again, all inside `--timeout` (which covers the whole command, the status poll included). If it is still busy when the timeout expires you get exit `2` with `ErrorCode: timeout` and `Retry: RetryLater` — retry later, do not treat it as permanent. A refusal for any other reason (superseded, inactive, unknown name) still fails immediately with exit `1`.
158
+
159
+ Neither `uninstall` nor `activate` takes a feed flag, and neither needs one: they find the deployment themselves — tenant feed first, then your Personal Workspace, then the folder feeds you can reach — and scope their requests to whatever feed holds it. So the `deploy activate <name>` that `--skip-activate` points you at works the same on a `--personal-workspace` or `--feed` deployment as on a tenant one. The cost is one extra lookup per call, and a name that exists in no feed you can see is reported as not found rather than as a blocked uninstall.
160
+
161
+ ## Dependency Feeds
162
+
163
+ Packing an RPA project restores its NuGet dependencies first, so `pack` and `restore` both need to know which feeds to resolve against. So does `cleanup`: deciding that a dependency is *unused* means resolving the dependency graph, so it reads the same feeds. All three take the same three options.
164
+
165
+ ```bash
166
+ uip solution pack . ./out --feed-folder Shared/Production # resolve from one folder's library feed
167
+ uip solution pack . ./out --nuget-sources-config-path ./NuGet.config
168
+ uip solution pack . ./out --exclude-configured-sources # resolve from nothing else
169
+ ```
170
+
171
+ By default dependencies resolve against every tenant feed the session can see, plus the feeds the WorkflowCompiler adds on its own: nuget.org, UiPath-Official, Connect (`gallery.uipath.com`) and the UiPath internal feed.
172
+
173
+ - `--feed-folder <name>` narrows the Orchestrator side to a single folder's library feed — a folder name or a fully qualified path. It fails closed: naming a folder with no authenticated session is an error, not a silent fall back to other sources.
174
+ - `--nuget-sources-config-path <path>` points at your own `NuGet.config`. Its sources are added to the ones above.
175
+ - `--exclude-configured-sources` drops the WorkflowCompiler's built-in feeds, so resolution uses only the tenant feeds (or `--feed-folder`) and `--nuget-sources-config-path`. Use it when a build must resolve from an approved set only.
176
+
177
+ That last flag is strict on purpose, and that is what makes it easy to get wrong: with the built-ins gone, the official activity packages (`UiPath.System.Activities`, `UiPath.UIAutomation.Activities`, …) have to be reachable on the feeds you named. Most tenant library feeds do not mirror UiPath-Official, so on a typical solution a bare `--exclude-configured-sources` fails the restore. Pair it with a `NuGet.config` pointing at your own mirror.
178
+
139
179
  ## Package Signing
140
180
 
141
181
  `solution pack` can sign each packed project `.nupkg` with a code-signing certificate. Signing is opt-in: add `--signing-certificate-path <cert.pfx>` to the pack command. The certificate password (`--signing-certificate-password`) is optional — passing it as `env.VAR` (e.g. `env.SIGNING_PASSWORD`) is recommended, though an inline value also works. An optional timestamp server is set with `--signing-timestamp-server <url>`.
@@ -152,20 +192,92 @@ uip solution pack . ./out --automation-ops-profile StudioWeb # analyze a
152
192
 
153
193
  `--skip-analyze` turns off only the analyzer rules — the compiler still restores, compiles, and validates, so a broken project still fails the pack.
154
194
 
155
- The analyzer rule configuration comes from whichever governance flag you use. `--governance-file-path` reads a local policy file. `--automation-ops-profile` downloads the policy published in AutomationOps for the signed-in tenant; its value is the product to fetch (`StudioWeb`, `Development`, `Business`, …). With neither flag the analyzer uses the rules shipped with the WorkflowCompiler. The two are mutually exclusive. If the tenant policy can't be fetched — no session, or nothing published — the pack falls back to the shipped rules instead of failing.
195
+ The analyzer rule configuration comes from whichever governance flag you use. `--governance-file-path` reads a local policy file. `--automation-ops-profile` downloads the policy published in AutomationOps for the signed-in tenant; its value is the product to fetch (`StudioWeb`, `Development`, `Business`, …). With neither flag the analyzer uses the rules shipped with the WorkflowCompiler. The two are mutually exclusive. If the tenant policy can't be fetched — no session, or nothing published — the pack falls back to the shipped rules instead of failing. Note what that means for CI: the pack still returns `Result: Success` and exit `0`, so a stage using `--automation-ops-profile` as a governance gate goes green while having enforced the shipped defaults, not the tenant policy. Check the logs if the distinction matters.
196
+
197
+ ## Dependency Feeds
198
+
199
+ Packing an RPA project restores its NuGet dependencies first, so `pack` and `restore` both need to know which feeds to resolve against. So does `cleanup`: deciding that a dependency is *unused* means resolving the dependency graph, so it reads the same feeds.
200
+
201
+ ```bash
202
+ uip solution pack . ./out --feed-folder Shared/Production # resolve from one folder's library feed
203
+ uip solution pack . ./out --nuget-sources-config-path ./NuGet.config
204
+ ```
205
+
206
+ By default dependencies resolve against every tenant feed the session can see.
207
+
208
+ - `--feed-folder <name>` narrows that to a single Orchestrator folder's library feed — a folder name or a fully qualified path. Accepted by `pack`, `restore` and `cleanup`. It fails closed: naming a folder with no authenticated session is an error, not a silent fall back to other sources.
209
+ - `--nuget-sources-config-path <path>` points at your own `NuGet.config`. Accepted by `pack` and `restore` only — `cleanup` does not take it, so a solution that packs against custom sources may clean up against different ones.
210
+
211
+ `pack` also takes `-n, --name <name>` to override the package name (it defaults to the solution folder or `.uis` file name) and `-v, --version <version>` (defaults to `1.0.0`).
212
+
213
+ `publish` goes to the tenant feed by default:
214
+
215
+ ```bash
216
+ uip solution publish ./out/<package>.zip --personal-workspace # publish to your Personal Workspace instead
217
+ uip solution publish ./out/<package>.zip --wait # block until the package is Ready or Active
218
+ ```
219
+
220
+ `publish` also accepts `--package-name` / `--package-version`, but those rewrite `solutionMetadata.json` inside the `.zip`, so they only work on a package produced by `uip solution pack`. Prefer packing with the name and version you want.
221
+
222
+ Published packages live on the tenant feed:
223
+
224
+ ```bash
225
+ uip solution packages list --limit 100 # what's published
226
+ uip solution packages download <package-name> [package-version] # pull a .zip back (latest if version omitted; -d for the destination)
227
+ uip solution packages delete <package-name> <package-version> --yes # remove a version (--yes required)
228
+ ```
229
+
230
+ ## Solution Cleanup
231
+
232
+ `uip solution cleanup` removes unused items from every project in the solution. For a solution directory it **modifies the project sources in place**, so check what it would do first:
233
+
234
+ ```bash
235
+ uip solution cleanup . --dry-run # only detect unused items, change nothing
236
+ uip solution cleanup . # apply
237
+ uip solution cleanup . --skip-imports # apply, but leave now-unused references in project files alone
238
+ ```
239
+
240
+ There is **no confirmation prompt and no `--yes` flag** — unlike `deploy uninstall` and `packages delete`, which both refuse to run without `--yes`. The bare command mutates the working tree, so run `--dry-run` first and have the tree committed.
241
+
242
+ Cleanup decides what is unused by resolving dependencies, and it always consults whatever NuGet sources the user and machine config already define — there is no flag to turn that off. A source configured outside the solution can therefore influence what gets deleted from the project tree.
156
243
 
157
244
  ## Studio Web (Browser Editing)
158
245
 
159
246
  Studio Web is a separate target from the Orchestrator deploy chain — it hosts a browser-based collaborative editor for solutions. The `solution upload` command pushes the local solution there and returns a `DesignerUrl` to open the solution in a browser; this is independent of `pack` / `publish` / `deploy` and does *not* produce a runtime-deployable artifact.
160
247
 
161
248
  ```bash
162
- uip solution upload . # upload solution dir to Studio Web as a new solution; returns DesignerUrl
163
- uip solution upload . --force # force-replace the existing Studio Web solution referenced by .uipx (destroys cloud version history)
164
- uip solution download <solution-id> # round-trip a Studio Web solution back to disk
249
+ uip solution upload . # push solution dir to Studio Web; imports it or updates it in place; returns DesignerUrl
250
+ uip solution upload . --no-snapshot # same, but skip recording a restorable pre-overwrite version
251
+ uip solution download <solution-id> # round-trip a Studio Web solution back to disk as ./<solution-id>.uis
252
+ uip solution download <solution-id> -d ./out --extract # same, plus unzip it into ./out/<solution-id>/
253
+ uip solution download <solution-id> -n my-solution # name the output my-solution.uis (and my-solution/ with --extract)
165
254
  uip solution delete <solution-id> --yes # remove a solution from Studio Web (--yes required; the CLI never prompts)
166
255
  ```
167
256
 
168
- `upload` accepts a solution directory, a `.uipx` file, or a `.uis` file. It probes Studio Web for the bundled `SolutionId` first: if the cloud has no solution with that id, the upload imports as new; if a solution with that id already exists, the upload is refused unless `--force` is passed. Forcing replaces the cloud project in place and **wipes its Studio Web version history**, so use `--force` deliberately. To upload a copy as an unrelated cloud solution instead of overwriting, scaffold a fresh solution with `uip solution init` (or remove the `SolutionId` from the local `.uipx`) and re-run upload.
257
+ `upload` accepts a solution directory, a `.uipx` file, or a `.uis` file. It checks Studio Web for the bundled `SolutionId` and picks the operation itself, so the same command works for the first upload and every one after it:
258
+
259
+ - **cloud has no solution with that id** — imported as new. Studio Web assigns its own `SolutionId` (it never honors the one in the archive), and the CLI writes that id into the local `.uipx`. That link is what makes your next upload an update instead of a second solution, and it is reported under `Data.LocalSolutionIdUpdated`.
260
+ - **cloud already has it** — contents replaced in place under the same id. Existing Studio Web version history is **kept**, and the contents being replaced are first recorded as a restorable version. Pass `--no-snapshot` to skip that recording in a tight iteration loop — then anything changed in Studio Web since your last upload is lost (the local solution files are never affected).
261
+
262
+ `Data.Action` is `Imported` or `Overwritten`, so you can tell which ran. `--force` skips the existence check and overwrites directly; it is not normally needed, it fails rather than importing if that solution is gone, and it has no effect when no `SolutionId` is bundled (the upload imports as new). To upload a copy as an unrelated cloud solution instead of updating, scaffold a fresh solution with `uip solution init`, or replace the `SolutionId` in the local `.uipx` with a fresh GUID and re-run upload (removing the field entirely fails `.uipx` validation).
263
+
264
+ `download` writes the `.uis` archive and nothing else — extraction is opt-in. Pass `--extract` to also unzip it into a sibling directory named after the archive; that directory is a working solution tree, with the `.uipx` manifest at its root. `--extract` also drops `AGENTS.md` and `CLAUDE.md` there so an agent picking the solution up has the same briefing `uip solution init` writes. It only fills gaps: a file the archive already carried is left alone, and the paths actually written come back in `Data.BriefingFiles`. Without `--extract` you get the zip only, and no briefing files — there is no solution directory to put them in.
265
+
266
+ Two more verbs act on a **cloud** solution project rather than the local tree — do not confuse them with the local `projects add` / `import` / `remove` / `list` membership commands above:
267
+
268
+ ```bash
269
+ # Publish a cloud solution project straight to a solution package (no local pack)
270
+ uip solution projects publish \
271
+ --project-name <cloud-project-name> \
272
+ --package-name <package-name> \
273
+ --package-version <version>
274
+
275
+ # Sync a cloud solution project, or reset it
276
+ uip solution projects resync <cloud-project-name>
277
+ uip solution projects resync <cloud-project-name> --sync-option Reset
278
+ ```
279
+
280
+ `projects publish` requires all three of `--project-name`, `--package-name` and `--package-version`, and optionally takes `--folder-name`, `--description` and `--release-notes`. `projects resync` accepts the project name positionally or as `--project-name`, and `--sync-option` is `Sync` (default) or `Reset`. Both wait for the operation to finish.
169
281
 
170
282
  ## Per-Project Bindings (`bindings_v2.json`)
171
283
 
@@ -179,12 +291,63 @@ uip solution resources refresh # re-scan every project, sync new / removed r
179
291
 
180
292
  `solution resources refresh` creates new resources for bindings not yet in the solution and imports from Orchestrator when a matching resource already exists.
181
293
 
294
+ ### Adding a resource by hand
295
+
296
+ A resource is either **virtual** — declared locally now, provisioned when the solution deploys — or **imported**, pointing at something that already exists in Orchestrator. `--source` picks which:
297
+
298
+ ```bash
299
+ uip solution resources add --source local --kind Queue --name InvoiceQueue
300
+ uip solution resources add --source remote --kind Process --name Existing --folder-path Shared
301
+ ```
302
+
303
+ **Not every kind can be virtual.** Queues, assets and buckets can — the solution creates them on deploy. Kinds that must already exist somewhere (processes, connections, apps, indexes, entities) cannot be conjured from a local declaration; they need `--source remote`, or a `deploy config link` onto an existing resource at deploy time.
304
+
305
+ `--source local` does **not** enforce that. It succeeds for any kind, prints `Result: Success`, and writes a stub — the check that would catch it is not on this code path. The failure surfaces later, at deploy. Two ways to catch it early:
306
+
307
+ - `uip solution resources refresh` does check, and warns per resource: `Link it before deploy: uip solution deploy config link <file> "<name>" --name <existing-name>`. If you see that warning, the resource cannot be virtual.
308
+ - `uip solution resources list --source remote --kind <kind>` — if the kind is one Orchestrator owns, confirm the target is really there before declaring it locally.
309
+
310
+ `--folder-path` is rejected with `--source local`: a virtual always lands in `solution_folder`.
311
+
182
312
  Inspect the current solution inventory:
183
313
 
184
314
  ```bash
185
315
  uip solution resources list # everything declared in this solution
316
+ uip solution resources list --source remote --kind app --include-version
317
+ # classic Apps in Orchestrator, with the version deployed per folder
318
+ uip solution resources list --search <term> # filter by name
319
+ ```
320
+
321
+ `--include-version` reads the live `version` of the kinds that carry one (`app`,
322
+ `appVersion`, `package`, `process`). It costs one extra call per resource, so it
323
+ is off by default.
324
+
325
+ Every command below takes the resource **key** from `resources list`. `--solution-folder <path>` overrides the solution root (defaults to the current directory) on all of them.
326
+
327
+ ```bash
328
+ # Read one resource's full spec, locks and metadata
329
+ uip solution resources get <resource-key>
330
+ uip solution resources get <resource-key> --include-dependencies
331
+
332
+ # Patch spec properties — the JSON is merged into the existing spec
333
+ uip solution resources edit <resource-key> --patch '{"retentionPeriod":14}'
334
+ uip solution resources edit <resource-key> --patch - # read the JSON from stdin
335
+
336
+ # Drop a resource from the solution (local only, leaves bindings_v2.json alone)
337
+ uip solution resources remove <resource-key>
186
338
  ```
187
339
 
340
+ `get` and `edit` use the same shape — **copy the casing `get` returns** (`Value`, not `value`). A patch key whose case does not match is treated as unknown.
341
+
342
+ Both of `edit`'s failure modes are silent and still report `Result: Success`:
343
+
344
+ - A key the SDK marks as reference, read-only or unknown is ignored rather than rejected.
345
+ - A mis-cased key is ignored the same way.
346
+
347
+ So `Result: Success` from `edit` does not mean the value changed. Read it back with `resources get` before relying on it. No CLI verb sets a *reference* property, so a virtual process cannot be pointed at a package this way — link it at deploy time with `deploy config link` instead.
348
+
349
+ A package resource key can be a composite like `TestRPA.process.TestRPA:1.0.0`; `edit` and `remove` want a plain GUID.
350
+
188
351
  ## Deployment Configuration
189
352
 
190
353
  The deploy config is a JSON file fetched from Orchestrator that lists every resource the solution will provision (or reuse) and every property you can override. It is **separate from `bindings_v2.json`** — bindings declare *what a project needs*, the deploy config decides *how that maps to Orchestrator at deploy time*.
@@ -271,9 +434,11 @@ Adjacent groups commonly used alongside solutions:
271
434
  | `uip agent`, `uip codedagent` | Coded agent lifecycle |
272
435
  | `uip codedapp` | Coded Apps lifecycle |
273
436
  | `uip function` | UiPath Functions |
437
+ | `uip df` | Data Fabric entities, records and choice sets (the service behind `Entity` projects) |
274
438
  | `uip tm` | Test Manager (test projects, sets, executions) |
275
439
  | `uip is` | Integration Service (connectors, connections) |
276
440
  | `uip tools` | Manage CLI tool extensions |
441
+ | `uip skills` | Install the UiPath agent skills referenced above |
277
442
 
278
443
  ## Troubleshooting Quick Map
279
444
 
@@ -282,6 +447,7 @@ Adjacent groups commonly used alongside solutions:
282
447
  | `Not authenticated` / 401 | `uip login`, then re-run |
283
448
  | Command targets the wrong tenant | `uip login tenant set <tenant>`; verify with `uip login status` |
284
449
  | Pack succeeds but publish 409s | Version conflict — bump the version (`uip solution pack . ./out -v <new-version>`) or delete the colliding version with `uip solution packages delete <package-name> <version> --yes` (only if intentional; `--yes` required) |
450
+ | `deploy run` stops because the package is already deployed | Upgrade it in place with `uip solution deploy upgrade <deployment-key>` (running `deploy run` again does not upgrade it), or `uip solution deploy uninstall <name> --yes` first, or pass `--yes` to create a second, separate deployment |
285
451
  | `deploy run` fails on a resource conflict | `uip solution deploy config link config.json <resource> --name <existing> --folder-path <path>` to map to the existing one, or change `conflictFixingAction` via `config set` |
286
452
  | `Resource not found` after deploy | `uip solution resources refresh` to re-sync from each project's `bindings_v2.json`; if still missing, the resource was never declared in any project |
287
453
  | Output looks empty | You may have redirected stderr — confirmations and errors go there. Re-run without `2>` |
@@ -292,4 +458,5 @@ For deeper detail, consult:
292
458
 
293
459
  - The official Solutions Management guide: <https://docs.uipath.com/solutions-management/automation-cloud/latest>
294
460
  - The `uipath-platform` skill — auth, Orchestrator (folders, assets, queues, buckets, robots, packages, processes), solution lifecycle (pack / publish / deploy), Integration Service, and the `uip` CLI.
295
- - The `uipath-solution-design` skill — turn a Process Design Document (PDD) into an implementation-ready Solution Design Document (SDD) and pick scope (single product vs. multi-project Solution composing RPA / Flow / Case / Agents / Apps / API Workflows).
461
+ - The `uipath-solution` skill — the `uip solution` lifecycle itself: pack, publish, deploy, resources, and `.uipx` membership.
462
+ - The `uipath-planner` skill — turn a Process Design Document (PDD) into an implementation-ready Solution Design Document (SDD) and pick scope (single product vs. multi-project Solution composing RPA / Flow / Case / Agents / Apps / API Workflows).
package/dist/tool.js CHANGED
@@ -1,27 +1,24 @@
1
1
  import {
2
2
  metadata,
3
3
  registerCommands
4
- } from "./packager-tool-zbp5p149.js";
5
- import"./packager-tool-yktm4v4r.js";
6
- import"./packager-tool-wjhn59ft.js";
7
- import"./packager-tool-67ssxgph.js";
8
- import"./packager-tool-2yz7m5ny.js";
9
- import"./packager-tool-9vehmnke.js";
10
- import"./packager-tool-f7kj5fpa.js";
11
- import"./packager-tool-c29pg93e.js";
12
- import"./packager-tool-9w3k4e77.js";
13
- import"./packager-tool-krd5v2r5.js";
14
- import"./packager-tool-vpr77gre.js";
15
- import"./packager-tool-fzwxq48d.js";
16
- import"./packager-tool-bcpknnr8.js";
17
- import"./packager-tool-9qecd4wb.js";
18
- import"./packager-tool-7eva0peq.js";
19
- import"./packager-tool-5arsyj36.js";
20
- import"./packager-tool-129wn232.js";
21
- import"./packager-tool-0v6na3yp.js";
4
+ } from "./packager-tool-bahvrjbv.js";
5
+ import"./packager-tool-xntjj1bt.js";
6
+ import"./packager-tool-t89r1edr.js";
7
+ import"./packager-tool-fh8pb2th.js";
8
+ import"./packager-tool-nq2nq71y.js";
9
+ import"./packager-tool-3hbsdwjm.js";
10
+ import"./packager-tool-5pfxgc8z.js";
11
+ import"./packager-tool-hc6ybtdw.js";
12
+ import"./packager-tool-b16qemg2.js";
13
+ import"./packager-tool-0qva0ebq.js";
14
+ import"./packager-tool-x3ehbhsn.js";
15
+ import"./packager-tool-3y92zbg2.js";
16
+ import"./packager-tool-hgx66d1p.js";
17
+ import"./packager-tool-dfrk01gn.js";
18
+ import"./packager-tool-1de529jm.js";
22
19
  export {
23
- registerCommands,
24
- metadata
20
+ metadata,
21
+ registerCommands
25
22
  };
26
23
 
27
- //# debugId=DF4E0430A569A00964756E2164756E21
24
+ //# debugId=CF074D6CB03931BC64756E2164756E21
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@uipath/solution-tool",
3
3
  "license": "MIT",
4
- "version": "1.201.0-preview.133",
4
+ "version": "1.202.0-preview.134",
5
5
  "description": "Create, pack, publish, and deploy UiPath Automation Solutions.",
6
6
  "repository": {
7
7
  "type": "git",
@@ -47,5 +47,5 @@
47
47
  "dist"
48
48
  ],
49
49
  "private": false,
50
- "gitHead": "7933378ad5276ac369900293a1447474dcec6826"
50
+ "gitHead": "a335728adbdb02f28308e4f55d8936d0b150444b"
51
51
  }
@@ -1,99 +0,0 @@
1
- import {
2
- getGlobalThis
3
- } from "./packager-tool-9qecd4wb.js";
4
- import {
5
- AUTH_CANCELLED_ERROR_CODE
6
- } from "./packager-tool-5arsyj36.js";
7
- import"./packager-tool-0v6na3yp.js";
8
-
9
- // ../auth/src/strategies/browser-strategy.ts
10
- class BrowserAuthStrategy {
11
- async execute(url, _redirectUri, expectedState, opts) {
12
- const global = getGlobalThis();
13
- if (!global?.window) {
14
- throw new Error("Browser environment required for authentication");
15
- }
16
- const screenWidth = global.window.screen?.width ?? 1024;
17
- const screenHeight = global.window.screen?.height ?? 768;
18
- const width = 600;
19
- const height = 700;
20
- const left = screenWidth / 2 - width / 2;
21
- const top = screenHeight / 2 - height / 2;
22
- if (!global.window.open) {
23
- throw new Error("window.open is not available");
24
- }
25
- const popupResult = global.window.open(url, "uip_auth", `width=${width},height=${height},left=${left},top=${top},resizable=yes,scrollbars=yes,status=yes`);
26
- const popup = popupResult;
27
- if (!popup) {
28
- throw new Error(`Authentication popup was blocked by your browser.
29
-
30
- ` + `To continue:
31
- ` + `1. Look for a popup blocker icon in your address bar
32
- ` + `2. Allow popups for this site
33
- ` + `3. Try logging in again
34
-
35
- ` + "If using an ad blocker, you may need to temporarily disable it.");
36
- }
37
- return new Promise((resolve, reject) => {
38
- let timer;
39
- const messageHandler = (event) => {
40
- if (event.data?.type === "UIP_AUTH_CODE" && event.data.code) {
41
- if (event.data.state !== expectedState) {
42
- cleanup();
43
- reject(new Error("OAuth state mismatch — the callback state does not match the expected value. " + "This may indicate a CSRF attack. Please try signing in again."));
44
- popup.close();
45
- return;
46
- }
47
- cleanup();
48
- resolve(event.data.code);
49
- popup.close();
50
- } else if (event.data?.type === "UIP_AUTH_ERROR") {
51
- cleanup();
52
- const errorMsg = event.data.error || "Authentication failed";
53
- reject(new Error(`Authentication failed: ${errorMsg}
54
-
55
- ` + "Please check your credentials and try again. " + "If the problem persists, verify your UiPath account is active."));
56
- popup.close();
57
- }
58
- };
59
- const cleanup = () => {
60
- global.window?.removeEventListener?.("message", messageHandler);
61
- opts?.signal?.removeEventListener("abort", onAbort);
62
- if (timer)
63
- clearInterval(timer);
64
- };
65
- const onAbort = () => {
66
- cleanup();
67
- const err = new Error(`Authentication was cancelled.
68
-
69
- ` + "The sign-in was cancelled before completing the login process. " + "Please try again and complete the authentication flow.");
70
- err.code = AUTH_CANCELLED_ERROR_CODE;
71
- reject(err);
72
- popup.close();
73
- };
74
- if (opts?.signal) {
75
- if (opts.signal.aborted) {
76
- onAbort();
77
- return;
78
- }
79
- opts.signal.addEventListener("abort", onAbort, { once: true });
80
- }
81
- if (global.window?.addEventListener) {
82
- global.window.addEventListener("message", messageHandler);
83
- }
84
- timer = setInterval(() => {
85
- if (popup.closed) {
86
- cleanup();
87
- reject(new Error(`Authentication was cancelled.
88
-
89
- ` + "The authentication popup was closed before completing the login process. " + "Please try again and complete the authentication flow."));
90
- }
91
- }, 1000);
92
- });
93
- }
94
- }
95
- export {
96
- BrowserAuthStrategy
97
- };
98
-
99
- //# debugId=B13A3005E9EE6C6564756E2164756E21