@uipath/solution-tool 1.0.4 → 1.195.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 (40) hide show
  1. package/README.md +25 -0
  2. package/dist/deploy.d.ts +27 -0
  3. package/dist/deploy.js +42619 -0
  4. package/dist/init.d.ts +6 -0
  5. package/dist/init.js +10177 -0
  6. package/dist/models/index.d.ts +1 -0
  7. package/dist/models/pack-command-types.d.ts +25 -0
  8. package/dist/pack.d.ts +6 -0
  9. package/dist/pack.js +261236 -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 +31488 -0
  15. package/dist/resource.d.ts +7 -0
  16. package/dist/resource.js +46898 -0
  17. package/dist/services/activation.d.ts +51 -0
  18. package/dist/services/auth-helper.d.ts +10 -0
  19. package/dist/services/deploy-activate-service.d.ts +45 -0
  20. package/dist/services/deploy-list-service.d.ts +57 -0
  21. package/dist/services/deploy-run-service.d.ts +84 -0
  22. package/dist/services/deploy-uninstall-service.d.ts +45 -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 +21 -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 +54 -0
  31. package/dist/services/personal-workspace-resolver.d.ts +28 -0
  32. package/dist/services/publish-service.d.ts +43 -0
  33. package/dist/services/resource-refresh-service.d.ts +32 -0
  34. package/dist/services/solution-init-service.d.ts +37 -0
  35. package/dist/services/solution-manifest.d.ts +9 -0
  36. package/dist/services/sync-resources-from-bindings.d.ts +132 -0
  37. package/dist/templates/AGENTS.md +265 -0
  38. package/dist/tool.js +114836 -37620
  39. package/dist/utils/deployment-errors.d.ts +39 -0
  40. package/package.json +44 -50
@@ -0,0 +1,32 @@
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
+ }
7
+ export interface ResourceRefreshSuccess {
8
+ ok: true;
9
+ /** Resources newly created (virtualized) in the solution this run. */
10
+ created: number;
11
+ /** Resources imported from Orchestrator into the solution this run. */
12
+ imported: number;
13
+ /** Bindings whose cloud key was already in the solution (no-op this run). */
14
+ skipped: number;
15
+ /** Non-fatal advisories (e.g. unresolved connections, link-before-deploy hints). */
16
+ warnings: string[];
17
+ }
18
+ export interface ResourceRefreshFailure {
19
+ ok: false;
20
+ reason: ResourceRefreshFailureReason;
21
+ /** Human-readable summary suitable for top-level surfacing. */
22
+ message: string;
23
+ }
24
+ export type ResourceRefreshResult = ResourceRefreshSuccess | ResourceRefreshFailure;
25
+ /**
26
+ * Programmatic core of `uip solution resource refresh`: re-scans every project's
27
+ * `bindings_v2.json` and syncs resource declarations into the solution, importing
28
+ * from Orchestrator when a match exists and virtualizing the rest. Returns a tagged
29
+ * {@link ResourceRefreshResult}; re-throws only on unexpected errors. Mirrors
30
+ * `./pack` / `./publish` / `./deploy`.
31
+ */
32
+ 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 {};
@@ -0,0 +1,265 @@
1
+ # UiPath Solution Workspace
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 project ...` so the manifest stays internally consistent.
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.
6
+
7
+ ## The `.uipx` Manifest
8
+
9
+ `<solution>.uipx` is a JSON document at the solution root listing every project in the solution. Skeleton:
10
+
11
+ ```json
12
+ {
13
+ "DocVersion": "1.0.0",
14
+ "StudioMinVersion": "2025.10.0",
15
+ "SolutionId": "<uuid>",
16
+ "Projects": [
17
+ {
18
+ "Type": "Process",
19
+ "ProjectRelativePath": "MyProcess/project.json",
20
+ "Id": "<uuid>"
21
+ }
22
+ ]
23
+ }
24
+ ```
25
+
26
+ Typical layout:
27
+
28
+ ```text
29
+ my-solution/
30
+ my-solution.uipx ← solution manifest
31
+ AGENTS.md ← this file (Codex, Cursor, generic agents)
32
+ CLAUDE.md ← identical copy (Claude Code)
33
+ ProjectA/
34
+ project.json
35
+ bindings_v2.json ← per-project resource declarations
36
+ ...
37
+ ProjectB/
38
+ project.uiproj
39
+ ...
40
+ ```
41
+
42
+ You must manage membership via the CLI, never by editing the manifest. All these operations work entirely on local files (`.uipx` plus the solution-builder artefacts on disk) and do not require `uip login` — auth is only needed once you reach `pack` / `publish` / `deploy` / `upload`.
43
+
44
+ | Intent | Command |
45
+ |---|---|
46
+ | Create a solution | `uip solution init <name>` |
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>` |
49
+ | Unregister a project (does not delete the project files on disk) | `uip solution project remove <project-path> [<solution-file>]` |
50
+ | List projects in the solution | `uip solution project list` |
51
+
52
+ ## Project Types
53
+
54
+ 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).
55
+
56
+ | Type | Description | Scaffold with | Skill |
57
+ |---|---|---|---|
58
+ | `Process` | RPA process — Studio workflow (XAML, Coded C#, or Hybrid) | `uip rpa create-project --name <name>` | `uipath-rpa` |
59
+ | `Library` | Reusable RPA library | `uip rpa create-project --template-id LibraryProcessTemplate --name <name>` | `uipath-rpa` |
60
+ | `Tests` | Test Automation project | `uip rpa create-project --template-id TestAutomationProjectTemplate --name <name>` | `uipath-rpa` |
61
+ | `Flow` | Maestro Flow — long-running orchestrated workflow | `uip maestro flow init <name>` | `uipath-maestro-flow` |
62
+ | `CaseManagement` | Maestro Case — stateful business process (SLA, approvals, HITL) | `uip maestro case init <name>` | `uipath-maestro-case` |
63
+ | `ProcessOrchestration` | Maestro BPMN — long-running orchestrated process | `uip maestro bpmn init <name>` | `uipath-maestro-bpmn` |
64
+ | `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` |
65
+ | `AppV2` | Coded App — web application | `uip codedapp init <path>` | `uipath-coded-apps` |
66
+ | `Function` | UiPath Function (JS / TS / Python) | `uip functions new [name]` | none |
67
+ | `Api` | API Workflow project | no CLI scaffolding | none |
68
+ | `Connector` | Integration Service connector | no CLI scaffolding — use `uip is connectors` to list / get / export existing connectors | none |
69
+ | `WebApp` | Legacy low-code UiPath App (the coded variant is `AppV2`) | no CLI scaffolding | none |
70
+
71
+ 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
+
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.
74
+
75
+ ## End-to-End Lifecycle
76
+
77
+ Run `uip login` first — most steps below need an authenticated session, including `solution pack` in some cases.
78
+
79
+ ```bash
80
+ # 1. Authenticate
81
+ # Interactive (browser OAuth):
82
+ uip login
83
+ # Non-interactive (CI / CD) with client credentials:
84
+ uip login --client-id <ID> --client-secret <SECRET> --tenant <TENANT>
85
+
86
+ # 2. Pack the solution into a .zip. Two positional args:
87
+ # <solutionPath> — solution dir (containing .uipx) or a .uis file
88
+ # <output-path> — directory where the .zip is written (required unless --dry-run)
89
+ uip solution pack . ./out
90
+
91
+ # 2a. (Optional) Validate the solution against the strict deploy-time
92
+ # pipeline without producing a package — useful as a CI gate.
93
+ uip solution pack . --dry-run
94
+
95
+ # 3. Publish the packed .zip to Orchestrator
96
+ uip solution publish ./out/<package>.zip
97
+
98
+ # 4. Fetch the default deployment configuration for the published package
99
+ uip solution deploy config get <package-name> --destination config.json
100
+
101
+ # 5. (Optional) Customize the config — see "Deployment Configuration" below
102
+
103
+ # 6. Deploy. By default this also activates; pass --skip-activate to defer.
104
+ uip solution deploy run \
105
+ --name <deployment-name> \
106
+ --package-name <package-name> \
107
+ --package-version <version> \
108
+ --folder-name <new-folder> \
109
+ --parent-folder-path Shared \
110
+ --config-file config.json
111
+
112
+ # 7. The deploy returns a pipeline deployment ID — track it:
113
+ uip solution deploy status <pipeline-deployment-id>
114
+
115
+ # 8. List every deployment in the active tenant
116
+ uip solution deploy list
117
+ ```
118
+
119
+ **Activation lifecycle.** `deploy run` activates by default. To split the steps:
120
+
121
+ ```bash
122
+ uip solution deploy run --skip-activate ... # leaves "Inactive (Ready to activate)"
123
+ uip solution deploy activate <deployment-name> # activate later
124
+ uip solution deploy uninstall <deployment-name> # remove the deployment + its resources
125
+ ```
126
+
127
+ `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.
128
+
129
+ ## Studio Web (Browser Editing)
130
+
131
+ 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.
132
+
133
+ ```bash
134
+ uip solution upload . # upload solution dir to Studio Web as a new solution; returns DesignerUrl
135
+ uip solution upload . --force # force-replace the existing Studio Web solution referenced by .uipx (destroys cloud version history)
136
+ uip solution download <solution-id> # round-trip a Studio Web solution back to disk
137
+ uip solution delete <solution-id> # remove a solution from Studio Web
138
+ ```
139
+
140
+ `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.
141
+
142
+ ## Per-Project Bindings (`bindings_v2.json`)
143
+
144
+ 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.
145
+
146
+ After editing a project's bindings, or after `solution project import` (which doesn't auto-sync resources), reconcile the solution-level inventory:
147
+
148
+ ```bash
149
+ uip solution resource refresh # re-scan every project, sync new / removed resources
150
+ ```
151
+
152
+ `solution resource refresh` creates new resources for bindings not yet in the solution and imports from Orchestrator when a matching resource already exists.
153
+
154
+ Inspect the current solution inventory:
155
+
156
+ ```bash
157
+ uip solution resource list # everything declared in this solution
158
+ ```
159
+
160
+ ## Deployment Configuration
161
+
162
+ 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*.
163
+
164
+ ```bash
165
+ # Fetch the default config to a file
166
+ uip solution deploy config get <package-name> --destination config.json
167
+
168
+ # Set a property on a single resource
169
+ uip solution deploy config set config.json <resource-name> <property> <value>
170
+ # e.g. set config.json MyQueue maxNumberOfRetries 5
171
+
172
+ # Set a property on every resource (limited; supports e.g. conflictFixingAction)
173
+ uip solution deploy config set config.json --all <property> <value>
174
+
175
+ # Link a resource slot to an existing Orchestrator resource (instead of creating a new one)
176
+ uip solution deploy config link config.json <resource-name> \
177
+ --name <existing-resource-name> \
178
+ --folder-path Shared/Production
179
+
180
+ # Remove a link — the resource will be created at deploy time again
181
+ uip solution deploy config unlink config.json <resource-name>
182
+
183
+ # Apply the customized config:
184
+ uip solution deploy run ... --config-file config.json
185
+ ```
186
+
187
+ If a deploy fails on a configuration issue, the CLI prints the offending resource and an `Instructions` field. Read those before retrying — most failures are an `existing-resource-name` typo, a wrong `--folder-path`, or a property that the resource type does not accept.
188
+
189
+ ## Resource Types in Orchestrator
190
+
191
+ The CLI talks about the same resource types Orchestrator does:
192
+
193
+ - **Assets** — key-value configuration. Asset value types: `Text`, `Bool`, `Integer`, `Credential`, `Secret`.
194
+ - **Queues** & **Queue Items** — work-item queues for distributed transactional processing; queue items are the rows.
195
+ - **Storage Buckets** & **Bucket Files** — file storage for automation data.
196
+ - **Connections** — Integration Service connections to external systems (Salesforce, ServiceNow, …).
197
+ - **Processes / Releases** — published packages bound to a folder.
198
+ - **Triggers** & **Webhooks** — event-, time-, or queue-based job firing; outbound HTTP notifications.
199
+
200
+ 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:
201
+
202
+ ```bash
203
+ uip or assets list # list assets in the active folder
204
+ uip or assets create # create an asset (see --help)
205
+ ```
206
+
207
+ ## Output Conventions for Agents
208
+
209
+ Two rules make automation reliable:
210
+
211
+ 1. **Never redirect or drop stderr.** Errors and confirmations go to stderr — `2>/dev/null` will silently hide failures and produce false retries.
212
+ 2. **Use `--output-filter <jmespath>`** to extract specific fields rather than piping JSON through external tools. The expression is applied to the `Data` array — start with `[]`, not with `Data[]`. Example: `uip solution packages list --output-filter "[].name"`.
213
+
214
+ Standard success shape: `{ "Result": "Success", "Code": "<CommandCode>", "Data": ... }`.
215
+ Standard failure shape: `{ "Result": "Failure", "Message": "<short>", "Instructions": "<actionable>" }`.
216
+
217
+ List commands always return `Data: []` on empty results — never a message object — so consumers can rely on a consistent array shape.
218
+
219
+ ## Discovering Commands
220
+
221
+ This file is a starting map, not a reference. The live source of truth is the CLI itself:
222
+
223
+ ```bash
224
+ uip --help # top-level groups
225
+ uip solution --help # every solution verb
226
+ uip solution deploy --help # the deploy subgroup
227
+ uip <command> --help # full options for any command
228
+ ```
229
+
230
+ 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`).
231
+
232
+ Adjacent groups commonly used alongside solutions:
233
+
234
+ | Group | Purpose |
235
+ |---|---|
236
+ | `uip login`, `uip login tenant` | Authenticate, switch tenants |
237
+ | `uip or folders` | Manage Orchestrator folders |
238
+ | `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 |
239
+ | `uip rpa` | RPA workflow lifecycle (compile, validate, execute, scaffold) |
240
+ | `uip maestro` | Maestro Flow / Case / BPMN scaffolding |
241
+ | `uip agent`, `uip codedagent` | Coded agent lifecycle |
242
+ | `uip codedapp` | Coded Apps lifecycle |
243
+ | `uip functions` | UiPath Functions |
244
+ | `uip tm` | Test Manager (test projects, sets, executions) |
245
+ | `uip is` | Integration Service (connectors, connections) |
246
+ | `uip tools` | Manage CLI tool extensions |
247
+
248
+ ## Troubleshooting Quick Map
249
+
250
+ | Symptom | First thing to check |
251
+ |---|---|
252
+ | `Not authenticated` / 401 | `uip login`, then re-run |
253
+ | Command targets the wrong tenant | `uip login tenant set <tenant>`; verify with `uip login status` |
254
+ | 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) |
255
+ | `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` |
256
+ | `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 |
257
+ | Output looks empty | You may have redirected stderr — confirmations and errors go there. Re-run without `2>` |
258
+
259
+ ---
260
+
261
+ For deeper detail, consult:
262
+
263
+ - The official Solutions Management guide: <https://docs.uipath.com/solutions-management/automation-cloud/latest>
264
+ - The `uipath-platform` skill — auth, Orchestrator (folders, assets, queues, buckets, robots, packages, processes), solution lifecycle (pack / publish / deploy), Integration Service, and the `uip` CLI.
265
+ - 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).