@uipath/skills 1.197.2 → 1.198.0-preview.21
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/CODEOWNERS +18 -11
- package/README.md +1 -0
- package/assets/skill-status.json +8 -0
- package/hooks/hooks.json +44 -8
- package/hooks/send-telemetry.ps1 +392 -0
- package/hooks/send-telemetry.sh +118 -86
- package/hooks/set-session-env.ps1 +72 -0
- package/hooks/set-session-env.sh +64 -0
- package/hooks/suggest-permissions.ps1 +45 -0
- package/hooks/suggest-permissions.sh +4 -0
- package/package.json +1 -1
- package/skills/uipath-admin/references/audit-commands.md +2 -2
- package/skills/uipath-admin/references/audit-workflow-guide.md +4 -4
- package/skills/uipath-agents/references/coded/capabilities/batch-transform/planning.md +1 -1
- package/skills/uipath-agents/references/coded/capabilities/deeprag/planning.md +1 -1
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails-recommend.md +5 -2
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails.md +8 -4
- package/skills/uipath-agents/references/coded/embedding-in-flows.md +1 -1
- package/skills/uipath-agents/references/coded/flow-integration.md +2 -2
- package/skills/uipath-agents/references/coded/lifecycle/build.md +0 -1
- package/skills/uipath-agents/references/coded/lifecycle/setup.md +0 -1
- package/skills/uipath-agents/references/coded/quickstart.md +1 -1
- package/skills/uipath-agents/references/lowcode/agent-definition.md +24 -5
- package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/batch-transform/planning.md +1 -1
- package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/deeprag/planning.md +1 -1
- package/skills/uipath-agents/references/lowcode/capabilities/context/attachments.md +1 -0
- package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails-recommend.md +1 -0
- package/skills/uipath-api-workflow/references/cli-reference.md +1 -1
- package/skills/uipath-api-workflow/references/connector-activity-discovery.md +1 -1
- package/skills/uipath-api-workflow/references/troubleshooting.md +1 -1
- package/skills/uipath-automation-discovery/SKILL.md +26 -1
- package/skills/uipath-automation-discovery/assets/templates/estimation-worksheet-template.md +80 -0
- package/skills/uipath-automation-discovery/references/estimation-guide.md +104 -0
- package/skills/uipath-connector-builder/SKILL.md +6 -4
- package/skills/uipath-connector-builder/references/auth.md +137 -13
- package/skills/uipath-connector-builder/references/configuration.md +29 -7
- package/skills/uipath-connector-builder/references/debugging.md +1 -1
- package/skills/uipath-connector-builder/references/standard-resources.md +162 -13
- package/skills/uipath-governance/references/cli-cheatsheet.md +3 -3
- package/skills/uipath-governance/references/diagnose/references/failure-modes.md +5 -5
- package/skills/uipath-insights/SKILL.md +277 -0
- package/skills/uipath-insights/references/investigation-playbook-guide.md +145 -0
- package/skills/uipath-insights/references/jobs-commands-guide.md +144 -0
- package/skills/uipath-ixp/SKILL.md +4 -1
- package/skills/uipath-ixp/references/cli-reference.md +18 -3
- package/skills/uipath-maestro-bpmn/references/cli-conventions.md +2 -0
- package/skills/uipath-maestro-bpmn/validator/README.md +12 -2
- package/skills/uipath-maestro-case/SKILL.md +27 -13
- package/skills/uipath-maestro-case/assets/templates/sdd-template-examples.md +37 -4
- package/skills/uipath-maestro-case/assets/templates/sdd-template.md +20 -9
- package/skills/uipath-maestro-case/assets/templates/sdd-viewer.html +8 -7
- package/skills/uipath-maestro-case/references/bindings-v2-sync.md +5 -1
- package/skills/uipath-maestro-case/references/brownfield.md +86 -0
- package/skills/uipath-maestro-case/references/case-commands.md +8 -0
- package/skills/uipath-maestro-case/references/case-editing-operations.md +230 -21
- package/skills/uipath-maestro-case/references/case-schema.md +29 -11
- package/skills/uipath-maestro-case/references/connector-integration.md +1 -1
- package/skills/uipath-maestro-case/references/connector-trigger-common.md +1 -1
- package/skills/uipath-maestro-case/references/entry-points-sync.md +204 -0
- package/skills/uipath-maestro-case/references/implementation.md +19 -9
- package/skills/uipath-maestro-case/references/phase-0-interview.md +10 -8
- package/skills/uipath-maestro-case/references/phased-execution.md +11 -4
- package/skills/uipath-maestro-case/references/placeholder-tasks.md +24 -2
- package/skills/uipath-maestro-case/references/planning.md +9 -3
- package/skills/uipath-maestro-case/references/plugins/case/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/sla/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/sla/planning.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/stages/impl-json.md +11 -10
- package/skills/uipath-maestro-case/references/plugins/stages/planning.md +13 -14
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/impl-json.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/planning.md +91 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/impl-json.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/planning.md +87 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/planning.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/triggers/event/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/triggers/manual/impl-json.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/triggers/timer/impl-json.md +2 -1
- package/skills/uipath-maestro-case/references/plugins/variables/bindings/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +20 -10
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/planning.md +9 -8
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/planning.md +1 -1
- package/skills/uipath-maestro-case/references/registry-discovery.md +87 -10
- package/skills/uipath-maestro-case/references/sdd-generation-rules.md +34 -26
- package/skills/uipath-maestro-flow/SKILL.md +4 -1
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +1 -2
- package/skills/uipath-maestro-flow/references/author/references/editing-operations-json.md +3 -3
- package/skills/uipath-maestro-flow/references/author/references/greenfield.md +4 -2
- package/skills/uipath-maestro-flow/references/author/references/planning-arch.md +0 -1
- package/skills/uipath-maestro-flow/references/author/references/planning-impl.md +0 -1
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector/impl.md +1 -0
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector-trigger/impl.md +7 -7
- package/skills/uipath-maestro-flow/references/author/references/plugins/ixp/impl.md +14 -14
- package/skills/uipath-maestro-flow/references/author/references/plugins/script/impl.md +10 -6
- package/skills/uipath-maestro-flow/references/shared/cli-conventions.md +7 -0
- package/skills/uipath-maestro-flow/references/shared/file-format.md +1 -1
- package/skills/uipath-mcp-servers/references/is-activity-workflow.md +3 -3
- package/skills/uipath-planner/SKILL.md +1 -1
- package/skills/uipath-platform/SKILL.md +4 -14
- package/skills/uipath-platform/references/data-fabric/data-fabric.md +1 -1
- package/skills/uipath-platform/references/integration-service/agent-workflow.md +4 -4
- package/skills/uipath-platform/references/integration-service/reference-resolution.md +1 -1
- package/skills/uipath-platform/references/integration-service/resources.md +5 -5
- package/skills/uipath-platform/references/integration-service/triggers.md +10 -9
- package/skills/uipath-platform/references/orchestrator/setup-environment.md +2 -0
- package/skills/uipath-review/SKILL.md +8 -4
- package/skills/uipath-review/references/agents/agent-review-checklist.md +1 -22
- package/skills/uipath-review/references/agents/agents-coded-rules.md +24 -7
- package/skills/uipath-review/references/agents/agents-lowcode-rules.md +0 -1
- package/skills/uipath-review/references/agents/guardrails/coded-guardrails-review.md +231 -0
- package/skills/uipath-review/references/rule-catalog-workflow.md +4 -2
- package/skills/uipath-rpa/SKILL.md +2 -2
- package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/guides/data-service-filter-builder-guide.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/coded-api.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/curl-import.md +3 -3
- package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/http-request-upgrade.md +3 -3
- package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/service-discovery.md +2 -2
- package/skills/uipath-rpa/references/coded/coding-guidelines.md +1 -1
- package/skills/uipath-rpa/references/ui-automation-guide.md +7 -7
- package/skills/uipath-rpa/references/uia-configure-target-workflows.md +5 -5
- package/skills/uipath-rpa/references/uia-elements-interaction-guide.md +19 -10
- package/skills/uipath-rpa/references/uia-prerequisites.md +7 -7
- package/skills/uipath-rpa/references/validation-guide.md +2 -2
- package/skills/uipath-rpa/references/xaml/common-pitfalls.md +4 -0
- package/skills/uipath-rpa/references/xaml/csharp-activity-binding-guide.md +3 -1
- package/skills/uipath-rpa/references/xaml/csharp-expression-pitfalls.md +9 -4
- package/skills/uipath-rpa/references/xaml/workflow-guide.md +2 -2
- package/skills/uipath-rpa/references/xaml/xaml-basics-and-rules.md +1 -1
- package/skills/uipath-solution/SKILL.md +4 -4
- package/skills/uipath-solution/references/activate-and-manage.md +6 -1
- package/skills/uipath-solution/references/develop-solution.md +24 -5
- package/skills/uipath-solution/references/pack-and-deploy.md +5 -2
- package/skills/uipath-solution/references/scenarios/manual-edits.md +2 -2
- package/skills/uipath-solution/references/solution-overview.md +2 -2
- package/skills/uipath-troubleshoot/SKILL.md +3 -3
- package/skills/uipath-troubleshoot/references/products/agents/playbooks/context-grounding-index-not-found.md +0 -2
- package/skills/uipath-troubleshoot/references/products/maestro/playbooks/personal-automation-quota.md +1 -1
- package/version-manifest.json +3 -3
- package/hooks/ensure-uip.sh +0 -220
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector/data-fabric/impl.md +0 -683
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector/data-fabric/planning.md +0 -45
|
@@ -23,9 +23,8 @@ encrypted — e.g. an OAuth user token (`TEXTFIELD`) or a Google service-account
|
|
|
23
23
|
|
|
24
24
|
## Auth types (`auth set --auth-type`)
|
|
25
25
|
|
|
26
|
-
All
|
|
27
|
-
`
|
|
28
|
-
`auth set`.
|
|
26
|
+
All 19 types are supported. `init --auth <type>` accepts any of them inline at create
|
|
27
|
+
time (handy for `none`); type-specific flags beyond init's OAuth sugar go through `auth set`.
|
|
29
28
|
|
|
30
29
|
| auth-type | Use when |
|
|
31
30
|
|-------------------------|-------------------------------------------------|
|
|
@@ -33,16 +32,21 @@ All 14 types are supported. `init --auth` is sugar for the two most common (`oau
|
|
|
33
32
|
| oauth2Pkce | OAuth 2.0 Authorization Code + PKCE. |
|
|
34
33
|
| oauth2ClientCredentials | OAuth 2.0 Client Credentials (no user). |
|
|
35
34
|
| oauth2Password | OAuth 2.0 Resource Owner Password. |
|
|
35
|
+
| oauth2PrivateKeyJwt | OAuth 2.0 Private Key JWT (signed client assertion, e.g. Epic FHIR). |
|
|
36
36
|
| oauth1 | OAuth 1.0a / Token-Based Authentication (TBA). |
|
|
37
37
|
| basic | HTTP Basic (username + password). |
|
|
38
|
-
| jwtOauth | JWT
|
|
39
|
-
| jwtOauth2 |
|
|
38
|
+
| jwtOauth | OAuth 2.0 JWT Bearer (service accounts — Salesforce, Box). |
|
|
39
|
+
| jwtOauth2 | Same contract as jwtOauth (legacy alias — prefer jwtOauth). |
|
|
40
40
|
| custom | A custom static authorization header. |
|
|
41
41
|
| customApiKey | Vendor uses a static API key (header or query). |
|
|
42
42
|
| personalAccessToken | Personal access token authorization header. |
|
|
43
43
|
| awsv4 | AWS Signature v4. |
|
|
44
44
|
| googleServiceAccount | Google service-account JSON. |
|
|
45
45
|
| rsaCertificate | RSA private-key certificate. |
|
|
46
|
+
| none | Open/unauthenticated API (webhooks, public endpoints). |
|
|
47
|
+
| firstPartyService | UiPath internal service — platform-injected service identity. |
|
|
48
|
+
| fpsUserDelegatedAccess | UiPath internal service — acts as the connection's user. |
|
|
49
|
+
| fpsRobotAccess | UiPath internal service — robot access token. |
|
|
46
50
|
|
|
47
51
|
Per-type config key sets (which secrets, which URLs) are in
|
|
48
52
|
[configuration.md](configuration.md) §"Auth as configuration".
|
|
@@ -97,6 +101,114 @@ uip is connectors builder auth set --auth-type oauth2 \
|
|
|
97
101
|
--required-scopes read --preselected-scopes read,write
|
|
98
102
|
```
|
|
99
103
|
|
|
104
|
+
## JWT Bearer (jwtOauth / jwtOauth2)
|
|
105
|
+
|
|
106
|
+
The connector holds the token URL and the SHAPE of the JWT assertion; the connection user
|
|
107
|
+
supplies the client id/secret, the signing key (`jwt.base64.encoded.key` — PKCS#8 PEM or
|
|
108
|
+
base64), and any user-specific claim values. The runtime builds the assertion from every
|
|
109
|
+
config keyed `jwt.claim.<name>` (payload) / `jwt.header.<name>` (header) — declare each with
|
|
110
|
+
a repeatable flag:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
uip is connectors builder auth set --auth-type jwtOauth \
|
|
114
|
+
--token-url https://login.salesforce.com/services/oauth2/token \
|
|
115
|
+
--jwt-claim aud=https://login.salesforce.com \
|
|
116
|
+
--jwt-claim iss \
|
|
117
|
+
--jwt-claim sub \
|
|
118
|
+
--scope 'api refresh_token'
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
- `--token-url` is REQUIRED (the assertion is exchanged there for an access token).
|
|
122
|
+
- `--jwt-claim name=value` pre-fills the claim (still editable at connection time);
|
|
123
|
+
`--jwt-claim name` (bare) creates it required-and-empty — the connection user fills it
|
|
124
|
+
(e.g. Salesforce `iss` = consumer key, `sub` = username).
|
|
125
|
+
- Label/hint the connection-form field inline: `--jwt-claim 'iss;label=Consumer Key;hint=The connected app consumer key'`
|
|
126
|
+
— without a label the field renders as "JWT claim 'iss'".
|
|
127
|
+
- `--jwt-header kid=...` for assertion headers, same syntax (label/hint work too).
|
|
128
|
+
- The runtime ALSO requires `oauth.api.key` (client id) and `oauth.api.secret` — the bundle
|
|
129
|
+
ships both as connection-form fields. For Salesforce-style flows where iss == client id,
|
|
130
|
+
the user enters the same value twice; that is the platform contract, not a bug.
|
|
131
|
+
- jwtOauth intentionally creates NO `oauthOnTokenRefresh` resource — there is no refresh
|
|
132
|
+
token; the runtime signs a fresh assertion when the access token expires. Do not add one.
|
|
133
|
+
- `jwt.base64.encoded.key` (the signing key) is `internal: true, configScreenType: none`
|
|
134
|
+
BY DESIGN — every catalog jwt connector (Box, Salesforce, uipath-http) ships it that way
|
|
135
|
+
and the IS connection UI renders the private-key field for jwt flows itself. Do NOT
|
|
136
|
+
"fix" it to `pre`.
|
|
137
|
+
- Typical claim sets: Salesforce `iss`/`sub` + `aud=https://login.salesforce.com`;
|
|
138
|
+
Box `iss`/`sub` + `aud=<token url>` + `box_sub_type=enterprise`.
|
|
139
|
+
- NEVER write `jwt.oauth.*` config keys (consumer.key/private.key/username) — nothing in
|
|
140
|
+
the platform reads them; a connector built with them can never authenticate.
|
|
141
|
+
|
|
142
|
+
## OAuth 2.0 Private Key JWT (oauth2PrivateKeyJwt)
|
|
143
|
+
|
|
144
|
+
Client-credentials-style flow where the client authenticates with a SIGNED ASSERTION
|
|
145
|
+
instead of a client secret (Epic FHIR is the catalog reference):
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
uip is connectors builder auth set --auth-type oauth2PrivateKeyJwt \
|
|
149
|
+
--token-url https://fhir.epic.com/interconnect-fhir-oauth/oauth2/token
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
The bundle ships `oauth.api.key` (client id), `jwk.private.key`, `jwk.kid` as
|
|
153
|
+
connection-form fields — the user pastes the registered key + kid at connection time.
|
|
154
|
+
|
|
155
|
+
## UiPath First Party Service (firstPartyService / fpsUserDelegatedAccess / fpsRobotAccess)
|
|
156
|
+
|
|
157
|
+
INTERNAL-ONLY — connectors that call UiPath's own services (Orchestrator, Data Fabric,
|
|
158
|
+
Apps…). There are NO credential fields: the platform injects the caller's identity at
|
|
159
|
+
runtime. Choose the flavor by whose token the connector should act with: the service
|
|
160
|
+
(`firstPartyService`), the connection's user (`fpsUserDelegatedAccess`), or a robot
|
|
161
|
+
(`fpsRobotAccess`).
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
uip is connectors builder init --name "My Service" \
|
|
165
|
+
--base-url 'https://{host}/{account}/{tenant}/myservice_'
|
|
166
|
+
uip is connectors builder auth set --auth-type firstPartyService \
|
|
167
|
+
--scope MyServiceApiUserAccess
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
- `--scope` = the first-party scope the platform token is minted with (e.g.
|
|
171
|
+
`OrchestratorApiUserAccess`, `DataService`); it lands hidden on `oauth.scope` — an
|
|
172
|
+
authoring-time value, never a connection-form field.
|
|
173
|
+
- base.url follows `https://{host}/{account}/{tenant}/<service>_` — `auth set` binds those
|
|
174
|
+
three placeholders to the platform headers (`x-forwarded-host`,
|
|
175
|
+
`x-uipath-internal-accountid`, `x-uipath-internal-tenantid`) automatically, CONVERTING
|
|
176
|
+
any user-fillable configs + configuration-type bindings a prior `init --base-url` seeded
|
|
177
|
+
(they show up under `ConfigChanges.removed`). Either command order works.
|
|
178
|
+
- VERIFY with `auth get`: `FpsBindings` lists each placeholder and the header it resolves
|
|
179
|
+
from (`boundToHeader: null` = broken), and `ConnectionFormFields: []` proves no
|
|
180
|
+
user-facing fields. `validate` errors on any FPS connector whose placeholders are
|
|
181
|
+
user-fillable or configuration-bound.
|
|
182
|
+
- `auth set` also seeds hidden RUNTIME bookkeeping entries (`oauth.user.token`,
|
|
183
|
+
`oauth.user.refresh_time`, `oauth.user.refresh_interval`, `oauth.basic.header`; the
|
|
184
|
+
delegated type adds `oauth.user.refresh_token`) — token storage the platform writes at
|
|
185
|
+
runtime, never credential fields. Leave them alone.
|
|
186
|
+
|
|
187
|
+
## No authentication (none)
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
uip is connectors builder auth set --auth-type none
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Records `authentication.type:"none"` with zero credential configs — for open APIs and
|
|
194
|
+
webhook-style connectors (catalog: http-webhook, generic-webhooks). `validate` requires SOME
|
|
195
|
+
auth type on every connector, so run this even when the API needs no credentials.
|
|
196
|
+
|
|
197
|
+
## AWS Signature v4 (awsv4)
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
uip is connectors builder init --name "Amazon Connect" \
|
|
201
|
+
--base-url 'https://connect.{aws.region}.amazonaws.com'
|
|
202
|
+
uip is connectors builder auth set --auth-type awsv4 --aws-service-name connect
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
The bundle ships `aws.api.key` / `aws.api.secret` / `aws.region` as connection-form fields
|
|
206
|
+
plus hidden `aws.service.name` / `aws.host`. `--aws-service-name` sets the per-service
|
|
207
|
+
SigV4 constant (e.g. `polly`, `connect`) — no `state patch` needed. Put `{aws.region}` in
|
|
208
|
+
base.url — the CLI binds it to the region config automatically, and `auth set` silently
|
|
209
|
+
replaces the generic placeholder config `init` seeded with the canonical AWS one (no
|
|
210
|
+
`--force` required).
|
|
211
|
+
|
|
100
212
|
## customApiKey
|
|
101
213
|
|
|
102
214
|
```bash
|
|
@@ -139,10 +251,11 @@ rather than hand-editing `configuration[]`.
|
|
|
139
251
|
`--validation-vendor-path <path>` (with optional `--validation-method`, default GET) seeds
|
|
140
252
|
a `provisionAuthValidation` system resource — one read-only call at connection creation that
|
|
141
253
|
rejects bad creds immediately. The probe must be read-only and must not change vendor data,
|
|
142
|
-
so keep it GET.
|
|
143
|
-
`
|
|
144
|
-
`
|
|
145
|
-
|
|
254
|
+
so keep it GET. Credential auth types with no token exchange (`basic`, `custom`,
|
|
255
|
+
`customApiKey`, `personalAccessToken`, `awsv4`, `googleServiceAccount`, `rsaCertificate`)
|
|
256
|
+
get a `validate` warning when it is missing. OAuth/JWT flows (token exchange catches bad
|
|
257
|
+
creds), `none` (no credentials), and the FPS family (platform identity) are exempt —
|
|
258
|
+
`validate` does not ask for a probe there. Details: [system-resources.md](system-resources.md) §provisionAuthValidation.
|
|
146
259
|
|
|
147
260
|
## System (lifecycle) resources — `auth system`
|
|
148
261
|
|
|
@@ -150,15 +263,26 @@ Lifecycle/auth-flow endpoints with no SR file (provisionAuthValidation, onProvis
|
|
|
150
263
|
oauthOnTokenRefresh, …) are wired with `auth system create --type <type>` / `auth system list`.
|
|
151
264
|
The full type list, override-path rules, and flags: [system-resources.md](system-resources.md).
|
|
152
265
|
|
|
153
|
-
## Base URL derived from a token response
|
|
266
|
+
## Base URL derived from a token response
|
|
154
267
|
|
|
155
|
-
There is
|
|
156
|
-
returns the API host
|
|
157
|
-
validates the
|
|
268
|
+
There is no service-specific base-url flag (`init --base-url` is STATIC only). When the token
|
|
269
|
+
response returns the API host or another per-connection value, use the generic hook pattern:
|
|
270
|
+
a `postRequest` hook reads + validates the value (scheme, host/id shape, allowlist where applicable), then persists it into THIS connection's config
|
|
158
271
|
at runtime via `done({configuration})` — NOT `state patch` (that baking-time edit would set one
|
|
159
272
|
org's URL as everyone's default). Full pattern: [hooks.md](hooks.md) §"Pattern: base URL …
|
|
160
273
|
derived from a token response".
|
|
161
274
|
|
|
275
|
+
## Verifying auth setup — `auth get`
|
|
276
|
+
|
|
277
|
+
`auth get` returns the full auth read model in one call: the type(s), every auth-related
|
|
278
|
+
config entry (key, label, hint, screen type, hidden/required/encrypted flags, defaults
|
|
279
|
+
with secrets redacted), `ConnectionFormFields` (EVERY visible config across the whole
|
|
280
|
+
connector — the literal connection form; `[]` = empty form), whether
|
|
281
|
+
`oauthOnTokenRefresh` / `provisionAuthValidation` exist, `FpsBindings` (FPS
|
|
282
|
+
placeholder→header map), and `TemplateBindings` (each non-FPS base.url `{placeholder}`
|
|
283
|
+
with whether its backing config entry + path-param binding exist). Use it instead of
|
|
284
|
+
stitching `state query` calls.
|
|
285
|
+
|
|
162
286
|
## Re-running auth set
|
|
163
287
|
|
|
164
288
|
Idempotent on identical inputs (returns `unchanged`). If a new input would modify an
|
|
@@ -83,14 +83,20 @@ connector; the tenant user supplies the real secret at connection time. Key sets
|
|
|
83
83
|
- **OAuth2** (16 entries — canonical list; `auth set` writes all of them):
|
|
84
84
|
`oauth.api.key`, `oauth.api.secret` (PASSWORD, encrypt, isPrivate), `oauth.callback.url`
|
|
85
85
|
(auto-set, do NOT hardcode), `oauth.authorization.url`, `oauth.token.url`,
|
|
86
|
-
`oauth.token.
|
|
87
|
-
`oauth.basic.header`, `oauth.user.token`, `oauth.user.
|
|
88
|
-
`oauth.user.
|
|
89
|
-
`oauth.user.
|
|
86
|
+
`oauth.token.refresh_url`, `oauth.token.revoke_url`, `oauth.scope`,
|
|
87
|
+
`oauth.basic.header`, `oauth.user.token`, `oauth.user.refresh_token`,
|
|
88
|
+
`oauth.user.refresh_interval` (sec, default 3600), plus auto-set internals
|
|
89
|
+
`oauth.user.refresh_time`, `oauth.decode.authorization.code`, `authentication.time`,
|
|
90
90
|
`expires_in`. Sets `authentication.type:"oauth2"`, `typeOauth:true`.
|
|
91
|
+
NOTE the underscore in the last segment of the four refresh/revoke keys
|
|
92
|
+
(`refresh_url`, `refresh_token`, `refresh_time`, `refresh_interval`) — the
|
|
93
|
+
all-dots spellings are dead keys the runtime never reads.
|
|
91
94
|
- **OAuth2 PKCE** adds `oauth.pkce.code.challenge.verifier`, `oauth.pkce.code.challenge`,
|
|
92
95
|
`oauth.pkce.code.challenge.method` (`"S256"`).
|
|
93
96
|
- **OAuth2 Client Credentials**: subset — no auth URL, no refresh token.
|
|
97
|
+
- **oauth2PrivateKeyJwt** (client authenticates with a signed assertion, e.g. Epic FHIR):
|
|
98
|
+
`oauth.api.key`, `oauth.token.url`, `jwk.private.key` (TEXTAREA, encrypt), `jwk.kid` —
|
|
99
|
+
the connection user supplies the key + kid. `typeOauth:true`.
|
|
94
100
|
- **customApiKey** (the on-disk type for any "API key" auth — the UI labels it "API key",
|
|
95
101
|
but never use periodic's bare `apiKey`): one PASSWORD secret config (default
|
|
96
102
|
`custom.api.key`, encrypt, isPrivate, `groupBy:"customApiKey"`) + one `type:"value"`
|
|
@@ -98,9 +104,25 @@ connector; the tenant user supplies the real secret at connection time. Key sets
|
|
|
98
104
|
`authentication.type:"customApiKey"`, `typeOauth:false`. CLI flow + flags:
|
|
99
105
|
[auth.md](auth.md) §customApiKey.
|
|
100
106
|
- **basic**: `username`, `password` (PASSWORD, encrypt).
|
|
101
|
-
- **jwtOauth
|
|
102
|
-
`
|
|
103
|
-
|
|
107
|
+
- **jwtOauth / jwtOauth2** (OAuth 2.0 JWT Bearer): `oauth.api.key`, `oauth.api.secret`,
|
|
108
|
+
`oauth.callback.url`, `oauth.token.url`, `jwt.base64.encoded.key` (TEXTAREA — the signing
|
|
109
|
+
key, PKCS#8 PEM or base64), plus one `jwt.claim.<name>` config per assertion claim and
|
|
110
|
+
`jwt.header.<name>` per assertion header (the runtime builds the JWT from every config
|
|
111
|
+
with those prefixes — Salesforce ships `jwt.claim.iss/sub/aud`). Wire claims with
|
|
112
|
+
`auth set --jwt-claim` / `--jwt-header` ([auth.md](auth.md) §"JWT Bearer"). `typeOauth:true`.
|
|
113
|
+
(The old `jwt.oauth.*` keys are read by NOTHING — never write them.)
|
|
114
|
+
- **awsv4**: `aws.api.key`, `aws.api.secret`, `aws.region` (user-filled), `aws.service.name`
|
|
115
|
+
(hidden, per-service constant like `connect`), `aws.host` (hidden). Put the region in the
|
|
116
|
+
base URL as `https://<service>.{aws.region}.amazonaws.com` — the CLI binds `{aws.region}`
|
|
117
|
+
to the config automatically.
|
|
118
|
+
- **none**: no auth configs at all — `authentication.type:"none"` only (open APIs, webhooks).
|
|
119
|
+
- **firstPartyService / fpsUserDelegatedAccess / fpsRobotAccess** (UiPath internal services
|
|
120
|
+
ONLY): no user credentials — the platform injects the caller's identity. `oauth.scope`
|
|
121
|
+
(hidden) carries the service scope (set via `auth set --scope`). base.url uses
|
|
122
|
+
`https://{host}/{account}/{tenant}/<service>_` and the CLI binds those three placeholders
|
|
123
|
+
to the internal headers `x-forwarded-host` / `x-uipath-internal-accountid` /
|
|
124
|
+
`x-uipath-internal-tenantid` (`type:"header"` path params) — they are NOT connection-form
|
|
125
|
+
fields. `fpsUserDelegatedAccess` adds `oauth.user.refresh_token`.
|
|
104
126
|
|
|
105
127
|
## Multi-auth (groupControl)
|
|
106
128
|
An `authentication.type` COMBO with `"groupControl": true` plus per-type config entries
|
|
@@ -23,7 +23,7 @@ exits non-zero on failure). All run under `uip is connectors builder`.
|
|
|
23
23
|
false when it should be true.
|
|
24
24
|
- **Token exchange fails**: wrong `oauth.token.url`; vendor expects/rejects
|
|
25
25
|
`oauth.basic.header`; creds in wrong place (body vs header).
|
|
26
|
-
- **Works then fails after expiry**: `oauth.token.
|
|
26
|
+
- **Works then fails after expiry**: `oauth.token.refresh_url` unset (NOTE underscore — the all-dots key is dead), refresh interval too
|
|
27
27
|
long, or wrong param mapping in `oauthOnTokenRefresh`.
|
|
28
28
|
- **API key unauthorized**: wrong header name, missing prefix (`Bearer `/`Token `), or key
|
|
29
29
|
sent as query when the vendor wants a header. Re-run `auth set --auth-type customApiKey`.
|
|
@@ -57,6 +57,28 @@ defines `GET`/`GETBYID`); a write-only activity keeps its base path. A per-metho
|
|
|
57
57
|
is derived from the canonical resource path. Only model GETBYID for TRUE by-id endpoints,
|
|
58
58
|
not a search/list-by-filter endpoint.
|
|
59
59
|
|
|
60
|
+
### nested / parent-id vendor paths (mid-path `{token}`)
|
|
61
|
+
A path variable is bound on TWO sides: element-side `{name}` in the internal `path`, vendor-side
|
|
62
|
+
`{vendorName}` in the `vendorPath`. When a `{token}` sits **only in the vendor path** — a
|
|
63
|
+
parent-scoped sub-collection like `--vendor-path /issue/{issueId}/comment` whose internal slug is the
|
|
64
|
+
flat `/comments` — it CANNOT be `type:"path"`: element-service looks for the segment in the flat
|
|
65
|
+
element URL, doesn't find it, and 400s **"required parameter '<name>' not found"** at request time
|
|
66
|
+
(reads/writes on comments/transitions/assignee/attachments all fail). `activity create` now emits the
|
|
67
|
+
right shape automatically:
|
|
68
|
+
|
|
69
|
+
- **query→path (default for a vendor-only token):** internal `/comments`, param
|
|
70
|
+
`{ name:"issueId", type:"query", vendorName:"issueId", vendorType:"path" }`. Element-service takes the
|
|
71
|
+
value as a query param and interpolates it into the vendor template. This is how shipped connectors
|
|
72
|
+
(e.g. Jira `curated_add_comment`) declare parent ids. Callers pass it at run time via
|
|
73
|
+
`uip is resources run … --query issueId=<id>`.
|
|
74
|
+
- **path→path (token in the internal path):** pass `--resource-path /comments/{id}` so `{id}` is a real
|
|
75
|
+
element URL segment → `type:"path"`. If the internal and vendor tokens differ in name, the param is
|
|
76
|
+
`{ name:"id", vendorName:"issueId", type:"path", vendorType:"path" }` (name↔internal, vendorName↔vendor);
|
|
77
|
+
the CLI can't auto-derive a differing pair, so author it with `activity param create`.
|
|
78
|
+
|
|
79
|
+
`validate` now flags both failure modes: a `type:"path"` param whose `{name}` is missing from the
|
|
80
|
+
internal path, and a `{token}` in the vendorPath with no param sending it (unbound → 404).
|
|
81
|
+
|
|
60
82
|
## metadata.events
|
|
61
83
|
`{ "eventMode": ["polling"] }` — `trigger create` sets this. Full `eventMode` value set:
|
|
62
84
|
[events.md](events.md) §"SR-level event metadata".
|
|
@@ -68,12 +90,16 @@ you pass win, unspecified keys are kept, and per-method visibility is deep-merge
|
|
|
68
90
|
`--type` is required only for a NEW field, optional on a merge.
|
|
69
91
|
|
|
70
92
|
Core: `name`, `type` (string/integer/number/boolean/date/date-time/object/array),
|
|
71
|
-
`displayName`, `nativeType
|
|
72
|
-
|
|
73
|
-
`
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
93
|
+
`displayName`, `nativeType` (`--native-type`), `format`, `description`, `sampleValue`,
|
|
94
|
+
`defaultValue` (`--default-value`, scalar or JSON), `primaryKey` (`--primary-key`),
|
|
95
|
+
`sortOrder` (`--sort-order`), `enum` (`--enum`), `enhancedEnum` (`--enhanced-enum`),
|
|
96
|
+
`custom`. **`mask` is a date/number FORMAT PATTERN string** (e.g. `yyyy-MM-dd'T'HH:mm:ssZ`),
|
|
97
|
+
NOT a boolean — set it with `--mask <pattern>`. **`enum` MUST end up as the object form `[{"value":"x"}]`** — the
|
|
98
|
+
server SR marshaller rejects a bare string array `["x"]` at PUBLISH time. Both `--enum` and
|
|
99
|
+
`--fields-file` auto-normalize a bare `["a","b"]` to the object form; and `validate` now FLAGS a
|
|
100
|
+
bare/`!{value}` enum still sitting in an SR (e.g. from a hand `state patch`), so it no longer
|
|
101
|
+
slips through to a publish failure. `--enhanced-enum '[{"name":"Label","value":"V"}]'` writes
|
|
102
|
+
labelled options.
|
|
77
103
|
|
|
78
104
|
**Method visibility** (`field.method` object) controls request/response per method:
|
|
79
105
|
```json
|
|
@@ -85,22 +111,145 @@ patch` enums must use `[{"value":…}]`.
|
|
|
85
111
|
Set it with the visibility flags. `--method` is REPEATABLE and the flags
|
|
86
112
|
(`--request`/`--response`/`--required`/`--request-curated`/`--response-curated`) apply to
|
|
87
113
|
EVERY listed method: `--method GET --method POST --response` makes the field a response on
|
|
88
|
-
both.
|
|
114
|
+
both. For DIFFERENT visibility per method in one call, use the inline form —
|
|
115
|
+
`--method 'GET=response,response-curated' --method 'POST=request,required'` — and prefix a
|
|
116
|
+
flag with `!` to UNSET it on a merge (`--method 'GET=!request'` writes `request: false`
|
|
117
|
+
over an accidental `true`; no `state patch` needed). Bare and inline `--method` forms mix.
|
|
118
|
+
Properties: `response`, `request`, `required`, `requestCurated`, `responseCurated`,
|
|
89
119
|
`designOverrides`. `requestCurated`/`responseCurated` gate a field's visibility INSIDE a
|
|
90
120
|
curated activity (plain `request`/`response` is not enough); auto-curation sets them from
|
|
91
121
|
the field's request/response side.
|
|
92
122
|
|
|
93
123
|
**Searchable**: `searchable` (`--searchable`), `searchableOperators`
|
|
94
|
-
(`--searchable-operators '=,!=,like,>,<,>=,<=,in'`), `searchableNames
|
|
124
|
+
(`--searchable-operators '=,!=,like,>,<,>=,<=,in'`), `searchableNames` (`--searchable-names`).
|
|
95
125
|
|
|
96
126
|
**design** object (`--design-position primary|secondary|none`, `--component`, `--hidden`):
|
|
97
127
|
`position`, `component` (FolderPicker, Button, Connectors, Resources, Fields, Processes,
|
|
98
|
-
Queues), `
|
|
99
|
-
`
|
|
100
|
-
`solutionResourceKind`, `fieldActions` (cascading
|
|
128
|
+
Queues), `isHidden` (what `--hidden` writes — the key shipped connectors use; a dependent
|
|
129
|
+
dropdown's `--depends-on` writes the same key), `loadByDefault`, `isMultiSelect`,
|
|
130
|
+
`enableUserOverride`, `dictionaryWidget`, `solutionResourceKind`, `fieldActions` (cascading
|
|
131
|
+
show/hide based on another field's value).
|
|
132
|
+
|
|
133
|
+
### Dropdowns (reference / lookup)
|
|
134
|
+
A dropdown lists rows from a **List resource in this connector** — you choose which field is
|
|
135
|
+
DISPLAYED and which is SENT. A dropdown can live on a **field, a path param, or a query param**, so
|
|
136
|
+
the same flags exist on both `activity field create` and `activity param create`:
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
--reference-object <name> target List resource's object name (e.g. teams)
|
|
140
|
+
--reference-path <path> its list path (e.g. /teams); use {parent} for a dependent dropdown
|
|
141
|
+
--lookup-value <field> the ONE field sent as the value (e.g. id)
|
|
142
|
+
--lookup-names <csv> display-candidate fields (e.g. id,displayName)
|
|
143
|
+
--display-pattern <p> visible label, e.g. "{displayName}" or "{name} - {id}" (combines lookupNames)
|
|
144
|
+
--filter-pattern <p> server-side type-ahead template with {filter} (optional)
|
|
145
|
+
--load-by-default populate the list on open; --multi-select; --enable-user-override
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
The reference points at a resource whose GET is `operation:"List"`; `lookupValue`/`lookupNames`
|
|
149
|
+
name fields in that resource's returned records. Raw `--reference '<json>'` (`{objectName,path,
|
|
150
|
+
lookupValue,lookupNames}`) is still accepted as an escape hatch. `objectName`+`path`+`lookupValue`
|
|
151
|
+
are expected; `validate` warns if `lookupValue` is missing.
|
|
152
|
+
|
|
153
|
+
**Dependent dropdowns** (child list scoped by a parent — e.g. Teams channel depends on team): put
|
|
154
|
+
`{<parentName>}` in the child's `--reference-path` (must equal the parent field/param's name) and
|
|
155
|
+
pass `--depends-on <parentName>`. That injects `design.isHidden` + a show/hide `fieldActions` pair,
|
|
156
|
+
so the child appears only after the parent has a value and its list is filtered by the parent:
|
|
157
|
+
|
|
158
|
+
```
|
|
159
|
+
activity field create --resource messages --name team_id --reference-object teams \
|
|
160
|
+
--reference-path /teams --lookup-value id --lookup-names id,displayName \
|
|
161
|
+
--display-pattern "{displayName}" --load-by-default --method "POST=request,required"
|
|
162
|
+
activity field create --resource messages --name channel_id --depends-on team_id \
|
|
163
|
+
--reference-object "teams::channels" --reference-path "/teams/{team_id}/channels" \
|
|
164
|
+
--lookup-value id --lookup-names id,displayName --display-pattern "{displayName}" \
|
|
165
|
+
--method "POST=request,required"
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
The parent (`team_id`) must exist as a sibling field/param on the same resource — `validate` warns
|
|
169
|
+
if a dependent path's `{token}` or a rule's `refFieldName` names nothing on the resource.
|
|
170
|
+
|
|
171
|
+
**Show/hide on a value** (conditional field, not a lookup): `--field-actions '<json>'` is the
|
|
172
|
+
escape hatch — an array of `{ actionType: show|hide|required|optional, rules: [{ type:"field",
|
|
173
|
+
refFieldName:"<other>", refFieldValues:["card"], isCleared:false }] }`. Use `refFieldValues:["*"]`
|
|
174
|
+
for "any value", `isCleared:true` to fire when the ref field is empty; multiple rules in one action
|
|
175
|
+
are ANDed. **`--depends-on` vs `--field-actions`:** use `--depends-on` for a dependent dropdown
|
|
176
|
+
(show once the parent has ANY value — it hard-codes `["*"]`); use `--field-actions` when the child
|
|
177
|
+
should appear only for a SPECIFIC parent value (e.g. `refFieldValues:["task"]`).
|
|
178
|
+
|
|
179
|
+
**Dropdowns on path / query params** work identically — the same flags exist on `activity param
|
|
180
|
+
create`. For a **path variable** just pass `--type path`: the CLI auto-encodes it as `type:"query"`
|
|
181
|
+
+ `vendorType:"path"` when the variable isn't a segment of the flat internal path (element-service
|
|
182
|
+
interpolates it into the vendor path — a literal `type:"path"` there would 400). Example — a `boardId`
|
|
183
|
+
path-param dependent dropdown scoped by `projectId`:
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
activity param create --resource cards --method POST --name boardId --type path \
|
|
187
|
+
--reference-object boards --reference-path "/projects/{projectId}/boards" \
|
|
188
|
+
--lookup-value id --lookup-names id,name --display-pattern "{name}" --depends-on projectId
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Authoring for catalogue parity — the curation layer
|
|
192
|
+
Wiring dropdowns is necessary but NOT sufficient to match a catalogue connector's Studio Web UX.
|
|
193
|
+
Benchmarking generated connectors vs catalogue (Gmail/Outlook/OneDrive) showed the dropdown plumbing
|
|
194
|
+
reaches parity, but four things a blind build usually MISSES — do these to close the gap:
|
|
195
|
+
|
|
196
|
+
1. **Static / enum-backed pickers.** Not every dropdown is backed by a live vendor list — some are a
|
|
197
|
+
fixed set of literal choices. Two cases:
|
|
198
|
+
- **Small closed choice** (writeMode, valueInputOption, operation, role/type) → use
|
|
199
|
+
`--enum '["A","B"]'` or `--enhanced-enum '[{"name":"Label","value":"V"}]'` on **`field create`
|
|
200
|
+
OR `param create`** (both support it). This renders a static combo directly — do NOT stand up a
|
|
201
|
+
helper List resource for these. (Catalogue puts `enum`/`enhancedEnum` right on the field/param.)
|
|
202
|
+
- **Large / shared / vendor-fetched set** (timezones, currencies) → author a small helper List
|
|
203
|
+
resource holding that set and point a dropdown at it (`--reference-object timezones
|
|
204
|
+
--reference-path /timezones`). The catalogue adds a `timezones` picker on every calendar /
|
|
205
|
+
send-mail activity this way.
|
|
206
|
+
2. **Curated responses, not raw vendor JSON.** Don't leave an activity's output as raw vendor field
|
|
207
|
+
names. Curate it — friendly output field names + a curated subset — via per-field `responseCurated`
|
|
208
|
+
+ `displayName` (e.g. `EventTitle`/`StartDateTime` instead of `subject`/`start`). Set curated
|
|
209
|
+
visibility in the `--fields-file` method map; both `responseCurated` and the kebab
|
|
210
|
+
`response-curated` spelling are accepted (normalized).
|
|
211
|
+
3. **Scope pickers on list / read verbs.** A list activity should offer the folder / calendar /
|
|
212
|
+
parent **scope** as a dropdown, not just a generic `where` / `pageSize`. e.g. Get Email List →
|
|
213
|
+
an email-folder picker; Get Event List → a calendar picker.
|
|
214
|
+
4. **Field completeness.** Cover the catalogue's fields, not just the obvious ones (e.g. `Importance`
|
|
215
|
+
/ `ReplyTo` on send-email, `ListColumns` on SharePoint list items).
|
|
216
|
+
|
|
217
|
+
**Known CLI limits (catalogue-only for now — can't reach 100% here):** there is no hierarchical
|
|
218
|
+
**tree-picker** reference type (the OneDrive drive→folder→file browser) and no **merged/combined**
|
|
219
|
+
picker (sheets+tables+named-ranges in one dropdown); the SR-level `type:"curated"` + `section` /
|
|
220
|
+
`category` grouping isn't settable (activities still surface as standalone via
|
|
221
|
+
`metadata.method.<VERB>.curated`). Don't try to hand-fake these — note them as gaps.
|
|
222
|
+
|
|
223
|
+
## Bulk field authoring — `--fields` / `--fields-file`
|
|
224
|
+
`activity create --fields '<json-array>'` (inline) or `--fields-file <path>` seeds the whole
|
|
225
|
+
field schema in one shot. Two shapes are accepted: an ARRAY of field objects
|
|
226
|
+
(`[{ "name": "email", ... }]`), OR a name→spec OBJECT map (`{ "email": { ... } }`) where the KEY
|
|
227
|
+
is the field name — the exact shape a standard-resource stores `fields` under, so you can paste a
|
|
228
|
+
real connector's `fields: {…}` object VERBATIM. Each field object uses the SAME keys as above
|
|
229
|
+
(`name` required in the array form; `type` optional — defaults to `string`). This path is **validated and
|
|
230
|
+
normalized before anything is written** (same engine as `field create`): a bad shape fails
|
|
231
|
+
fast with a `ValidationError` listing EVERY problem, rather than silently authoring a broken
|
|
232
|
+
SR that only fails at publish. Specifically it:
|
|
233
|
+
- normalizes a bare `enum: ["a","b"]` → `[{"value":"a"},…]`;
|
|
234
|
+
- accepts per-method visibility under `method` (canonical) OR `methods` (alias) — but not both;
|
|
235
|
+
- requires `objectName`+`path` on a `reference`; requires `name`+`value` on each `enhancedEnum`;
|
|
236
|
+
- checks `design.position` ∈ {primary,secondary,none} and that boolean flags are booleans;
|
|
237
|
+
- REJECTS unknown top-level keys (typo guard) and duplicate field names.
|
|
238
|
+
Example element: `{ "name": "status", "type": "string", "enum": ["open","closed"],
|
|
239
|
+
"searchable": true, "method": { "GET": { "response": true } } }`. `--fields`/`--fields-file`
|
|
240
|
+
carry the full property set (enum, enhancedEnum, reference, searchable*, primaryKey,
|
|
241
|
+
sortOrder, defaultValue, design, …) — none are dropped.
|
|
242
|
+
|
|
243
|
+
The schema is OPEN: recognized keys are listed by `activity field schema`, but connectors
|
|
244
|
+
carry a vendor long tail (`refName`, `searchableDisplayName`, `isHidden`, …) — those pass
|
|
245
|
+
through with a WARNING, not an error, so real fields are never blocked. Only true
|
|
246
|
+
publish‑breakers hard‑fail: missing `name`, duplicate names, both `method`+`methods`, a
|
|
247
|
+
non‑object `method` map.
|
|
101
248
|
|
|
102
|
-
|
|
103
|
-
|
|
249
|
+
Don't guess the shape: `activity field schema` prints the exact accepted keys, types,
|
|
250
|
+
visibility methods, and a copy‑pasteable **valid** example (no connector needed). To
|
|
251
|
+
bulk‑add fields to an EXISTING activity, re‑run `activity create --name <same>
|
|
252
|
+
--fields-file <path>` — it MERGES fields into the existing SR (existing fields kept).
|
|
104
253
|
|
|
105
254
|
## Rules
|
|
106
255
|
1. Field dict key MUST equal `field.name`. 2. `fields` is top-level. 3. Only methods in
|
|
@@ -97,7 +97,7 @@ Bare `formData` object, NOT wrapped in `{ "data": ... }`. The CLI adds the wrapp
|
|
|
97
97
|
|
|
98
98
|
## Deployment (tenant / group / user)
|
|
99
99
|
|
|
100
|
-
> **All `deployment * configure` commands are FULL REPLACE.** The submitted array rewrites the target's assignment list. Always read current state first, merge new entries in, then configure. See
|
|
100
|
+
> **All `deployment * configure` commands are FULL REPLACE.** The submitted array rewrites the target's assignment list. Always read current state first, merge new entries in, then configure. See `policy-assign.md` for the merge-first pattern.
|
|
101
101
|
>
|
|
102
102
|
> **Why this matters:** the previous `assign-tenant` / `assign-group` / `assign-user` commands had a "last deploy wins" bug — sequential single-policy calls each did a full-replace at the API. The new `configure` commands fix this by taking the full assignment list in one atomic call.
|
|
103
103
|
|
|
@@ -173,8 +173,8 @@ This skill uses only the default caller-own mode. The `--tenant-only` and `--use
|
|
|
173
173
|
| `401 / 403` | Session expired or insufficient perms. | Halt. Ask user to `uip login`. |
|
|
174
174
|
| `404` | Identifier not found. | Halt. Check IDs. (Missing `--input` paths now surface a clear filesystem error, not 404.) |
|
|
175
175
|
| `409` | Duplicate policy name on create. | Halt. V1 = do NOT retry-as-update. (Critical Rule in SKILL.md) |
|
|
176
|
-
| `500` | Often
|
|
177
|
-
| `503` with transient `Instructions` text (`template upgrade`, `connection timeout`, `backend temporarily unavailable`) | AOPS is migrating the policy's Form.io template or a dependency is flapping — typically tens of seconds to minutes. | Do NOT use the default 3s retry. Wait 30s before first retry, 60s before second. Or surface to user and offer `retry now` / `cancel`. Only halt after a third failure or if the `Instructions` text shifts to a non-transient error. See
|
|
176
|
+
| `500` | Often missing metadata flags on update (known-issue #2). | Halt. Re-read policy metadata, pass all flags. |
|
|
177
|
+
| `503` with transient `Instructions` text (`template upgrade`, `connection timeout`, `backend temporarily unavailable`) | AOPS is migrating the policy's Form.io template or a dependency is flapping — typically tens of seconds to minutes. | Do NOT use the default 3s retry. Wait 30s before first retry, 60s before second. Or surface to user and offer `retry now` / `cancel`. Only halt after a third failure or if the `Instructions` text shifts to a non-transient error. See `policy-crud.md` UPDATE error map. |
|
|
178
178
|
| `5xx` other | Server-side. | Retry once after 3s. Halt on second failure. Surface `Instructions` verbatim. |
|
|
179
179
|
|
|
180
180
|
All halts write a deploy record (Apply) or patch record (Diagnose).
|
|
@@ -63,7 +63,7 @@ Named failure patterns with symptom → cause → investigation → fix. Match t
|
|
|
63
63
|
```bash
|
|
64
64
|
uip gov aops-policy deployment tenant get "$TENANT_ID" --output json
|
|
65
65
|
```
|
|
66
|
-
3. Verify the product is included in the target license type (see [aops-policy-deploy-guide.md — License-type → product compatibility](
|
|
66
|
+
3. Verify the product is included in the target license type (see [aops-policy-deploy-guide.md — License-type → product compatibility](../../aops-policy/aops-policy-deploy-guide.md#license-type--product-compatibility)).
|
|
67
67
|
|
|
68
68
|
**Fix:** Cause 1 → redeploy to a license type that includes the target product. Cause 2 → deploy to the license type the affected users actually hold. Cause 3 → deploy to all relevant license types.
|
|
69
69
|
|
|
@@ -100,7 +100,7 @@ Named failure patterns with symptom → cause → investigation → fix. Match t
|
|
|
100
100
|
uip gov access-policy list --filter "status in ('Active')" --output json
|
|
101
101
|
```
|
|
102
102
|
|
|
103
|
-
**Fix:** Cause 1 → narrow selector `resourceType`/`tags`. Cause 2 → add the calling user/group to `actorRule`. Cause 3 → add the actor process type to `executableRule`. Cause 4 → adjust tags on the resource or policy. Cause 5 → see [plugins/actor/impl.md — Robot intent](
|
|
103
|
+
**Fix:** Cause 1 → narrow selector `resourceType`/`tags`. Cause 2 → add the calling user/group to `actorRule`. Cause 3 → add the actor process type to `executableRule`. Cause 4 → adjust tags on the resource or policy. Cause 5 → see [plugins/actor/impl.md — Robot intent](../../access-policy/plugins/actor/impl.md) for the User-fallback pattern.
|
|
104
104
|
|
|
105
105
|
---
|
|
106
106
|
|
|
@@ -133,7 +133,7 @@ Named failure patterns with symptom → cause → investigation → fix. Match t
|
|
|
133
133
|
```
|
|
134
134
|
4. Verify the resource's tags in the Resource Catalog match the selector's tag filter.
|
|
135
135
|
|
|
136
|
-
**Fix:** Cause 1 → broaden selector or add a new policy covering the gap. Cause 2 → update status to `Active`. Cause 3 → correct tags on resource or policy. Cause 4 → reframe deny intent as allow-only (see [plugins/tags/planning.md — Deny-to-Allow flip](
|
|
136
|
+
**Fix:** Cause 1 → broaden selector or add a new policy covering the gap. Cause 2 → update status to `Active`. Cause 3 → correct tags on resource or policy. Cause 4 → reframe deny intent as allow-only (see [plugins/tags/planning.md — Deny-to-Allow flip](../../access-policy/plugins/tags/planning.md#deny-to-allow-flip)). Cause 5 → use correct enum values from [plugins/selector/impl.md](../../access-policy/plugins/selector/impl.md).
|
|
137
137
|
|
|
138
138
|
---
|
|
139
139
|
|
|
@@ -165,7 +165,7 @@ Named failure patterns with symptom → cause → investigation → fix. Match t
|
|
|
165
165
|
uip gov aops-policy deployment user get "$USER_ID" --output json
|
|
166
166
|
```
|
|
167
167
|
|
|
168
|
-
**Fix:** Cause 1 → deploy a policy via [aops-policy-deploy-guide.md](
|
|
168
|
+
**Fix:** Cause 1 → deploy a policy via [aops-policy-deploy-guide.md](../../aops-policy/aops-policy-deploy-guide.md). Cause 2 → redeploy to the correct tenant. Cause 3 → use the product `name` (not label) from `product list`. Cause 4 → remove the `null` override or deploy a policy at a broader scope.
|
|
169
169
|
|
|
170
170
|
---
|
|
171
171
|
|
|
@@ -198,4 +198,4 @@ Named failure patterns with symptom → cause → investigation → fix. Match t
|
|
|
198
198
|
```
|
|
199
199
|
4. For Access — check error message in response `Data.errors`.
|
|
200
200
|
|
|
201
|
-
**Fix:** Cause 1 → use `name` from `product list`. Cause 2 → fix JSON (validate with `jq`). Cause 3 → switch to `enforcement: "Allow"`. Cause 4 → add `"values": ["*"]` to selector entries. Cause 5 → choose a different name. Cause 6 → regenerate from template via [configure-aops-policy-data-guide.md](
|
|
201
|
+
**Fix:** Cause 1 → use `name` from `product list`. Cause 2 → fix JSON (validate with `jq`). Cause 3 → switch to `enforcement: "Allow"`. Cause 4 → add `"values": ["*"]` to selector entries. Cause 5 → choose a different name. Cause 6 → regenerate from template via [configure-aops-policy-data-guide.md](../../aops-policy/configure-aops-policy-data-guide.md).
|