@uipath/solution-tool 1.202.0 → 1.203.0-preview.160

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 (46) hide show
  1. package/dist/THIRD-PARTY-NOTICES.md +23 -1
  2. package/dist/deploy.js +7 -6
  3. package/dist/{packager-tool-bt0z25tw.js → embedded-file-reader-xxqe8vs8.js} +98 -16584
  4. package/dist/first-party-service-sd8yaf73.js +27 -0
  5. package/dist/index-dqa169gp.js +25 -0
  6. package/dist/index.js +19 -13
  7. package/dist/init.js +8 -5
  8. package/dist/{list-8hvfmge6.js → list-dadxggxt.js} +5 -4
  9. package/dist/models/pack-command-types.d.ts +33 -5
  10. package/dist/pack.js +12 -6
  11. package/dist/{packager-tool-fjjh5veg.js → packager-tool-0f0wt9vh.js} +353 -1519
  12. package/dist/{packager-tool-pbmpgz04.js → packager-tool-1haahq17.js} +5 -3
  13. package/dist/{packager-tool-rbrcxjch.js → packager-tool-2syrt51a.js} +7 -4
  14. package/dist/packager-tool-3jrq7smt.js +1459 -0
  15. package/dist/packager-tool-53w8skv5.js +262 -0
  16. package/dist/packager-tool-7znqtw3f.js +244 -0
  17. package/dist/packager-tool-bkwnetqn.js +16678 -0
  18. package/dist/{packager-tool-5518wy6n.js → packager-tool-cp07fhx3.js} +9 -6
  19. package/dist/{packager-tool-w1dzcj31.js → packager-tool-cvfbzs9p.js} +359 -95
  20. package/dist/packager-tool-gdtpsdn7.js +342 -0
  21. package/dist/{packager-tool-pyygbnp2.js → packager-tool-htag6yh5.js} +4 -4
  22. package/dist/{packager-tool-3bewrpq4.js → packager-tool-jz2wbfjz.js} +4 -1
  23. package/dist/packager-tool-k4mskzww.js +125 -0
  24. package/dist/{packager-tool-vfcht7hq.js → packager-tool-mj5p341c.js} +11 -12
  25. package/dist/{packager-tool-bme8epz8.js → packager-tool-n4nfqj99.js} +15381 -2421
  26. package/dist/{packager-tool-mcpzmn0v.js → packager-tool-rc5pcf2n.js} +45 -21
  27. package/dist/packager-tool-resolver-fmjr60x8.js +19 -0
  28. package/dist/{packager-tool-pw7v82j2.js → packager-tool-vas0xg5h.js} +1 -1
  29. package/dist/packager-tool-znakt6yw.js +188 -0
  30. package/dist/packager-tool.d.ts +1 -1
  31. package/dist/packager-tool.js +1 -1
  32. package/dist/prepare-solution-resources-wds3r8bq.js +22 -0
  33. package/dist/project-contributions-cvttys34.js +27 -0
  34. package/dist/publish.js +7 -6
  35. package/dist/resource.js +7 -4
  36. package/dist/services/deployment-validation.d.ts +33 -0
  37. package/dist/services/governance-options.d.ts +61 -1
  38. package/dist/services/pack-command-service.d.ts +33 -2
  39. package/dist/services/packager-tool-resolver.d.ts +3 -0
  40. package/dist/services/prepare-solution-resources.d.ts +40 -0
  41. package/dist/services/project-contributions.d.ts +58 -0
  42. package/dist/services/project-type-tools.d.ts +6 -0
  43. package/dist/templates/AGENTS.md +78 -8
  44. package/dist/tool.js +19 -13
  45. package/package.json +3 -2
  46. package/dist/services/validate-appv2-action-schemas.d.ts +0 -10
@@ -0,0 +1,58 @@
1
+ import { type CliErrorCode } from "@uipath/common";
2
+ import { type IFileSystem } from "@uipath/filesystem";
3
+ import { type ProjectContributionError, type ProjectResourceContribution } from "@uipath/solutionpackager-tool-core";
4
+ export interface ProjectContributions {
5
+ /** Per project key (the `.uipx` `Id`), what that project's factory returned. */
6
+ byProject: Map<string, ProjectResourceContribution>;
7
+ /** Supported types whose registered factory has no `describeResourcesAsync`. */
8
+ skipped: string[];
9
+ }
10
+ export interface ApplyContributionsResult {
11
+ /** Number of artefact resources whose spec was rewritten. */
12
+ updated: number;
13
+ /** Patches that matched no resource, plus the collect-time skip notices. */
14
+ warnings: string[];
15
+ }
16
+ /**
17
+ * Every contributed error from one collect, in one throw. Carries
18
+ * `instructions` so `carriedInstructions` can lift them into the failure
19
+ * envelope instead of losing the actionable half.
20
+ */
21
+ export declare class ProjectContributionsError extends Error {
22
+ readonly contributionErrors: readonly ProjectContributionError[];
23
+ readonly instructions?: string;
24
+ readonly errorCode: CliErrorCode;
25
+ /** The contributed `code`, when every error in the batch reports the same one. */
26
+ readonly contributionCode?: string;
27
+ constructor(errors: readonly ProjectContributionError[]);
28
+ }
29
+ /**
30
+ * Walk the `.uipx` and ask each project's registered tool factory what it
31
+ * contributes. One walk, one dispatch round — pack uses the same result for
32
+ * its gate and its write.
33
+ *
34
+ * Reads project files only, which `syncAndLog` never touches, so collecting
35
+ * before the sync and applying after it cannot see two different states.
36
+ */
37
+ export declare function collectProjectContributions(solutionDir: string, fs?: IFileSystem): Promise<ProjectContributions>;
38
+ /** Throws once with every collected error. Pack's gate. */
39
+ export declare function assertNoContributionErrors(contributions: ProjectContributions): void;
40
+ /**
41
+ * Contributed errors as flat strings. Refresh folds these into its
42
+ * `Warnings[]` — it is a sync command, not a gate, but it must not swallow
43
+ * them either. Pack remains the gate.
44
+ */
45
+ export declare function contributionErrorMessages(contributions: ProjectContributions): string[];
46
+ /**
47
+ * Merge every `specPatch` into the on-disk resources, and write the
48
+ * entry-point keys while we are here so they persist into the packed solution
49
+ * instead of existing only at GET.
50
+ *
51
+ * Writes go through the resource builder, so a save re-runs
52
+ * `ArtefactPairBindingProvider` — deliberate: it is what keeps the app+package
53
+ * linkage intact when this rewrites an app resource. Nothing is saved when
54
+ * nothing changed, which is what keeps a re-run byte-stable.
55
+ */
56
+ export declare function applyProjectContributions(solutionDir: string, contributions: ProjectContributions, options?: {
57
+ failOnUnmatchedPatch?: boolean;
58
+ }, fs?: IFileSystem): Promise<ApplyContributionsResult>;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The CLI verb that owns a project type, or `undefined` for a type nothing
3
+ * maps. Used to name the tool to install or update in an error or warning.
4
+ */
5
+ export declare function toolVerbForProjectType(projectType: string): string | undefined;
6
+ export declare function toolOwnedProjectTypes(): string[];
@@ -66,7 +66,7 @@ A solution can contain multiple projects of different types. The table below lis
66
66
  | `AppV2` | Coded App — web application | `uip codedapp init <path>` | `uipath-coded-apps` |
67
67
  | `Function` | UiPath Function (JS / TS / Python) | `uip function new [name]` | `uipath-functions` |
68
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 |
69
+ | `BusinessRules` | Business rule — one or more DMN decisions. Ships as a `.uirule`: an archive holding the project's `.dmn` files and the `entry-points.json` that names which decisions a caller may invoke and with what arguments. Not wrapped in a `.nupkg`, and the solution's `businessRule` resource points at it by file name. A project with no `entry-points.json` still ships as a bare `.dmn`, which exposes no arguments. `restore` and `validate` are no-ops for this type. | no CLI scaffolding — authored in Studio Web | none |
70
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
71
  | `Connector` | Integration Service connector | no CLI scaffolding — use `uip is connectors` to list / get / export existing connectors | `uipath-connector-builder` |
72
72
  | `WebApp` | Legacy low-code UiPath App (the coded variant is `AppV2`) | no CLI scaffolding | none |
@@ -81,6 +81,13 @@ The type lives in either `project.uiproj` (top-level `ProjectType`) or `project.
81
81
 
82
82
  The `init` scaffolders above auto-register when run inside a solution directory (unless `--skip-solution-registration` is passed). For other scaffolders, register the project with the solution after scaffolding: use `uip solution projects add <project-path> [<solution-file>]` when the project already lives inside the solution directory (registers in place, no copy), or `uip solution projects import <path>` to copy a project from outside the solution dir into it and register it. If you pass an unknown type to those commands, they reject with the exhaustive accepted list — trust that error over this table. `uip solution pack` rejects the same way: a `Projects[]` entry whose `Type` no packager handles fails with `ErrorCode: invalid_argument`, naming the project, the accepted types, and how to drop the entry, rather than attempting the pack.
83
83
 
84
+ **Member package ids come from folder names, and pack refuses the ones a feed cannot store.** Each member is published under `<solution>.<project-type>.<member-folder>` — the solution's own `.uipx` name, the short type (`Rpa`, `Case`, `Flow`, …) and the member's folder inside the solution. The name a project declares for itself is not used, and `--name` renames the archive only. Two limits ride on that, both checked before anything is packed and both reported as `ErrorCode: invalid_argument` / `Retry: RetryWillNotFix`:
85
+
86
+ - **Unique.** Two members whose folders compose the same id fail the pack, naming the shared id and every folder that produced it. Spaces and dots both collapse to a single dot and NuGet ids are case-insensitive, so `collide me`, `collide.me` and `Collide.Me` are one id.
87
+ - **100 characters.** A composed id longer than that fails the pack, naming the member folder that blew the limit.
88
+
89
+ The fix for either is a rename — the member folder, or the `.uipx` — since members take no `--package-id`.
90
+
84
91
  ## End-to-End Lifecycle
85
92
 
86
93
  Run `uip login` first — most steps below need an authenticated session, including `solution pack` in some cases.
@@ -142,7 +149,7 @@ Add `--wait` when the next step needs the deployment settled:
142
149
  uip solution deploy run ... --personal-workspace --wait --timeout 300
143
150
  ```
144
151
 
145
- 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.
152
+ 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` as `Deployment '<name>' failed (OperationStatus: Failed): <reason>`, where the reason is the server's validation result (`the server reported no reason.` when it gives none). 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.
146
153
 
147
154
  **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.
148
155
 
@@ -189,12 +196,26 @@ That last flag is strict on purpose, and that is what makes it easy to get wrong
189
196
  ```bash
190
197
  uip solution pack . ./out --skip-analyze # don't run the analyzer at all
191
198
  uip solution pack . ./out --governance-file-path ./policy.json # analyze against a local policy file
192
- uip solution pack . ./out --automation-ops-profile StudioWeb # analyze against the tenant policy
199
+ uip solution pack . ./out --governance-product StudioWeb # analyze against the tenant policy
193
200
  ```
194
201
 
195
202
  `--skip-analyze` turns off only the analyzer rules — the compiler still restores, compiles, and validates, so a broken project still fails the pack.
196
203
 
197
- 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.
204
+ A failed pack says which project broke and where. Alongside `Message`, the envelope carries `Data.Projects` — one entry per member project with `Path` (its directory relative to the solution, `.` at the root), `Type`, `Result`, `Message` and `Findings`; each finding carries `Source` (`Analyzer`, `Validator`, `Compiler`, `Other`), `ErrorCode`, `Description`, `FilePath` and `ActivityIdRef` where the compiler reported one. Read `Data.Projects` rather than parsing `Message` — the message flattens every failed project into one sentence and names no file. A failure that belongs to no project at all (not logged in, no packager for a `Type`) has no `Data.Projects`.
205
+
206
+ The analyzer rule configuration comes from whichever governance flag you use. `--governance-file-path` reads a local policy file — pass an AutomationOps policy **exactly as exported**, envelope and all: the analyzer reads the whole export, so handing it just the inner `data` object is rejected with a message telling you to pass the export instead. A file that cannot be read, or that is not JSON, fails the pack rather than falling back — you asked for a policy, so packing without one would be a silent pass. `--governance-product` 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. Pass `--governance-file-path` on its own and the tenant is still asked, about `StudioWeb`, so the file's standing can be decided — that is the only case with a product default.
207
+
208
+ `--automation-ops-profile` is the old name for `--governance-product`. It still works and still parses, but it is hidden from help and warns; passing both is rejected rather than resolved. Use `--governance-product` in anything new.
209
+
210
+ Whenever you are signed in, the tenant is asked first — including when you pass `--governance-file-path`. There are three possible answers and each does something different:
211
+
212
+ - **The tenant publishes a policy.** That policy is what the analyzer uses. A `--governance-file-path` passed alongside it is refused with exit `1`, naming the file and the product whose policy applies — a flag in your own pipeline does not lift the organisation's policy.
213
+ - **The tenant publishes nothing.** The analyzer uses your `--governance-file-path` if you passed one, otherwise the rules shipped with the WorkflowCompiler.
214
+ - **The question could not be answered** (expired token, no route, the service is down). The pack still succeeds and nothing fails: you get a warning naming the reason (`unauthorized`, `notFound`, `serverError`, `timedOut`, …), and the analyzer uses your `--governance-file-path` if you passed one, otherwise the shipped rules. Not knowing whether you are governed is not a reason to break a build.
215
+
216
+ With no signed-in tenant there is nothing to ask, so a `--governance-file-path` is simply used and an offline pack keeps working.
217
+
218
+ Note what this means for CI: a pack that could not reach AutomationOps still returns `Result: Success` and exit `0`, so a stage using `--governance-product` as a governance gate goes green while having enforced the shipped defaults. The warning in the log is what tells you which happened — `uip solution pack` reports on governance, it does not enforce it. Strict, fail-closed behaviour belongs to design-time hosts, not to this command.
198
219
 
199
220
  ## Dependency Feeds
200
221
 
@@ -267,7 +288,7 @@ uip solution delete <solution-id> --yes # remove a solution from Studio Web (
267
288
 
268
289
  `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).
269
290
 
270
- If Studio Web refuses the upload with 401 or 403, read `Instructions` before you do anything — the answer is one of two, and they are opposites. In almost every case do **not** re-run `uip login`: the CLI checks the session and its token expiry before it calls, so the token was valid and re-authenticating produces the same one. The failure is then about what the acting identity may do in Studio Web (for a CI pipeline: the external application's `StudioWebS2S` grants) or about the tenant the bundled `SolutionId` belongs to, and an application 401 is reported as `ErrorCode: permission_denied` rather than `authentication_required`. The exception is when `Instructions` quote `invalid_token`: that is Studio Web rejecting the credential itself rather than the permissions behind it, so a fresh `uip login` — or a newly minted client-credentials token — is worth trying, and the error code stays `authentication_required`.
291
+ If Studio Web refuses the upload with 401 or 403, do **not** re-run `uip login` — the CLI checks the session and its token expiry before it calls, so the token was valid and re-authenticating produces the same one. The failure is about what the acting identity may do in Studio Web (for a CI pipeline: the external application's `StudioWebS2S` grants) or about the tenant the bundled `SolutionId` belongs to. The envelope's `Instructions` name both, and an application 401 is reported as `ErrorCode: permission_denied` rather than `authentication_required`.
271
292
 
272
293
  `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.
273
294
 
@@ -291,6 +312,8 @@ uip solution projects resync <cloud-project-name> --sync-option Reset
291
312
 
292
313
  Each project declares the resources it needs (assets, queues, buckets, processes, …) in a `bindings_v2.json` file at the project root. These declarations drive the solution's resource inventory.
293
314
 
315
+ `projects add` and `projects import` do not always create the project's resources. Some project types (a coded app, for example) pick their resource template from a file only their own tool can read, so these commands register the project and stop. They report `Data.ResourcesPending: true` and warn when that happens, naming the tool to install (`uip tools install codedapp` for a coded app) — the resources arrive at the next `resources refresh`, `pack` or `upload`.
316
+
294
317
  After editing a project's bindings, or after `solution projects import` (which doesn't auto-sync resources), reconcile the solution-level inventory:
295
318
 
296
319
  ```bash
@@ -299,6 +322,27 @@ uip solution resources refresh # re-scan every project, sync new / removed r
299
322
 
300
323
  `solution resources refresh` creates new resources for bindings not yet in the solution and imports from Orchestrator when a matching resource already exists.
301
324
 
325
+ **Refresh is import-only for cloud resources. It never overwrites an imported resource** — that is what keeps your local edits (a renamed resource, a patched retry count) from being wiped on every re-scan. So if you change an entity, queue or asset **in the cloud** after importing it, `refresh` will not pick the change up: it reports the resource under `Skipped` and leaves it alone. To pull the new cloud definition, use `resources edit --source remote` (below).
326
+
327
+ Each project's own tool also reports what its authored files add to the solution
328
+ resources — for a Coded Action app, its `action-schema.json` lands on the app
329
+ resource's `spec.actionSchema`. Two things follow:
330
+
331
+ - `uip solution resources refresh` reports `Data.ReconciledSpecs` — how many
332
+ resource specs it rewrote from the projects' authored files. Problems that
333
+ `pack` would fail on show up in `Data.Warnings` here; refresh still exits `0`.
334
+ - `uip solution pack` and `uip solution upload` both fail when a project
335
+ reports a problem with its own authored files — a coded app whose
336
+ `webAppManifest.json` does not parse, or a Coded Action project whose
337
+ `action-schema.json` is missing or does not parse, for example. The message
338
+ names the file and the project, and the envelope carries
339
+ `ErrorCode: invalid_argument`.
340
+ Nothing is written before that check passes, so fix the file and re-run the command.
341
+
342
+ An `action-schema.json` edited without a following `refresh` or `pack` still
343
+ shows the previous schema in `uip solution resources get`; the next pack or
344
+ refresh rewrites it, so the packed solution is never stale.
345
+
302
346
  ### Adding a resource by hand
303
347
 
304
348
  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:
@@ -341,10 +385,36 @@ uip solution resources get <resource-key> --include-dependencies
341
385
  uip solution resources edit <resource-key> --patch '{"retentionPeriod":14}'
342
386
  uip solution resources edit <resource-key> --patch - # read the JSON from stdin
343
387
 
388
+ # Pull the cloud definition over the local one (imported resources only)
389
+ uip solution resources edit <resource-key> --source remote # report what would change, write nothing
390
+ uip solution resources edit <resource-key> --source remote --force # apply it
391
+
344
392
  # Drop a resource from the solution (local only, leaves bindings_v2.json alone)
345
393
  uip solution resources remove <resource-key>
346
394
  ```
347
395
 
396
+ ### Picking up a cloud change: `edit --source remote`
397
+
398
+ Use this when the resource changed **in Orchestrator or Data Fabric** after you imported it — a new field on an entity, a changed queue setting — and `refresh` reported it under `Skipped`.
399
+
400
+ Without `--force` it writes nothing: it lists the spec properties that differ and exits `1` with `ErrorCode: invalid_argument`. That exit code is deliberate — a script that forgot `--force` must not read "nothing was written" as "done". Re-run with `--force` to apply.
401
+
402
+ ```bash
403
+ uip solution resources edit <resource-key> --source remote --output json
404
+ # Failure, invalid_argument: "2 properties differ from the cloud definition: description, fields"
405
+
406
+ uip solution resources edit <resource-key> --source remote --force --output json
407
+ # Success, ResourceEdited: Data.Applied true, Data.Changed ["description","fields"]
408
+ ```
409
+
410
+ **`--force` is destructive.** It replaces the local spec with the cloud one, so any local edit to a listed property is lost — including a rename you made before deployment. Run it once without `--force` first and read the `Changed` list.
411
+
412
+ Three things it will not do:
413
+
414
+ - `--patch` and `--source remote` cannot be combined (two sources for the same spec would race), and `--force` is rejected without `--source remote`.
415
+ - A resource with no recorded cloud reference fails with `Resource has no cloud definition to sync from` rather than silently doing nothing. Two causes: it genuinely has no cloud counterpart (a `--source local` stub, or a project's own artefact resource), **or** the reference belongs to someone else. The reference is stored per user and per tenant in `userProfile/<your-user-id>/debug_overwrites.json`, so if a teammate imported the resource — or you imported it against another tenant — you have no reference for it. Re-import it with `uip solution resources add --source remote` to record one for yourself.
416
+ - If the cloud definition cannot be read for the comparison, it fails with `Could not read the cloud definition to compare against` instead of reporting no drift. Check the resource still exists in the cloud, or pass `--force` to overwrite with whatever the cloud returns.
417
+
348
418
  `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.
349
419
 
350
420
  Both of `edit`'s failure modes are silent and still report `Result: Success`:
@@ -354,7 +424,7 @@ Both of `edit`'s failure modes are silent and still report `Result: Success`:
354
424
 
355
425
  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.
356
426
 
357
- A package resource key can be a composite like `TestRPA.process.TestRPA:1.0.0`; `edit` and `remove` want a plain GUID.
427
+ Keys are GUIDs for imported cloud resources and compound strings such as `MyFunction.api.MyFunction.1:1.0.0` for package resources; pass the `Key` value `uip solution resources list` prints.
358
428
 
359
429
  ## Deployment Configuration
360
430
 
@@ -453,13 +523,13 @@ Adjacent groups commonly used alongside solutions:
453
523
  | Symptom | First thing to check |
454
524
  |---|---|
455
525
  | `Not authenticated` / 401 | `uip login`, then re-run |
456
- | `upload` fails with 401/403 and `ErrorCode: permission_denied` | Not a login problem — the token was valid when the call went out, so `uip login` mints the same one. Read `Instructions`: for a session on an external application, check that the app has the Studio Web (`StudioWebS2S`) grants, not only the Orchestrator and Solutions ones; for a user, check Studio Web access in the tenant. Then confirm the `SolutionId` in the `.uipx` belongs to the tenant you are logged into — an id this session cannot see at all is reported separately, as nothing to overwrite, so a refusal here points at the grants first |
457
- | `upload` fails with 401 and `Instructions` quote `invalid_token` | The opposite case: Studio Web rejected the credential itself, not the grants behind it. Re-run `uip login`, or mint a fresh client-credentials token in a pipeline. Check too that the token was issued for the organization and tenant being called — one minted against another environment or audience is refused this way. The error code stays `authentication_required` |
526
+ | `upload` fails with 401/403 and `ErrorCode: permission_denied` | Not a login problem — the token was valid when the call went out, so `uip login` mints the same one. Read `Instructions`: for a session on an external application, check that the app has the Studio Web (`StudioWebS2S`) grants, not only the Orchestrator and Solutions ones; for a user, check Studio Web access in the tenant. Then confirm the `SolutionId` in the `.uipx` belongs to the tenant you are logged into — one from another tenant is refused, not reported missing |
458
527
  | Command targets the wrong tenant | `uip login tenant set <tenant>`; verify with `uip login status` |
459
528
  | 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) |
460
529
  | `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 |
461
530
  | `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` |
462
531
  | `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 |
532
+ | A cloud change (new entity field, changed queue setting) never reaches the solution | Expected: `refresh` is import-only and reports the resource under `Skipped`. Pull it with `uip solution resources edit <resource-key> --source remote --force` |
463
533
  | Output looks empty | You may have redirected stderr — confirmations and errors go there. Re-run without `2>` |
464
534
 
465
535
  ---
package/dist/tool.js CHANGED
@@ -1,19 +1,25 @@
1
1
  import {
2
2
  metadata,
3
3
  registerCommands
4
- } from "./packager-tool-w1dzcj31.js";
5
- import"./packager-tool-pbmpgz04.js";
6
- import"./packager-tool-mcpzmn0v.js";
7
- import"./packager-tool-pw7v82j2.js";
8
- import"./packager-tool-bme8epz8.js";
9
- import"./packager-tool-3bewrpq4.js";
10
- import"./packager-tool-pyygbnp2.js";
11
- import"./packager-tool-5518wy6n.js";
12
- import"./packager-tool-vfcht7hq.js";
13
- import"./packager-tool-bt0z25tw.js";
4
+ } from "./packager-tool-cvfbzs9p.js";
5
+ import"./packager-tool-1haahq17.js";
6
+ import"./packager-tool-rc5pcf2n.js";
7
+ import"./packager-tool-vas0xg5h.js";
8
+ import"./packager-tool-n4nfqj99.js";
9
+ import"./packager-tool-7znqtw3f.js";
10
+ import"./packager-tool-znakt6yw.js";
11
+ import"./packager-tool-k4mskzww.js";
12
+ import"./packager-tool-jz2wbfjz.js";
13
+ import"./packager-tool-htag6yh5.js";
14
+ import"./packager-tool-cp07fhx3.js";
15
+ import"./packager-tool-mj5p341c.js";
16
+ import"./packager-tool-bkwnetqn.js";
17
+ import"./packager-tool-gdtpsdn7.js";
18
+ import"./packager-tool-53w8skv5.js";
14
19
  import"./packager-tool-nzghfa48.js";
15
- import"./packager-tool-rbrcxjch.js";
16
- import"./packager-tool-fjjh5veg.js";
20
+ import"./packager-tool-2syrt51a.js";
21
+ import"./packager-tool-3jrq7smt.js";
22
+ import"./packager-tool-0f0wt9vh.js";
17
23
  import"./packager-tool-dfrk01gn.js";
18
24
  import"./packager-tool-1de529jm.js";
19
25
  export {
@@ -21,4 +27,4 @@ export {
21
27
  registerCommands
22
28
  };
23
29
 
24
- //# debugId=CF074D6CB03931BC64756E2164756E21
30
+ //# debugId=F50F7343D96D9C2C64756E2164756E21
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "@uipath/solution-tool",
3
+ "author": "UiPath",
3
4
  "license": "SEE LICENSE IN LICENSE.txt",
4
- "version": "1.202.0",
5
+ "version": "1.203.0-preview.160",
5
6
  "description": "Create, pack, publish, and deploy UiPath Automation Solutions.",
6
7
  "repository": {
7
8
  "type": "git",
@@ -47,5 +48,5 @@
47
48
  "dist"
48
49
  ],
49
50
  "private": false,
50
- "gitHead": "23b5a7038ead7264439af18f8b807c7cc99a29d5"
51
+ "gitHead": "3a42062ba731afca4595ba9aa8a80afc9667528d"
51
52
  }
@@ -1,10 +0,0 @@
1
- /**
2
- * Fails the pack early when any AppV2 CodedAction project in the solution is
3
- * missing its `action-schema.json`. Without the schema the packed resource
4
- * spec ships an empty `actionSchema`, and downstream flows that reference the
5
- * action (e.g. a BPMN user task picker) render no inputs / outputs / outcomes.
6
- *
7
- * Only checks CodedAction (`webAppManifest.config.isActionApp === true`).
8
- * Regular Coded apps have no action schema by design.
9
- */
10
- export declare function validateAppV2ActionSchemas(solutionDir: string): Promise<void>;