@uipath/skills 1.200.0 → 1.201.0-preview.433

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.cursor-plugin/plugin.json +32 -0
  4. package/CODEOWNERS +25 -4
  5. package/README.md +1 -0
  6. package/assets/skill-status.json +8 -0
  7. package/assets/uip-catalog-snapshot.json +113 -41
  8. package/assets/uipath-icon.png +0 -0
  9. package/commands/install-permissions.md +1 -0
  10. package/package.json +3 -2
  11. package/skills/uipath-admin/SKILL.md +1 -1
  12. package/skills/uipath-admin/references/authorization/permission-catalog.md +61 -1
  13. package/skills/uipath-admin/references/authorization/role-management.md +3 -1
  14. package/skills/uipath-admin/references/diagnose/references/failure-modes.md +29 -4
  15. package/skills/uipath-admin/references/diagnose/references/troubleshooting-guide.md +13 -0
  16. package/skills/uipath-agents/SKILL.md +1 -0
  17. package/skills/uipath-agents/references/coded/capabilities/context-grounding.md +3 -3
  18. package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails-recommend.md +6 -1
  19. package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails.md +89 -1
  20. package/skills/uipath-agents/references/coded/embedding-in-flows.md +17 -1
  21. package/skills/uipath-agents/references/coded/frameworks/llamaindex-integration.md +64 -2
  22. package/skills/uipath-agents/references/coded/lifecycle/deployment.md +3 -0
  23. package/skills/uipath-agents/references/coded/lifecycle/environment-variables.md +90 -0
  24. package/skills/uipath-agents/references/coded/lifecycle/file-sync.md +3 -1
  25. package/skills/uipath-agents/references/coded/quickstart.md +10 -6
  26. package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails-recommend.md +20 -5
  27. package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails.md +13 -0
  28. package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +1 -3
  29. package/skills/uipath-api-workflow/references/operating-published-workflows.md +17 -6
  30. package/skills/uipath-automationhub/SKILL.md +58 -0
  31. package/skills/uipath-automationhub/references/api-endpoints.md +140 -0
  32. package/skills/uipath-automationhub/references/get-process.md +69 -0
  33. package/skills/uipath-automationhub/references/publish-process.md +171 -0
  34. package/skills/uipath-coded-apps/SKILL.md +24 -11
  35. package/skills/uipath-coded-apps/references/commands-reference.md +29 -29
  36. package/skills/uipath-coded-apps/references/create-action-app.md +4 -0
  37. package/skills/uipath-coded-apps/references/create-web-app.md +10 -0
  38. package/skills/uipath-coded-apps/references/debug.md +16 -0
  39. package/skills/uipath-coded-apps/references/oauth-client-setup.md +3 -1
  40. package/skills/uipath-coded-apps/references/oauth-scopes.md +39 -4
  41. package/skills/uipath-coded-apps/references/pack-publish-deploy.md +37 -21
  42. package/skills/uipath-coded-apps/references/sdk/conversational-agent.md +2 -0
  43. package/skills/uipath-coded-apps/references/sdk/data-fabric.md +2 -0
  44. package/skills/uipath-coded-apps/references/sdk/orchestrator.md +2 -0
  45. package/skills/uipath-coded-apps/references/widgets/conversational-agent-chat.md +90 -0
  46. package/skills/uipath-coded-apps/references/widgets/datatable.md +97 -0
  47. package/skills/uipath-coded-apps/references/widgets/external-auth.md +97 -0
  48. package/skills/uipath-coded-apps/references/widgets/multi-file-upload.md +98 -0
  49. package/skills/uipath-coded-apps/references/widgets/pdf-viewer.md +122 -0
  50. package/skills/uipath-coded-apps/references/widgets/validation-station.md +1 -1
  51. package/skills/uipath-functions/SKILL.md +11 -0
  52. package/skills/uipath-insights/SKILL.md +52 -247
  53. package/skills/uipath-insights/references/filter-discovery-guide.md +106 -0
  54. package/skills/uipath-insights/references/investigation-playbook-guide.md +24 -16
  55. package/skills/uipath-insights/references/jobs-commands-guide.md +196 -53
  56. package/skills/uipath-ixp/SKILL.md +10 -4
  57. package/skills/uipath-ixp/references/cli-reference.md +59 -5
  58. package/skills/uipath-ixp/references/label-documents-guide.md +12 -5
  59. package/skills/uipath-maestro-bpmn/SKILL.md +27 -9
  60. package/skills/uipath-maestro-bpmn/references/diagnose/references/failure-modes.md +6 -3
  61. package/skills/uipath-maestro-bpmn/references/operate/CAPABILITY.md +1 -1
  62. package/skills/uipath-maestro-bpmn/references/operate/references/ship.md +9 -3
  63. package/skills/uipath-maestro-bpmn/references/registry-workflow.md +1 -1
  64. package/skills/uipath-maestro-bpmn/references/shared/local-metadata-regeneration-guide.md +18 -11
  65. package/skills/uipath-maestro-bpmn/references/structural-bpmn.md +13 -7
  66. package/skills/uipath-maestro-case/SKILL.md +138 -170
  67. package/skills/uipath-maestro-case/references/bindings-and-expressions.md +14 -1
  68. package/skills/uipath-maestro-case/references/bindings-v2-sync.md +25 -1
  69. package/skills/uipath-maestro-case/references/brownfield.md +7 -3
  70. package/skills/uipath-maestro-case/references/case-commands.md +63 -8
  71. package/skills/uipath-maestro-case/references/case-editing-operations.md +11 -8
  72. package/skills/uipath-maestro-case/references/case-schema.md +5 -3
  73. package/skills/uipath-maestro-case/references/case-spec-input-details.md +4 -0
  74. package/skills/uipath-maestro-case/references/connector-integration.md +3 -1
  75. package/skills/uipath-maestro-case/references/connector-trigger-impl.md +236 -0
  76. package/skills/uipath-maestro-case/references/connector-trigger-planning.md +300 -0
  77. package/skills/uipath-maestro-case/references/entry-points-sync.md +2 -0
  78. package/skills/uipath-maestro-case/references/evals/evals.json +33 -40
  79. package/skills/uipath-maestro-case/references/implementation.md +58 -13
  80. package/skills/uipath-maestro-case/references/phased-execution.md +87 -20
  81. package/skills/uipath-maestro-case/references/placeholder-tasks.md +3 -1
  82. package/skills/uipath-maestro-case/references/planning.md +26 -16
  83. package/skills/uipath-maestro-case/references/plugins/case/impl-json.md +2 -5
  84. package/skills/uipath-maestro-case/references/plugins/case/planning.md +3 -1
  85. package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/impl-json.md +3 -1
  86. package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/planning.md +5 -3
  87. package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/impl-json.md +4 -2
  88. package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/planning.md +6 -4
  89. package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/impl-json.md +6 -4
  90. package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/planning.md +6 -4
  91. package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/impl-json.md +42 -3
  92. package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/planning.md +6 -4
  93. package/skills/uipath-maestro-case/references/plugins/logging/impl-json.md +50 -32
  94. package/skills/uipath-maestro-case/references/plugins/sla/impl-json.md +2 -4
  95. package/skills/uipath-maestro-case/references/plugins/sla/planning.md +3 -1
  96. package/skills/uipath-maestro-case/references/plugins/stages/impl-json.md +1 -4
  97. package/skills/uipath-maestro-case/references/plugins/stages/planning.md +2 -0
  98. package/skills/uipath-maestro-case/references/plugins/tasks/action/impl-json.md +2 -0
  99. package/skills/uipath-maestro-case/references/plugins/tasks/action/planning.md +2 -0
  100. package/skills/uipath-maestro-case/references/plugins/tasks/agent/impl-json.md +2 -0
  101. package/skills/uipath-maestro-case/references/plugins/tasks/agent/planning.md +2 -0
  102. package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/impl-json.md +2 -0
  103. package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/planning.md +5 -3
  104. package/skills/uipath-maestro-case/references/plugins/tasks/case-management/impl-json.md +2 -0
  105. package/skills/uipath-maestro-case/references/plugins/tasks/case-management/planning.md +2 -0
  106. package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/impl-json.md +43 -13
  107. package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/planning.md +4 -2
  108. package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/impl-json.md +10 -7
  109. package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/planning.md +5 -3
  110. package/skills/uipath-maestro-case/references/plugins/tasks/create-inline-common.md +3 -1
  111. package/skills/uipath-maestro-case/references/plugins/tasks/process/impl-json.md +2 -0
  112. package/skills/uipath-maestro-case/references/plugins/tasks/process/planning.md +2 -0
  113. package/skills/uipath-maestro-case/references/plugins/tasks/rpa/impl-json.md +2 -0
  114. package/skills/uipath-maestro-case/references/plugins/tasks/rpa/planning.md +2 -0
  115. package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/impl-json.md +2 -0
  116. package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/planning.md +2 -0
  117. package/skills/uipath-maestro-case/references/plugins/triggers/event/impl-json.md +9 -6
  118. package/skills/uipath-maestro-case/references/plugins/triggers/event/planning.md +5 -3
  119. package/skills/uipath-maestro-case/references/plugins/triggers/manual/impl-json.md +1 -4
  120. package/skills/uipath-maestro-case/references/plugins/triggers/manual/planning.md +2 -0
  121. package/skills/uipath-maestro-case/references/plugins/triggers/timer/impl-json.md +1 -4
  122. package/skills/uipath-maestro-case/references/plugins/triggers/timer/planning.md +2 -0
  123. package/skills/uipath-maestro-case/references/plugins/variables/bindings/impl-json.md +3 -1
  124. package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +40 -2
  125. package/skills/uipath-maestro-case/references/plugins/variables/global-vars/planning.md +12 -2
  126. package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +8 -6
  127. package/skills/uipath-maestro-case/references/plugins/variables/io-binding/planning.md +17 -3
  128. package/skills/uipath-maestro-case/references/registry-discovery.md +9 -5
  129. package/skills/uipath-maestro-case/references/sla-response-shapes.md +3 -1
  130. package/skills/uipath-maestro-case/references/troubleshooting-guide.md +2 -0
  131. package/skills/uipath-maestro-case/scripts/audit_plan.py +231 -0
  132. package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +8 -4
  133. package/skills/uipath-maestro-flow/references/author/references/editing-operations-cli.md +5 -3
  134. package/skills/uipath-maestro-flow/references/author/references/editing-operations-json.md +14 -4
  135. package/skills/uipath-maestro-flow/references/author/references/editing-operations.md +3 -3
  136. package/skills/uipath-maestro-flow/references/author/references/greenfield.md +12 -3
  137. package/skills/uipath-maestro-flow/references/author/references/planning-arch.md +17 -13
  138. package/skills/uipath-maestro-flow/references/author/references/planning-impl.md +1 -1
  139. package/skills/uipath-maestro-flow/references/author/references/plugins/agent/impl.md +49 -4
  140. package/skills/uipath-maestro-flow/references/author/references/plugins/connector/impl.md +59 -17
  141. package/skills/uipath-maestro-flow/references/author/references/plugins/connector-trigger/impl.md +3 -3
  142. package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl-connector.md +3 -1
  143. package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl-manual.md +3 -1
  144. package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl.md +5 -2
  145. package/skills/uipath-maestro-flow/references/author/references/plugins/inline-agent/impl.md +31 -16
  146. package/skills/uipath-maestro-flow/references/author/references/plugins/ixp/impl.md +13 -4
  147. package/skills/uipath-maestro-flow/references/author/references/plugins/loop/impl.md +185 -25
  148. package/skills/uipath-maestro-flow/references/author/references/plugins/loop/planning.md +18 -10
  149. package/skills/uipath-maestro-flow/references/author/references/plugins/rpa/impl.md +9 -3
  150. package/skills/uipath-maestro-flow/references/author/references/plugins/terminate/impl.md +6 -3
  151. package/skills/uipath-maestro-flow/references/diagnose/references/failure-modes.md +68 -0
  152. package/skills/uipath-maestro-flow/references/shared/cli-commands.md +2 -1
  153. package/skills/uipath-maestro-flow/references/shared/file-format.md +36 -9
  154. package/skills/uipath-maestro-flow/references/shared/node-output-wiring.md +1 -1
  155. package/skills/uipath-maestro-flow/references/shared/ux-narration-and-todos.md +1 -1
  156. package/skills/uipath-maestro-flow/references/shared/variables-and-expressions.md +77 -20
  157. package/skills/uipath-planner/SKILL.md +30 -12
  158. package/skills/{uipath-maestro-case/assets/templates/sdd-template-examples.md → uipath-planner/assets/templates/case-sdd-examples.md} +18 -32
  159. package/skills/uipath-planner/assets/templates/case-sdd-template.md +289 -309
  160. package/skills/uipath-planner/references/case-design-lane-guide.md +288 -0
  161. package/skills/uipath-planner/references/multi-skill-patterns-guide.md +1 -1
  162. package/skills/uipath-planner/references/package-selection-guide.md +2 -2
  163. package/skills/uipath-planner/references/pdd-driven-lane-guide.md +5 -1
  164. package/skills/uipath-planner/references/product-selection-guide.md +2 -2
  165. package/skills/uipath-planner/references/sdd-generation-guide.md +16 -15
  166. package/skills/uipath-planner/scripts/audit_sdd.py +437 -0
  167. package/skills/uipath-platform/SKILL.md +7 -2
  168. package/skills/uipath-platform/references/data-fabric/choice-sets.md +1 -1
  169. package/skills/uipath-platform/references/data-fabric/data-fabric.md +1 -1
  170. package/skills/uipath-platform/references/data-fabric/entity-schema.md +37 -21
  171. package/skills/uipath-platform/references/data-fabric/file-attachments.md +1 -1
  172. package/skills/uipath-platform/references/guardrails/byo-configurations.md +205 -0
  173. package/skills/uipath-platform/references/traces/feedback.md +4 -2
  174. package/skills/uipath-platform/references/uip-commands.md +2 -2
  175. package/skills/uipath-review/SKILL.md +55 -52
  176. package/skills/uipath-review/references/agents/agent-grading-rubric.md +62 -40
  177. package/skills/uipath-review/references/agents/agents-coded-rules.md +7 -1
  178. package/skills/uipath-review/references/agents/agents-lowcode-rules.md +21 -2
  179. package/skills/uipath-review/references/agents/guardrails/coded-guardrails-review.md +78 -13
  180. package/skills/uipath-review/references/agents/guardrails/guardrails-review.md +11 -4
  181. package/skills/uipath-review/references/architecture-assessment-guide.md +1 -1
  182. package/skills/uipath-review/references/review-workflow-guide.md +19 -10
  183. package/skills/uipath-review/references/rule-catalog-workflow.md +6 -6
  184. package/skills/uipath-review/references/rule-format.md +1 -1
  185. package/skills/uipath-rpa/SKILL.md +1 -1
  186. package/skills/uipath-solution/SKILL.md +4 -4
  187. package/skills/uipath-solution/references/solution-overview.md +7 -2
  188. package/skills/uipath-tasks/SKILL.md +27 -1
  189. package/skills/uipath-tasks/references/task-catalogs.md +79 -0
  190. package/skills/uipath-tasks/references/task-data.md +45 -0
  191. package/skills/uipath-tasks/references/task-metadata.md +69 -0
  192. package/skills/uipath-test/SKILL.md +3 -3
  193. package/skills/uipath-test/references/test-result-report-guide.md +16 -1
  194. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/ambiguous-selector.md +1 -1
  195. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/scope-container-wrong-page.md +1 -1
  196. package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/verify-execution-failure.md +2 -2
  197. package/skills/uipath-troubleshoot/references/products/agents/playbooks/guardrail-violation.md +12 -0
  198. package/version-manifest.json +2 -2
  199. package/skills/uipath-maestro-case/assets/templates/sdd-template.md +0 -667
  200. package/skills/uipath-maestro-case/references/connector-trigger-common.md +0 -511
  201. package/skills/uipath-maestro-case/references/phase-0-interview.md +0 -279
  202. package/skills/uipath-maestro-case/references/sdd-generation-rules.md +0 -1026
  203. package/skills/uipath-review/references/agents/agent-common-issues.md +0 -401
  204. package/skills/uipath-review/references/agents/agent-review-checklist.md +0 -379
  205. /package/skills/{uipath-maestro-case → uipath-planner}/assets/templates/sdd-viewer.html +0 -0
@@ -0,0 +1,97 @@
1
+ # External Auth Widget
2
+
3
+ Provider-agnostic React **sign-in screen**: renders one "Continue with {Provider}" button per configured authentication provider and starts the login **directly at that provider's IdP**. Ships a built-in OIDC authorization-code redirect (CSRF `state` + PKCE) enabled per provider via an `oauth` config; a per-provider `onSignIn` handler always wins over it.
4
+
5
+ Package: [`@uipath/ui-widgets-external-auth`](https://www.npmjs.com/package/@uipath/ui-widgets-external-auth). Full prop/API surface lives in the package README — this file covers only the integration steps that are easy to get wrong inside a Coded App.
6
+
7
+ > **Publish status:** this package is newer than the other widgets. Before recommending it, verify it resolves: `npm view @uipath/ui-widgets-external-auth version`. On a 404 the package is not yet on the public registry — tell the user instead of inventing an install path.
8
+
9
+ ## When to Use
10
+
11
+ - The coded app is a **user-facing portal whose end users sign in with external identity providers** (Google, UAE PASS, a corporate SAML IdP) — the widget is the front-door sign-in screen.
12
+ - **NOT for signing in to UiPath.** Coded web apps authenticate to UiPath Cloud via the built-in OAuth-PKCE flow (`useAuth()` / `sdk.initialize()` — see [../create-web-app.md](../create-web-app.md)); action apps use the host-injected session. Never replace those with this widget.
13
+
14
+ ## Critical Rules
15
+
16
+ 1. **This widget only STARTS the login.** Everything after the browser leaves the page — the callback route, `state`/PKCE verification, code→token exchange, session creation — is the app's (or its backend's) responsibility. Rendering the widget without building the callback side yields a sign-in that goes nowhere.
17
+ 2. **Each provider needs `onSignIn` or `oauth`** (`onSignIn` wins when both are set). With neither, the button click logs a console warning and does nothing.
18
+ 3. **The built-in default covers OIDC-style providers only.** It builds an authorization-code redirect with CSRF `state` and PKCE, then navigates to the provider. **SAML cannot be started from the browser** — SAML providers must use `onSignIn` pointing at a backend Service Provider route (e.g. `window.location.assign('/auth/saml/login?connection=' + clientId)`).
19
+ 4. **The callback route must read the persisted `state`/`codeVerifier`.** The built-in redirect stores them in `sessionStorage` under `uipath-external-auth:oauth:<clientId>` — verify `state` matches and send `codeVerifier` in the token exchange.
20
+ 5. **Never put a provider client secret in the app.** The flow is a public-client authorization-code + PKCE redirect; secret-bearing exchanges belong on a backend.
21
+ 6. **No UiPath scopes needed.** The widget makes no UiPath API calls, so it adds nothing to the `scope` field in `uipath.json`. (It still peer-depends on `@uipath/uipath-typescript` for telemetry.)
22
+ 7. **Import the stylesheet once**: `import '@uipath/ui-widgets-external-auth/ExternalAuth.css'`. Body needs `light` or `dark` class. Peers: `react >= 19.2.0`, `react-dom >= 19.2.0`, `@uipath/uipath-typescript >= 1.4.1`.
23
+ 8. **Redirect URIs must be registered at the provider.** The `oauth.redirectUri` you pass must exactly match a redirect URI configured in the provider's console (per environment — local dev vs deployed app URL).
24
+
25
+ ## Install
26
+
27
+ From inside the scaffolded app directory (after the publish check above):
28
+
29
+ ```bash
30
+ npm install @uipath/ui-widgets-external-auth --@uipath:registry=https://registry.npmjs.org
31
+ ```
32
+
33
+ Registry flag forces the public npm registry (skill default — users may have `@uipath` scoped to GitHub Packages).
34
+
35
+ ## Key Props
36
+
37
+ | Prop | Required | Notes |
38
+ |------|----------|-------|
39
+ | `authProviders` | Yes | `AuthProvider[]` — one button per entry, rendered in order. |
40
+ | `title` | No | Heading (default "Sign in to your account"). |
41
+
42
+ `AuthProvider`:
43
+
44
+ | Field | Required | Notes |
45
+ |-------|----------|-------|
46
+ | `displayName` | Yes | Button label — `"Google"` renders "Continue with Google". |
47
+ | `clientId` | Yes | Opaque to the widget; passed back to `onSignIn` and used by the `oauth` default. |
48
+ | `displayIcon` | No | String → `<img src>`; anything else (inline SVG element) renders as-is. |
49
+ | `onSignIn` | No* | `(clientId) => void \| Promise<void>` — always wins; required for non-OIDC (SAML). |
50
+ | `oauth` | No* | `OAuthRedirectConfig` — enables the built-in OIDC redirect when `onSignIn` is omitted. |
51
+
52
+ `OAuthRedirectConfig`: `authorizeUrl` + `redirectUri` + `scopes` (required); `responseType` (default `code`), `usePkce` (default `true`), `extraParams` (e.g. `{ acr_values: '...' }` for UAE PASS).
53
+
54
+ Also exported: `buildOAuthAuthorizeUrl(clientId, config)` and `createDefaultSignIn(config)` for composing custom handlers.
55
+
56
+ ## Integration
57
+
58
+ ```typescript
59
+ import { ExternalAuth } from '@uipath/ui-widgets-external-auth';
60
+ import '@uipath/ui-widgets-external-auth/ExternalAuth.css';
61
+
62
+ function SignInPage() {
63
+ return (
64
+ <ExternalAuth
65
+ authProviders={[
66
+ {
67
+ displayName: 'Google',
68
+ clientId: '<GOOGLE_CLIENT_ID>',
69
+ oauth: {
70
+ authorizeUrl: 'https://accounts.google.com/o/oauth2/v2/auth',
71
+ redirectUri: `${window.location.origin}/auth/google/callback`,
72
+ scopes: 'openid email profile',
73
+ },
74
+ },
75
+ {
76
+ displayName: 'Corporate SSO',
77
+ clientId: '<SAML_CONNECTION_ID>',
78
+ onSignIn: (clientId) =>
79
+ window.location.assign(`/auth/saml/login?connection=${clientId}`),
80
+ },
81
+ ]}
82
+ />
83
+ );
84
+ }
85
+ ```
86
+
87
+ Callback route sketch (the part the widget does NOT do): parse `code` + `state` from the query string → load `sessionStorage['uipath-external-auth:oauth:<clientId>']` → verify `state` → POST the token exchange (with `codeVerifier`) from your backend → create the app session → clean up the storage entry.
88
+
89
+ > Deployed coded apps mount at a non-root prefix — build `redirectUri` and the callback route path with `getAppBase()` from `@uipath/uipath-typescript` (skill Critical Rule 10), and register the resulting absolute URL at the provider.
90
+
91
+ ## Anti-patterns
92
+
93
+ - **Do not use this widget to sign in to UiPath Cloud** — that is the scaffold's built-in PKCE flow (`useAuth()`), not an external provider button.
94
+ - **Do not expect the widget to complete the login** — it only starts the redirect; without your callback route, nothing signs in.
95
+ - **Do not start SAML from the browser via `oauth`** — SAML requires a backend-initiated flow through `onSignIn`.
96
+ - **Do not embed provider client secrets** in app code or `oauth` config — public client + PKCE only; exchanges needing a secret run on a backend.
97
+ - **Do not configure a provider with neither `onSignIn` nor `oauth`** — the button becomes a silent no-op.
@@ -0,0 +1,98 @@
1
+ # Multi-File Upload Widget
2
+
3
+ React widget that uploads multiple files concurrently to an **Orchestrator Storage Bucket** — drag-and-drop, file-type/size validation, per-file error tracking, partial-success handling.
4
+
5
+ Package: [`@uipath/ui-widgets-multi-file-upload`](https://www.npmjs.com/package/@uipath/ui-widgets-multi-file-upload). Full prop/API surface lives in the package README — this file covers only the integration steps that are easy to get wrong inside a Coded App.
6
+
7
+ > **Publish status — check the peer range first:** `npm view @uipath/ui-widgets-multi-file-upload version peerDependencies`. The published **1.0.0** pins `@uipath/uipath-typescript@1.1.1` **exactly** and is runtime-broken on SDK >= 1.5: `npm install` fails with ERESOLVE, and forcing it in fails at upload time with `telemetryClient.track is not a function` (the widget calls a telemetry API removed from newer SDKs). It also cannot coexist with the chat widget (peer `^1.5.5`) in one app. Until a version with peer `^1.4.1` ships, install a tarball built from the `uipath-ui-widgets` repo, or hand-roll the upload via `Buckets.uploadFile()` and say why.
8
+
9
+ ## When to Use
10
+
11
+ - User asks to **upload files/documents** from the app into a storage bucket (e.g., feeding a DU or RPA pipeline's input folder).
12
+ - Replaces a hand-rolled `<input type="file">` + `Buckets.uploadFile()` loop — the widget already handles concurrency, validation, retry-of-failed, and error display.
13
+ - To *display* an uploaded PDF afterwards, pair with the PDF Viewer widget ([pdf-viewer.md](pdf-viewer.md)).
14
+
15
+ ## Critical Rules
16
+
17
+ 1. **Peer versions are hard requirements.** `react >= 19.2.0`, `react-dom >= 19.2.0`, `@uipath/uipath-typescript >= 1.4.1` — the SDK floor applies to widget versions **newer than 1.0.0**; see the publish-status warning above.
18
+ 2. **Import the stylesheet once**: `import '@uipath/ui-widgets-multi-file-upload/MultiFileUpload.css'`. Body needs `light` or `dark` class.
19
+ 3. **Required scope: `OR.Buckets`** — upload is a write; read-only `OR.Buckets.Read` is insufficient. Add to the `scope` field in `uipath.json` before first run; mismatch fails with 401/403. See [../oauth-scopes.md](../oauth-scopes.md).
20
+ 4. **`bucketId` and `folderId` are numbers.** `folderId` is the Orchestrator folder containing the bucket — a numeric id, **not** the folder GUID (`folderKey`). At runtime resolve via `new Buckets(sdk).getAll({ folderId })`; never `parseInt(folderKey)` (bridge via [Bridging folderKey ↔ folderId](../sdk/orchestrator.md#bridging-folderkey--folderid)). CLI lookup: bucket ids via `uip or buckets list --all-folders --output json` (`Id` field); the numeric folder id via `uip or folders get <FOLDER_KEY_OR_PATH> --output json` → `Data.Id` — `folders list` returns only GUID `Key`s, and `folders get` 404s for personal workspaces (resolve those at runtime instead).
21
+ 5. **Handle BOTH callbacks — partial success is a first-class outcome.** `onUploadSuccess(files)` receives **only the files that uploaded**; failed files stay in the list (with per-file errors) for the user to retry. `onUploadError` fires when the whole batch fails. Wiring only `onUploadSuccess` hides partial failures from your app logic.
22
+ 6. **Reuse the app's initialized `UiPath` instance** (`useAuth()` in web apps); do not construct a second SDK.
23
+ 7. **No special `vite.config.ts` setup** — no asset plugins or `optimizeDeps` changes needed.
24
+
25
+ ## Install
26
+
27
+ From inside the scaffolded app directory:
28
+
29
+ ```bash
30
+ npm install @uipath/ui-widgets-multi-file-upload --@uipath:registry=https://registry.npmjs.org
31
+ ```
32
+
33
+ Registry flag forces the public npm registry (skill default — users may have `@uipath` scoped to GitHub Packages).
34
+
35
+ ## Key Props
36
+
37
+ | Prop | Required | Notes |
38
+ |------|----------|-------|
39
+ | `sdk` | Yes | Initialized `UiPath` instance from `useAuth()`. |
40
+ | `bucketId` | Yes | Numeric storage bucket id. |
41
+ | `folderId` | Yes | Numeric id of the folder containing the bucket. |
42
+ | `path` | No | Key prefix for uploads (e.g. `"uploads/"` — trailing slash added if missing). |
43
+ | `accept` | No | Comma-separated extensions/MIME types (standard HTML `accept` semantics). |
44
+ | `maxFileSizeInMb` | No | Per-file size cap; oversize files are rejected client-side. |
45
+ | `onUploadSuccess` | No | `(uploadedFiles: File[]) => void` — successful files only (may be a subset). |
46
+ | `onUploadError` | No | `(error: Error) => void` — whole-batch failure. |
47
+
48
+ ## Integration: Web App
49
+
50
+ Upload into a bucket and refresh a listing on success:
51
+
52
+ ```typescript
53
+ import { MultiFileUpload } from '@uipath/ui-widgets-multi-file-upload';
54
+ import '@uipath/ui-widgets-multi-file-upload/MultiFileUpload.css';
55
+ import { Buckets } from '@uipath/uipath-typescript/buckets';
56
+ import { useCallback, useMemo } from 'react';
57
+ import { useAuth } from '../hooks/useAuth';
58
+
59
+ function UploadPage({ bucketId, folderId }: { bucketId: number; folderId: number }) {
60
+ const { sdk } = useAuth();
61
+ const buckets = useMemo(() => new Buckets(sdk), [sdk]);
62
+
63
+ const refresh = useCallback(async () => {
64
+ const page = await buckets.getFiles(bucketId, { folderId });
65
+ // render page.items (filter out f.isDirectory); loop cursor for full listings
66
+ }, [buckets, bucketId, folderId]);
67
+
68
+ return (
69
+ <MultiFileUpload
70
+ sdk={sdk}
71
+ bucketId={bucketId}
72
+ folderId={folderId}
73
+ path="uploads/"
74
+ accept=".pdf,.png,.jpg"
75
+ maxFileSizeInMb={10}
76
+ onUploadSuccess={refresh}
77
+ onUploadError={(e) => console.error('Upload failed:', e)} // surface in your UI
78
+ />
79
+ );
80
+ }
81
+
82
+ export default UploadPage;
83
+ ```
84
+
85
+ Resolve a bucket id by name:
86
+
87
+ ```typescript
88
+ const page = await new Buckets(sdk).getAll({ folderId });
89
+ const bucket = page.items.find((b) => b.name === 'Invoices');
90
+ ```
91
+
92
+ ## Anti-patterns
93
+
94
+ - **Do not hand-roll a multi-file upload loop over `Buckets.uploadFile()`** when this widget fits.
95
+ - **Do not pass a folder GUID as `folderId`** — it is the numeric Orchestrator folder id.
96
+ - **Do not wire only `onUploadSuccess`** — partial failures keep files in the list silently unless your app also reacts (`onUploadError` fires only when *all* files fail; per-file errors render inside the widget).
97
+ - **Do not assume the callback means "all selected files uploaded"** — `uploadedFiles` may be a subset; compare against what the user selected if completeness matters.
98
+ - **Do not ship with `OR.Buckets.Read`** — uploads need the full `OR.Buckets` scope.
@@ -0,0 +1,122 @@
1
+ # PDF Viewer Widget
2
+
3
+ React PDF viewer for coded apps. Renders PDFs from **Orchestrator Storage Buckets**, **Data Fabric entity attachments**, or plain **URLs/Blobs** — toolbar (pagination, zoom, rotate, download), selectable text, password-protected PDFs, built-in loading/error states. Built on react-pdf (Mozilla pdf.js) with the worker **shipped inside the package** — no CDN, works behind the enterprise CSP on `*.uipath.host`.
4
+
5
+ Package: [`@uipath/ui-widgets-pdf-viewer`](https://www.npmjs.com/package/@uipath/ui-widgets-pdf-viewer). Full prop/API surface lives in the package README — this file covers only the integration steps that are easy to get wrong inside a Coded App.
6
+
7
+ > **Publish status:** this package is newer than the other widgets. Before recommending it, verify it resolves: `npm view @uipath/ui-widgets-pdf-viewer version`. On a 404 the package is not yet on the public registry — tell the user and fall back to the hand-rolled react-pdf pattern in [create-action-app.md § PDF viewer](../create-action-app.md#pdf-viewer-when-displaying-pdf-documents) rather than inventing an install path. Do **not** fall back to `<iframe>`/`<embed>`/`<object>` PDF tags — Action Center loads coded apps in a sandboxed iframe whose CSP blocks browser-native PDF rendering, and the react-pdf pattern works in web apps too.
8
+
9
+ ## When to Use
10
+
11
+ - User asks to **display/preview a PDF** stored in a bucket, on a Data Fabric record, or behind a URL — e.g., the document pane beside an approval form in an action app.
12
+ - Replaces hand-rolled react-pdf/pdf.js wiring (worker setup, fetch plumbing, toolbar, password prompts).
13
+ - **Not for Document Understanding validation.** Review/correct DU extraction results → [validation-station.md](validation-station.md) (its viewer adds bounding boxes and field linkage). This widget is display-only.
14
+
15
+ ## Critical Rules
16
+
17
+ 1. **Peer versions are hard requirements.** `react >= 19.2.0`, `react-dom >= 19.2.0`, `@uipath/uipath-typescript >= 1.4.1`.
18
+ 2. **Import the stylesheet once**: `import '@uipath/ui-widgets-pdf-viewer/PdfViewer.css'`. Body needs `light` or `dark` class.
19
+ 3. **One `source` prop, four shapes — the fields you pass select the adapter.** `bucketId` → storage bucket, `entityId` → Data Fabric entity attachment, `url` → direct URL, `data` → pre-fetched `Blob`/`ArrayBuffer`.
20
+ 4. **Bucket sources scope the folder with EXACTLY ONE of** `folderId` (number), `folderKey` (GUID — what coded apps usually have), or `folderPath` (e.g. `"Shared/Finance"`).
21
+ 5. **`sdk` is required for `bucket`/`entity` sources** — pass the app's initialized instance from `useAuth()`. Missing sdk doesn't throw; the widget renders its own error card.
22
+ 6. **Required scopes:** bucket source → `OR.Buckets.Read` (or `OR.Buckets`); entity source → `DataFabric.Data.Read`. `url`/`data` sources need no scopes (for `url`, CORS/same-origin rules apply — the browser fetches it). See [../oauth-scopes.md](../oauth-scopes.md).
23
+ 7. **Never point pdf.js at a CDN worker.** The worker ships in the package and is version-locked to it; the platform CSP blocks external hosts anyway. Production builds need zero config — the worker is emitted as a same-origin asset. **Vite dev needs an `optimizeDeps` PAIR** (pre-bundling rewrites the widget's `import.meta.url` worker resolution):
24
+
25
+ ```typescript
26
+ optimizeDeps: {
27
+ // Keep the widget's import.meta.url intact so its packaged worker resolves.
28
+ exclude: ['@uipath/ui-widgets-pdf-viewer'],
29
+ // REQUIRED with the exclude: the widget imports react-pdf, whose ESM build
30
+ // imports CommonJS deps ('warning') that only interop when pre-bundled.
31
+ // Exclude alone blank-pages the app at module load:
32
+ // "does not provide an export named 'default'".
33
+ include: ['react-pdf'],
34
+ },
35
+ ```
36
+
37
+ Alternative (no exclude): override the worker once at app startup, after importing the widget:
38
+
39
+ ```typescript
40
+ import { pdfjs } from 'react-pdf';
41
+ pdfjs.GlobalWorkerOptions.workerSrc = new URL(
42
+ 'pdfjs-dist/build/pdf.worker.min.mjs',
43
+ import.meta.url,
44
+ ).toString();
45
+ ```
46
+
47
+ Verify by rendering a PDF in dev AND in the built app — a green build does not prove the worker resolves.
48
+ 8. **Inline `source` object literals are safe.** The widget keys sources internally, so a new object per render does NOT retrigger fetches (the classic react-pdf `file`-prop identity trap is solved inside).
49
+ 9. **Non-Latin (CJK) PDFs may render blank glyphs** — v1 does not bundle pdf.js cMap assets. Warn the user if their documents are Chinese/Japanese/Korean.
50
+
51
+ ## Install
52
+
53
+ From inside the scaffolded app directory (after the publish check above):
54
+
55
+ ```bash
56
+ npm install @uipath/ui-widgets-pdf-viewer --@uipath:registry=https://registry.npmjs.org
57
+ ```
58
+
59
+ Registry flag forces the public npm registry (skill default — users may have `@uipath` scoped to GitHub Packages).
60
+
61
+ ## Key Props
62
+
63
+ | Prop | Required | Notes |
64
+ |------|----------|-------|
65
+ | `source` | Yes | `{ bucketId, folderId\|folderKey\|folderPath, path }` \| `{ entityId, recordId, fieldName }` \| `{ url }` \| `{ data }`. |
66
+ | `sdk` | No* | *Required for bucket/entity sources. |
67
+ | `toolbar` | No | Per-feature toggles `pagination`/`zoom`/`rotate`/`download` (all default `true`); disable all four to hide the toolbar. |
68
+ | `fileName` | No | Toolbar label + download filename. |
69
+ | `maxHeight` | No | Canvas max height (default `640`); the canvas scrolls internally — the widget fills its parent's width. |
70
+ | `onLoadSuccess` | No | `({ numPages }) => void`. |
71
+ | `onLoadError` | No | `(error) => void` — fetch or render failure (widget also shows its own error + Retry UI). |
72
+
73
+ ## Integration: Action App (document beside the form)
74
+
75
+ Designed for a narrow split pane beside an approval form — fills its container, scrolls internally, failures stay inside the widget's box:
76
+
77
+ ```typescript
78
+ import { PdfViewer } from '@uipath/ui-widgets-pdf-viewer';
79
+ import '@uipath/ui-widgets-pdf-viewer/PdfViewer.css';
80
+ import { sdk } from '../uipath'; // action app: new UiPath() with host-injected session
81
+
82
+ function DocumentPane({ folderKey, path }: { folderKey: string; path: string }) {
83
+ return (
84
+ <PdfViewer
85
+ sdk={sdk}
86
+ source={{ bucketId: 123, folderKey, path }}
87
+ fileName={path.split('/').pop()}
88
+ maxHeight="100%"
89
+ />
90
+ );
91
+ }
92
+ ```
93
+
94
+ Action apps get `folderId` from `codedActionAppService.getTask()` — `source={{ bucketId, folderId, path }}` works equally; pass whichever folder identifier you already have (rule 4).
95
+
96
+ ## Integration: Web App
97
+
98
+ ```typescript
99
+ import { PdfViewer } from '@uipath/ui-widgets-pdf-viewer';
100
+ import '@uipath/ui-widgets-pdf-viewer/PdfViewer.css';
101
+ import { useAuth } from '../hooks/useAuth';
102
+
103
+ function InvoiceViewer({ entityId, recordId }: { entityId: string; recordId: string }) {
104
+ const { sdk } = useAuth();
105
+
106
+ return (
107
+ <PdfViewer
108
+ sdk={sdk}
109
+ source={{ entityId, recordId, fieldName: 'InvoicePdf' }}
110
+ onLoadError={(e) => console.error('PDF failed:', e)} // widget shows its own error card + Retry
111
+ />
112
+ );
113
+ }
114
+ ```
115
+
116
+ ## Anti-patterns
117
+
118
+ - **Do not configure a CDN `workerSrc`** — CSP blocks it and versions drift; the packaged worker is the supported path.
119
+ - **Do not fetch the PDF yourself for bucket/entity sources** — pass the source descriptor; the widget resolves the read-URI/attachment. If you already hold bytes from another flow, pass them as `{ data }`.
120
+ - **Do not use this widget for DU validation review** — that is [validation-station.md](validation-station.md); this one has no bounding boxes or field editing.
121
+ - **Do not pass two folder identifiers in a bucket source** — exactly one of `folderId`/`folderKey`/`folderPath`.
122
+ - **Do not wrap the viewer in your own loading/error/password UI** — loading, error-with-Retry, empty, and password-prompt states are built in; wire `onLoadError` for logging/telemetry, not for rendering a duplicate error screen.
@@ -17,7 +17,7 @@ If the user just wants a generic form (no DU document), use the standard Action
17
17
  ## Critical Rules
18
18
 
19
19
  1. **Peer versions are hard requirements.** Widget requires `react >= 19.2.0`, `react-dom >= 19.2.0`, `@uipath/uipath-typescript >= 1.4.1`. The Vite scaffold pins React 19.2+, but verify in `package.json` before installing.
20
- 2. **The widget's web component loads its CSS, fonts, and assets at runtime, not at build time.** So `vite.config.ts` must *copy* those files next to the build output (for prod) and *serve them as raw CSS* in dev — use the config under "Static Assets" below. Skip it and you get 404s for PDF/fonts/styling in prod, or icons that render as their names (`warning`, `error`, `circle`) in dev. A green `npm run build` hides both — run the app to confirm.
20
+ 2. **The widget's web component loads its CSS, fonts, and assets at runtime, not at build time.** So `vite.config.ts` must *copy* those files next to the build output (for prod) and *serve them as raw CSS* in dev — use the config under "Static Assets" below. Skip it and most of prod degrades *quietly*: PDF rendering, translations, and styling 404 in the background, and fonts are silently absent even when `fonts.css` itself loads (the font files it references live in `media/`). **Business-rules validation is the exception — it errors outright** (its executor is dynamically `import()`ed from `du-assets/`), so a business-rules error in an app that otherwise renders fine usually means `du-assets/` is missing from the deployment. In dev the tell is icons rendering as their names (`warning`, `error`, `circle`). A green `npm run build` hides all of this — run the app to confirm.
21
21
  3. **Set `optimizeDeps.exclude: ['@uipath/du-validation-station-wc']` in `vite.config.ts`.** Vite's pre-bundler rewrites `import.meta.url` and breaks runtime asset resolution.
22
22
  4. **Body needs `light` or `dark` class** for theming. Match it to the `theme` prop. Action apps already manage this via `onInitTheme` from `CodedActionAppService.getTask()`.
23
23
  5. **`sdk` must already be initialized.** Pass the same `UiPath` instance produced by `useAuth()` (web app) or constructed in `src/uipath.ts` (action app). Do not construct a second SDK just for the widget — auth state will diverge.
@@ -72,6 +72,14 @@ uip function new <name> --language js # JavaScript Function (JS/TS, no job
72
72
 
73
73
  `--empty` skips the hello-world function (JS/TS only).
74
74
 
75
+ **The scaffold follows the installed packages.** With a framework package present in the environment (`uipath-langchain`, `llama-index`, `openai-agents`), `uip function new -l py` emits that framework's **agent** scaffold — `langgraph.json` plus an LLM `main.py` — not a function scaffold. Expected behaviour, not a broken flag. Recovery, in one pass:
76
+
77
+ 1. Delete the framework config (`langgraph.json` and equivalents).
78
+ 2. Replace `main.py` with the function template (Step 3).
79
+ 3. Keep `pyproject.toml`'s `[project]` metadata (Step 5) — swap `dependencies` for what the function needs.
80
+
81
+ Do not re-run `new` with different flag spellings, and do not read CLI or SDK internals to explain the scaffold. Reshape the project and move on.
82
+
75
83
  ### Step 2: Define Function Schema
76
84
 
77
85
  Use typed I/O. The SDK accepts pydantic `BaseModel`, `pydantic.dataclasses.dataclass`, a stdlib `@dataclass`, or a thin class with typed annotations. The shipped samples favor **pydantic** (`BaseModel` in csv-processor, `pydantic.dataclasses.dataclass` in calculator/greeter):
@@ -161,6 +169,7 @@ The key is the entrypoint name — it can be any string and marks this as the ca
161
169
  name = "my-function"
162
170
  version = "0.1.0"
163
171
  description = "..."
172
+ authors = [{ name = "Your Name", email = "you@example.com" }]
164
173
  requires-python = ">=3.11"
165
174
  dependencies = [
166
175
  "uipath",
@@ -169,6 +178,8 @@ dependencies = [
169
178
  ]
170
179
  ```
171
180
 
181
+ `authors` is **required** — without it `uip function pack` rejects the package with `Project authors cannot be empty`.
182
+
172
183
  No `[build-system]` section. The project is identified as a Coded Function by the `functions` map in `uipath.json` (Step 4).
173
184
 
174
185
  ### Step 6: Generate Entry Points