diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 3431e08..eef8a58 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "uipath-boost", - "version": "0.2.0", + "version": "0.3.0", "description": "Community engineering skills for better UiPath automation delivery.", "author": { "name": "1aifanatic", diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index a227660..afa1d80 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "uipath-boost", - "version": "0.2.0", + "version": "0.3.0", "description": "Community engineering skills for planning, designing, testing, releasing, operating, and explaining UiPath automations.", "author": { "name": "1aifanatic", @@ -22,7 +22,7 @@ "interface": { "displayName": "UiPath Boost", "shortDescription": "Community engineering practices for UiPath delivery", - "longDescription": "Use 34 complementary skills for UiPath discovery, architecture, delivery continuity, testing discipline, release readiness, operational design, and knowledge transfer while official UiPath skills remain the source of product truth.", + "longDescription": "Use 35 complementary skills for UiPath discovery, architecture, diagram design, delivery continuity, testing discipline, release readiness, operational design, and knowledge transfer while official UiPath skills remain the source of product truth.", "developerName": "1aifanatic", "category": "Developer Tools", "capabilities": [ diff --git a/ACKNOWLEDGMENTS.md b/ACKNOWLEDGMENTS.md index 49b31f2..5912285 100644 --- a/ACKNOWLEDGMENTS.md +++ b/ACKNOWLEDGMENTS.md @@ -16,6 +16,13 @@ Matt Pocock's repository is distributed under the Boost retains this acknowledgment so the source of those design influences is clear. +The `uipath-diagram-design` skill is a focused UiPath adaptation of the visual +grammar published in +[Kathryn Lavery's diagram-design repository](https://github.com/cathrynlavery/diagram-design). +The upstream project is distributed under the MIT License. UiPath Boost retains +the copyright notice, records the reviewed upstream commit, and describes its +modifications in [THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md). + Current UiPath product commands, schemas, artifact validation, deployment, tenant operations, and platform behavior remain owned by the [official UiPath skills repository](https://github.com/UiPath/skills). diff --git a/CHANGELOG.md b/CHANGELOG.md index ccba2cc..f2cbe3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,27 @@ # Changelog +## 0.3.0 - 2026-08-12 + +### Added + +- Added `uipath-diagram-design`, a model-invoked skill for five + communication-grade UiPath diagram types: solution architecture, process + swimlane, interaction sequence, state and lifecycle, and deployment and + integration. +- Added synchronized HTML, SVG, and 1600x900 PNG examples for all five types. +- Added a standard-library Python exporter that extracts inline SVG and uses an + already installed Chrome, Edge, or Chromium browser for PNG rendering. +- Added a simple three-step README quick start and a detailed skill guide with + example prompts, before-and-after guidance, output selection, and official + UiPath handoffs. +- Added third-party attribution and the retained MIT notice for Kathryn + Lavery's `diagram-design` project. + +### Changed + +- Increased the catalog to 35 skills: 15 user-invoked and 20 model-invoked. +- Updated package and plugin metadata to version 0.3.0. + ## 0.2.0 - 2026-08-05 ### Changed diff --git a/README.md b/README.md index 85dc3bf..6f9b984 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ **Community skills for better UiPath automation** -UiPath Boost v0.2 gives you 34 Agent Skills for planning, designing, testing, releasing, operating, and explaining UiPath automations. Install the full catalog once, then use `uipath-project-router` to choose the smallest correct workflow for each job. +UiPath Boost v0.3 gives you 35 Agent Skills for planning, designing, visualizing, testing, releasing, operating, and explaining UiPath automations. Install the full catalog once, then use `uipath-project-router` to choose the smallest correct workflow for each job. > [!IMPORTANT] > UiPath Boost is an independent community project maintained by [1aifanatic](https://github.com/1aifanatic). It is not an official UiPath product or skill catalog. Official UiPath skills remain the source of truth for product commands, schemas, validation, deployment, tenant operations, and current platform behavior. @@ -16,7 +16,7 @@ npm install -g @uipath/cli uip skills install ``` -### 2. Install all 34 UiPath Boost skills +### 2. Install all 35 UiPath Boost skills > [!TIP] > **Recommended:** Install the complete catalog globally. You will not need to return later and install skills one at a time. @@ -27,7 +27,7 @@ npx skills add 1aifanatic/uipath-boost --skill '*' --agent codex --global --yes That single command: -- Installs all 34 skills. +- Installs all 35 skills. - Makes them available across your projects. - Gives the Project Router every available workflow to choose from. - Avoids repeated installation whenever your work moves from discovery to development, testing, release, or support. @@ -47,13 +47,13 @@ Tell me the smallest correct sequence of official UiPath and UiPath Boost skills Do not modify files or platform resources while routing. ``` -You do not need to memorize all 34 skill names. Describe your goal and let the router select the right starting point. +You do not need to memorize all 35 skill names. Describe your goal and let the router select the right starting point. ## Why install everything at once? | Benefit | What it means for you | |---|---| -| One simple setup | Run one installation command instead of managing 34 separate installations. | +| One simple setup | Run one installation command instead of managing 35 separate installations. | | Better routing | The router can choose from the complete catalog. | | End-to-end coverage | Move from discovery through delivery, testing, release, and support without stopping to install another skill. | | Consistent teams | Developers, testers, architects, and support teams can use the same skill set. | @@ -61,17 +61,54 @@ You do not need to memorize all 34 skill names. Describe your goal and let the r ## How the skills start -Installing the full catalog makes every skill available; it does not run all 34. UiPath Boost uses two clear invocation modes: +Installing the full catalog makes every skill available; it does not run all 35. UiPath Boost uses two clear invocation modes: | Mode | What happens | Best for | |---|---|---| | **User-invoked** | You deliberately name the skill, such as `Use $uipath-project-router`. | Orchestration, durable workspaces, repository setup, and cross-project decisions. | | **Model-invoked** | You may name the skill, or the agent may select it when your request precisely matches. | Focused engineering disciplines such as component design, regression evidence, observability, or security assessment. | -The 15 user-invoked skills are `uipath-project-router`, `uipath-architecture-deepening`, `uipath-delivery-control-plane`, `uipath-discovery-with-docs`, `uipath-learning-workspace`, `uipath-program-wayfinder`, `uipath-project-handoff`, `uipath-quality-gates-setup`, `uipath-source-control-guardrails`, `uipath-stakeholder-questionnaire`, `uipath-task-refinement`, `uipath-training-lab-scaffolder`, `uipath-uat-session`, `uipath-work-intake-triage`, and `uipath-workflow-spec-workspace`. The other 19 are model-invoked. Codex enforces the split through each skill's `agents/openai.yaml`; explicit-use wording preserves the same intent in other compatible agents. +The 15 user-invoked skills are `uipath-project-router`, `uipath-architecture-deepening`, `uipath-delivery-control-plane`, `uipath-discovery-with-docs`, `uipath-learning-workspace`, `uipath-program-wayfinder`, `uipath-project-handoff`, `uipath-quality-gates-setup`, `uipath-source-control-guardrails`, `uipath-stakeholder-questionnaire`, `uipath-task-refinement`, `uipath-training-lab-scaffolder`, `uipath-uat-session`, `uipath-work-intake-triage`, and `uipath-workflow-spec-workspace`. The other 20 are model-invoked. Codex enforces the split through each skill's `agents/openai.yaml`; explicit-use wording preserves the same intent in other compatible agents. Invocation never expands authority. A skill still cannot edit source, operate a tenant, deploy, publish, or perform another consequential action unless your request authorizes it and the correct official UiPath owner performs the product work. +## Create a UiPath diagram in three simple steps + +The `uipath-diagram-design` skill creates five communication-grade diagram types: solution architecture, process swimlane, interaction sequence, state and lifecycle, and deployment and integration. + +### 1. Install it + +The recommended full-catalog command above already includes the diagram skill. To install only this skill: + +```bash +npx skills add 1aifanatic/uipath-boost --skill uipath-diagram-design --agent codex --global --yes +``` + +### 2. Describe what the reader should understand + +```text +Use $uipath-diagram-design. + +Create a UiPath solution architecture from this approved SDD. +Show the business input, UiPath services, queues, robots, human-review path, +external systems, and operational evidence. +Save HTML, SVG, and PNG and inspect the PNG before finishing. +``` + +You can also ask naturally: `Create a UiPath swimlane from these process notes and highlight the human exception handoff.` + +### 3. Use the right output + +| Format | Best use | +|---|---| +| HTML | Highest-fidelity browser view | +| SVG | Scalable documentation and editing | +| PNG | GitHub README, presentations, articles, and videos | + +![UiPath Diagram Design architecture example](skills/uipath-diagram-design/assets/example-solution-architecture.png) + +See the **[simple diagram guide and all five examples](docs/skills/uipath-diagram-design.md)**. + ## Why UiPath Boost exists Official UiPath skills are responsible for current UiPath product behavior. They author and validate product artifacts, operate the platform, troubleshoot failures, and manage product lifecycles. @@ -128,7 +165,7 @@ UiPath Boost includes Codex and Claude plugin manifests in addition to the Agent For detailed explanations, before-and-after examples, prompts, completion checks, and official UiPath handoffs, open the **[complete skill guide library](docs/skills/README.md)** or select any skill below.
-View all 34 skills by category +View all 35 skills by category ### Routing and project continuity @@ -153,6 +190,7 @@ For detailed explanations, before-and-after examples, prompts, completion checks - [`uipath-component-design`](docs/skills/uipath-component-design.md) - [`uipath-architecture-deepening`](docs/skills/uipath-architecture-deepening.md) - [`uipath-project-boundaries`](docs/skills/uipath-project-boundaries.md) +- [`uipath-diagram-design`](docs/skills/uipath-diagram-design.md) - [`uipath-prototype`](docs/skills/uipath-prototype.md) - [`uipath-safe-refactor-plan`](docs/skills/uipath-safe-refactor-plan.md) @@ -237,13 +275,14 @@ npm test npm pack --dry-run ``` -The validation suite checks all 34 skill packages, invocation policies, behavioral contracts, metadata, internal links, and retired conflicting skills. Installer tests cover interactive, selected-skill, starter, and full-catalog installation arguments. +The validation suite checks all 35 skill packages, invocation policies, behavioral contracts, metadata, internal links, and retired conflicting skills. Installer tests cover interactive, selected-skill, starter, and full-catalog installation arguments. ## Learn more - [Strategy and publishing plan](docs/STRATEGY-AND-PUBLISHING-PLAN.md) - [Changelog](CHANGELOG.md) - [Acknowledgments](ACKNOWLEDGMENTS.md) +- [Third-party licenses](THIRD_PARTY_LICENSES.md) - [Contribution guide](CONTRIBUTING.md) - [Security policy](SECURITY.md) - [Official UiPath skills](https://github.com/UiPath/skills) @@ -251,6 +290,6 @@ The validation suite checks all 34 skill packages, invocation policies, behavior ## Status and license -UiPath Boost v0.2 is a community release. Structural, behavioral-contract, metadata, link, helper-script, and installer checks protect the catalog, but not every skill has been exercised against every UiPath product, tenant configuration, license, operating system, or future CLI version. +UiPath Boost v0.3 is a community release. Structural, behavioral-contract, metadata, link, helper-script, and installer checks protect the catalog, but not every skill has been exercised against every UiPath product, tenant configuration, license, operating system, or future CLI version. Licensed under the MIT License. See [LICENSE](LICENSE). diff --git a/THIRD_PARTY_LICENSES.md b/THIRD_PARTY_LICENSES.md new file mode 100644 index 0000000..cc8369a --- /dev/null +++ b/THIRD_PARTY_LICENSES.md @@ -0,0 +1,38 @@ +# Third-Party Licenses + +## diagram-design + +The `uipath-diagram-design` visual system is a focused adaptation of +[Kathryn Lavery's diagram-design project](https://github.com/cathrynlavery/diagram-design), +reviewed at upstream commit +[`3c5c34ba3bf9dcf204b55c2dd613f8fa194cf584`](https://github.com/cathrynlavery/diagram-design/commit/3c5c34ba3bf9dcf204b55c2dd613f8fa194cf584). + +UiPath Boost narrows the general diagram system to five UiPath communication +jobs, introduces UiPath evidence and official-owner boundaries, replaces the +visual tokens with the UiPath Boost community palette and system fonts, adds +UiPath semantic roles, supplies original UiPath-focused examples, and includes +a standard-library exporter with explicit local-browser detection. + +### Retained MIT license + +MIT License + +Copyright (c) 2025 Cathryn Lavery + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docs/STRATEGY-AND-PUBLISHING-PLAN.md b/docs/STRATEGY-AND-PUBLISHING-PLAN.md index a18e966..f80fb53 100644 --- a/docs/STRATEGY-AND-PUBLISHING-PLAN.md +++ b/docs/STRATEGY-AND-PUBLISHING-PLAN.md @@ -7,13 +7,13 @@ - **CLI command:** `uipath-boost` **Prepared:** July 31, 2026 -**Updated for v0.2.0:** August 5, 2026 +**Updated for v0.3.0:** August 12, 2026 ## 1. Executive recommendation Use a hybrid ownership strategy: -1. Keep all 34 complementary skills in this independent community repository. +1. Keep all 35 complementary skills in this independent community repository. 2. Treat this repository as the incubator, evidence base, installation source, and educational home. 3. Contribute only mature, broadly useful, UiPath-specific capabilities upstream to `UiPath/skills`. 4. Open one proposal and one pull request at a time rather than submitting the entire catalog. @@ -189,7 +189,7 @@ Publishing to skills.sh makes sense for discovery and social proof. skills.sh in Launch sequence: 1. Publish the GitHub repository publicly. -2. Confirm `npx skills add 1aifanatic/uipath-boost --list` finds 34 skills. +2. Confirm `npx skills add 1aifanatic/uipath-boost --list` finds 35 skills. 3. Perform a clean installation of `uipath-project-router` using the GitHub source. 4. Check for `https://skills.sh/1aifanatic/uipath-boost`. 5. If it is not indexed after valid public installs, open a listing request in `vercel-labs/skills`. @@ -344,12 +344,12 @@ Track outcomes rather than only install counts: - [ ] Confirm repository name and public visibility. - [ ] Initialize Git and set the default branch to `main`. -- [ ] Review all 34 skills and helper scripts. +- [ ] Review all 35 skills and helper scripts. - [ ] Confirm the community disclaimer. - [ ] Confirm license ownership and contributor policy. - [ ] Configure GitHub security advisories. - [ ] Run `npm run validate` and `npm test`. -- [ ] Push and tag `v0.2.0`. +- [ ] Push and tag `v0.3.0`. ### npm @@ -363,7 +363,7 @@ Track outcomes rather than only install counts: ### skills.sh - [ ] Verify the GitHub repository is public. -- [ ] Verify standard skill discovery returns all 34 skills. +- [ ] Verify standard skill discovery returns all 35 skills. - [ ] Install the router through `npx skills add`. - [ ] Check the canonical skills.sh page. - [ ] File a listing request if indexing does not occur. diff --git a/docs/skills/README.md b/docs/skills/README.md index 17c24ab..d2abb62 100644 --- a/docs/skills/README.md +++ b/docs/skills/README.md @@ -13,7 +13,7 @@ This library explains every UiPath Boost skill in practical language. Each guide - Official UiPath handoffs and safety boundaries. - Links to the packaged skill, templates, references, and helper scripts. -If you are unsure where to begin, start with the [UiPath Project Router](uipath-project-router.md). You can install all 34 skills once and let the router select the smallest correct workflow for each task. +If you are unsure where to begin, start with the [UiPath Project Router](uipath-project-router.md). You can install all 35 skills once and let the router select the smallest correct workflow for each task. ```bash npx skills add 1aifanatic/uipath-boost --skill '*' --agent codex --global --yes @@ -22,7 +22,7 @@ npx skills add 1aifanatic/uipath-boost --skill '*' --agent codex --global --yes ## Invocation key - **User-invoked (15):** start these deliberate workflows yourself with `Use $skill-name`. They include Project Router, Architecture Deepening, Delivery Control Plane, Discovery With Docs, Learning Workspace, Program Wayfinder, Project Handoff, Quality Gates Setup, Source Control Guardrails, Stakeholder Questionnaire, Task Refinement, Training Lab Scaffolder, UAT Session, Work Intake Triage, and Workflow Spec Workspace. -- **Model-invoked (19):** name them directly or let the agent choose them when your request precisely matches. Every individual guide shows its mode in the **At a glance** table. +- **Model-invoked (20):** name them directly or let the agent choose them when your request precisely matches. Every individual guide shows its mode in the **At a glance** table. Installing a skill only makes its instructions available. Invocation does not authorize file changes, tenant operations, deployment, publishing, or other consequential actions. @@ -55,6 +55,7 @@ Installing a skill only makes its instructions available. Invocation does not au | [UiPath Component Design](uipath-component-design.md) | A reusable behavior needs a small stable contract and test seam. | Competing designs, trade-offs, selected contract, and acceptance examples. | | [UiPath Architecture Deepening](uipath-architecture-deepening.md) | A proven review or incident hotspot needs better seam options. | Change-surface map, ranked options, and safe design handoff. | | [UiPath Project Boundaries](uipath-project-boundaries.md) | Deep imports, cycles, or private-surface use make changes unsafe. | Boundary policy, automated checks, evidence, and migration plan. | +| [UiPath Diagram Design](uipath-diagram-design.md) | Verified UiPath facts need a crisp architecture, swimlane, sequence, lifecycle, or deployment visual. | Accessible HTML, scalable SVG, reviewed PNG, and evidence status. | | [UiPath Prototype](uipath-prototype.md) | One design uncertainty can be answered by a small safe experiment. | Throwaway artifact, observed verdict, limitations, and cleanup record. | | [UiPath Safe Refactor Plan](uipath-safe-refactor-plan.md) | Proven technical debt must improve without changing approved behavior. | Invariants, safety net, tiny steps, rollback, and stop conditions. | diff --git a/docs/skills/uipath-diagram-design.md b/docs/skills/uipath-diagram-design.md new file mode 100644 index 0000000..30db741 --- /dev/null +++ b/docs/skills/uipath-diagram-design.md @@ -0,0 +1,185 @@ +# UiPath Diagram Design + +[Back to all skill guides](README.md) · [View the skill source](../../skills/uipath-diagram-design/SKILL.md) + +## At a glance + +| | | +|---|---| +| **Invocation** | Model-invoked — start it explicitly or let the agent select it when the request fits. | +| **Purpose** | Turn verified UiPath facts into a crisp explanatory diagram. | +| **Use it when** | You need architecture, a swimlane, a sequence, a lifecycle, or deployment/integration topology. | +| **Do not use it for** | Creating executable XAML, Flow, BPMN, agent, or tenant configuration. | +| **Primary output** | Matching diagram-only HTML, SVG, and 1600x900 PNG files. | +| **Maturity** | Pilot | + +## What it does + +This skill converts approved UiPath design information into a visual that people can understand quickly. It uses one of five focused diagram grammars, keeps UiPath product facts tied to evidence, exports three useful formats, and inspects the rendered PNG before declaring the work complete. + +The result is a communication artifact. It explains a design or observed system; it does not deploy, configure, or validate the underlying UiPath solution. + +## Before and after + +### Before + +A team has an SDD, review notes, screenshots, and a list of UiPath products. Someone draws many small boxes, arrows cross labels, text escapes the components, and proposed connections look identical to verified ones. The diagram is difficult to reuse in a README or presentation. + +### After + +The audience question and evidence status are explicit. One diagram type controls the layout. The visual has a clear reading direction, no more than two focal elements, contained text, traceable connectors, and accessible metadata. The team receives a browser-ready HTML file, scalable SVG, and presentation-ready PNG. + +## When to reach for it + +Invoke `$uipath-diagram-design` directly, or ask naturally for a UiPath diagram. + +| You need to show | Diagram type | Example | +|---|---|---| +| Components, services, systems, and data flow | Solution architecture | [Employee onboarding](../../skills/uipath-diagram-design/assets/example-solution-architecture.png) | +| Owners, steps, and human exception handoffs | Process swimlane | [Purchase-order change](../../skills/uipath-diagram-design/assets/example-process-swimlane.png) | +| Time-ordered calls and responses | Interaction sequence | [Refund review](../../skills/uipath-diagram-design/assets/example-interaction-sequence.png) | +| States, retries, success, and failure | State and lifecycle | [Queue recovery](../../skills/uipath-diagram-design/assets/example-state-lifecycle.png) | +| Environment promotion and external connections | Deployment and integration | [Cloud deployment](../../skills/uipath-diagram-design/assets/example-deployment-integration.png) | + +### Use a neighboring skill instead + +- Use `uipath-solution` or `uipath-planner` when the SDD or solution design must be authored first. +- Use `uipath-maestro-bpmn` when the required output is executable BPMN. +- Use `uipath-maestro-flow`, `uipath-rpa`, or `uipath-agents` for executable product artifacts. +- Use `uipath-review` when the architecture facts have not yet been verified. +- Use `uipath-solution-storytelling` when the main outcome is an article, presentation narrative, or demo script. + +## Prerequisites + +You need only three things: + +1. What you want the audience to understand. +2. An approved source such as an SDD, repository, review result, process notes, or explicit decisions. +3. A destination folder for the diagram. + +If details are intentionally fictional, say that the example is synthetic. The skill will label it clearly. + +## What it produces + +For a diagram named `employee-onboarding`, the default structure is: + +```text +diagrams/employee-onboarding/ +|-- employee-onboarding.html +|-- employee-onboarding.svg +`-- employee-onboarding.png +``` + +- **HTML:** open it directly in any modern browser; it contains the whole diagram. +- **SVG:** use it in documentation and tools that need scalable vector artwork. +- **PNG:** use it in GitHub READMEs, articles, presentations, and videos. + +Existing files are protected. A new versioned name is used instead of silently overwriting the previous diagram. + +## How it works + +### The simplest way + +1. Install the full UiPath Boost catalog once. +2. Paste one of the prompts below and attach or name your source documents. +3. Review the PNG; request content changes in plain language. + +The agent then: + +1. Selects one of the five diagram types. +2. Lists the verified, proposed, inferred, or synthetic facts. +3. Designs within the node and connector budget. +4. Creates a self-contained 1600x900 HTML diagram. +5. Exports SVG and PNG using the bundled helper. +6. Opens the PNG and corrects clipping, collisions, and ambiguous arrows. + +## Example prompt + +```text +Use $uipath-diagram-design. + +Create a solution architecture from the approved SDD in this repository. +The audience is the automation support team. +Show the business input, UiPath services, queues, robots, human-review path, +external systems, and operational evidence. + +Use only verified facts. Label any inference. Save HTML, SVG, and PNG under +diagrams/support-architecture and inspect the PNG before finishing. +``` + +Short prompts work too: + +```text +Create a UiPath swimlane from these process notes and highlight the human exception handoff. +``` + +```text +Show this queue transaction's retry and failure lifecycle as a UiPath diagram. +``` + +```text +Create a deployment diagram showing GitHub, Dev, Test, Production, robots, and SAP integration. +``` + +## Common questions + +**Do I need to choose the diagram type myself?** + +No. Describe what the reader must understand. The skill selects the smallest suitable grammar and tells you which one it used. + +**Does it create executable UiPath workflows?** + +No. The output explains verified product artifacts. Official UiPath skills remain responsible for authoring and validation. + +**Can I use the diagrams in a README or presentation?** + +Yes. Use PNG for easy sharing, SVG for scalable artwork, and HTML for the highest-fidelity browser view. + +**What happens if Chrome or Edge is unavailable?** + +HTML and SVG can still be produced. PNG remains incomplete, and the agent must report the missing browser rather than claiming success. + +**Will it include the official UiPath logo?** + +Only when you supply an authorized local asset or documented permission covering that use. The default visual system uses product names and UiPath-oriented semantics without bundling the official logo. + +## It's working if + +- The diagram answers one clear audience question. +- Every node and connection is proven, approved, inferred, or synthetic. +- The selected grammar matches the information relationship. +- Text stays inside boxes and never touches connectors. +- Off-axis paths are orthogonal and independently traceable. +- Orange identifies no more than two focal elements. +- HTML works offline, SVG parses, and PNG is exactly the requested size. +- The final response links every file and identifies the next official UiPath owner. + +## Where it fits + +This is a **model-invoked communication discipline** in UiPath Boost. It can visualize approved outputs from discovery, solution design, review, observability, security assessment, release readiness, and storytelling workflows. Use [UiPath Project Router](uipath-project-router.md) when the larger route is unclear. + +## Official UiPath handoff + +Use the owning official skill after the diagram reveals required product work: + +- `uipath-rpa` for XAML and coded workflows. +- `uipath-agents` for agents. +- `uipath-maestro-flow` or `uipath-maestro-bpmn` for executable orchestration. +- `uipath-solution` for solution design artifacts. +- `uipath-platform`, `uipath-admin`, or `uipath-governance` for tenant and platform changes. + +The diagram does not authorize those changes. + +## Related resources + +- [Skill source](../../skills/uipath-diagram-design/SKILL.md) +- [Visual system](../../skills/uipath-diagram-design/references/visual-system.md) +- [Evidence and ownership rules](../../skills/uipath-diagram-design/references/evidence-and-boundaries.md) +- [Export instructions](../../skills/uipath-diagram-design/references/export.md) +- [Exporter helper](../../skills/uipath-diagram-design/scripts/export_diagram.py) +- [HTML architecture example](../../skills/uipath-diagram-design/assets/example-solution-architecture.html) +- [HTML swimlane example](../../skills/uipath-diagram-design/assets/example-process-swimlane.html) +- [HTML sequence example](../../skills/uipath-diagram-design/assets/example-interaction-sequence.html) +- [HTML lifecycle example](../../skills/uipath-diagram-design/assets/example-state-lifecycle.html) +- [HTML deployment example](../../skills/uipath-diagram-design/assets/example-deployment-integration.html) +- [Third-party notices](../../THIRD_PARTY_LICENSES.md) diff --git a/package-lock.json b/package-lock.json index 65f5998..4b46cde 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "uipath-boost", - "version": "0.2.0", + "version": "0.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "uipath-boost", - "version": "0.2.0", + "version": "0.3.0", "license": "MIT", "dependencies": { "skills": "1.5.22" diff --git a/package.json b/package.json index 11bd904..be9be4c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uipath-boost", - "version": "0.2.0", + "version": "0.3.0", "description": "Community skills for better UiPath automation.", "type": "module", "bin": { @@ -15,6 +15,7 @@ ".claude-plugin/", "README.md", "ACKNOWLEDGMENTS.md", + "THIRD_PARTY_LICENSES.md", "CHANGELOG.md", "LICENSE", "SECURITY.md" diff --git a/skills/uipath-diagram-design/SKILL.md b/skills/uipath-diagram-design/SKILL.md new file mode 100644 index 0000000..2f6be2c --- /dev/null +++ b/skills/uipath-diagram-design/SKILL.md @@ -0,0 +1,120 @@ +--- +name: uipath-diagram-design +description: "Create crisp, evidence-backed explanatory diagrams for UiPath solutions. Use for solution architecture, process swimlanes, interaction sequences, state or lifecycle models, and deployment or integration topology when verified UiPath artifacts, approved documents, or user decisions need a communication-grade HTML, SVG, and PNG visual." +--- + +# UiPath Diagram Design + +Turn verified UiPath facts into a focused communication artifact. Produce explanatory visuals; leave executable UiPath artifacts and current product truth with their official owners. + +**Maturity:** pilot. + +## Ownership Boundary + +**This custom skill owns:** communication-grade diagrams that explain verified UiPath solutions, responsibilities, interactions, lifecycles, deployments, and integrations. + +It does not author or validate `.xaml`, `.flow`, `.bpmn`, `agent.json`, `project.uiproj`, tenant configuration, or other executable product artifacts. Use official UiPath skills for those surfaces. + +## Supported Diagram Types + +| Need | Type | Read before drawing | +|---|---|---| +| Components, services, systems, and data movement | Solution architecture | [references/solution-architecture.md](references/solution-architecture.md) | +| Actor ownership and cross-functional handoffs | Process swimlane | [references/process-swimlane.md](references/process-swimlane.md) | +| Time-ordered messages among humans, agents, robots, and systems | Interaction sequence | [references/interaction-sequence.md](references/interaction-sequence.md) | +| States, transitions, retries, failures, and completion | State and lifecycle | [references/state-lifecycle.md](references/state-lifecycle.md) | +| Environment promotion and runtime connections | Deployment and integration | [references/deployment-integration.md](references/deployment-integration.md) | + +Read exactly one type reference for the primary diagram. Split the request when two grammars compete. + +## Workflow + +### 1. Establish the communication question + +Identify the audience, the decision or understanding the diagram must enable, the primary diagram type, and the required output location. + +**Completion criterion:** One sentence states what the reader must understand after viewing the diagram. + +### 2. Build the evidence inventory + +Use facts in this order: validated official-skill output, approved repository or PDD/SDD content, explicit user decisions, working notes, then clearly labeled inference. Read [references/evidence-and-boundaries.md](references/evidence-and-boundaries.md). + +Ask only for facts whose absence would materially change the diagram. Label synthetic examples, assumptions, and inference inside the artifact metadata. + +**Completion criterion:** Every node and connector is supported, user-approved, or labeled as inference or synthetic. + +### 3. Design within the visual budget + +Read [references/visual-system.md](references/visual-system.md) and the selected type reference. Use at most 9 nodes, 12 connectors, 2 orange focal elements, and 5 lanes or lifelines unless the type reference sets a stricter limit. + +Use the seven UiPath semantic roles: human, automation, orchestration, UiPath service, external system, data or artifact, and control or evidence. + +**Completion criterion:** The layout has one dominant reading direction, a clear focal point, and no unearned element. + +### 4. Create the diagram-only HTML + +Write a self-contained HTML file with one inline accessible SVG using `viewBox="0 0 1600 900"`. Include ``, `<desc>`, and `<metadata>`. Use system fonts, inline CSS, and no JavaScript or external assets. + +Save new work under `diagrams/<slug>/<slug>.html` unless the user names another location. If the target exists, add `-v2`, `-v3`, and so on rather than overwriting it. + +An official UiPath logo may appear only when the user supplies an authorized local asset or written permission. Product names and semantic shapes remain sufficient by default. + +**Completion criterion:** The HTML opens without a network connection and the SVG contains the complete diagram. + +### 5. Export SVG and PNG + +Read [references/export.md](references/export.md), then run [scripts/export_diagram.py](scripts/export_diagram.py). The helper uses only the Python standard library for SVG extraction and an already installed Chrome, Edge, or Chromium browser for PNG rendering. It never installs dependencies. + +**Completion criterion:** Matching `.html`, `.svg`, and 1600x900 `.png` files exist, or the response explicitly reports the missing browser and the incomplete PNG requirement. + +### 6. Inspect the rendered result + +Open the PNG at full resolution. Check text containment, connector routing, label gaps, attach points, hierarchy, contrast, and legibility. Correct every clipped label, box collision, shared connector path, or ambiguous arrow before finishing. + +**Completion criterion:** The rendered pixels, not only the source, pass the visual checks in the selected type reference. + +### 7. Report evidence and handoff + +Return clickable paths to every output, name the selected type, list important assumptions or inference, and state that the visual is explanatory rather than executable. + +**Completion criterion:** A reader can open the outputs, understand their evidence status, and identify the official owner for any next product change. + +## Compose With Official UiPath Skills + +- Use `uipath-solution` and `uipath-planner` for authoritative solution design content. +- Use `uipath-rpa`, `uipath-agents`, `uipath-maestro-flow`, and `uipath-maestro-bpmn` for executable artifacts. +- Use `uipath-review` to establish verified project findings. +- Use `uipath-platform`, `uipath-admin`, and `uipath-governance` for observed tenant and platform state. +- Use `uipath-process-mining` for mined process graphs; use this skill only to explain verified findings. + +## Output Contract + +- One evidence-backed diagram with one primary grammar. +- Self-contained diagram-only HTML with accessible inline SVG. +- Extracted SVG and exact-size PNG preview. +- Evidence status, assumptions, inference, and explanatory-artifact disclaimer. +- Official UiPath handoff for any executable or platform work. + +## Guardrails + +- Keep customer data, credentials, tenant identifiers, and confidential architecture out unless explicitly approved and safely handled. +- Preserve product truth from official outputs; never invent services, commands, schemas, or successful runtime behavior. +- Use orthogonal connectors for off-axis nodes and distinct attach points for multiple edges. +- Treat PNG generation as incomplete when no compatible local browser is available. +- Keep community-project labeling visible when public examples could imply UiPath endorsement. + +## Example Requests + +- "Create a UiPath solution architecture from this approved SDD." +- "Show the human exception path as a five-lane swimlane." +- "Create a sequence diagram for Maestro, an agent, a robot, and a reviewer." +- "Visualize this queue item's retry and terminal-failure lifecycle." +- "Show our Dev, Test, and Production promotion and runtime integrations." + +## Finish + +Report the generated files, selected grammar, evidence and assumptions, render validation, next official owner, and every unresolved blocker. Never imply that a UiPath artifact, tenant configuration, deployment, or runtime behavior was created or validated unless its official owner actually performed and observed that work. + +## Design Lineage + +The focused visual system is adapted from Kathryn Lavery's MIT-licensed `diagram-design` project. See [THIRD_PARTY_LICENSES.md](../../THIRD_PARTY_LICENSES.md) for the retained notice and modification summary. diff --git a/skills/uipath-diagram-design/agents/openai.yaml b/skills/uipath-diagram-design/agents/openai.yaml new file mode 100644 index 0000000..d3cfe94 --- /dev/null +++ b/skills/uipath-diagram-design/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "UiPath Diagram Design" + short_description: "Create crisp, evidence-backed UiPath diagrams" + default_prompt: "Use $uipath-diagram-design to create a crisp, evidence-backed UiPath diagram from these verified artifacts." diff --git a/skills/uipath-diagram-design/assets/example-deployment-integration.html b/skills/uipath-diagram-design/assets/example-deployment-integration.html new file mode 100644 index 0000000..f71a4da --- /dev/null +++ b/skills/uipath-diagram-design/assets/example-deployment-integration.html @@ -0,0 +1,25 @@ +<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Cloud Deployment and Integration - Prototype +UiPath deployment and integration topologySynthetic topology showing source control and quality gates promoting a package through Development, Test, and Production folders, then using robot and Integration Service connections to Salesforce and SAP.PROTOTYPE; synthetic content; generated 2026-08-12; explanatory only; not executable. + +SYNTHETIC REFERENCE / DEPLOYMENT AND INTEGRATION / NOT EXECUTABLEA governed package moves to production, then connects at runtime +DELIVERY CONTROLUIPATH AUTOMATION CLOUDCONNECTED SYSTEMS + + + + + +COMMITSIGNED PACKAGEPROMOTERELEASERUN PROCESSBINDINGREST APIODATA + +SOURCE CONTROLGitHub main branchreviewed automation code +QUALITY GATEBuild and validationtests + package signing +ORCHESTRATORDevelopment folderdeveloper verification +ORCHESTRATORTest folderUAT evidence +ORCHESTRATORProduction folderapproved release +RUNTIMEUnattended VM poolproduction robots +UIPATH SERVICEIntegration Servicemanaged connections +CRMSalesforcecase and customer data +ERPSAP S/4HANAorders and invoices +Solid arrows show promotion and runtime calls; dashed binding connects production configuration to managed integrations. + diff --git a/skills/uipath-diagram-design/assets/example-deployment-integration.png b/skills/uipath-diagram-design/assets/example-deployment-integration.png new file mode 100644 index 0000000..eae8e1c Binary files /dev/null and b/skills/uipath-diagram-design/assets/example-deployment-integration.png differ diff --git a/skills/uipath-diagram-design/assets/example-deployment-integration.svg b/skills/uipath-diagram-design/assets/example-deployment-integration.svg new file mode 100644 index 0000000..23dcf15 --- /dev/null +++ b/skills/uipath-diagram-design/assets/example-deployment-integration.svg @@ -0,0 +1,24 @@ +UiPath deployment and integration topologySynthetic topology showing source control and quality gates promoting a package through Development, Test, and Production folders, then using robot and Integration Service connections to Salesforce and SAP.PROTOTYPE; synthetic content; generated 2026-08-12; explanatory only; not executable. + +SYNTHETIC REFERENCE / DEPLOYMENT AND INTEGRATION / NOT EXECUTABLEA governed package moves to production, then connects at runtime +DELIVERY CONTROLUIPATH AUTOMATION CLOUDCONNECTED SYSTEMS + + + + + +COMMITSIGNED PACKAGEPROMOTERELEASERUN PROCESSBINDINGREST APIODATA + +SOURCE CONTROLGitHub main branchreviewed automation code +QUALITY GATEBuild and validationtests + package signing +ORCHESTRATORDevelopment folderdeveloper verification +ORCHESTRATORTest folderUAT evidence +ORCHESTRATORProduction folderapproved release +RUNTIMEUnattended VM poolproduction robots +UIPATH SERVICEIntegration Servicemanaged connections +CRMSalesforcecase and customer data +ERPSAP S/4HANAorders and invoices +Solid arrows show promotion and runtime calls; dashed binding connects production configuration to managed integrations. + diff --git a/skills/uipath-diagram-design/assets/example-interaction-sequence.html b/skills/uipath-diagram-design/assets/example-interaction-sequence.html new file mode 100644 index 0000000..446fb3d --- /dev/null +++ b/skills/uipath-diagram-design/assets/example-interaction-sequence.html @@ -0,0 +1,28 @@ +Refund Review Sequence - Prototype +Customer refund verification sequenceSynthetic interaction sequence among a customer portal, Maestro, a UiPath agent, a payments API, and a finance reviewer.PROTOTYPE; synthetic content; generated 2026-08-12; explanatory only; not executable. + +SYNTHETIC REFERENCE / INTERACTION SEQUENCE / HAPPY PATHMaestro coordinates a verified customer refund + +Customer portalREQUEST CHANNEL +MaestroORCHESTRATION +UiPath agentPOLICY REASONING +Payments APITRANSACTION SYSTEM +Finance reviewerDECISION OWNER + + + +SUBMIT REFUND REQUEST +ASSESS POLICY +LOOK UP CHARGE +TRANSACTION DETAILS +RISK RECOMMENDATION +CREATE REVIEW TASK +APPROVE WITH REASON +ISSUE REFUND +REFUND RECEIPT +CONFIRM TO CUSTOMER + + + diff --git a/skills/uipath-diagram-design/assets/example-interaction-sequence.png b/skills/uipath-diagram-design/assets/example-interaction-sequence.png new file mode 100644 index 0000000..bab2721 Binary files /dev/null and b/skills/uipath-diagram-design/assets/example-interaction-sequence.png differ diff --git a/skills/uipath-diagram-design/assets/example-interaction-sequence.svg b/skills/uipath-diagram-design/assets/example-interaction-sequence.svg new file mode 100644 index 0000000..90c9cdb --- /dev/null +++ b/skills/uipath-diagram-design/assets/example-interaction-sequence.svg @@ -0,0 +1,27 @@ +Customer refund verification sequenceSynthetic interaction sequence among a customer portal, Maestro, a UiPath agent, a payments API, and a finance reviewer.PROTOTYPE; synthetic content; generated 2026-08-12; explanatory only; not executable. + +SYNTHETIC REFERENCE / INTERACTION SEQUENCE / HAPPY PATHMaestro coordinates a verified customer refund + +Customer portalREQUEST CHANNEL +MaestroORCHESTRATION +UiPath agentPOLICY REASONING +Payments APITRANSACTION SYSTEM +Finance reviewerDECISION OWNER + + + +SUBMIT REFUND REQUEST +ASSESS POLICY +LOOK UP CHARGE +TRANSACTION DETAILS +RISK RECOMMENDATION +CREATE REVIEW TASK +APPROVE WITH REASON +ISSUE REFUND +REFUND RECEIPT +CONFIRM TO CUSTOMER + + + diff --git a/skills/uipath-diagram-design/assets/example-process-swimlane.html b/skills/uipath-diagram-design/assets/example-process-swimlane.html new file mode 100644 index 0000000..aabd6d8 --- /dev/null +++ b/skills/uipath-diagram-design/assets/example-process-swimlane.html @@ -0,0 +1,23 @@ +Purchase Order Exception Swimlane - Prototype +Purchase order change with a buyer exception pathSynthetic swimlane across requestor, intake automation, procurement robot, buyer, and ERP system.PROTOTYPE; synthetic content; generated 2026-08-12; explanatory only; not executable. + +PROCESS SWIMLANE / SYNTHETIC EXAMPLE / NOT EXECUTABLEPurchase-order changes with a controlled exception path + +RequestorCHANGE OWNERIntake automationUIPATH SERVICEProcurement robotUNATTENDEDBuyerEXCEPTION OWNERERP systemSYSTEM OF RECORD + + + +SUBMITSVALIDATESDEQUEUESPASSEXCEPTIONREVIEWSDECISIONNOTIFIES + +Request changeamount or date +Check requestrequired fields +Create queue itemPO transaction +Compare policyvalue + tolerance +Apply allowed changewithin policy +Review exceptionbuyer decision +Approve requestreason recorded +Update purchase orderERP document +Receive outcomechange notice + diff --git a/skills/uipath-diagram-design/assets/example-process-swimlane.png b/skills/uipath-diagram-design/assets/example-process-swimlane.png new file mode 100644 index 0000000..00749fc Binary files /dev/null and b/skills/uipath-diagram-design/assets/example-process-swimlane.png differ diff --git a/skills/uipath-diagram-design/assets/example-process-swimlane.svg b/skills/uipath-diagram-design/assets/example-process-swimlane.svg new file mode 100644 index 0000000..694a0d9 --- /dev/null +++ b/skills/uipath-diagram-design/assets/example-process-swimlane.svg @@ -0,0 +1,22 @@ +Purchase order change with a buyer exception pathSynthetic swimlane across requestor, intake automation, procurement robot, buyer, and ERP system.PROTOTYPE; synthetic content; generated 2026-08-12; explanatory only; not executable. + +PROCESS SWIMLANE / SYNTHETIC EXAMPLE / NOT EXECUTABLEPurchase-order changes with a controlled exception path + +RequestorCHANGE OWNERIntake automationUIPATH SERVICEProcurement robotUNATTENDEDBuyerEXCEPTION OWNERERP systemSYSTEM OF RECORD + + + +SUBMITSVALIDATESDEQUEUESPASSEXCEPTIONREVIEWSDECISIONNOTIFIES + +Request changeamount or date +Check requestrequired fields +Create queue itemPO transaction +Compare policyvalue + tolerance +Apply allowed changewithin policy +Review exceptionbuyer decision +Approve requestreason recorded +Update purchase orderERP document +Receive outcomechange notice + diff --git a/skills/uipath-diagram-design/assets/example-solution-architecture.html b/skills/uipath-diagram-design/assets/example-solution-architecture.html new file mode 100644 index 0000000..af7bae8 --- /dev/null +++ b/skills/uipath-diagram-design/assets/example-solution-architecture.html @@ -0,0 +1,23 @@ +Employee Onboarding Architecture - Prototype + +Employee onboarding solution architectureSynthetic UiPath architecture connecting a hire event, Integration Service, an onboarding queue, an unattended provisioning robot, Action Center approval, Microsoft 365, and audit evidence.PROTOTYPE; synthetic content; generated 2026-08-12; explanatory only; not executable. + +SYNTHETIC REFERENCE / SOLUTION ARCHITECTURE / NOT EXECUTABLEEmployee onboarding from hire event to provisioned account +BUSINESS SYSTEMSUIPATH PLATFORMWORKPLACE SERVICES + + + + +WEBHOOKHIREWORKCREATEROLE UNCLEARREQUESTS ROLEAPPROVES ACCESSUPDATESEMITS + +HR EVENTWorkday hire eventemployee + start date +UIPATH SERVICEIntegration Serviceevent normalization +DATA ARTIFACTOnboarding queueOrchestrator +AUTOMATIONProvisioning robotunattended process +EXTERNAL SYSTEMMicrosoft 365account + licenses +HUMANHiring managerconfirms access role +UIPATH SERVICEAction Centerrole approval task +CONTROL / EVIDENCEAudit trailaccount + decision + diff --git a/skills/uipath-diagram-design/assets/example-solution-architecture.png b/skills/uipath-diagram-design/assets/example-solution-architecture.png new file mode 100644 index 0000000..355cd9c Binary files /dev/null and b/skills/uipath-diagram-design/assets/example-solution-architecture.png differ diff --git a/skills/uipath-diagram-design/assets/example-solution-architecture.svg b/skills/uipath-diagram-design/assets/example-solution-architecture.svg new file mode 100644 index 0000000..605062e --- /dev/null +++ b/skills/uipath-diagram-design/assets/example-solution-architecture.svg @@ -0,0 +1,22 @@ + +Employee onboarding solution architectureSynthetic UiPath architecture connecting a hire event, Integration Service, an onboarding queue, an unattended provisioning robot, Action Center approval, Microsoft 365, and audit evidence.PROTOTYPE; synthetic content; generated 2026-08-12; explanatory only; not executable. + +SYNTHETIC REFERENCE / SOLUTION ARCHITECTURE / NOT EXECUTABLEEmployee onboarding from hire event to provisioned account +BUSINESS SYSTEMSUIPATH PLATFORMWORKPLACE SERVICES + + + + +WEBHOOKHIREWORKCREATEROLE UNCLEARREQUESTS ROLEAPPROVES ACCESSUPDATESEMITS + +HR EVENTWorkday hire eventemployee + start date +UIPATH SERVICEIntegration Serviceevent normalization +DATA ARTIFACTOnboarding queueOrchestrator +AUTOMATIONProvisioning robotunattended process +EXTERNAL SYSTEMMicrosoft 365account + licenses +HUMANHiring managerconfirms access role +UIPATH SERVICEAction Centerrole approval task +CONTROL / EVIDENCEAudit trailaccount + decision + diff --git a/skills/uipath-diagram-design/assets/example-state-lifecycle.html b/skills/uipath-diagram-design/assets/example-state-lifecycle.html new file mode 100644 index 0000000..b3bd83f --- /dev/null +++ b/skills/uipath-diagram-design/assets/example-state-lifecycle.html @@ -0,0 +1,24 @@ +Queue Recovery Lifecycle - Prototype +UiPath queue transaction recovery lifecycleSynthetic state machine showing a queue transaction moving from new to in progress, successful, retrying, or failed.PROTOTYPE; synthetic content; generated 2026-08-12; explanatory only; not executable. + +STATE AND LIFECYCLE / SYNTHETIC EXAMPLE / NOT EXECUTABLEQueue transactions recover predictably from transient failures + + + + + + +ADDDEQUEUECOMPLETED / OUTPUTARCHIVE +TRANSIENT ERROR [LT 3]BACKOFF ELAPSEDATTEMPTS EXHAUSTEDEVIDENCE + + + +QUEUE STATENewready for work +QUEUE STATEIn progressrobot processing +TERMINAL SUCCESSSuccessfuloutput recorded +RECOVERY STATERetryingbounded backoff +TERMINAL FAILUREFailedevidence captured +Each transition is triggered by an observable event; retry count remains bounded. + diff --git a/skills/uipath-diagram-design/assets/example-state-lifecycle.png b/skills/uipath-diagram-design/assets/example-state-lifecycle.png new file mode 100644 index 0000000..0c6ecb8 Binary files /dev/null and b/skills/uipath-diagram-design/assets/example-state-lifecycle.png differ diff --git a/skills/uipath-diagram-design/assets/example-state-lifecycle.svg b/skills/uipath-diagram-design/assets/example-state-lifecycle.svg new file mode 100644 index 0000000..dee52b3 --- /dev/null +++ b/skills/uipath-diagram-design/assets/example-state-lifecycle.svg @@ -0,0 +1,23 @@ +UiPath queue transaction recovery lifecycleSynthetic state machine showing a queue transaction moving from new to in progress, successful, retrying, or failed.PROTOTYPE; synthetic content; generated 2026-08-12; explanatory only; not executable. + +STATE AND LIFECYCLE / SYNTHETIC EXAMPLE / NOT EXECUTABLEQueue transactions recover predictably from transient failures + + + + + + +ADDDEQUEUECOMPLETED / OUTPUTARCHIVE +TRANSIENT ERROR [LT 3]BACKOFF ELAPSEDATTEMPTS EXHAUSTEDEVIDENCE + + + +QUEUE STATENewready for work +QUEUE STATEIn progressrobot processing +TERMINAL SUCCESSSuccessfuloutput recorded +RECOVERY STATERetryingbounded backoff +TERMINAL FAILUREFailedevidence captured +Each transition is triggered by an observable event; retry count remains bounded. + diff --git a/skills/uipath-diagram-design/references/deployment-integration.md b/skills/uipath-diagram-design/references/deployment-integration.md new file mode 100644 index 0000000..7870271 --- /dev/null +++ b/skills/uipath-diagram-design/references/deployment-integration.md @@ -0,0 +1,27 @@ +# Deployment and Integration + +Use for environment promotion, release controls, runtime compute, managed connections, and enterprise endpoints. + +## Layout + +- Use three zones when possible: delivery control, UiPath platform, and connected systems. +- Keep Dev, Test, and Production promotion on one horizontal line. +- Put runtime machines, robots, and integration services below the promotion path. +- Use orange for the release gate and Production target. +- Use link blue for external runtime calls and dashed muted lines for configuration bindings. + +## UiPath semantics + +Separate package promotion from runtime execution. A release arrow means an approved artifact moves between environments; an API arrow means a verified runtime integration. Show folders, tenants, machines, robot pools, or connections only at the level supported by evidence. + +Platform mutations remain with `uipath-platform`, `uipath-admin`, or `uipath-governance`. The diagram does not deploy or configure anything. + +## Quality checks + +- Promotion and runtime flows have visibly different paths. +- Production is not implied before an approval gate. +- External protocols are labeled. +- Cross-cutting bindings do not masquerade as runtime calls. +- No credential, tenant identifier, internal endpoint, or customer-sensitive topology appears in public output. + +See [the cloud-deployment example](../assets/example-deployment-integration.html). diff --git a/skills/uipath-diagram-design/references/evidence-and-boundaries.md b/skills/uipath-diagram-design/references/evidence-and-boundaries.md new file mode 100644 index 0000000..b1ffe70 --- /dev/null +++ b/skills/uipath-diagram-design/references/evidence-and-boundaries.md @@ -0,0 +1,45 @@ +# Evidence and UiPath Boundaries + +## Evidence priority + +Use the strongest available source for every visual claim: + +1. Validated output from an official UiPath skill or observed platform query. +2. Approved repository content, PDD, SDD, ADR, or process document. +3. An explicit user decision made for the current diagram. +4. Working notes whose status is visible. +5. A labeled inference used only to complete a communication draft. + +Never turn a proposed component, untested path, or planned deployment into an unlabeled fact. + +## Evidence inventory + +Before drawing, record for each node or connector: + +- Label and semantic role. +- Source or evidence pointer. +- Status: proven, approved, proposed, inferred, or synthetic. +- Confidentiality or redaction need. +- Official UiPath owner when executable work is implied. + +Put the overall status in ``. Use a visible eyebrow such as `APPROVED DESIGN`, `DRAFT`, `SYNTHETIC EXAMPLE`, or `OBSERVED CURRENT STATE`. + +## Official ownership + +- `.xaml` and coded workflows: `uipath-rpa`. +- Agents and `agent.json`: `uipath-agents`. +- `.flow`: `uipath-maestro-flow`. +- `.bpmn` and Maestro BPMN projects: `uipath-maestro-bpmn`. +- SDD and `.uipx`: `uipath-solution` or `uipath-planner`. +- Tenant, Orchestrator, admin, and governance state: `uipath-platform`, `uipath-admin`, or `uipath-governance`. +- Product and artifact review: `uipath-review`. + +An illustrative process diagram is not a deployable BPMN artifact. A component box is not proof of configuration. A sequence message is not proof that an API call succeeded. + +## Public and brand safety + +UiPath Boost is an independent community project. Keep that status clear in public examples. + +Use product names as text when relevant. Include a UiPath logo only when the user provides an authorized local asset or documented permission that covers the intended use. Do not download, bundle, redraw, or imply permission for the official logo. + +Use synthetic or approved redacted data in public diagrams. Exclude tenant names, folder identifiers, credentials, internal endpoints, customer names, and security-sensitive topology unless publication is explicitly authorized. diff --git a/skills/uipath-diagram-design/references/export.md b/skills/uipath-diagram-design/references/export.md new file mode 100644 index 0000000..c251b55 --- /dev/null +++ b/skills/uipath-diagram-design/references/export.md @@ -0,0 +1,42 @@ +# Export HTML to SVG and PNG + +Use the bundled helper after the HTML has been created and reviewed for structural completeness. + +## Basic command + +```bash +python scripts/export_diagram.py diagrams/my-diagram/my-diagram.html --svg --png +``` + +The helper writes files beside the HTML by default: + +```text +diagrams/my-diagram/ +|-- my-diagram.html +|-- my-diagram.svg +`-- my-diagram.png +``` + +Use `--output-dir PATH` to choose another directory. Existing outputs are protected; add `--force` only after confirming replacement is intended. Prefer a versioned diagram slug over forced replacement. + +## Browser selection + +SVG extraction uses only Python's standard library. PNG export requires an already installed Chrome, Edge, or Chromium browser. The helper checks common executable names and Windows installation paths. + +Provide a browser explicitly when detection is ambiguous: + +```bash +python scripts/export_diagram.py diagram.html --png --browser "C:\Program Files\Google\Chrome\Application\chrome.exe" +``` + +The helper never downloads or installs a browser. If no compatible browser is available, keep the valid HTML and SVG, report PNG as incomplete, and give the user the exact error. + +## Size and inspection + +The standard output is 1600x900. Change it only when the user requests another aspect ratio: + +```bash +python scripts/export_diagram.py diagram.html --svg --png --width 1920 --height 1080 +``` + +Open the PNG after export and inspect the actual rendered pixels. Successful process exit and file creation do not prove visual quality. diff --git a/skills/uipath-diagram-design/references/interaction-sequence.md b/skills/uipath-diagram-design/references/interaction-sequence.md new file mode 100644 index 0000000..a21daf3 --- /dev/null +++ b/skills/uipath-diagram-design/references/interaction-sequence.md @@ -0,0 +1,27 @@ +# Interaction Sequence + +Use for time-ordered calls, returns, approvals, events, and notifications among at most five participants. + +## Layout + +- Place participant boxes in one horizontal row. +- Draw dashed vertical lifelines and narrow activation bars. +- Let time move from top to bottom; no message arrow points upward. +- Use solid blue for calls, dashed muted lines for returns, and orange for one or two headline outcomes. +- Use a framed `ALT`, `OPT`, or `LOOP` region only when a branch is essential to the communication question. + +## UiPath semantics + +Distinguish Maestro orchestration, agent reasoning, unattended automation, human decisions, and external APIs. A human approval is a message with a decision owner; it is not an autonomous agent result. + +Keep the diagram explanatory. Route `.flow`, BPMN, agent, API workflow, and task authoring to their official owners. + +## Quality checks + +- Maximum five participants and twelve messages. +- Return messages are dashed and use filled arrowheads. +- Labels occupy the open space above their message lines. +- Activation bars start and end around the work they represent. +- Long messages do not collide with intermediate lifelines. + +See [the refund-review example](../assets/example-interaction-sequence.html). diff --git a/skills/uipath-diagram-design/references/process-swimlane.md b/skills/uipath-diagram-design/references/process-swimlane.md new file mode 100644 index 0000000..fc143df --- /dev/null +++ b/skills/uipath-diagram-design/references/process-swimlane.md @@ -0,0 +1,27 @@ +# Process Swimlane + +Use for responsibility, ownership, and handoffs across business users, UiPath automations, robots, reviewers, and systems of record. + +## Layout + +- Use horizontal lanes with labels in a fixed left margin. +- Assign every step to exactly one lane. +- Order steps so the dominant flow advances left to right. +- Emphasize the handoff that introduces human review or material coupling. +- Let straight-through and exception branches converge at a clearly owned system step. + +## UiPath semantics + +Separate a UiPath service from an unattended robot when they perform different work. Use human lanes for accountable decisions, not for passive notification. Use system lanes only for actions the external system owns. + +This is an explanatory process view, not executable BPMN. Route BPMN authoring to `uipath-maestro-bpmn`. + +## Quality checks + +- Every lane has one named owner. +- No step crosses a lane boundary. +- Handoffs cross boundaries cleanly without long backtracking paths. +- Exception labels and arrowheads remain outside node text. +- A reader can identify the system of record and decision owner immediately. + +See [the purchase-order example](../assets/example-process-swimlane.html). diff --git a/skills/uipath-diagram-design/references/solution-architecture.md b/skills/uipath-diagram-design/references/solution-architecture.md new file mode 100644 index 0000000..88682e6 --- /dev/null +++ b/skills/uipath-diagram-design/references/solution-architecture.md @@ -0,0 +1,27 @@ +# Solution Architecture + +Use for a verified overview of components, services, systems, stores, humans, and data movement. + +## Layout + +- Use a left-to-right primary flow. +- Group components into at most three zones such as business channels, UiPath platform, and enterprise systems. +- Keep primary-path nodes aligned and equal in visual weight. +- Place exception handling, human review, and evidence below the primary flow. +- Use one focal UiPath integration or service and, when needed, one focal human-review surface. + +## UiPath semantics + +Name the actual level of abstraction: `Orchestrator queue`, `unattended process`, `Action Center task`, `Integration Service connection`, or `Maestro orchestration`. Avoid a generic `UiPath` box when the owner is known. + +Use official output or approved design evidence for every connection. A line means a meaningful relationship, not merely that two products coexist. + +## Quality checks + +- Text fits comfortably inside every component. +- Zone labels have clear space above the first node. +- Main-flow labels sit above their connectors. +- Secondary paths do not cross the primary line or pass behind nodes. +- The picture remains understandable when icons are removed. + +See [the employee-onboarding example](../assets/example-solution-architecture.html). diff --git a/skills/uipath-diagram-design/references/state-lifecycle.md b/skills/uipath-diagram-design/references/state-lifecycle.md new file mode 100644 index 0000000..4b4f5e1 --- /dev/null +++ b/skills/uipath-diagram-design/references/state-lifecycle.md @@ -0,0 +1,25 @@ +# State and Lifecycle + +Use for finite states and the events, guards, retries, actions, and outcomes that connect them. + +## Layout + +- Use rounded rectangles for states, a filled dot for start, and a ringed dot for each terminal end. +- Orient the happy path left to right. +- Put recovery or exception states below the happy path. +- Label every transition as `event [guard] / action`, omitting unused parts. +- Use orange for the state or transition the reader must notice, commonly bounded retry. + +## UiPath semantics + +Name a real lifecycle surface such as a queue transaction, human task, case, job, document review, or deployment approval. Verify product-defined states with the official owner; otherwise label the lifecycle as proposed or synthetic. + +## Quality checks + +- Every state has a distinct meaning and exit condition. +- Transition count stays below twice the number of states. +- Retry guards are bounded and failure evidence is visible. +- Return paths are distinct from forward paths. +- Terminal success and failure cannot be confused. + +See [the queue-recovery example](../assets/example-state-lifecycle.html). diff --git a/skills/uipath-diagram-design/references/visual-system.md b/skills/uipath-diagram-design/references/visual-system.md new file mode 100644 index 0000000..a922adc --- /dev/null +++ b/skills/uipath-diagram-design/references/visual-system.md @@ -0,0 +1,76 @@ +# UiPath Diagram Visual System + +Use this reference for every diagram. It defines the stable communication grammar; the selected type reference defines layout. + +## Canvas and tokens + +| Role | Value | Use | +|---|---|---| +| Canvas | `#FFFFFF` | Page and label masks | +| Secondary | `#F7F8FA` | Alternating lanes and quiet zones | +| Ink | `#172033` | Primary text and component borders | +| Muted | `#667085` | Secondary text and default connectors | +| Hairline | `#D0D5DD` | Dividers and boundaries | +| Accent | `#E85D2A` | One or two focal elements | +| Accent tint | `#FFF1EB` | Focal-node fill | +| Link blue | `#356AA0` | External calls and API connections | +| Success | `#2F7D5B` | Verified outcome or evidence state | + +Use system fonts only: `system-ui`, `Segoe UI`, Arial, and a system monospace stack. Use sans-serif for names and monospace for tags, protocols, events, and technical sublabels. + +## Semantic node roles + +| Role | Treatment | +|---|---| +| Human | Quiet or dashed border, person icon optional | +| Automation | White fill, ink border | +| Orchestration | White fill, ink border; name the verified owner | +| UiPath service | Focal tint only when it is central; otherwise standard node | +| External system | Dashed muted border | +| Data or artifact | Standard node; cylinder icon optional | +| Control or evidence | Green or dashed border when evidence is the message | + +Shapes supplement labels; they never replace them. Product names do not prove a product connection exists. + +## Complexity budget + +- Maximum 9 nodes. +- Maximum 12 connectors. +- Maximum 2 orange focal elements. +- Maximum 5 lanes or lifelines. +- Maximum 3 large zones. +- Target visual density: 4 out of 10. + +Split an overloaded visual into overview and detail diagrams. + +## Connector rules + +1. Draw connectors before nodes so node fills mask line endings. +2. Use straight lines only when endpoints share an x or y coordinate. +3. Route off-axis connections with rounded orthogonal elbows; use no diagonal connectors. +4. Give every arrow label an opaque canvas-colored mask and 6-10 pixels of visible separation from the stroke. +5. Fan multiple connectors along a node edge with at least 12 pixels between attach points. +6. Keep connectors independently traceable. Offset parallel routes and bridge an unavoidable crossing on the less important path. +7. Route around non-endpoint nodes. A connector must not disappear behind an unrelated box. +8. Use dashed lines for returns, optional paths, passive evidence, or bindings; state the meaning in nearby text. + +## Diagram-only HTML contract + +- Use one inline ``. +- Include ``, ``, and `` for accessibility and evidence status. +- Use inline CSS and SVG only. +- Use no JavaScript, external fonts, linked images, gradients, shadows, glows, or decorative application chrome. +- Keep the background opaque white so PNG output matches the HTML and SVG. +- Mark synthetic, inferred, draft, and non-executable content in metadata and a small eyebrow. + +## Render review + +Inspect the PNG at 100 percent and confirm: + +- Every label is inside its intended box or label mask. +- No connector touches text. +- Arrow direction is unambiguous. +- Focal orange has one clear meaning. +- The title and eyebrow are fully visible. +- Zone and lane labels remain readable at presentation size. +- The diagram works without a legend; add a bottom legend only when shapes have non-obvious semantics. diff --git a/skills/uipath-diagram-design/scripts/export_diagram.py b/skills/uipath-diagram-design/scripts/export_diagram.py new file mode 100644 index 0000000..3f93152 --- /dev/null +++ b/skills/uipath-diagram-design/scripts/export_diagram.py @@ -0,0 +1,169 @@ +#!/usr/bin/env python3 +"""Extract an inline SVG and render a diagram-only PNG from self-contained HTML.""" + +from __future__ import annotations + +import argparse +import os +import re +import shutil +import struct +import subprocess +import sys +import tempfile +import xml.etree.ElementTree as ET +from pathlib import Path + + +SVG_PATTERN = re.compile(r"]*>.*?", re.IGNORECASE | re.DOTALL) + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Export the single inline SVG in a UiPath diagram HTML file." + ) + parser.add_argument("html", type=Path, help="Self-contained diagram HTML file") + parser.add_argument("--svg", action="store_true", help="Write an SVG export") + parser.add_argument("--png", action="store_true", help="Write a PNG export") + parser.add_argument("--output-dir", type=Path, help="Output directory; defaults beside HTML") + parser.add_argument("--browser", help="Chrome, Edge, or Chromium executable") + parser.add_argument("--width", type=int, default=1600, help="PNG width; default 1600") + parser.add_argument("--height", type=int, default=900, help="PNG height; default 900") + parser.add_argument("--force", action="store_true", help="Replace existing SVG or PNG") + return parser.parse_args() + + +def extract_svg(html_path: Path) -> str: + html = html_path.read_text(encoding="utf-8") + matches = SVG_PATTERN.findall(html) + if len(matches) != 1: + raise ValueError(f"expected exactly one inline SVG, found {len(matches)}") + svg = matches[0].strip() + ET.fromstring(svg) + return svg + + +def browser_candidates() -> list[str]: + candidates = [ + "google-chrome", + "google-chrome-stable", + "chromium", + "chromium-browser", + "microsoft-edge", + "msedge", + ] + if sys.platform == "win32": + roots = [ + os.environ.get("PROGRAMFILES"), + os.environ.get("PROGRAMFILES(X86)"), + os.environ.get("LOCALAPPDATA"), + ] + suffixes = [ + Path("Google/Chrome/Application/chrome.exe"), + Path("Microsoft/Edge/Application/msedge.exe"), + Path("Chromium/Application/chrome.exe"), + ] + candidates.extend(str(Path(root) / suffix) for root in roots if root for suffix in suffixes) + elif sys.platform == "darwin": + candidates.extend( + [ + "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", + "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge", + "/Applications/Chromium.app/Contents/MacOS/Chromium", + ] + ) + return candidates + + +def resolve_browser(requested: str | None) -> str | None: + candidates = [requested] if requested else browser_candidates() + for candidate in candidates: + if not candidate: + continue + expanded = Path(candidate).expanduser() + if expanded.is_file(): + return str(expanded.resolve()) + resolved = shutil.which(candidate) + if resolved: + return resolved + return None + + +def ensure_writable(targets: list[Path], force: bool) -> None: + existing = [str(path) for path in targets if path.exists()] + if existing and not force: + joined = ", ".join(existing) + raise FileExistsError(f"output already exists: {joined}; use a versioned name or --force") + + +def png_dimensions(path: Path) -> tuple[int, int]: + header = path.read_bytes()[:24] + if len(header) != 24 or header[:8] != b"\x89PNG\r\n\x1a\n": + raise ValueError("browser output is not a valid PNG") + return struct.unpack(">II", header[16:24]) + + +def render_png(browser: str, html_path: Path, png_path: Path, width: int, height: int) -> None: + with tempfile.TemporaryDirectory(prefix="uipath-diagram-") as profile: + command = [ + browser, + "--headless=new", + "--disable-gpu", + "--hide-scrollbars", + "--force-device-scale-factor=1", + f"--window-size={width},{height}", + f"--user-data-dir={profile}", + f"--screenshot={png_path}", + html_path.as_uri(), + ] + result = subprocess.run(command, capture_output=True, text=True, timeout=60, check=False) + if result.returncode != 0 or not png_path.exists(): + details = (result.stderr or result.stdout).strip() + raise RuntimeError(f"browser PNG render failed ({result.returncode}): {details}") + actual = png_dimensions(png_path) + if actual != (width, height): + raise RuntimeError(f"expected PNG {width}x{height}, found {actual[0]}x{actual[1]}") + + +def main() -> int: + args = parse_args() + html_path = args.html.expanduser().resolve() + if not html_path.is_file(): + print(f"ERROR: HTML file not found: {html_path}", file=sys.stderr) + return 2 + if args.width <= 0 or args.height <= 0: + print("ERROR: width and height must be positive", file=sys.stderr) + return 2 + + export_svg = args.svg or not (args.svg or args.png) + export_png = args.png or not (args.svg or args.png) + output_dir = (args.output_dir or html_path.parent).expanduser().resolve() + output_dir.mkdir(parents=True, exist_ok=True) + svg_path = output_dir / f"{html_path.stem}.svg" + png_path = output_dir / f"{html_path.stem}.png" + targets = ([svg_path] if export_svg else []) + ([png_path] if export_png else []) + + try: + ensure_writable(targets, args.force) + svg = extract_svg(html_path) + if export_svg: + svg_path.write_text(svg + "\n", encoding="utf-8") + print(f"SVG: {svg_path}") + + if export_png: + browser = resolve_browser(args.browser) + if not browser: + raise RuntimeError( + "PNG export requires an installed Chrome, Edge, or Chromium browser; " + "provide its path with --browser" + ) + render_png(browser, html_path, png_path, args.width, args.height) + print(f"PNG: {png_path}") + except (FileExistsError, OSError, RuntimeError, ValueError, ET.ParseError) as error: + print(f"ERROR: {error}", file=sys.stderr) + return 1 + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/skills/uipath-project-router/references/routing-table.md b/skills/uipath-project-router/references/routing-table.md index 6941236..a257c92 100644 --- a/skills/uipath-project-router/references/routing-table.md +++ b/skills/uipath-project-router/references/routing-table.md @@ -7,6 +7,7 @@ | Existing repository lacks project context | `uipath-project-discovery-agent` | `uipath-delivery-control-plane` after official context exists | | RPA, agent, Maestro, coded app, API workflow, function, connector, or solution implementation | Owning official product skill | `uipath-task-refinement` only when an existing planner task is too large or blocked incorrectly | | Artifact or solution quality review | `uipath-review` | `uipath-architecture-deepening` or `uipath-requirement-traceability` after the report | +| Explanatory architecture, swimlane, sequence, lifecycle, or deployment visual | Official artifact or platform owner supplies verified facts | `uipath-diagram-design` creates the communication artifact | | Runtime failure, error, hang, slowdown, or wrong result | `uipath-troubleshoot` | `uipath-regression-harness` after the symptom or cause is anchored | | Test Manager operations and reports | `uipath-test` | `uipath-uat-session` only for facilitated business-language UAT observation capture | | Action Center task operations | `uipath-tasks` | `uipath-observability-design` only for task-aging metrics and correlation design | diff --git a/src/skill-contracts.mjs b/src/skill-contracts.mjs index 869a79a..d945f1e 100644 --- a/src/skill-contracts.mjs +++ b/src/skill-contracts.mjs @@ -22,6 +22,7 @@ const definitions = { "uipath-architecture-deepening": ["Find high-leverage UiPath architecture improvements", "Use $uipath-architecture-deepening to turn this proven hotspot into ranked design options.", "Use this review finding to improve an actively changing architecture hotspot.", "Review this repository for general UiPath quality.", "Keep design work read-only and hand implementation to the official artifact owner.", "A proven hotspot has ranked options, a recommendation, and a bounded handoff."], "uipath-component-design": ["Design deep, testable UiPath component contracts", "Use $uipath-component-design to compare component contracts and recommend the best seam.", "Design a reusable queue-processing component with a stable public contract.", "Implement this existing XAML workflow exactly as specified.", "Design the contract without editing product artifacts unless separately authorized.", "The selected contract is testable by real callers and differs materially from alternatives."], "uipath-delivery-control-plane": ["Establish durable UiPath delivery governance", "Use $uipath-delivery-control-plane to establish the project delivery control plane.", "Set up durable project ownership, evidence, decision, and release conventions.", "Discover the structure of this UiPath repository.", "Require official project discovery before creating delivery governance documents.", "Every recurring delivery fact has one owned, linked, and usable location."], + "uipath-diagram-design": ["Create crisp, evidence-backed UiPath diagrams", "Use $uipath-diagram-design to create a crisp, evidence-backed UiPath diagram from these verified artifacts.", "Create an explanatory UiPath architecture, swimlane, sequence, lifecycle, or deployment diagram.", "Author or validate an executable UiPath BPMN, Flow, XAML, or tenant configuration.", "Use verified or labeled synthetic facts, protect confidential topology, and keep product changes with official owners.", "Matching accessible HTML, SVG, and rendered PNG files exist and every claim has a visible evidence status."], "uipath-discovery-interview": ["Resolve UiPath decisions through frontier rounds", "Use $uipath-discovery-interview to run evidence-based discovery in frontier rounds.", "Interview stakeholders to resolve the decisions blocking an automation design.", "Look up a documented fact already present in the repository.", "Research available facts and reserve questions for accountable human decisions.", "The frontier is empty or every remaining gap has an owner and evidence request."], "uipath-discovery-with-docs": ["Run UiPath discovery with a durable paper trail", "Use $uipath-discovery-with-docs to discover this process and maintain its project records.", "Run multi-session automation discovery and preserve decisions, evidence, and terminology.", "Ask one isolated clarification that requires no durable project record.", "Write only to the agreed documentation location and preserve one source of truth.", "A planner can continue from the documents without replaying the interview."], "uipath-learning-workspace": ["Build a stateful, practice-led UiPath learning path", "Use $uipath-learning-workspace to create a mission-based UiPath learning workspace.", "Create a multi-session learning path tied to a real UiPath professional goal.", "Answer one factual question about a UiPath feature.", "Use current sources, safe labs, and synthetic data; never train against production secrets.", "Progress records show retrieval, practice, feedback, and transfer into real work."], diff --git a/src/validate.mjs b/src/validate.mjs index 06684eb..765520c 100644 --- a/src/validate.mjs +++ b/src/validate.mjs @@ -16,7 +16,7 @@ function localMarkdownLinks(markdown) { ); } -export function validateCatalog(packageRoot, expectedCount = 34) { +export function validateCatalog(packageRoot, expectedCount = 35) { const errors = []; let catalog = []; try { diff --git a/test/cli-args.test.mjs b/test/cli-args.test.mjs index 558244b..7744359 100644 --- a/test/cli-args.test.mjs +++ b/test/cli-args.test.mjs @@ -48,5 +48,5 @@ test("the bundled catalog is structurally valid", () => { const packageRoot = resolve(fileURLToPath(new URL("..", import.meta.url))); const result = validateCatalog(packageRoot); assert.deepEqual(result.errors, []); - assert.equal(result.catalog.length, 34); + assert.equal(result.catalog.length, 35); }); diff --git a/test/helper-assets.test.mjs b/test/helper-assets.test.mjs index 68c0e2d..a76359f 100644 --- a/test/helper-assets.test.mjs +++ b/test/helper-assets.test.mjs @@ -1,9 +1,10 @@ import assert from "node:assert/strict"; -import { existsSync } from "node:fs"; +import { existsSync, mkdtempSync, readFileSync, rmSync } from "node:fs"; import { dirname, join } from "node:path"; import { spawnSync } from "node:child_process"; import test from "node:test"; import { fileURLToPath } from "node:url"; +import { tmpdir } from "node:os"; const root = join(dirname(fileURLToPath(import.meta.url)), ".."); const powershellGuard = join( @@ -27,6 +28,20 @@ const powershellWizard = join( "assets", "wizard-template.ps1" ); +const diagramExporter = join( + root, + "skills", + "uipath-diagram-design", + "scripts", + "export_diagram.py" +); +const diagramExample = join( + root, + "skills", + "uipath-diagram-design", + "assets", + "example-solution-architecture.html" +); function availableCommand(candidates, args) { return candidates.find((command) => spawnSync(command, args, { encoding: "utf8" }).status === 0); @@ -38,6 +53,7 @@ const powershell = availableCommand(["pwsh", "powershell"], [ "$PSVersionTable.PSVersion.ToString()" ]); const bash = availableCommand(["bash"], ["--version"]); +const python = availableCommand(["python3", "python"], ["--version"]); function powershellArguments(...args) { return ["-NoProfile", ...(process.platform === "win32" ? ["-ExecutionPolicy", "Bypass"] : []), ...args]; @@ -95,3 +111,24 @@ test("Bash guard parses", { skip: !bash }, () => { const result = spawnSync(bash, ["-n", bashGuard], { encoding: "utf8" }); assert.equal(result.status, 0, result.stderr); }); + +test("diagram exporter extracts the example SVG without third-party packages", { skip: !python }, () => { + const outputDirectory = mkdtempSync(join(tmpdir(), "uipath-diagram-export-")); + try { + const result = spawnSync( + python, + [diagramExporter, diagramExample, "--svg", "--output-dir", outputDirectory], + { encoding: "utf8" } + ); + assert.equal(result.status, 0, result.stderr); + const exported = join(outputDirectory, "example-solution-architecture.svg"); + assert.equal(existsSync(exported), true); + const svg = readFileSync(exported, "utf8"); + assert.match(svg, /^ { const claudePlugin = readJson(".claude-plugin/plugin.json"); assert.equal(packageJson.name, "uipath-boost"); - assert.equal(packageJson.version, "0.2.0"); + assert.equal(packageJson.version, "0.3.0"); assert.equal(packageLock.version, packageJson.version); assert.equal(packageLock.packages[""].version, packageJson.version); assert.equal(codexPlugin.version, packageJson.version); @@ -26,6 +26,7 @@ test("package and plugin release metadata stay aligned", () => { ".codex-plugin/", ".claude-plugin/", "ACKNOWLEDGMENTS.md", + "THIRD_PARTY_LICENSES.md", "CHANGELOG.md" ]) { assert.ok(packageJson.files.includes(packagedPath), `${packagedPath} must ship in npm package`); diff --git a/test/skill-contracts.test.mjs b/test/skill-contracts.test.mjs index 7db7aaa..ff025bb 100644 --- a/test/skill-contracts.test.mjs +++ b/test/skill-contracts.test.mjs @@ -9,7 +9,7 @@ const packageRoot = resolve(fileURLToPath(new URL("..", import.meta.url))); const catalog = loadCatalog(packageRoot); test("every skill has an exhaustive behavioral contract", () => { - assert.equal(Object.keys(SKILL_CONTRACTS).length, 34); + assert.equal(Object.keys(SKILL_CONTRACTS).length, 35); assert.deepEqual( Object.keys(SKILL_CONTRACTS).sort(), catalog.map((skill) => skill.name).sort() @@ -27,10 +27,10 @@ test("every skill has an exhaustive behavioral contract", () => { } }); -test("the approved invocation split is 15 user and 19 model skills", () => { +test("the approved invocation split is 15 user and 20 model skills", () => { assert.equal(USER_INVOKED_SKILLS.length, 15); assert.equal( Object.values(SKILL_CONTRACTS).filter((contract) => contract.invocation === "model").length, - 19 + 20 ); });