@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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +32 -0
- package/CODEOWNERS +25 -4
- package/README.md +1 -0
- package/assets/skill-status.json +8 -0
- package/assets/uip-catalog-snapshot.json +113 -41
- package/assets/uipath-icon.png +0 -0
- package/commands/install-permissions.md +1 -0
- package/package.json +3 -2
- package/skills/uipath-admin/SKILL.md +1 -1
- package/skills/uipath-admin/references/authorization/permission-catalog.md +61 -1
- package/skills/uipath-admin/references/authorization/role-management.md +3 -1
- package/skills/uipath-admin/references/diagnose/references/failure-modes.md +29 -4
- package/skills/uipath-admin/references/diagnose/references/troubleshooting-guide.md +13 -0
- package/skills/uipath-agents/SKILL.md +1 -0
- package/skills/uipath-agents/references/coded/capabilities/context-grounding.md +3 -3
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails-recommend.md +6 -1
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails.md +89 -1
- package/skills/uipath-agents/references/coded/embedding-in-flows.md +17 -1
- package/skills/uipath-agents/references/coded/frameworks/llamaindex-integration.md +64 -2
- package/skills/uipath-agents/references/coded/lifecycle/deployment.md +3 -0
- package/skills/uipath-agents/references/coded/lifecycle/environment-variables.md +90 -0
- package/skills/uipath-agents/references/coded/lifecycle/file-sync.md +3 -1
- package/skills/uipath-agents/references/coded/quickstart.md +10 -6
- package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails-recommend.md +20 -5
- package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails.md +13 -0
- package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +1 -3
- package/skills/uipath-api-workflow/references/operating-published-workflows.md +17 -6
- package/skills/uipath-automationhub/SKILL.md +58 -0
- package/skills/uipath-automationhub/references/api-endpoints.md +140 -0
- package/skills/uipath-automationhub/references/get-process.md +69 -0
- package/skills/uipath-automationhub/references/publish-process.md +171 -0
- package/skills/uipath-coded-apps/SKILL.md +24 -11
- package/skills/uipath-coded-apps/references/commands-reference.md +29 -29
- package/skills/uipath-coded-apps/references/create-action-app.md +4 -0
- package/skills/uipath-coded-apps/references/create-web-app.md +10 -0
- package/skills/uipath-coded-apps/references/debug.md +16 -0
- package/skills/uipath-coded-apps/references/oauth-client-setup.md +3 -1
- package/skills/uipath-coded-apps/references/oauth-scopes.md +39 -4
- package/skills/uipath-coded-apps/references/pack-publish-deploy.md +37 -21
- package/skills/uipath-coded-apps/references/sdk/conversational-agent.md +2 -0
- package/skills/uipath-coded-apps/references/sdk/data-fabric.md +2 -0
- package/skills/uipath-coded-apps/references/sdk/orchestrator.md +2 -0
- package/skills/uipath-coded-apps/references/widgets/conversational-agent-chat.md +90 -0
- package/skills/uipath-coded-apps/references/widgets/datatable.md +97 -0
- package/skills/uipath-coded-apps/references/widgets/external-auth.md +97 -0
- package/skills/uipath-coded-apps/references/widgets/multi-file-upload.md +98 -0
- package/skills/uipath-coded-apps/references/widgets/pdf-viewer.md +122 -0
- package/skills/uipath-coded-apps/references/widgets/validation-station.md +1 -1
- package/skills/uipath-functions/SKILL.md +11 -0
- package/skills/uipath-insights/SKILL.md +52 -247
- package/skills/uipath-insights/references/filter-discovery-guide.md +106 -0
- package/skills/uipath-insights/references/investigation-playbook-guide.md +24 -16
- package/skills/uipath-insights/references/jobs-commands-guide.md +196 -53
- package/skills/uipath-ixp/SKILL.md +10 -4
- package/skills/uipath-ixp/references/cli-reference.md +59 -5
- package/skills/uipath-ixp/references/label-documents-guide.md +12 -5
- package/skills/uipath-maestro-bpmn/SKILL.md +27 -9
- package/skills/uipath-maestro-bpmn/references/diagnose/references/failure-modes.md +6 -3
- package/skills/uipath-maestro-bpmn/references/operate/CAPABILITY.md +1 -1
- package/skills/uipath-maestro-bpmn/references/operate/references/ship.md +9 -3
- package/skills/uipath-maestro-bpmn/references/registry-workflow.md +1 -1
- package/skills/uipath-maestro-bpmn/references/shared/local-metadata-regeneration-guide.md +18 -11
- package/skills/uipath-maestro-bpmn/references/structural-bpmn.md +13 -7
- package/skills/uipath-maestro-case/SKILL.md +138 -170
- package/skills/uipath-maestro-case/references/bindings-and-expressions.md +14 -1
- package/skills/uipath-maestro-case/references/bindings-v2-sync.md +25 -1
- package/skills/uipath-maestro-case/references/brownfield.md +7 -3
- package/skills/uipath-maestro-case/references/case-commands.md +63 -8
- package/skills/uipath-maestro-case/references/case-editing-operations.md +11 -8
- package/skills/uipath-maestro-case/references/case-schema.md +5 -3
- package/skills/uipath-maestro-case/references/case-spec-input-details.md +4 -0
- package/skills/uipath-maestro-case/references/connector-integration.md +3 -1
- package/skills/uipath-maestro-case/references/connector-trigger-impl.md +236 -0
- package/skills/uipath-maestro-case/references/connector-trigger-planning.md +300 -0
- package/skills/uipath-maestro-case/references/entry-points-sync.md +2 -0
- package/skills/uipath-maestro-case/references/evals/evals.json +33 -40
- package/skills/uipath-maestro-case/references/implementation.md +58 -13
- package/skills/uipath-maestro-case/references/phased-execution.md +87 -20
- package/skills/uipath-maestro-case/references/placeholder-tasks.md +3 -1
- package/skills/uipath-maestro-case/references/planning.md +26 -16
- package/skills/uipath-maestro-case/references/plugins/case/impl-json.md +2 -5
- package/skills/uipath-maestro-case/references/plugins/case/planning.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/impl-json.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/planning.md +5 -3
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/impl-json.md +4 -2
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/planning.md +6 -4
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/impl-json.md +6 -4
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/planning.md +6 -4
- package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/impl-json.md +42 -3
- package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/planning.md +6 -4
- package/skills/uipath-maestro-case/references/plugins/logging/impl-json.md +50 -32
- package/skills/uipath-maestro-case/references/plugins/sla/impl-json.md +2 -4
- package/skills/uipath-maestro-case/references/plugins/sla/planning.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/stages/impl-json.md +1 -4
- package/skills/uipath-maestro-case/references/plugins/stages/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/action/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/action/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/planning.md +5 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/case-management/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/case-management/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/impl-json.md +43 -13
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/planning.md +4 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/impl-json.md +10 -7
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/planning.md +5 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/create-inline-common.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/process/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/process/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/rpa/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/rpa/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/triggers/event/impl-json.md +9 -6
- package/skills/uipath-maestro-case/references/plugins/triggers/event/planning.md +5 -3
- package/skills/uipath-maestro-case/references/plugins/triggers/manual/impl-json.md +1 -4
- package/skills/uipath-maestro-case/references/plugins/triggers/manual/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/triggers/timer/impl-json.md +1 -4
- package/skills/uipath-maestro-case/references/plugins/triggers/timer/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/variables/bindings/impl-json.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +40 -2
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/planning.md +12 -2
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +8 -6
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/planning.md +17 -3
- package/skills/uipath-maestro-case/references/registry-discovery.md +9 -5
- package/skills/uipath-maestro-case/references/sla-response-shapes.md +3 -1
- package/skills/uipath-maestro-case/references/troubleshooting-guide.md +2 -0
- package/skills/uipath-maestro-case/scripts/audit_plan.py +231 -0
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +8 -4
- package/skills/uipath-maestro-flow/references/author/references/editing-operations-cli.md +5 -3
- package/skills/uipath-maestro-flow/references/author/references/editing-operations-json.md +14 -4
- package/skills/uipath-maestro-flow/references/author/references/editing-operations.md +3 -3
- package/skills/uipath-maestro-flow/references/author/references/greenfield.md +12 -3
- package/skills/uipath-maestro-flow/references/author/references/planning-arch.md +17 -13
- package/skills/uipath-maestro-flow/references/author/references/planning-impl.md +1 -1
- package/skills/uipath-maestro-flow/references/author/references/plugins/agent/impl.md +49 -4
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector/impl.md +59 -17
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector-trigger/impl.md +3 -3
- package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl-connector.md +3 -1
- package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl-manual.md +3 -1
- package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl.md +5 -2
- package/skills/uipath-maestro-flow/references/author/references/plugins/inline-agent/impl.md +31 -16
- package/skills/uipath-maestro-flow/references/author/references/plugins/ixp/impl.md +13 -4
- package/skills/uipath-maestro-flow/references/author/references/plugins/loop/impl.md +185 -25
- package/skills/uipath-maestro-flow/references/author/references/plugins/loop/planning.md +18 -10
- package/skills/uipath-maestro-flow/references/author/references/plugins/rpa/impl.md +9 -3
- package/skills/uipath-maestro-flow/references/author/references/plugins/terminate/impl.md +6 -3
- package/skills/uipath-maestro-flow/references/diagnose/references/failure-modes.md +68 -0
- package/skills/uipath-maestro-flow/references/shared/cli-commands.md +2 -1
- package/skills/uipath-maestro-flow/references/shared/file-format.md +36 -9
- package/skills/uipath-maestro-flow/references/shared/node-output-wiring.md +1 -1
- package/skills/uipath-maestro-flow/references/shared/ux-narration-and-todos.md +1 -1
- package/skills/uipath-maestro-flow/references/shared/variables-and-expressions.md +77 -20
- package/skills/uipath-planner/SKILL.md +30 -12
- package/skills/{uipath-maestro-case/assets/templates/sdd-template-examples.md → uipath-planner/assets/templates/case-sdd-examples.md} +18 -32
- package/skills/uipath-planner/assets/templates/case-sdd-template.md +289 -309
- package/skills/uipath-planner/references/case-design-lane-guide.md +288 -0
- package/skills/uipath-planner/references/multi-skill-patterns-guide.md +1 -1
- package/skills/uipath-planner/references/package-selection-guide.md +2 -2
- package/skills/uipath-planner/references/pdd-driven-lane-guide.md +5 -1
- package/skills/uipath-planner/references/product-selection-guide.md +2 -2
- package/skills/uipath-planner/references/sdd-generation-guide.md +16 -15
- package/skills/uipath-planner/scripts/audit_sdd.py +437 -0
- package/skills/uipath-platform/SKILL.md +7 -2
- package/skills/uipath-platform/references/data-fabric/choice-sets.md +1 -1
- package/skills/uipath-platform/references/data-fabric/data-fabric.md +1 -1
- package/skills/uipath-platform/references/data-fabric/entity-schema.md +37 -21
- package/skills/uipath-platform/references/data-fabric/file-attachments.md +1 -1
- package/skills/uipath-platform/references/guardrails/byo-configurations.md +205 -0
- package/skills/uipath-platform/references/traces/feedback.md +4 -2
- package/skills/uipath-platform/references/uip-commands.md +2 -2
- package/skills/uipath-review/SKILL.md +55 -52
- package/skills/uipath-review/references/agents/agent-grading-rubric.md +62 -40
- package/skills/uipath-review/references/agents/agents-coded-rules.md +7 -1
- package/skills/uipath-review/references/agents/agents-lowcode-rules.md +21 -2
- package/skills/uipath-review/references/agents/guardrails/coded-guardrails-review.md +78 -13
- package/skills/uipath-review/references/agents/guardrails/guardrails-review.md +11 -4
- package/skills/uipath-review/references/architecture-assessment-guide.md +1 -1
- package/skills/uipath-review/references/review-workflow-guide.md +19 -10
- package/skills/uipath-review/references/rule-catalog-workflow.md +6 -6
- package/skills/uipath-review/references/rule-format.md +1 -1
- package/skills/uipath-rpa/SKILL.md +1 -1
- package/skills/uipath-solution/SKILL.md +4 -4
- package/skills/uipath-solution/references/solution-overview.md +7 -2
- package/skills/uipath-tasks/SKILL.md +27 -1
- package/skills/uipath-tasks/references/task-catalogs.md +79 -0
- package/skills/uipath-tasks/references/task-data.md +45 -0
- package/skills/uipath-tasks/references/task-metadata.md +69 -0
- package/skills/uipath-test/SKILL.md +3 -3
- package/skills/uipath-test/references/test-result-report-guide.md +16 -1
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/ambiguous-selector.md +1 -1
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/scope-container-wrong-page.md +1 -1
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/verify-execution-failure.md +2 -2
- package/skills/uipath-troubleshoot/references/products/agents/playbooks/guardrail-violation.md +12 -0
- package/version-manifest.json +2 -2
- package/skills/uipath-maestro-case/assets/templates/sdd-template.md +0 -667
- package/skills/uipath-maestro-case/references/connector-trigger-common.md +0 -511
- package/skills/uipath-maestro-case/references/phase-0-interview.md +0 -279
- package/skills/uipath-maestro-case/references/sdd-generation-rules.md +0 -1026
- package/skills/uipath-review/references/agents/agent-common-issues.md +0 -401
- package/skills/uipath-review/references/agents/agent-review-checklist.md +0 -379
- /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
|
|
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
|