@uipath/solution-tool 1.1.0 → 1.196.0

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 (41) hide show
  1. package/README.md +32 -0
  2. package/dist/deploy.d.ts +27 -0
  3. package/dist/deploy.js +43244 -0
  4. package/dist/init.d.ts +6 -0
  5. package/dist/init.js +10381 -0
  6. package/dist/models/index.d.ts +1 -0
  7. package/dist/models/pack-command-types.d.ts +28 -0
  8. package/dist/pack.d.ts +6 -0
  9. package/dist/pack.js +234469 -0
  10. package/dist/providers/file-storage-provider.d.ts +11 -0
  11. package/dist/providers/resource-builder-init.d.ts +12 -0
  12. package/dist/providers/solution-access-provider.d.ts +18 -0
  13. package/dist/publish.d.ts +7 -0
  14. package/dist/publish.js +33430 -0
  15. package/dist/resource.d.ts +7 -0
  16. package/dist/resource.js +47215 -0
  17. package/dist/services/activation.d.ts +51 -0
  18. package/dist/services/auth-helper.d.ts +13 -0
  19. package/dist/services/deploy-activate-service.d.ts +47 -0
  20. package/dist/services/deploy-list-service.d.ts +59 -0
  21. package/dist/services/deploy-run-service.d.ts +102 -0
  22. package/dist/services/deploy-uninstall-service.d.ts +47 -0
  23. package/dist/services/deployment-search.d.ts +77 -0
  24. package/dist/services/emit-runtime-dependencies.d.ts +37 -0
  25. package/dist/services/entry-point-spec-enhancer.d.ts +31 -0
  26. package/dist/services/folder-helper.d.ts +24 -0
  27. package/dist/services/pack-command-service.d.ts +24 -0
  28. package/dist/services/pack-service.d.ts +32 -0
  29. package/dist/services/packager-tool-resolver.d.ts +6 -0
  30. package/dist/services/packages-list-service.d.ts +56 -0
  31. package/dist/services/personal-workspace-deploy.d.ts +28 -0
  32. package/dist/services/personal-workspace-resolver.d.ts +28 -0
  33. package/dist/services/publish-service.d.ts +61 -0
  34. package/dist/services/resource-refresh-service.d.ts +34 -0
  35. package/dist/services/solution-init-service.d.ts +37 -0
  36. package/dist/services/solution-manifest.d.ts +9 -0
  37. package/dist/services/sync-resources-from-bindings.d.ts +132 -0
  38. package/dist/templates/AGENTS.md +25 -16
  39. package/dist/tool.js +20953 -43671
  40. package/dist/utils/deployment-errors.d.ts +39 -0
  41. package/package.json +44 -43
@@ -0,0 +1,28 @@
1
+ import { type CreateApiClientOptions } from "@uipath/orchestrator-sdk";
2
+ /**
3
+ * Resolved Personal Workspace information for the currently-authenticated
4
+ * user. Returned by {@link resolvePersonalWorkspace}.
5
+ */
6
+ export interface ResolvedPersonalWorkspace {
7
+ /** Folder key — GUID. Use as `locationKey` for upload-style endpoints. */
8
+ key: string;
9
+ /** Folder name. Use as `folderFullyQualifiedName` for deploy-style endpoints. */
10
+ name: string;
11
+ }
12
+ /**
13
+ * Resolve the current user's Personal Workspace via Orchestrator.
14
+ *
15
+ * One HTTP call to `/odata/PersonalWorkspaces/UiPath.Server.Configuration.OData.GetPersonalWorkspace`
16
+ * (through the published `@uipath/orchestrator-sdk` `PersonalWorkspacesApi`) returns
17
+ * both the folder GUID (for upload endpoints that take a locationKey) and the folder
18
+ * name (used as `folderFullyQualifiedName` for deploy endpoints).
19
+ *
20
+ * Throws when the current identity has no Personal Workspace configured —
21
+ * a service principal or robot-account token, a tenant where Personal
22
+ * Workspaces are disabled, or a user that hasn't been provisioned. The
23
+ * caller surfaces the error message to the user.
24
+ *
25
+ * @param options - tenant and login validity for API authentication
26
+ * @returns Resolved Personal Workspace `{ key, name }`
27
+ */
28
+ export declare function resolvePersonalWorkspace(options?: Pick<CreateApiClientOptions, "tenant" | "loginValidity" | "envFilePath">): Promise<ResolvedPersonalWorkspace>;
@@ -0,0 +1,61 @@
1
+ /** Discriminator for {@link PublishFailure}; library callers can ignore the tag and read `.message` / `.ok`. */
2
+ export type PublishFailureReason = "auth_failed" | "file_not_found" | "not_a_zip" | "file_read_failed" | "personal_workspace_resolution_failed" | "upload_failed" | "upload_version_conflict" | "upload_network" | "poll_timeout" | "poll_failed" | "poll_aborted" | "publish_failed";
3
+ export interface PublishOptions {
4
+ /** Override the active tenant for auth resolution. The CLI's deprecated `--tenant` flag flows through here. */
5
+ tenant?: string;
6
+ /** Pin auth to this exact `.uipath/.auth` path. */
7
+ envFilePath?: string;
8
+ /** Upload into the current user's Personal Workspace feed instead of the tenant feed. */
9
+ personalWorkspace?: boolean;
10
+ /** Wait until the published package reaches a terminal state. Default `false`. */
11
+ wait?: boolean;
12
+ /** Timeout in seconds for the poll loop when `wait` is true. Default `360`. */
13
+ timeout?: number;
14
+ /** Poll interval in milliseconds when `wait` is true. Default `5000`. */
15
+ pollInterval?: number;
16
+ /** Minimum minutes before token expiration to trigger a refresh. Default `10`. */
17
+ loginValidity?: number;
18
+ /** Host-side cancellation for the poll loop (e.g. VS Code's cancel button); replaces `processContext.pollSignal`. */
19
+ signal?: AbortSignal;
20
+ }
21
+ export interface PublishSuccess {
22
+ ok: true;
23
+ /** Orchestrator's stable key for this exact version (uuid). Always populated. */
24
+ packageVersionKey: string;
25
+ /**
26
+ * Package name as published. Optional because PW publish enriches metadata
27
+ * via a follow-up `packagesGetVersion` call that can briefly 404 due to
28
+ * feed indexing lag — when that happens, the upload is still authoritative
29
+ * but the human-readable name is absent.
30
+ */
31
+ packageName?: string;
32
+ /** Package version (semver). Optional for the same reason as `packageName`. */
33
+ packageVersion?: string;
34
+ /** Terminal state when `wait: true` (`"Ready"`/`"Active"`), else the upload's immediate state. Optional for the same reason. */
35
+ state?: string;
36
+ }
37
+ export interface PublishFailure {
38
+ ok: false;
39
+ reason: PublishFailureReason;
40
+ /** Human-readable summary suitable for top-level surfacing. */
41
+ message: string;
42
+ /** Optional extra detail (e.g. error context, stack head, http status). */
43
+ details?: string;
44
+ }
45
+ export type PublishResult = PublishSuccess | PublishFailure;
46
+ /**
47
+ * Programmatic core of `uip solution publish`: uploads a `.zip` to the UiPath
48
+ * solution feed and optionally polls to a terminal state. Returns a tagged
49
+ * {@link PublishResult} for expected failures; re-throws only on unexpected
50
+ * SDK errors. Does not touch `OutputFormatter` / `processContext`.
51
+ *
52
+ * Two upload paths:
53
+ * - **Tenant feed (default)**: `PipelinesApi.pipelinesPackageUpload` —
54
+ * returns a full DTO including packageName/version/state. The CI service
55
+ * principal is authorized for this endpoint; do not unify on the AS path.
56
+ * - **Personal Workspace** (`personalWorkspace: true`): `PackagesApi.packagesUpload`
57
+ * with `locationKey` set to the PW folder key — returns a packageVersionKey
58
+ * GUID only. A follow-up `packagesGetVersion` enriches metadata best-effort
59
+ * (can 404 on indexing lag — handled gracefully).
60
+ */
61
+ export declare function publishSolutionAsync(packagePath: string, options?: PublishOptions): Promise<PublishResult>;
@@ -0,0 +1,34 @@
1
+ /** Discriminator for {@link ResourceRefreshFailure}; library callers can ignore the tag and read `.message` / `.ok`. */
2
+ export type ResourceRefreshFailureReason = "solution_not_found" | "not_a_solution" | "auth_failed" | "sync_failed";
3
+ export interface ResourceRefreshOptions {
4
+ /** Minimum minutes before token expiration to trigger a refresh. Default `10` (matches the CLI's `--login-validity`). */
5
+ loginValidity?: number;
6
+ /** Pin auth to this exact `.uipath/.auth` path. */
7
+ envFilePath?: string;
8
+ }
9
+ export interface ResourceRefreshSuccess {
10
+ ok: true;
11
+ /** Resources newly created (virtualized) in the solution this run. */
12
+ created: number;
13
+ /** Resources imported from Orchestrator into the solution this run. */
14
+ imported: number;
15
+ /** Bindings whose cloud key was already in the solution (no-op this run). */
16
+ skipped: number;
17
+ /** Non-fatal advisories (e.g. unresolved connections, link-before-deploy hints). */
18
+ warnings: string[];
19
+ }
20
+ export interface ResourceRefreshFailure {
21
+ ok: false;
22
+ reason: ResourceRefreshFailureReason;
23
+ /** Human-readable summary suitable for top-level surfacing. */
24
+ message: string;
25
+ }
26
+ export type ResourceRefreshResult = ResourceRefreshSuccess | ResourceRefreshFailure;
27
+ /**
28
+ * Programmatic core of `uip solution resources refresh`: re-scans every project's
29
+ * `bindings_v2.json` and syncs resource declarations into the solution, importing
30
+ * from Orchestrator when a match exists and virtualizing the rest. Returns a tagged
31
+ * {@link ResourceRefreshResult}; re-throws only on unexpected errors. Mirrors
32
+ * `./pack` / `./publish` / `./deploy`.
33
+ */
34
+ export declare function resourceRefreshAsync(solutionPath?: string, options?: ResourceRefreshOptions): Promise<ResourceRefreshResult>;
@@ -0,0 +1,37 @@
1
+ /** Which step of {@link solutionInitAsync} failed, so the CLI can map it to a stage-specific message. */
2
+ export type SolutionInitStage = "directory" | "briefing" | "manifest";
3
+ /** Thrown by {@link solutionInitAsync}, tagged with the failing {@link SolutionInitStage}; `message` mirrors the cause. */
4
+ export declare class SolutionInitError extends Error {
5
+ readonly stage: SolutionInitStage;
6
+ constructor(stage: SolutionInitStage, cause: unknown);
7
+ }
8
+ export interface SolutionInitOptions {
9
+ /**
10
+ * AGENTS.md / CLAUDE.md content, written to both files before the `.uipx` manifest.
11
+ * The CLI passes its version-stamped template; library callers usually omit it.
12
+ */
13
+ briefingContent?: string;
14
+ /**
15
+ * Base dir a relative `solutionName` resolves against. Defaults to `process.cwd()`;
16
+ * lets library callers set a root without mutating global cwd. Ignored if `solutionName` is absolute.
17
+ */
18
+ cwd?: string;
19
+ }
20
+ export interface SolutionInitResult {
21
+ /** Absolute path to the created `.uipx` manifest. */
22
+ solutionFile: string;
23
+ /** Absolute path to the created solution directory. */
24
+ solutionDir: string;
25
+ /** Solution name without extension. */
26
+ solutionName: string;
27
+ /** Absolute path to the written AGENTS.md, when `briefingContent` was provided. */
28
+ agentsPath?: string;
29
+ /** Absolute path to the written CLAUDE.md, when `briefingContent` was provided. */
30
+ claudePath?: string;
31
+ }
32
+ /**
33
+ * Programmatic core of `uip solution init`: creates the solution dir, an optional
34
+ * AGENTS.md/CLAUDE.md briefing (before the manifest), and the `.uipx` manifest. Throws on
35
+ * failure; does not touch `OutputFormatter`/`processContext`.
36
+ */
37
+ export declare function solutionInitAsync(solutionName: string, options?: SolutionInitOptions): Promise<SolutionInitResult>;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Throw if `dir` doesn't directly contain a `.uipx` manifest. Stricter than
3
+ * `findSolutionFile` (which walks up to find one) — write commands should not
4
+ * silently mutate the wrong folder when run from an arbitrary cwd.
5
+ *
6
+ * Lives in `services/` (not `commands/project.ts`) so callers can mock the
7
+ * check without pulling in the full project-commands module.
8
+ */
9
+ export declare function assertSolutionManifest(dir: string): Promise<void>;
@@ -0,0 +1,132 @@
1
+ import { type IResourceBuilderServices, type ISolutionBuilder, type ResourceDefinition } from "@uipath/resource-builder-sdk";
2
+ interface RequiredPropertyDefault {
3
+ property: string;
4
+ /** Empty placeholder value matching the property's declared type. */
5
+ placeholder: unknown;
6
+ }
7
+ interface ResolvedKindMetadata {
8
+ /** Subtype to pass to createVirtualResourceAsync (e.g. "StringAsset"). */
9
+ type?: string;
10
+ /** SDK's `supportsInLineCreation` — whether a virtual stub can be created. */
11
+ virtualizable: boolean;
12
+ /**
13
+ * Required spec properties that have no default in SDK metadata. Deploy
14
+ * validation rejects virtualized resources missing these (e.g. Asset.value).
15
+ * We fill them in-memory after `createVirtualResourceAsync` with a
16
+ * type-appropriate placeholder.
17
+ */
18
+ requiredDefaults: RequiredPropertyDefault[];
19
+ }
20
+ /**
21
+ * Normalize a folder path for comparisons. `.` and `solution_folder` both
22
+ * encode "no folder" (tenant/root scope) — collapsing them to undefined lets
23
+ * us compare a binding's folder against an existing resource's folder
24
+ * consistently regardless of which placeholder either side carries.
25
+ */
26
+ export declare function normalizeFolderPath(path: string | undefined): string | undefined;
27
+ interface SyncResult {
28
+ created: number;
29
+ imported: number;
30
+ skipped: number;
31
+ warnings: string[];
32
+ }
33
+ /**
34
+ * Reads bindings_v2.json from project paths and creates/imports matching
35
+ * resources in the solution using the resource-builder-sdk.
36
+ *
37
+ * @param solutionDir - Path to the solution directory
38
+ * @param projectPaths - Specific project paths to scan (if omitted, scans all projects in .uipx)
39
+ */
40
+ export declare function syncResourcesFromBindings(solutionDir: string, projectPaths?: string[]): Promise<SyncResult>;
41
+ /**
42
+ * Mirror of SDK's private `addResourceWithUniqueName`
43
+ * (resource-builder-sdk index.js:673): if any other resource of the same
44
+ * kind already carries `name` (or a `name_<N>` suffix variant), return
45
+ * `name_<N+1>`. Otherwise return `name` unchanged. Excludes `excludeKey`
46
+ * so the resource we just created doesn't collide with itself.
47
+ */
48
+ export declare function uniqueNameForResource(name: string, kind: string, excludeKey: string, solution: {
49
+ resources: Array<{
50
+ key: string;
51
+ kind?: string;
52
+ name?: string;
53
+ }>;
54
+ }): string;
55
+ export interface RcsMatch {
56
+ key: string;
57
+ name: string;
58
+ /** Subtype as RCS reports it (e.g. `Text` for Asset). `undefined` for
59
+ * kinds without a subtype (Queue). Callers may need to forward this to
60
+ * `addOrUpdateResourceToSolutionAsync`, which rejects type-less imports
61
+ * for kinds that SDK metadata indexes by (kind, type). */
62
+ type?: string;
63
+ folder?: {
64
+ fullyQualifiedName: string;
65
+ folderKey: string;
66
+ path?: string;
67
+ };
68
+ }
69
+ /**
70
+ * Page through RCS for a given (kind, name) and collect every match. Returns
71
+ * an empty array on lookup error (logged as a warning). Callers decide what
72
+ * to do with 0/1/many matches.
73
+ */
74
+ export declare function searchRcsResources(builder: ISolutionBuilder, kind: string, name: string): Promise<RcsMatch[]>;
75
+ export declare function findResourceInRcs(builder: ISolutionBuilder, kind: string, name: string, folderPath?: string): Promise<RcsMatch | undefined>;
76
+ /**
77
+ * Resolve a resource kind's metadata via the SDK (`kind`, optional `type`) so
78
+ * callers outside the bindings sync can fill required spec defaults the same
79
+ * way `createVirtualForBinding` does. Returns undefined if the kind isn't
80
+ * indexed by SDK metadata.
81
+ */
82
+ export declare function resolveResourceKindMetadata(services: IResourceBuilderServices, kind: string, type?: string): Promise<ResolvedKindMetadata | undefined>;
83
+ export interface CreateLocalResourceParams {
84
+ builder: ISolutionBuilder;
85
+ services: IResourceBuilderServices;
86
+ kind: string;
87
+ type?: string;
88
+ name: string;
89
+ folderPath?: string;
90
+ }
91
+ export interface CreateLocalResourceResult {
92
+ resource: ResourceDefinition;
93
+ /** Final name on the resource — may differ from input if SDK conflict suffix kicked in. */
94
+ finalName: string;
95
+ }
96
+ /**
97
+ * Create a virtual (local-only) resource via the SDK and rename it to `name`,
98
+ * mirroring the rename + spec-default flow `createVirtualForBinding` runs
99
+ * during refresh. Returns the freshly created `SolutionResource` after the
100
+ * mutation, or undefined if the SDK failed to allocate a key.
101
+ *
102
+ * Callers must:
103
+ * - Persist the change (e.g. `builder.disposeAsync()` or
104
+ * `context.saveAsync()`); this helper only mutates in-memory state.
105
+ * - Have already done an idempotency check — this helper *always* creates,
106
+ * and SDK's `addResourceWithUniqueName` will suffix the name on conflict.
107
+ */
108
+ export declare function createLocalResource(params: CreateLocalResourceParams): Promise<CreateLocalResourceResult | undefined>;
109
+ export interface UipxProject {
110
+ /** Project type as written in `.uipx` (e.g. "Agent", "Process"). */
111
+ type: string;
112
+ /** Design-time UUID used as `projectKey` in reconcile. */
113
+ id: string;
114
+ /** Path to the project directory (parent of `project.uiproj`). */
115
+ path: string;
116
+ /** Project name read from `project.uiproj` (`Name` field). */
117
+ name: string;
118
+ }
119
+ /**
120
+ * Read solution's `.uipx` and each project's `project.uiproj` to assemble the
121
+ * data needed for `reconcileProjectsAsync`. Without this, sync would only see
122
+ * resource bindings (Queue/Asset/etc.) and miss the project artefacts
123
+ * (process/<type>, package, app/<subType>, appVersion) the SDK generates from
124
+ * project templates.
125
+ */
126
+ export declare function readUipxProjects(solutionDir: string): Promise<UipxProject[]>;
127
+ /**
128
+ * Sync resources from bindings with logging. Non-fatal — logs warnings
129
+ * on failure and continues. Used by pack and upload before packaging.
130
+ */
131
+ export declare function syncAndLog(solutionDir: string): Promise<void>;
132
+ export {};
@@ -45,10 +45,12 @@ You must manage membership via the CLI, never by editing the manifest. All these
45
45
  |---|---|
46
46
  | Create a solution | `uip solution init <name>` |
47
47
  | Register an existing subfolder of the solution dir as a project (no copying — use after scaffolding *inside* the solution dir, e.g. `uip rpa create-project --location <solution-dir>`) | `uip solution project add <project-path> [<solution-file>]` |
48
- | Add a project from outside the solution — copies the folder at `<path>` into the solution dir and registers it (`<path>` is a local filesystem path) | `uip solution project import --source <path>` |
48
+ | Add a project from outside the solution — copies the folder at `<path>` into the solution dir and registers it (`<path>` is a local filesystem path) | `uip solution project import <path>` |
49
49
  | Unregister a project (does not delete the project files on disk) | `uip solution project remove <project-path> [<solution-file>]` |
50
50
  | List projects in the solution | `uip solution project list` |
51
51
 
52
+ The `uip ... init` scaffolders (`agent init`, `maestro flow init`, `maestro bpmn init`, `maestro case 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).
53
+
52
54
  ## Project Types
53
55
 
54
56
  A solution can contain multiple projects of different types. The table below lists each project type and the `uip` command that scaffolds a fresh one (or marks the row when no scaffolding command exists).
@@ -70,7 +72,7 @@ A solution can contain multiple projects of different types. The table below lis
70
72
 
71
73
  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.
72
74
 
73
- The type lives in either `project.uiproj` (top-level `ProjectType`) or `project.json` (`designOptions.outputType`, falling back to top-level `ProjectType` when `outputType` is absent — read or write either field). After scaffolding, register the project with the solution: `uip solution project import --source <path>`. If you pass an unknown type to that command, it rejects with the exhaustive accepted list — trust that error over this table.
75
+ The type lives in either `project.uiproj` (top-level `ProjectType`) or `project.json` (`designOptions.outputType`, falling back to top-level `ProjectType` when `outputType` is absent — read or write either field). 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 project add <project-path> [<solution-file>]` when the project already lives inside the solution directory (registers in place, no copy), or `uip solution project 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.
74
76
 
75
77
  ## End-to-End Lifecycle
76
78
 
@@ -85,9 +87,13 @@ uip login --client-id <ID> --client-secret <SECRET> --tenant <TENANT>
85
87
 
86
88
  # 2. Pack the solution into a .zip. Two positional args:
87
89
  # <solutionPath> — solution dir (containing .uipx) or a .uis file
88
- # <output-path> — directory where the .zip is written
90
+ # <output-path> — directory where the .zip is written (required unless --dry-run)
89
91
  uip solution pack . ./out
90
92
 
93
+ # 2a. (Optional) Validate the solution against the strict deploy-time
94
+ # pipeline without producing a package — useful as a CI gate.
95
+ uip solution pack . --dry-run
96
+
91
97
  # 3. Publish the packed .zip to Orchestrator
92
98
  uip solution publish ./out/<package>.zip
93
99
 
@@ -117,7 +123,7 @@ uip solution deploy list
117
123
  ```bash
118
124
  uip solution deploy run --skip-activate ... # leaves "Inactive (Ready to activate)"
119
125
  uip solution deploy activate <deployment-name> # activate later
120
- uip solution deploy uninstall <deployment-name> # remove the deployment + its resources
126
+ uip solution deploy uninstall <deployment-name> --yes # remove the deployment + its resources (--yes required; the CLI never prompts)
121
127
  ```
122
128
 
123
129
  `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.
@@ -127,12 +133,13 @@ uip solution deploy uninstall <deployment-name> # remove the deployment + its
127
133
  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.
128
134
 
129
135
  ```bash
130
- uip solution upload . # upload solution dir to Studio Web; returns DesignerUrl
136
+ uip solution upload . # upload solution dir to Studio Web as a new solution; returns DesignerUrl
137
+ uip solution upload . --force # force-replace the existing Studio Web solution referenced by .uipx (destroys cloud version history)
131
138
  uip solution download <solution-id> # round-trip a Studio Web solution back to disk
132
- uip solution delete <solution-id> # remove a solution from Studio Web
139
+ uip solution delete <solution-id> --yes # remove a solution from Studio Web (--yes required; the CLI never prompts)
133
140
  ```
134
141
 
135
- `upload` accepts a solution directory, a `.uipx` file, or a `.uis` file. If the solution already exists on Studio Web (matching `SolutionId` in `.uipx`), the upload overwrites; otherwise it imports as new.
142
+ `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.
136
143
 
137
144
  ## Per-Project Bindings (`bindings_v2.json`)
138
145
 
@@ -141,15 +148,15 @@ Each project declares the resources it needs (assets, queues, buckets, processes
141
148
  After editing a project's bindings, or after `solution project import` (which doesn't auto-sync resources), reconcile the solution-level inventory:
142
149
 
143
150
  ```bash
144
- uip solution resource refresh # re-scan every project, sync new / removed resources
151
+ uip solution resources refresh # re-scan every project, sync new / removed resources
145
152
  ```
146
153
 
147
- `solution resource refresh` creates new resources for bindings not yet in the solution and imports from Orchestrator when a matching resource already exists.
154
+ `solution resources refresh` creates new resources for bindings not yet in the solution and imports from Orchestrator when a matching resource already exists.
148
155
 
149
156
  Inspect the current solution inventory:
150
157
 
151
158
  ```bash
152
- uip solution resource list # everything declared in this solution
159
+ uip solution resources list # everything declared in this solution
153
160
  ```
154
161
 
155
162
  ## Deployment Configuration
@@ -192,11 +199,11 @@ The CLI talks about the same resource types Orchestrator does:
192
199
  - **Processes / Releases** — published packages bound to a folder.
193
200
  - **Triggers** & **Webhooks** — event-, time-, or queue-based job firing; outbound HTTP notifications.
194
201
 
195
- Resources outside a solution are managed via the `uip resource` group, which exposes per-type subgroups (`uip resource assets …`, `uip resource queues …`, `uip resource buckets …`, `uip resource bucket-files …`, `uip resource libraries …`, `uip resource queue-items …`, `uip resource triggers …`, `uip resource webhooks …`). Run `uip resource --help` for the live list. Example:
202
+ Resources outside a solution are managed under the orchestrator tool, which exposes per-type subgroups (`uip or assets …`, `uip or queues …`, `uip or buckets …`, `uip or bucket-files …`, `uip or libraries …`, `uip or queue-items …`, `uip or triggers …`, `uip or webhooks …`). Run `uip or --help` for the live list. Example:
196
203
 
197
204
  ```bash
198
- uip resource assets list # list assets in the active folder
199
- uip resource assets create # create an asset (see --help)
205
+ uip or assets list # list assets in the active folder
206
+ uip or assets create # create an asset (see --help)
200
207
  ```
201
208
 
202
209
  ## Output Conventions for Agents
@@ -222,13 +229,15 @@ uip solution deploy --help # the deploy subgroup
222
229
  uip <command> --help # full options for any command
223
230
  ```
224
231
 
232
+ For concept or API documentation beyond CLI usage, fetch `https://docs.uipath.com/llms.txt` for the product index, then the relevant `.md` page (e.g. `https://docs.uipath.com/orchestrator/automation-cloud/latest/api-guide/assets-requests.md`).
233
+
225
234
  Adjacent groups commonly used alongside solutions:
226
235
 
227
236
  | Group | Purpose |
228
237
  |---|---|
229
238
  | `uip login`, `uip login tenant` | Authenticate, switch tenants |
230
239
  | `uip or folders` | Manage Orchestrator folders |
231
- | `uip resource` | Manage Orchestrator resources directly (assets, queues, buckets, …) |
240
+ | `uip or assets`, `uip or queues`, `uip or buckets`, `uip or bucket-files`, `uip or libraries`, `uip or queue-items`, `uip or triggers`, `uip or webhooks` | Manage Orchestrator resources directly |
232
241
  | `uip rpa` | RPA workflow lifecycle (compile, validate, execute, scaffold) |
233
242
  | `uip maestro` | Maestro Flow / Case / BPMN scaffolding |
234
243
  | `uip agent`, `uip codedagent` | Coded agent lifecycle |
@@ -244,9 +253,9 @@ Adjacent groups commonly used alongside solutions:
244
253
  |---|---|
245
254
  | `Not authenticated` / 401 | `uip login`, then re-run |
246
255
  | Command targets the wrong tenant | `uip login tenant set <tenant>`; verify with `uip login status` |
247
- | 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>` (only if intentional) |
256
+ | 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) |
248
257
  | `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` |
249
- | `Resource not found` after deploy | `uip solution resource refresh` to re-sync from each project's `bindings_v2.json`; if still missing, the resource was never declared in any project |
258
+ | `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 |
250
259
  | Output looks empty | You may have redirected stderr — confirmations and errors go there. Re-run without `2>` |
251
260
 
252
261
  ---