From 9239f7cc62b29228e55e3dcde5ca7660ad212ae2 Mon Sep 17 00:00:00 2001 From: Ana-Maria Radu Date: Thu, 30 Apr 2026 19:07:41 +0300 Subject: [PATCH 1/3] fix(skills): enhance solution editing guidance and durable gotchas MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Improvements surfaced through end-to-end testing of multi-project solution authoring (RPA + Python agent + Maestro Flow + Maestro Case + Tests): - uipath-platform/develop-solution.md: new "Field-tested gotchas" section (state verification, bindings.json vs bindings_v2.json schemas, stderr- checked refresh for false-success on schema errors, orphan package resources after project remove); document --solution-folder flag migration on resource list/refresh; transactional add note; three-name divergence on import; empty-target solution new behavior. - uipath-platform/solution.md: expanded file structure with annotations; note that coded apps are not registered in .uipx. - uipath-platform/pack-and-deploy.md: add solution-state verification to prerequisites; remove transitory "currently broken" bug mention. - uipath-agents/setup.md: recommend packOptions.directoriesExcluded for .venv and __pycache__ when the agent project is part of a solution upload. - uipath-rpa/coded-vs-xaml-guide.md: clarify that uip rpa create-project is mode-agnostic; coded vs XAML is decided per-workflow. - uipath-maestro-case/case-commands.md: document uip maestro case init as a first-class scaffold command (counterpart to uip maestro flow init). - uipath-coded-apps/SKILL.md: note coded apps are not .uipx-registered; they deploy independently via uip codedapp publish/deploy. - Bump plugin version 0.0.21 → 0.0.22. Co-Authored-By: Claude Opus 4.7 (1M context) --- .claude-plugin/marketplace.json | 2 +- .claude-plugin/plugin.json | 2 +- .../references/coded/lifecycle/setup.md | 13 +++ skills/uipath-coded-apps/SKILL.md | 2 + .../references/case-commands.md | 16 ++++ .../references/solution/develop-solution.md | 87 +++++++++++++++++-- .../references/solution/pack-and-deploy.md | 1 + .../references/solution/solution.md | 27 ++++-- .../references/coded-vs-xaml-guide.md | 4 + 9 files changed, 137 insertions(+), 17 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 7b8653667..0e93c467e 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -9,7 +9,7 @@ "name": "uipath", "source": "./", "description": "UiPath plugin for Claude Code — custom skills, agents, hooks, and MCP servers for UiPath workflows, UI automation, UI testing and UiPath diagnostics", - "version": "0.0.21", + "version": "0.0.22", "author": { "name": "UiPath" }, diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index a23f7d670..00916ceff 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "uipath", - "version": "0.0.21", + "version": "0.0.22", "description": "UiPath plugin for Claude Code — custom skills, agents, hooks, and MCP servers for UiPath RPA workflows, UI automation, UI testing, Python coded agents and UiPath diagnostics", "author": { "name": "UiPath" diff --git a/skills/uipath-agents/references/coded/lifecycle/setup.md b/skills/uipath-agents/references/coded/lifecycle/setup.md index abb63414c..4003eccb3 100644 --- a/skills/uipath-agents/references/coded/lifecycle/setup.md +++ b/skills/uipath-agents/references/coded/lifecycle/setup.md @@ -266,3 +266,16 @@ The main project configuration file (generated by `uip codedagent init`): - **`runtimeOptions.isConversational`** - Set `true` for conversational/chat agents - **`packOptions`** - Control which files are included when packaging for deployment - **`functions`** - Entrypoint mappings (format: `"file_path:function_name"`) + +### `packOptions.directoriesExcluded` for solution context + +When the agent project is registered in a solution and uploaded via `uip solution upload`, the agent directory is bundled into the solution archive. Set `directoriesExcluded` to keep Python build artifacts out of the archive: + +```json +"packOptions": { + "directoriesExcluded": [".venv", "__pycache__"], + "includeUvLock": true +} +``` + +`.venv/` is hundreds of MB of installed wheels and breaks uploads. `__pycache__/` is ephemeral bytecode. Both regenerate from `pyproject.toml` + `uv.lock` on the target side. Without these exclusions, `uip solution upload` produces an oversized archive that can be rejected by Studio Web. diff --git a/skills/uipath-coded-apps/SKILL.md b/skills/uipath-coded-apps/SKILL.md index f81e0baf1..9c2fbb1c7 100644 --- a/skills/uipath-coded-apps/SKILL.md +++ b/skills/uipath-coded-apps/SKILL.md @@ -24,6 +24,8 @@ Build, debug, and deploy UiPath Coded Web Applications and Coded Action Apps usi | **Coded Web App** | React/Vue/other frontend hosted on UiPath CDN | User-facing app accessed via a URL | | **Coded Action App** | React form wired to UiPath Action Center | Rendered inside human task reviews in Maestro/Agent workflows | +> **Coded apps are not registered in `.uipx` solutions.** They have no `project.uiproj` / `project.json`, so `uip solution project add` does not apply. A coded app can live alongside a solution directory but deploys independently via `uip codedapp publish` (and `uip codedapp deploy`), not via `uip solution pack` / `publish` / `deploy`. + ## Critical Rules 1. **Identify the app type before doing anything else.** Ask: *"Are you building a **Coded Web App** (custom frontend deployed to UiPath Cloud) or a **Coded Action App** (form for Action Center human task reviews)?"* The two paths diverge on scaffolding, redirect URI, and publish flag — do not guess. diff --git a/skills/uipath-maestro-case/references/case-commands.md b/skills/uipath-maestro-case/references/case-commands.md index 1e5aac415..1f1ebfc86 100644 --- a/skills/uipath-maestro-case/references/case-commands.md +++ b/skills/uipath-maestro-case/references/case-commands.md @@ -33,6 +33,22 @@ Creates `/` with `.uipx` inside. The `case` plugin's --- +## uip maestro case init + +Scaffold a basic Case project with the 5 boilerplate files and a starter `caseplan.json`. Use this for a blank case scaffold without an `sdd.md` (the SDD-driven JSON path writes the same files in a single plugin invocation — see [plugins/case/impl-json.md](plugins/case/impl-json.md)). + +```bash +cd && uip maestro case init +``` + +| Flag | Description | +|------|-------------| +| `` | **(required)** Project directory name. Created inside the current directory | + +Run from inside the solution directory so the resulting layout is `//`. Pair with `uip solution project add ./` to register it in `.uipx`. + +--- + ## uip solution project add Register a project with an existing solution. diff --git a/skills/uipath-platform/references/solution/develop-solution.md b/skills/uipath-platform/references/solution/develop-solution.md index c34fd75cf..b6838ff33 100644 --- a/skills/uipath-platform/references/solution/develop-solution.md +++ b/skills/uipath-platform/references/solution/develop-solution.md @@ -36,6 +36,8 @@ uip solution new "InvoiceAutomation" --output json Creates `InvoiceAutomation/InvoiceAutomation.uipx`. All projects must live inside this directory (or be imported into it). +> If the target folder already exists and is empty, `solution new` drops the `.uipx` inside without nesting or erroring. No need to pre-delete an empty target. + ## Step 2: Add Existing Projects Register a project that already lives inside the solution directory. @@ -47,7 +49,9 @@ uip solution project add ./InvoiceAutomation/Processor --output json uip solution project add ./InvoiceAutomation/Reporter ./InvoiceAutomation/InvoiceAutomation.uipx --output json ``` -The `.uipx` is auto-discovered by walking up from the project path if not specified. +The `.uipx` is auto-discovered by walking up from the project path if not specified. `Type` is auto-detected from `project.uiproj` / `project.json` — do not pass it. + +`add` is transactional: on success, both the `.uipx` entry and the matching `resources/solution_folder/{package,process}/.json` files are created together; on failure, nothing is mutated. ## Step 3: Import External Projects @@ -59,6 +63,8 @@ uip solution project import --source /path/to/ExternalProject --output json Unlike `add`, `import` copies source files into the solution directory first, then registers the copy. +> **Three names can diverge after `import`.** The destination folder name is the basename of `--source`. The `ProjectRelativePath` in `.uipx` matches the folder. The auto-generated package resource name is taken from the project metadata (e.g., `pyproject.toml [project].name` for Python coded agents) — which may differ from the folder. Rename the source directory to the intended project name **before** importing, or trace the relationship via the `projectKey` UUID inside the resource files. + ## Step 4: Remove a Project Unregister a project from the `.uipx` manifest. Does NOT delete files from disk. @@ -67,16 +73,20 @@ Unregister a project from the `.uipx` manifest. Does NOT delete files from disk. uip solution project remove ./InvoiceAutomation/OldProject --output json ``` +> **`project remove` leaves orphan package resources.** It removes the entry from `.uipx` Projects and deletes `resources/solution_folder/process//.json`, but leaves `resources/solution_folder/package/.json` behind. The orphan blocks any future `project add` of a project with the same name. **If you plan to re-add with the same name, manually delete `resources/solution_folder/package/.json` before re-adding.** + ## Step 5: List Resources Show resources declared in the solution, available in Orchestrator, or both. ```bash -uip solution resource list ./InvoiceAutomation --output json -uip solution resource list ./InvoiceAutomation --source local --output json -uip solution resource list ./InvoiceAutomation --kind Queue --search "Invoice" --output json +uip solution resource list --solution-folder ./InvoiceAutomation --output json +uip solution resource list --solution-folder ./InvoiceAutomation --source local --output json +uip solution resource list --solution-folder ./InvoiceAutomation --kind Queue --search "Invoice" --output json ``` +> The solution path is now a `--solution-folder` flag, not a positional argument. The positional form was removed in `solution-tool@1.0.0-alpha.20260429.5761` with no backward compatibility — running it produces `error: too many arguments for 'list'. Expected 0 arguments but got 1.` + | Option | Values | Default | |--------|--------|---------| | `--kind ` | `Queue`, `Asset`, `Bucket`, `Process`, `Connection` | All kinds | @@ -88,7 +98,7 @@ uip solution resource list ./InvoiceAutomation --kind Queue --search "Invoice" - Re-scan all projects and sync resource declarations from their `bindings_v2.json` files. ```bash -uip solution resource refresh ./InvoiceAutomation --output json +uip solution resource refresh --solution-folder ./InvoiceAutomation --output json ``` | Field | Meaning | @@ -100,6 +110,15 @@ uip solution resource refresh ./InvoiceAutomation --output json Run after adding/importing projects or editing any project's `bindings_v2.json`. +> The solution path is a `--solution-folder` flag, not a positional argument. The positional form was removed in `solution-tool@1.0.0-alpha.20260429.5761` with no backward compatibility. If you see `error: too many arguments for 'refresh'. Expected 0 arguments but got 1.`, you are running an old example — switch to `--solution-folder`. + +> **`Result: Success` is unreliable — always check stderr.** Schema errors in `bindings_v2.json` are logged to stderr as `ERROR [ResourceBuilder:BindingsMetadataSerializer]` lines but the JSON returns `Result: Success` with `Created: 0, Imported: 0, Skipped: 0`. Treat `Created==0 && Imported==0 && Skipped==0` while bindings exist on disk as a refresh failure. Capture stderr and grep for `ERROR` before declaring success: +> +> ```bash +> uip solution resource refresh --solution-folder ./InvoiceAutomation --output json 2> refresh.err +> grep -i "ERROR" refresh.err && echo "REFRESH FAILED" || echo "ok" +> ``` + ## Step 7: Upload to Studio Web Upload the solution for browser-based editing. Accepts a directory, `.uipx` file, or `.uis` archive. @@ -135,14 +154,54 @@ uip solution project add ./InvoiceAutomation/Processor --output json uip solution project add ./InvoiceAutomation/Reporter --output json # 3. Sync resource declarations from project bindings -uip solution resource refresh ./InvoiceAutomation --output json +uip solution resource refresh --solution-folder ./InvoiceAutomation --output json # 4. Verify resources are tracked -uip solution resource list ./InvoiceAutomation --source local --output json +uip solution resource list --solution-folder ./InvoiceAutomation --source local --output json ``` --- +## Field-tested gotchas + +Durable CLI behaviors that have caught agents in practice. Treat each as a hard rule. + +### Always verify state after every mutation + +`add`, `remove`, and `refresh` can succeed in stdout but fail (or partially fail) on disk. After every mutation: + +```bash +# 1. What does .uipx claim? +cat ./MySolution/MySolution.uipx | grep -A 2 ProjectRelativePath + +# 2. What resource files actually exist? +ls -1 ./MySolution/resources/solution_folder/package/ +ls -1 ./MySolution/resources/solution_folder/process/ + +# 3. The two sets MUST agree by name. If not, the solution is corrupt. +``` + +If `.uipx` and `resources/solution_folder/` disagree, follow the recovery procedure in the matching gotcha below. + +### `bindings.json` vs `bindings_v2.json` — different files, different schemas + +| File | Created by | Read by | +|---|---|---| +| `bindings.json` | `uipath init` (coded agent) | the agent at runtime | +| `bindings_v2.json` | nothing automatically | `uip solution resource refresh` | + +Copying `bindings.json` → `bindings_v2.json` does **not** work — the schemas differ, and `resource refresh` will silently fail (see "false success" gotcha above). The `bindings_v2.json` schema is currently undocumented; hand-authoring it produces the opaque error `TypeError: Cannot read properties of undefined (reading 'toLowerCase')`. Until a worked example is published, author resource bindings inside Studio (which knows the live schema), then run `resource refresh`. If a project genuinely needs bindings that the agent must produce, surface the limitation to the user — do not invent a shape. + +### `resource refresh` reports false success on schema errors + +See [Step 6](#step-6-refresh-resources). Always capture stderr and grep for `ERROR`. The `Warnings` field stays empty even when the underlying parser throws. + +### `project remove` leaves orphan package resources + +See [Step 4](#step-4-remove-a-project). After `remove`, manually delete `resources/solution_folder/package/.json` if you plan to re-add with the same name. To fully delete a project, also remove the project folder — `remove` does not touch source files. + +--- + ## Variations and Gotchas ### `add` vs `import` @@ -182,6 +241,20 @@ When `[solutionFile]` is omitted, the CLI walks up from the project path looking --- +## Cheat sheet + +| Want to... | Command | Watch for | +|---|---|---| +| Create a fresh solution | `uip solution new ` | Accepts an existing empty directory; drops `.uipx` inside | +| Add a project already in the solution dir | `uip solution project add ./` | Transactional — `.uipx` and `resources/solution_folder/{package,process}/` agree on success | +| Pull in an external project | `uip solution project import --source ` | Rename source folder first to avoid 3-name divergence | +| Sync resource bindings | `uip solution resource refresh --solution-folder ` | **Note `--solution-folder` flag**, not positional. **Check stderr for ERROR**; `Result: Success` with 0/0/0 counts is suspicious if `bindings_v2.json` exists | +| Remove a project | `uip solution project remove ./` | Manually delete `resources/.../package/.json` afterwards | +| List resources | `uip solution resource list --solution-folder --source local` | Good sanity check after any mutation | +| Pack | `uip solution pack ` | See [pack-and-deploy.md](pack-and-deploy.md) for full pack/publish/deploy flow | + +--- + ## Related - [Pack & Deploy](pack-and-deploy.md) -- Next step: pack, publish, and deploy the solution diff --git a/skills/uipath-platform/references/solution/pack-and-deploy.md b/skills/uipath-platform/references/solution/pack-and-deploy.md index 09be7b42c..7062c476e 100644 --- a/skills/uipath-platform/references/solution/pack-and-deploy.md +++ b/skills/uipath-platform/references/solution/pack-and-deploy.md @@ -14,6 +14,7 @@ Pack a solution into a deployable package, publish to the feed, and deploy to Or - Authenticated (`uip login`) - Solution developed and ready to pack (see [develop-solution.md](develop-solution.md)) +- Solution state verified — `.uipx` and `resources/solution_folder/` agree on the project set (see [develop-solution.md - Always verify state after every mutation](develop-solution.md#always-verify-state-after-every-mutation)) ## Flow diff --git a/skills/uipath-platform/references/solution/solution.md b/skills/uipath-platform/references/solution/solution.md index 8e7fa8ee8..a534ceaa1 100644 --- a/skills/uipath-platform/references/solution/solution.md +++ b/skills/uipath-platform/references/solution/solution.md @@ -19,14 +19,25 @@ A UiPath Solution is a container that groups multiple automation projects (proce ``` MySolution/ -├── MySolution.uipx <- Solution manifest -├── ProjectA/ <- Automation project -│ ├── project.json / project.uiproj -│ └── *.cs / *.xaml -├── ProjectB/ -└── config.json <- Optional environment config +├── MySolution.uipx <- Manifest. Source of truth: project list + IDs + StudioMinVersion. +├── / +│ ├── project.uiproj OR project.json <- Required for add/import. Type auto-detected. +│ ├── bindings.json <- Agent runtime bindings. NOT scanned by refresh. +│ ├── bindings_v2.json <- Solution refresh reads this (if it exists). +│ └── ... +├── resources/ <- Auto-generated on add/import. NEVER hand-edit. +│ └── solution_folder/ +│ ├── package/.json <- Auto-created on add. NOT cleaned by `project remove`. +│ └── process/{process,flow}/.json <- Auto-created on add. Auto-cleaned on remove. +└── userProfile// <- Appears after first `project remove`. ``` +> `.uipx` and `resources/solution_folder/` must always agree on the set of projects. Diffing them is the fastest way to detect a corrupted state — see [develop-solution.md - Field-tested gotchas](develop-solution.md#field-tested-gotchas). +> +> The `.uipx` also carries a `StudioMinVersion` field (e.g. `2025.10.0`). If users hit a version-mismatch when opening the solution, that's the constraint to check. + +> **Coded apps are not registered in `.uipx`.** UiPath Coded Web Apps and Coded Action Apps have no `project.uiproj` / `project.json` — `uip solution project add` does not apply, and they are not packed by `uip solution pack`. They deploy independently via `uip codedapp publish` / `deploy`. A coded app directory can sit alongside a solution but is not part of its manifest. See [/uipath:uipath-coded-apps](/uipath:uipath-coded-apps). + --- ## Solution Lifecycle @@ -57,8 +68,8 @@ uip solution │ ├── remove [solutionFile] Unregister a project from .uipx │ └── import --source Copy external project into solution and register ├── resource - │ ├── list [solutionPath] List local, remote, or all resources - │ └── refresh [solutionPath] Sync resource declarations from project bindings + │ ├── list --solution-folder List local, remote, or all resources + │ └── refresh --solution-folder Sync resource declarations from project bindings ├── deploy │ ├── run -n Deploy a published solution package │ ├── status Check deployment status diff --git a/skills/uipath-rpa/references/coded-vs-xaml-guide.md b/skills/uipath-rpa/references/coded-vs-xaml-guide.md index 060581e6e..e93be03d9 100644 --- a/skills/uipath-rpa/references/coded-vs-xaml-guide.md +++ b/skills/uipath-rpa/references/coded-vs-xaml-guide.md @@ -2,6 +2,10 @@ When to use coded workflows (C#), XAML workflows (low-code), Coded Source Files, or InvokeCode — and how they interact in hybrid projects. +## Mode is a per-workflow choice, not a project setting + +`uip rpa create-project` produces a mode-agnostic project — both `project.uiproj` and `project.json` are scaffolded, and the project can host coded workflows (`.cs`), XAML workflows (`.xaml`), or both. There is no `--coded` flag at create time. The coded vs XAML decision happens when you add a workflow to the project (or when an existing project's dominant mode dictates the default — see step 1 below). + ## Decision Flowchart Follow top-down. Stop at the first match. From 803fcbbb348353960f5dd8ea4d197975f0e1b4a3 Mon Sep 17 00:00:00 2001 From: Ana-Maria Radu Date: Mon, 4 May 2026 19:05:04 +0300 Subject: [PATCH 2/3] Resolve comments --- .../references/solution/develop-solution.md | 19 +++++-------------- .../references/solution/solution.md | 4 ++++ .../references/coded-vs-xaml-guide.md | 2 +- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/skills/uipath-platform/references/solution/develop-solution.md b/skills/uipath-platform/references/solution/develop-solution.md index 82be8eae1..84e2f21a4 100644 --- a/skills/uipath-platform/references/solution/develop-solution.md +++ b/skills/uipath-platform/references/solution/develop-solution.md @@ -90,8 +90,6 @@ uip solution resource list --kind Queue --search "Invoice" --output json uip solution resource list --solution-folder ./InvoiceAutomation --output json ``` -> The solution path is now a `--solution-folder` flag, not a positional argument. The positional form was removed in `solution-tool@1.0.0-alpha.20260429.5761` with no backward compatibility — running it produces `error: too many arguments for 'list'. Expected 0 arguments but got 1.` - | Option | Values | Default | |--------|--------|---------| | `--solution-folder ` | Path to solution root | Current working directory | @@ -121,14 +119,7 @@ uip solution resource refresh --solution-folder ./InvoiceAutomation --output jso ### What `refresh` actually does -> The solution path is a `--solution-folder` flag, not a positional argument. The positional form was removed in `solution-tool@1.0.0-alpha.20260429.5761` with no backward compatibility. If you see `error: too many arguments for 'refresh'. Expected 0 arguments but got 1.`, you are running an old example — switch to `--solution-folder`. - -> **`Result: Success` is unreliable — always check stderr.** Schema errors in `bindings_v2.json` are logged to stderr as `ERROR [ResourceBuilder:BindingsMetadataSerializer]` lines but the JSON returns `Result: Success` with `Created: 0, Imported: 0, Skipped: 0`. Treat `Created==0 && Imported==0 && Skipped==0` while bindings exist on disk as a refresh failure. Capture stderr and grep for `ERROR` before declaring success: -> -> ```bash -> uip solution resource refresh --solution-folder ./InvoiceAutomation --output json 2> refresh.err -> grep -i "ERROR" refresh.err && echo "REFRESH FAILED" || echo "ok" -> ``` +> **`Result: Success` only means the CLI executed — not that the refresh service inside it succeeded.** The underlying service can fail (e.g., schema errors in `bindings_v2.json` logged to stderr as `ERROR [ResourceBuilder:BindingsMetadataSerializer] ...`) while the JSON still returns `Result: Success` with `Created: 0, Imported: 0, Skipped: 0`. Always inspect stderr for `ERROR` lines, and treat `Created==0 && Imported==0 && Skipped==0` while bindings exist on disk as a refresh failure. ## Step 7: Upload to Studio Web 1. **Discover bindings** — reads `bindings_v2.json` from each project (solution root copy is also read for agent projects). @@ -276,9 +267,9 @@ If `.uipx` and `resources/solution_folder/` disagree, follow the recovery proced | File | Created by | Read by | |---|---|---| | `bindings.json` | `uipath init` (coded agent) | the agent at runtime | -| `bindings_v2.json` | nothing automatically | `uip solution resource refresh` | +| `bindings_v2.json` | `uip maestro flow new`, Maestro Case scaffold, Studio Web (mirrors agent bindings up to solution root) | `uip solution resource refresh` | -Copying `bindings.json` → `bindings_v2.json` does **not** work — the schemas differ, and `resource refresh` will silently fail (see "false success" gotcha above). The `bindings_v2.json` schema is currently undocumented; hand-authoring it produces the opaque error `TypeError: Cannot read properties of undefined (reading 'toLowerCase')`. Until a worked example is published, author resource bindings inside Studio (which knows the live schema), then run `resource refresh`. If a project genuinely needs bindings that the agent must produce, surface the limitation to the user — do not invent a shape. +Copying `bindings.json` → `bindings_v2.json` does **not** work — the schemas differ, and `resource refresh` will silently fail (see "false success" gotcha above). Naive hand-authoring or copy-paste from `bindings.json` produces the opaque error `TypeError: Cannot read properties of undefined (reading 'toLowerCase')`. When a project's tooling already manages `bindings_v2.json` (Flow / Case / agent solutions), edit through that product's commands rather than the file directly, then run `resource refresh` to reconcile. ### `resource refresh` reports false success on schema errors @@ -343,7 +334,7 @@ When `[solutionFile]` is omitted, the CLI walks up from the project path looking ### `--solution-folder` defaults to cwd -`resource list / refresh / get` default `--solution-folder` to the current working directory. Run them from inside the solution dir for the shortest invocation (`uip solution resource list`) or pass `--solution-folder ` explicitly. Older docs and examples that pass the path as a positional (`uip solution resource list ./InvoiceAutomation`) are out of date. +`resource list / refresh / get` default `--solution-folder` to the current working directory. Run them from inside the solution dir for the shortest invocation (`uip solution resource list`) or pass `--solution-folder ` explicitly. ### `resource get` for cross-folder inspection @@ -358,7 +349,7 @@ Because `get` falls back to RCS + FPS export when the key isn't local, it works | Create a fresh solution | `uip solution new ` | Accepts an existing empty directory; drops `.uipx` inside | | Add a project already in the solution dir | `uip solution project add ./` | Transactional — `.uipx` and `resources/solution_folder/{package,process}/` agree on success | | Pull in an external project | `uip solution project import --source ` | Rename source folder first to avoid 3-name divergence | -| Sync resource bindings | `uip solution resource refresh --solution-folder ` | **Note `--solution-folder` flag**, not positional. **Check stderr for ERROR**; `Result: Success` with 0/0/0 counts is suspicious if `bindings_v2.json` exists | +| Sync resource bindings | `uip solution resource refresh --solution-folder ` | **Check stderr for ERROR**; `Result: Success` with 0/0/0 counts is suspicious if `bindings_v2.json` exists | | Remove a project | `uip solution project remove ./` | Manually delete `resources/.../package/.json` afterwards | | List resources | `uip solution resource list --solution-folder --source local` | Good sanity check after any mutation | | Pack | `uip solution pack ` | See [pack-and-deploy.md](pack-and-deploy.md) for full pack/publish/deploy flow | diff --git a/skills/uipath-platform/references/solution/solution.md b/skills/uipath-platform/references/solution/solution.md index fc9386e19..96751f0ed 100644 --- a/skills/uipath-platform/references/solution/solution.md +++ b/skills/uipath-platform/references/solution/solution.md @@ -25,6 +25,10 @@ MySolution/ │ ├── bindings.json <- Agent runtime bindings. NOT scanned by refresh. │ ├── bindings_v2.json <- Solution refresh reads this (if it exists). │ └── ... +├── / <- A solution can host many projects side-by-side. +│ ├── project.uiproj OR project.json +│ ├── bindings_v2.json +│ └── ... ├── resources/ <- Auto-generated on add/import. NEVER hand-edit. │ └── solution_folder/ │ ├── package/.json <- Auto-created on add. NOT cleaned by `project remove`. diff --git a/skills/uipath-rpa/references/coded-vs-xaml-guide.md b/skills/uipath-rpa/references/coded-vs-xaml-guide.md index e93be03d9..761650e80 100644 --- a/skills/uipath-rpa/references/coded-vs-xaml-guide.md +++ b/skills/uipath-rpa/references/coded-vs-xaml-guide.md @@ -4,7 +4,7 @@ When to use coded workflows (C#), XAML workflows (low-code), Coded Source Files, ## Mode is a per-workflow choice, not a project setting -`uip rpa create-project` produces a mode-agnostic project — both `project.uiproj` and `project.json` are scaffolded, and the project can host coded workflows (`.cs`), XAML workflows (`.xaml`), or both. There is no `--coded` flag at create time. The coded vs XAML decision happens when you add a workflow to the project (or when an existing project's dominant mode dictates the default — see step 1 below). +`uip rpa create-project` produces a mode-agnostic project — both `project.uiproj` and `project.json` are scaffolded, and the project can host coded workflows (`.cs`), XAML workflows (`.xaml`), or both. The coded vs XAML decision happens when you add a workflow to the project (or when an existing project's dominant mode dictates the default — see step 1 below). ## Decision Flowchart From aa05e718a57fa3ac9074d71d1e65a53ece8cdb2b Mon Sep 17 00:00:00 2001 From: Ana-Maria Radu Date: Tue, 5 May 2026 11:13:02 +0300 Subject: [PATCH 3/3] change directory --- skills/uipath-planner/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skills/uipath-planner/SKILL.md b/skills/uipath-planner/SKILL.md index ff27bb500..1d7b555ce 100644 --- a/skills/uipath-planner/SKILL.md +++ b/skills/uipath-planner/SKILL.md @@ -357,7 +357,7 @@ Fix issues before saving. Save as `YYYY-MM-DD-.md`: - **Project directory exists** (`project.json`, `flow_files/`, `.uipath/`, or `pyproject.toml`) → save to `docs/plans/` within the project. Create the directory if needed. -- **No project directory** → save to `~/Documents/UiPath/Plans/`. Create the directory if needed. +- **No project directory** → save to `./plans/` (relative to the current working directory). Create the directory if needed. ### 5e. Present the plan