@uipath/skills 1.199.0 → 1.200.0
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 +14 -8
- package/README.md +18 -3
- package/assets/skill-status.json +9 -1
- package/assets/uip-catalog-snapshot.json +227 -21
- package/package.json +11 -2
- package/scripts/npm-package-lifecycle.mjs +46 -0
- package/skills/uipath-admin/SKILL.md +5 -1
- package/skills/uipath-admin/references/audit-commands.md +1 -1
- package/skills/uipath-admin/references/audit-workflow-guide.md +9 -0
- package/skills/uipath-agents/SKILL.md +2 -2
- package/skills/uipath-agents/references/lowcode/capabilities/context/index.md +7 -0
- package/skills/uipath-agents/references/lowcode/capabilities/integration-service/integration-service.md +5 -6
- package/skills/uipath-agents/references/lowcode/critical-rules/critical-rules.md +1 -1
- package/skills/uipath-agents/references/lowcode/evaluations/evaluation-sets.md +5 -0
- package/skills/uipath-agents/references/lowcode/project-lifecycle.md +3 -3
- package/skills/uipath-agents/references/lowcode/prompting/autonomous-agent-prompting-guide.md +3 -2
- package/skills/uipath-api-workflow/SKILL.md +2 -1
- package/skills/uipath-api-workflow/references/cli-reference.md +3 -3
- package/skills/uipath-coded-apps/SKILL.md +3 -2
- package/skills/uipath-coded-apps/assets/fixtures/governance-dashboard-starter-kit.tar.gz +0 -0
- package/skills/uipath-coded-apps/assets/templates/web-app-template.md +1 -1
- package/skills/uipath-coded-apps/references/create-web-app.md +60 -48
- package/skills/uipath-coded-apps/references/dashboards/CAPABILITY.md +2 -2
- package/skills/uipath-coded-apps/references/dashboards/plugins/build/impl.md +2 -2
- package/skills/uipath-coded-apps/references/dashboards/primitives/tier-resolution.md +16 -16
- package/skills/uipath-coded-apps/references/oauth-scopes.md +28 -272
- package/skills/uipath-coded-apps/references/sdk/action-center.md +26 -243
- package/skills/uipath-coded-apps/references/sdk/agents.md +20 -130
- package/skills/uipath-coded-apps/references/sdk/conversational-agent.md +52 -706
- package/skills/uipath-coded-apps/references/sdk/data-fabric.md +20 -237
- package/skills/uipath-coded-apps/references/sdk/feedback.md +4 -139
- package/skills/uipath-coded-apps/references/sdk/governance-traces.md +7 -55
- package/skills/uipath-coded-apps/references/sdk/governance.md +4 -44
- package/skills/uipath-coded-apps/references/sdk/imports.md +77 -35
- package/skills/uipath-coded-apps/references/sdk/maestro.md +29 -406
- package/skills/uipath-coded-apps/references/sdk/orchestrator.md +30 -324
- package/skills/uipath-coded-apps/references/sdk/pagination.md +9 -67
- package/skills/uipath-coded-apps/references/sdk/traces.md +8 -43
- package/skills/uipath-functions/SKILL.md +23 -23
- package/skills/uipath-governance/SKILL.md +5 -4
- package/skills/uipath-governance/references/cli-cheatsheet.md +2 -1
- package/skills/uipath-governance/references/compliance-pack/coverage/impl.md +143 -58
- package/skills/uipath-governance/references/compliance-pack/restore/impl.md +61 -0
- package/skills/uipath-human-in-the-loop/SKILL.md +4 -2
- package/skills/uipath-insights/SKILL.md +17 -18
- package/skills/uipath-ixp/SKILL.md +12 -7
- package/skills/uipath-ixp/references/cli-reference.md +71 -9
- package/skills/uipath-ixp/references/improve-prompts-guide.md +23 -9
- package/skills/uipath-ixp/references/label-documents-guide.md +33 -5
- package/skills/uipath-maestro-bpmn/SKILL.md +15 -14
- package/skills/uipath-maestro-bpmn/references/cli-conventions.md +15 -6
- package/skills/uipath-maestro-bpmn/references/structural-bpmn.md +18 -17
- package/skills/uipath-maestro-case/SKILL.md +46 -33
- package/skills/uipath-maestro-case/assets/templates/sdd-template.md +77 -37
- package/skills/uipath-maestro-case/assets/templates/sdd-viewer.html +0 -2
- package/skills/uipath-maestro-case/references/bindings-and-expressions.md +3 -1
- package/skills/uipath-maestro-case/references/bindings-v2-sync.md +2 -2
- package/skills/uipath-maestro-case/references/brownfield.md +15 -5
- package/skills/uipath-maestro-case/references/case-commands.md +19 -3
- package/skills/uipath-maestro-case/references/case-editing-operations.md +24 -21
- package/skills/uipath-maestro-case/references/case-schema.md +38 -16
- package/skills/uipath-maestro-case/references/connector-trigger-common.md +15 -8
- package/skills/uipath-maestro-case/references/evals/evals.json +35 -18
- package/skills/uipath-maestro-case/references/implementation.md +86 -71
- package/skills/uipath-maestro-case/references/phase-0-interview.md +92 -23
- package/skills/uipath-maestro-case/references/phased-execution.md +70 -55
- package/skills/uipath-maestro-case/references/placeholder-tasks.md +5 -5
- package/skills/uipath-maestro-case/references/planning.md +57 -9
- package/skills/uipath-maestro-case/references/plugins/case/impl-json.md +7 -5
- package/skills/uipath-maestro-case/references/plugins/case/planning.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/conditions/case-exit-conditions/impl-json.md +5 -5
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/impl-json.md +41 -5
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-entry-conditions/planning.md +27 -3
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/impl-json.md +6 -6
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/planning.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/impl-json.md +20 -7
- package/skills/uipath-maestro-case/references/plugins/conditions/task-entry-conditions/planning.md +37 -4
- package/skills/uipath-maestro-case/references/plugins/sla/impl-json.md +24 -13
- package/skills/uipath-maestro-case/references/plugins/sla/planning.md +9 -3
- package/skills/uipath-maestro-case/references/plugins/stages/impl-json.md +4 -0
- package/skills/uipath-maestro-case/references/plugins/stages/planning.md +4 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/action/impl-json.md +3 -1
- 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 +3 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/planning.md +4 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/impl-json.md +3 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/planning.md +4 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/case-management/impl-json.md +3 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/case-management/planning.md +4 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-trigger/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/tasks/create-inline-common.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/process/impl-json.md +3 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/process/planning.md +6 -4
- package/skills/uipath-maestro-case/references/plugins/tasks/rpa/impl-json.md +3 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/rpa/planning.md +4 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/impl-json.md +4 -3
- package/skills/uipath-maestro-case/references/plugins/tasks/wait-for-timer/planning.md +4 -0
- package/skills/uipath-maestro-case/references/plugins/triggers/event/impl-json.md +17 -14
- package/skills/uipath-maestro-case/references/plugins/triggers/event/planning.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/triggers/manual/impl-json.md +13 -10
- package/skills/uipath-maestro-case/references/plugins/triggers/timer/impl-json.md +18 -16
- package/skills/uipath-maestro-case/references/plugins/triggers/timer/planning.md +2 -2
- package/skills/uipath-maestro-case/references/plugins/variables/bindings/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +11 -9
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +6 -2
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/planning.md +19 -1
- package/skills/uipath-maestro-case/references/registry-discovery.md +3 -3
- package/skills/uipath-maestro-case/references/sdd-generation-rules.md +155 -51
- package/skills/uipath-maestro-case/references/sla-response-shapes.md +74 -0
- package/skills/uipath-maestro-flow/SKILL.md +4 -3
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +3 -0
- package/skills/uipath-maestro-flow/references/author/references/editing-operations-json.md +10 -17
- package/skills/uipath-maestro-flow/references/author/references/editing-operations.md +1 -1
- package/skills/uipath-maestro-flow/references/author/references/greenfield.md +8 -6
- 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 +4 -9
- package/skills/uipath-maestro-flow/references/author/references/plugins/agentic-process/impl.md +3 -7
- package/skills/uipath-maestro-flow/references/author/references/plugins/api-workflow/impl.md +5 -8
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector/impl.md +11 -4
- package/skills/uipath-maestro-flow/references/author/references/plugins/flow/impl.md +3 -7
- package/skills/uipath-maestro-flow/references/author/references/plugins/inline-agent/impl.md +14 -17
- package/skills/uipath-maestro-flow/references/author/references/plugins/ixp/impl.md +60 -13
- package/skills/uipath-maestro-flow/references/author/references/plugins/queue/impl.md +2 -14
- package/skills/uipath-maestro-flow/references/author/references/plugins/rpa/impl.md +4 -9
- package/skills/uipath-maestro-flow/references/author/references/plugins/script/impl.md +3 -0
- package/skills/uipath-maestro-flow/references/author/references/plugins/subflow/impl.md +5 -9
- package/skills/uipath-maestro-flow/references/author/references/plugins/transform/impl.md +13 -0
- package/skills/uipath-maestro-flow/references/shared/action-nodes.md +2 -2
- package/skills/uipath-maestro-flow/references/shared/file-format.md +16 -12
- package/skills/uipath-maestro-flow/references/shared/variables-and-expressions.md +3 -3
- package/skills/uipath-planner/SKILL.md +1 -1
- package/skills/uipath-planner/references/non-pdd-lane-guide.md +1 -1
- package/skills/uipath-platform/SKILL.md +1 -1
- package/skills/uipath-platform/references/data-fabric/bulk-import.md +10 -27
- package/skills/uipath-platform/references/data-fabric/choice-sets.md +7 -64
- package/skills/uipath-platform/references/data-fabric/data-fabric.md +76 -267
- package/skills/uipath-platform/references/data-fabric/entity-schema.md +23 -99
- package/skills/uipath-platform/references/data-fabric/file-attachments.md +5 -28
- package/skills/uipath-platform/references/data-fabric/filter-platform-contract.md +2 -2
- package/skills/uipath-platform/references/data-fabric/records-query.md +11 -32
- package/skills/uipath-platform/references/integration-service/reference-resolution.md +6 -2
- package/skills/uipath-platform/references/licensing/consumables-report.md +18 -0
- package/skills/uipath-platform/references/licensing/licensing.md +1 -1
- package/skills/uipath-platform/references/orchestrator/run-jobs.md +9 -2
- package/skills/uipath-platform/references/orchestrator/setup-environment.md +9 -0
- package/skills/uipath-platform/references/traces/feedback.md +4 -1
- package/skills/uipath-process-mining/SKILL.md +97 -0
- package/skills/uipath-process-mining/references/app-types.md +66 -0
- package/skills/uipath-process-mining/references/data-model.md +130 -0
- package/skills/uipath-process-mining/references/lifecycle-and-rbac.md +67 -0
- package/skills/uipath-process-mining/references/model-editing.md +112 -0
- package/skills/uipath-process-mining/references/pre-flight.md +119 -0
- package/skills/uipath-process-mining/references/querying.md +66 -0
- package/skills/uipath-process-mining/references/transformations.md +80 -0
- package/skills/uipath-process-mining/references/uip-pm-cli.md +145 -0
- package/skills/uipath-review/SKILL.md +23 -18
- package/skills/uipath-review/references/agents/agent-grading-rubric.md +1 -1
- package/skills/uipath-review/references/agents/agent-review-checklist.md +0 -4
- package/skills/uipath-review/references/agents/agents-coded-rules.md +1 -10
- package/skills/uipath-review/references/agents/agents-lowcode-rules.md +3 -6
- package/skills/uipath-review/references/agents/guardrails/coded-guardrails-review.md +62 -14
- package/skills/uipath-review/references/agents/guardrails/guardrails-review.md +60 -4
- package/skills/uipath-review/references/review-workflow-guide.md +3 -2
- package/skills/uipath-review/references/rule-catalog-workflow.md +4 -5
- package/skills/uipath-rpa/.maintenance/pattern-card-maintenance.md +20 -0
- package/skills/uipath-rpa/SKILL.md +57 -55
- package/skills/uipath-rpa/agents/uipath-project-discovery-agent.md +75 -19
- package/skills/uipath-rpa/assets/codedworkflow-template.md +245 -11
- package/skills/uipath-rpa/references/cli-reference.md +229 -6
- package/skills/uipath-rpa/references/coded/codedworkflow-reference.md +158 -2
- package/skills/uipath-rpa/references/coded/integration-service-guide.md +6 -5
- package/skills/uipath-rpa/references/coded/operations-guide.md +273 -5
- package/skills/uipath-rpa/references/coded-vs-xaml-guide.md +3 -3
- package/skills/uipath-rpa/references/common-pattern-card.md +303 -0
- package/skills/uipath-rpa/references/data-manipulation-guide.md +18 -3
- package/skills/uipath-rpa/references/debugging.md +0 -2
- package/skills/uipath-rpa/references/environment-setup.md +309 -1
- package/skills/uipath-rpa/references/error-handling-guide.md +1 -1
- package/skills/uipath-rpa/references/execution-maps-guide.md +110 -0
- package/skills/uipath-rpa/references/is-connector-xaml-guide.md +58 -4
- package/skills/uipath-rpa/references/legacy/activity-docs/Excel.md +1 -1
- package/skills/uipath-rpa/references/legacy/activity-docs/_DU-PROCESS.md +0 -2
- package/skills/uipath-rpa/references/legacy/activity-docs/_INDEX.md +2 -2
- package/skills/uipath-rpa/references/legacy/activity-docs/_PATTERNS.md +1 -1
- package/skills/uipath-rpa/references/legacy/activity-docs/_REFRAMEWORK.md +2 -7
- package/skills/uipath-rpa/references/legacy/cli-reference.md +599 -0
- package/skills/uipath-rpa/references/legacy/error-handling-guide.md +2 -2
- package/skills/uipath-rpa/references/legacy/legacy-mode-guide.md +16 -16
- package/skills/uipath-rpa/references/legacy/project-organization-guide.md +2 -2
- package/skills/uipath-rpa/references/legacy/selector-guide.md +163 -1
- package/skills/uipath-rpa/references/legacy/testing-guide.md +246 -3
- package/skills/uipath-rpa/references/legacy/xaml-basics-and-rules.md +267 -2
- package/skills/uipath-rpa/references/library-authoring-guide.md +4 -3
- package/skills/uipath-rpa/references/testing-guide.md +2 -28
- package/skills/uipath-rpa/references/trigger-pattern-guide.md +1 -1
- package/skills/uipath-rpa/references/xaml/canvas-layout-guide.md +140 -33
- package/skills/uipath-rpa/references/xaml/common-pitfalls.md +57 -240
- package/skills/uipath-rpa/references/xaml/csharp-activity-binding-guide.md +42 -2
- package/skills/uipath-rpa/references/xaml/long-running-workflow-guide.md +1 -1
- package/skills/uipath-rpa/references/xaml/xaml-basics-and-rules.md +194 -228
- package/skills/uipath-solution/references/activate-and-manage.md +22 -0
- package/skills/uipath-solution/references/develop-solution.md +26 -2
- package/skills/uipath-solution/references/pack-and-deploy.md +43 -9
- package/skills/uipath-test/SKILL.md +4 -4
- package/skills/uipath-test/references/playwright-first-mile-guide.md +5 -4
- package/skills/uipath-test/references/publish-and-link-guide.md +2 -2
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/click-silent-no-op.md +5 -5
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/playbooks/queue-operation-failed.md +20 -4
- package/skills/uipath-troubleshoot/references/activity-packages/classic-activities/summary.md +1 -1
- package/skills/uipath-troubleshoot/references/activity-packages/csv-activities/playbooks/read-csv-file-not-found.md +12 -0
- package/skills/uipath-troubleshoot/references/activity-packages/mail-activities/playbooks/send-outlook-mail-failures.md +12 -1
- package/skills/uipath-troubleshoot/references/activity-packages/system-activities/playbooks/get-asset-activity-bug-silent-failure.md +2 -1
- package/skills/uipath-troubleshoot/references/activity-packages/terminal-activities/playbooks/terminal-session-connection-failed.md +5 -1
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/click-silent-no-op.md +5 -5
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/dependency-version-conflict.md +27 -6
- package/skills/uipath-troubleshoot/references/activity-packages/ui-automation/playbooks/napplicationcard-view-generation-failed.md +10 -0
- 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/summary.md +1 -1
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/overview.md +4 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/http-request-auth-401-403.md +44 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/http-request-connection-failure.md +2 -1
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/http-request-content-type-rejected.md +37 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/http-request-proxy-blocked.md +39 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/package-version-mismatch.md +42 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/securestring-misuse-analyzer.md +41 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/summary.md +5 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connector-null-reference.md +14 -1
- package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connector-runtime-exception.md +2 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/is-activities-prerelease-not-found.md +39 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/response-content-too-large.md +41 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/summary.md +9 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/console-conflict-login-to-console.md +40 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/credential-store-unavailable.md +42 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/executor-start-transient-rerun.md +49 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-consecutive-system-exceptions.md +47 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-faulted-session-timeout.md +19 -19
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-output-too-large.md +47 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-stopped-generic-exit-code.md +55 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/known-issue-robot-defect.md +40 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/platform-incident-correlation.md +45 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/screen-capture-handle-invalid.md +43 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/serverless-license-quota.md +43 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/serverless-time-limit-exceeded.md +34 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/workstation-in-use-machine-slots.md +40 -0
- package/skills/uipath-troubleshoot/references/products/orchestrator/summary.md +13 -1
- package/version-manifest.json +2 -2
- package/skills/uipath-maestro-bpmn/validator/README.md +0 -224
- package/skills/uipath-maestro-bpmn/validator/model.mjs +0 -419
- package/skills/uipath-maestro-bpmn/validator/package.json +0 -17
- package/skills/uipath-maestro-bpmn/validator/rules.mjs +0 -1403
- package/skills/uipath-maestro-bpmn/validator/samples/invalid-conditional-and-variable.bpmn +0 -25
- package/skills/uipath-maestro-bpmn/validator/samples/valid-baseline.bpmn +0 -52
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/A.2.0.bpmn +0 -157
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/A.2.1.bpmn +0 -333
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/B.1.0.bpmn +0 -598
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/B.2.0.bpmn +0 -1709
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.2.0.bpmn +0 -564
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.3.0.bpmn +0 -671
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.4.0.bpmn +0 -1045
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.5.0.bpmn +0 -1176
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.6.0.bpmn +0 -670
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.7.0.bpmn +0 -466
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Can_Parse_Complex_Process_With_Task_Gateway_BoundaryEvent_etc.bpmn +0 -74
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/ExclusiveGatewayDefaultFlow.bpmn +0 -32
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/ExternalAgentWorkflow.bpmn +0 -62
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Golden_Scenario.initial.bpmn +0 -361
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/InclusiveJoinRouteAwayBranch.bpmn +0 -62
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_AsyncExecution_And_Create_CorrectModel.bpmn +0 -74
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_IXP_ExtractionValidation_And_Create_CorrectModel.bpmn +0 -35
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_IXP_Extraction_FileUpload_And_Create_CorrectModel.bpmn +0 -33
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_IXP_Extraction_JobAttachment_And_Create_CorrectModel.bpmn +0 -35
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_SubProcess_With_Multiple_Element_Types.bpmn +0 -76
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/StartEventWithOutputs.bpmn +0 -36
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/StartGatewayEnd.bpmn +0 -44
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/all elements.bpmn +0 -516
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/all_sequence_flow_types.bpmn +0 -173
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/demo.bpmn +0 -181
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/subprocess-example-001-collapsed.bpmn +0 -126
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/subprocess-example-001-expanded.bpmn +0 -122
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/subprocess-example-003-collapsed_deeply-nested.bpmn +0 -438
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/A.1.0.bpmn +0 -87
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/A.3.0.bpmn +0 -165
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ApiWorkflow.bpmn +0 -39
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/BpmnNestedSubProcessTests.bpmn +0 -102
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/BpmnTimerBoundaryEvents.bpmn +0 -160
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/BpmnXmlWithCatchAllErrorEventSubProcess.bpmn +0 -45
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/BpmnXmlWithSpecificErrorEventSubProcess.bpmn +0 -46
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/CaseManagementWithConstantIdentifier.bpmn +0 -218
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ErrorBoundary.bpmn +0 -78
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ErrorPropagationInEventSubprocess.bpmn +0 -340
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/EventBasedGatewayFirstCatcherWins.bpmn +0 -56
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Example-EventBasedGateway.bpmn +0 -117
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ExclusiveGatewayConditional.bpmn +0 -45
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ExclusiveGatewaySharedEndEvent.bpmn +0 -45
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ExclusiveWithParallelGateway.bpmn +0 -68
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/FourScriptTasks.bpmn +0 -84
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/HitlTaskOnly.bpmn +0 -55
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/InclusiveGatewayForkJoin.bpmn +0 -69
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_BPMN_Elements_And_Create_CorrectModel.bpmn +0 -20
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_HttpRequest_ServiceTask_And_Create_Correct_Model.bpmn +0 -34
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_MessageBoundaryEvent_And_Create_CorrectModel.bpmn +0 -87
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_Script_Task_V2_And_Create_Correct_Model.bpmn +0 -31
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_Sets_Containers_Properly.bpmn +0 -129
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ScriptWritesVariableThenGatewayBranches.bpmn +0 -59
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/boundaryevent.bpmn +0 -30
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/collapsed-subprocess.bpmn +0 -83
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/connectable-types.bpmn +0 -85
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/extensions-orchestrator-start-job.bpmn +0 -80
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/multiparticipantpool.bpmn +0 -77
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/nestedsubprocess.bpmn +0 -36
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/simple.bpmn +0 -59
- package/skills/uipath-maestro-bpmn/validator/test/integration.test.mjs +0 -146
- package/skills/uipath-maestro-bpmn/validator/test/model-helpers.mjs +0 -42
- package/skills/uipath-maestro-bpmn/validator/test/ported-rule-tests.mjs +0 -983
- package/skills/uipath-maestro-bpmn/validator/test/run-tests.mjs +0 -530
- package/skills/uipath-maestro-bpmn/validator/uipath-moddle.v1.json +0 -715
- package/skills/uipath-maestro-bpmn/validator/validate-bpmn.mjs +0 -164
- package/skills/uipath-review/references/agents/agents-common-rules.md +0 -32
- package/skills/uipath-rpa/assets/before-after-hooks-template.md +0 -115
- package/skills/uipath-rpa/assets/helper-utility-template.md +0 -22
- package/skills/uipath-rpa/assets/testcase-template.md +0 -92
- package/skills/uipath-rpa/references/coded/coding-guidelines.md +0 -255
- package/skills/uipath-rpa/references/coded/inspect-package-guide.md +0 -80
- package/skills/uipath-rpa/references/coded/third-party-packages-guide.md +0 -67
- package/skills/uipath-rpa/references/connector-capabilities.md +0 -79
- package/skills/uipath-rpa/references/legacy/activity-docs/Testing.md +0 -95
- package/skills/uipath-rpa/references/legacy/activity-docs/UIAutomation.md +0 -159
- package/skills/uipath-rpa/references/legacy/common-pitfalls.md +0 -318
- package/skills/uipath-rpa/references/legacy/discovery-workflow.md +0 -147
- package/skills/uipath-rpa/references/legacy/environment-setup.md +0 -78
- package/skills/uipath-rpa/references/legacy/project-structure.md +0 -206
- package/skills/uipath-rpa/references/legacy/test-data-guide.md +0 -142
- package/skills/uipath-rpa/references/legacy/validation-and-fixing.md +0 -154
- package/skills/uipath-rpa/references/project-structure-guide.md +0 -168
- package/skills/uipath-rpa/references/project-structure.md +0 -135
- package/skills/uipath-rpa/references/publishing-guide.md +0 -80
- package/skills/uipath-rpa/references/validation-guide.md +0 -170
- package/skills/uipath-rpa/references/xaml/csharp-expression-pitfalls.md +0 -43
- package/skills/uipath-rpa/references/xaml/flowchart-guide.md +0 -113
- package/skills/uipath-rpa/references/xaml/workflow-guide.md +0 -258
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: uipath-functions
|
|
3
|
-
description: "UiPath Coded Functions — deterministic Python units built via `uip
|
|
3
|
+
description: "UiPath Coded Functions — deterministic Python units built via `uip function` (new/init/run/pack/publish); the `functions` map in `uipath.json`, `entry-points.json`, Pydantic Input/Output. Rule-based logic, data transforms, ERP/Integration Service connector calls — no LLM reasoning or agent loop. For LLM/agentic projects (LangGraph, LlamaIndex, OpenAI Agents, `agent.json`)→uipath-agents."
|
|
4
4
|
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -23,7 +23,7 @@ A Python Coded Function can be invoked from any UiPath surface:
|
|
|
23
23
|
| Coded Agents (LangGraph / LlamaIndex / OpenAI Agents) | Called as a tool or step |
|
|
24
24
|
| Other Coded Functions | Direct Python call or Orchestrator job |
|
|
25
25
|
| Orchestrator API | `POST /Jobs/StartJobs` |
|
|
26
|
-
| CLI | `uip
|
|
26
|
+
| CLI | `uip function pack` → `uip function publish` |
|
|
27
27
|
|
|
28
28
|
### Python Functions vs JS Functions
|
|
29
29
|
|
|
@@ -33,9 +33,9 @@ A Python Coded Function can be invoked from any UiPath surface:
|
|
|
33
33
|
| **Invocation** | Maestro, Flow, Agents, Orchestrator API | HTTP endpoint (BFF for Coded Apps) |
|
|
34
34
|
| **Runtime** | Serverless or Local Unattended Robot | Serverless HTTP shared tier |
|
|
35
35
|
| **SDK access** | Full UiPath Python SDK (assets, buckets, queues, connections) | Workload token forwarding only |
|
|
36
|
-
| **Scaffold** | `uip
|
|
37
|
-
| **Init** | `uip
|
|
38
|
-
| **Local dev** | `uip
|
|
36
|
+
| **Scaffold** | `uip function new <name> --language py` | `uip function new <name> --language ts` (default) |
|
|
37
|
+
| **Init** | `uip function init` (generates entry-points.json) | Not needed |
|
|
38
|
+
| **Local dev** | `uip function run` | `uip function serve` + `uip function run` |
|
|
39
39
|
| **Best for** | Agentic process steps, ERP integration, document AI, data pipelines | Backend-for-Frontend for Coded Apps |
|
|
40
40
|
|
|
41
41
|
Use Python when the logic needs job semantics, platform SDK access, or is invoked from Maestro/agents. Use JS when the caller is a Coded App frontend and low HTTP latency matters.
|
|
@@ -44,17 +44,17 @@ Use Python when the logic needs job semantics, platform SDK access, or is invoke
|
|
|
44
44
|
|
|
45
45
|
## CLI Reference
|
|
46
46
|
|
|
47
|
-
All Python Coded Function lifecycle commands use `uip
|
|
47
|
+
All Python Coded Function lifecycle commands use `uip function`:
|
|
48
48
|
|
|
49
49
|
```bash
|
|
50
|
-
uip
|
|
51
|
-
uip
|
|
52
|
-
uip
|
|
53
|
-
uip
|
|
54
|
-
uip
|
|
50
|
+
uip function new <name> -l py # scaffold a new Python Functions project (--language py required)
|
|
51
|
+
uip function init # Python only — generate entry-points.json, bindings.json, project.uiproj
|
|
52
|
+
uip function pack # pack to .nupkg for deployment
|
|
53
|
+
uip function publish # upload .nupkg to Orchestrator (prompts for feed, or use --feed-id)
|
|
54
|
+
uip function push # sync project to Studio Web
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
-
> `uip
|
|
57
|
+
> `uip function run` works for both Python and JS/TS. `uip function serve` is **JS/TS only** — it starts the local HTTP server that `run` invokes against.
|
|
58
58
|
|
|
59
59
|
---
|
|
60
60
|
|
|
@@ -63,9 +63,9 @@ uip functions push # sync project to Studio Web
|
|
|
63
63
|
### Step 1: Scaffold
|
|
64
64
|
|
|
65
65
|
```bash
|
|
66
|
-
uip
|
|
67
|
-
uip
|
|
68
|
-
uip
|
|
66
|
+
uip function new <name> --language py # Python Coded Function
|
|
67
|
+
uip function new <name> --language ts # TypeScript Function (JS/TS, no job semantics)
|
|
68
|
+
uip function new <name> --language js # JavaScript Function (JS/TS, no job semantics)
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
**`--language py` is required for Python.** The default language is TypeScript — omitting `--language` scaffolds a JS/TS project. Always pass `-l py` or `--language py` when building a Python Coded Function.
|
|
@@ -174,7 +174,7 @@ No `[build-system]` section. The project is identified as a Coded Function by th
|
|
|
174
174
|
### Step 6: Generate Entry Points
|
|
175
175
|
|
|
176
176
|
```bash
|
|
177
|
-
uip
|
|
177
|
+
uip function init
|
|
178
178
|
```
|
|
179
179
|
|
|
180
180
|
Python only. Discovers entrypoints and generates `entry-points.json`, `bindings.json`, and `project.uiproj`. Must run before `pack` or `push`. Re-run whenever Input/Output schemas or the entrypoint registration in `uipath.json` changes.
|
|
@@ -226,28 +226,28 @@ class Input(BaseModel):
|
|
|
226
226
|
attachment: Attachment
|
|
227
227
|
```
|
|
228
228
|
|
|
229
|
-
`uip
|
|
229
|
+
`uip function init` recognizes the `Attachment` type and emits `x-uipath-resource-kind: JobAttachment` in `entry-points.json` — the schema Studio Web and Orchestrator read to render a file picker for that field. Access fields snake_case: `attachment.full_name`, `attachment.content`.
|
|
230
230
|
|
|
231
231
|
### Step 8: Pack and Publish
|
|
232
232
|
|
|
233
233
|
```bash
|
|
234
|
-
uip
|
|
235
|
-
uip
|
|
236
|
-
uip
|
|
234
|
+
uip function pack # creates .nupkg
|
|
235
|
+
uip function publish # upload to Orchestrator (interactive feed picker)
|
|
236
|
+
uip function publish --feed-id <FEED_ID> # CI/non-interactive
|
|
237
237
|
```
|
|
238
238
|
|
|
239
239
|
To sync to Studio Web instead of publishing to Orchestrator:
|
|
240
240
|
|
|
241
241
|
```bash
|
|
242
|
-
uip
|
|
242
|
+
uip function push
|
|
243
243
|
```
|
|
244
244
|
|
|
245
245
|
## Important Notes
|
|
246
246
|
|
|
247
247
|
- `UiPath()` must never be instantiated at module level — always inside a function body
|
|
248
248
|
- The `functions` map in `uipath.json` marks the project as a Coded Function (`determine_project_type()` reads the entrypoint type from `uipath.json`)
|
|
249
|
-
- `uip
|
|
249
|
+
- `uip function init` must run before `pack` or `push` — it generates `entry-points.json`
|
|
250
250
|
- Python Functions have full job semantics: Orchestrator job ID, audit trail, retry, scheduling
|
|
251
251
|
- JS Functions have no job semantics and cannot be started as Orchestrator jobs — use Python when the caller is Maestro, a Flow, or an agent
|
|
252
|
-
- `uip
|
|
252
|
+
- `uip function run` works for both Python and JS/TS local execution; `uip function serve` is JS/TS only (starts the local HTTP server that `run` invokes against)
|
|
253
253
|
- If cloud-backed work requires authentication, run `uip login --organization "<ORG>" --tenant "<TENANT>" --output json`.
|
|
@@ -50,7 +50,7 @@ Activate on **any** governance / policy / rule intent — even when the user did
|
|
|
50
50
|
2. **Classification lives at the top.** Mechanic libraries assume the branch is chosen. Do not let those flows ask "did you mean the other branch?" — that question belongs here.
|
|
51
51
|
3. **One branch per mutation.** A single user request produces a policy on one branch only. If the user wants both, run two sequential flows with two confirmation gates.
|
|
52
52
|
4. **Each mechanic owns its own Critical Rules.** Once routed, follow the branch's rules — do not relax them from this top level.
|
|
53
|
-
5. **Never apply compliance settings without
|
|
53
|
+
5. **Never apply, restore, or remove compliance settings without user confirmation.** For apply: run posture analysis first, show the plan (summary + detail). In every case: ask, then END YOUR REPLY — never run the mutating command in the same response as the confirmation question. Proceed only on an explicit `y` in the user's next message. The user's original request is intent, not consent. Sole exception: the user explicitly waived confirmation in advance (e.g., "don't ask for confirmation") — treat the waiver as `y`.
|
|
54
54
|
6. **Always show a receipt after any apply.** Present the post-apply report (settings configured, manual steps needed, Applied by / date) so the user has a record. No local file write is needed — the CLI and UiPath platform are the source of truth.
|
|
55
55
|
7. **Compliance Standards is a preview feature — gate every compliance-pack flow.** Append the preview disclaimer to user-facing compliance-standard responses, and on any `uip gov compliance-packs …` call returning **HTTP 403 / Forbidden**, stop immediately (do not retry, run no further compliance commands) and tell the user the feature requires enrolling in the preview program. Exact wording + placement in [`references/compliance-pack/preview-gate.md`](./references/compliance-pack/preview-gate.md). A **403** is preview-not-enabled; a **401** is a normal login failure — do NOT conflate them.
|
|
56
56
|
8. **Always `uip login` before any `uip gov …` command.** `evaluate` (Access) additionally requires tenant-scoped login — see [`access-policy-overview-guide.md` § Critical Rules](./references/access-policy/access-policy-overview-guide.md#critical-rules).
|
|
@@ -58,7 +58,7 @@ Activate on **any** governance / policy / rule intent — even when the user did
|
|
|
58
58
|
|
|
59
59
|
## Workflow
|
|
60
60
|
|
|
61
|
-
1. **Classify the intent silently — never announce routing to the user.** Internal flow labels (AOps / Access / Compliance standard) are implementation details; the user sees only the outcome. Read [`references/disambiguation-guide.md`](./references/disambiguation-guide.md) — it lists the strong signals for each flow, the phrase patterns that need disambiguation, and the canonical worked example. If a strong signal matches, route silently. If the phrasing is ambiguous (matches AOps or Access), ask the [disambiguation question](#disambiguation-question) and wait for a digit reply. If the user replies with anything other than `1` or `2`, treat it as a re-statement of intent and re-classify. **Do not run any CLI command before classification is settled** — the disambiguation question itself does not need `uip`, and an unrelated request (platform ops, agent authoring) must redirect to a sibling skill before any setup happens here. If the request contains a standard name (`ISO 42001`), `apply standard`, `compliance posture`, `drift check`, `am I compliant`, `is my tenant compliant`, `what packs are available`, `what packs are configured`, `which standards are enabled`, `organization-wide`, or `
|
|
61
|
+
1. **Classify the intent silently — never announce routing to the user.** Internal flow labels (AOps / Access / Compliance standard) are implementation details; the user sees only the outcome. Read [`references/disambiguation-guide.md`](./references/disambiguation-guide.md) — it lists the strong signals for each flow, the phrase patterns that need disambiguation, and the canonical worked example. If a strong signal matches, route silently. If the phrasing is ambiguous (matches AOps or Access), ask the [disambiguation question](#disambiguation-question) and wait for a digit reply. If the user replies with anything other than `1` or `2`, treat it as a re-statement of intent and re-classify. **Do not run any CLI command before classification is settled** — the disambiguation question itself does not need `uip`, and an unrelated request (platform ops, agent authoring) must redirect to a sibling skill before any setup happens here. If the request contains a standard name (`ISO 42001`), `apply standard`, `compliance posture`, `drift check`, `am I compliant`, `is my tenant compliant`, `what packs are available`, `what packs are configured`, `which standards are enabled`, `organization-wide`, `disable standard`, or `reset` / `restore` / `undo drift on a standard` → route silently to the appropriate compliance standard plugin. Read `partial-apply/planning.md` for scoped requests; `coverage/impl.md` for posture checks; `catalog/impl.md` for discovery; `query/impl.md` for information queries; `full-apply/impl.md` after confirming the posture plan; `disable/impl.md` for removal; `restore/impl.md` for resetting a configured standard back to its recommended settings; `catalog/impl.md` + `state list` for listing currently configured packs.
|
|
62
62
|
2. **Verify `uip` and login** *(only after classification routes to a governance flow).*
|
|
63
63
|
```bash
|
|
64
64
|
which uip && uip --version
|
|
@@ -69,7 +69,7 @@ Activate on **any** governance / policy / rule intent — even when the user did
|
|
|
69
69
|
3. **Route to the chosen mechanic** and follow its flow end-to-end.
|
|
70
70
|
- AOps product policy → [`references/aops-policy/aops-policy-overview-guide.md`](./references/aops-policy/aops-policy-overview-guide.md)
|
|
71
71
|
- Access ToolUsePolicy → [`references/access-policy/access-policy-overview-guide.md`](./references/access-policy/access-policy-overview-guide.md)
|
|
72
|
-
- Compliance standard → use plugin routing from step 1 above (catalog / coverage / full-apply / partial-apply / disable / query)
|
|
72
|
+
- Compliance standard → use plugin routing from step 1 above (catalog / coverage / full-apply / partial-apply / disable / restore / query)
|
|
73
73
|
|
|
74
74
|
## Disambiguation Question
|
|
75
75
|
|
|
@@ -107,7 +107,8 @@ The canonical ambiguous prompt is *"Block ChatGPT for my finance team using Stud
|
|
|
107
107
|
| **Apply full compliance pack** | Run coverage first, then [`references/compliance-pack/full-apply/impl.md`](./references/compliance-pack/full-apply/impl.md) |
|
|
108
108
|
| **Apply specific controls / clauses** | [`references/compliance-pack/partial-apply/planning.md`](./references/compliance-pack/partial-apply/planning.md) |
|
|
109
109
|
| **Remove compliance standard settings** | [`references/compliance-pack/disable/impl.md`](./references/compliance-pack/disable/impl.md) |
|
|
110
|
-
| **
|
|
110
|
+
| **Reset / restore a standard to its recommended settings (undo drift)** | [`references/compliance-pack/restore/impl.md`](./references/compliance-pack/restore/impl.md) |
|
|
111
|
+
| **Query — what does a clause / control recommend?** | `uip gov compliance-packs catalog get <packId> --output json` (e.g. `iso-42001-2023`), then [`references/compliance-pack/query/impl.md`](./references/compliance-pack/query/impl.md) |
|
|
111
112
|
| **Preview disclaimer + 403 opt-in gate (all compliance flows)** | [`references/compliance-pack/preview-gate.md`](./references/compliance-pack/preview-gate.md) |
|
|
112
113
|
|
|
113
114
|
## Anti-patterns
|
|
@@ -186,7 +186,7 @@ All halts write a deploy record (Apply) or patch record (Diagnose).
|
|
|
186
186
|
uip gov compliance-packs catalog list --output json
|
|
187
187
|
uip gov compliance-packs catalog get <packId> --output json
|
|
188
188
|
|
|
189
|
-
# State (tenant-scoped; Policy:Read for coverage/get/list; Policy:Write for enable/disable)
|
|
189
|
+
# State (tenant-scoped; Policy:Read for coverage/get/list; Policy:Write for enable/disable/restore)
|
|
190
190
|
TENANT_ID=$(grep '^UIPATH_TENANT_ID=' ~/.uipath/.auth | cut -d'=' -f2-)
|
|
191
191
|
ORG_ID=$(grep '^UIPATH_ORGANIZATION_ID=' ~/.uipath/.auth | cut -d'=' -f2-)
|
|
192
192
|
|
|
@@ -194,6 +194,7 @@ ORG_ID=$(grep '^UIPATH_ORGANIZATION_ID=' ~/.uipath/.auth | cut -d'=' -f2-)
|
|
|
194
194
|
uip gov compliance-packs state coverage tenant $TENANT_ID <packId> --output json
|
|
195
195
|
uip gov compliance-packs state enable tenant $TENANT_ID <packId> --output json
|
|
196
196
|
uip gov compliance-packs state disable tenant $TENANT_ID <packId> --output json
|
|
197
|
+
uip gov compliance-packs state restore tenant $TENANT_ID <packId> --output json # overwrites live policies — confirm with user first (restore/impl.md)
|
|
197
198
|
uip gov compliance-packs state get tenant $TENANT_ID <packId> --output json
|
|
198
199
|
uip gov compliance-packs state list tenant $TENANT_ID --output json
|
|
199
200
|
|
|
@@ -6,7 +6,7 @@ Compares the compliance standard's recommended settings against what is currentl
|
|
|
6
6
|
|
|
7
7
|
## Command
|
|
8
8
|
|
|
9
|
-
**Pre-condition:** `$SESSION_TEMP/catalog.json` must exist — run `catalog get` first (see `catalog/impl.md`).
|
|
9
|
+
**Pre-condition:** `$SESSION_TEMP/catalog.json` must exist — run `catalog get` first (see `catalog/impl.md`). The coverage response does NOT carry display names for clauses (`ClauseName` comes back null) — the plain-English clause names the template requires come from joining coverage `Clauses[].ClauseId` to catalog `Clauses[].ClauseId` → `ClauseName` in `catalog.json`.
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
# Read the session dir written by catalog get — never create a new one here.
|
|
@@ -14,6 +14,14 @@ SESSION_TEMP=$(cat "$HOME/.uipath-compliance-current-session")
|
|
|
14
14
|
TENANT_ID=$(grep '^UIPATH_TENANT_ID=' ~/.uipath/.auth | cut -d'=' -f2-)
|
|
15
15
|
uip gov compliance-packs state coverage tenant $TENANT_ID <packId> --output json \
|
|
16
16
|
> "$SESSION_TEMP/coverage.json"
|
|
17
|
+
|
|
18
|
+
# Whether the pack is APPLIED is a separate question from what is covered.
|
|
19
|
+
# Coverage cannot answer it (it runs pack-on or pack-off) — this can.
|
|
20
|
+
# A known pack that was never applied returns 200 with Active: false.
|
|
21
|
+
# A 404 means the packId itself is not usable (unknown, or a catalog stub
|
|
22
|
+
# with no bundle) — NOT "not applied"; check it against catalog list.
|
|
23
|
+
uip gov compliance-packs state get tenant $TENANT_ID <packId> --output json \
|
|
24
|
+
> "$SESSION_TEMP/state.json"
|
|
17
25
|
```
|
|
18
26
|
|
|
19
27
|
```powershell
|
|
@@ -22,81 +30,125 @@ $tmpDir = (Get-Content "$env:TEMP\uipath-compliance-current-session.txt" -Raw).T
|
|
|
22
30
|
$tenantId = (Select-String '^UIPATH_TENANT_ID=(.+)' "$env:USERPROFILE\.uipath\.auth").Matches[0].Groups[1].Value
|
|
23
31
|
uip gov compliance-packs state coverage tenant $tenantId <packId> --output json |
|
|
24
32
|
Set-Content "$tmpDir\coverage.json"
|
|
33
|
+
|
|
34
|
+
# Applied-or-not is a separate question — coverage cannot answer it.
|
|
35
|
+
uip gov compliance-packs state get tenant $tenantId <packId> --output json |
|
|
36
|
+
Set-Content "$tmpDir\state.json"
|
|
25
37
|
```
|
|
26
38
|
|
|
27
39
|
## Parse the response
|
|
28
40
|
|
|
29
41
|
CLI output is **PascalCase**. Field names below are exactly as returned by `state coverage`.
|
|
30
42
|
|
|
31
|
-
`Data.DeploymentPolicies[].Status` (product-grain; INTERNAL — never rendered to the user, never projected onto settings).
|
|
32
|
-
- `"in-place"` — product fully satisfied · `"needs-manual-config"` — deployed but ≥1 control still needs manual setup · `"
|
|
33
|
-
-
|
|
43
|
+
`Data.DeploymentPolicies[].Status` (product-grain; INTERNAL — never rendered to the user, never projected onto settings). Four disjoint values:
|
|
44
|
+
- `"in-place"` — product fully satisfied · `"needs-manual-config"` — deployed but ≥1 control still needs manual setup · `"unverifiable"` — pack active but the product's policy is missing (deleted out-of-band), so nothing can be checked · `"new"` — none of the standard's settings are in place for this product
|
|
45
|
+
- `"new"` does NOT mean "no policy". A product lands in `NewCount` either because nothing was ever deployed OR because a live policy has had **every** one of its controls changed away from the standard. In the second case the policy still exists, `PolicyId` is present, and `DriftedControls[]` is populated — the remedy is `restore`, not apply.
|
|
46
|
+
- INTERNAL only; the user-facing posture is driven entirely by clauses + per-setting `Controls[]`. Do NOT gate the all-applied case on `Summary.NewCount == 0` — with the disjoint counts a `needs-manual-config` product leaves `NewCount == 0` yet the pack is not fully applied.
|
|
47
|
+
- `PolicyId` may be **absent entirely** (not null) when the product has no live policy. Do not infer its presence from `Status` — a fully-drifted product is `"new"` and still carries a `PolicyId`. Any step that resolves a `PolicyId` must check for the key and skip the product when it is missing.
|
|
34
48
|
|
|
35
49
|
`Data.Clauses[].Status` (per-control rollup):
|
|
36
50
|
- `"fully-deployed"` — every checkable setting satisfied — display as **Applied** (✓)
|
|
37
|
-
- `"partially-deployed"` — some but not all satisfied — display as **Partially Applied** (◐)
|
|
51
|
+
- `"partially-deployed"` — some but not all satisfied, OR nothing satisfied yet but ⚙ manual configuration is pending — display as **Partially Applied** (◐). A clause showing `0/<n>` with this status is expected, not a data error: pending-manual controls keep a clause out of `"not-deployed"`.
|
|
38
52
|
- `"not-deployed"` — none satisfied — display as **Not Applied** (✗)
|
|
39
53
|
|
|
40
|
-
`Data.Clauses[].
|
|
41
|
-
- `
|
|
42
|
-
- `
|
|
43
|
-
- `
|
|
44
|
-
- `
|
|
45
|
-
- `
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
- `
|
|
50
|
-
- `
|
|
51
|
-
- `
|
|
54
|
+
`Data.Clauses[].Controls[]` (per-setting; present on updated CLI) — the truthful per-setting view:
|
|
55
|
+
- `ControlDisplayName` — setting name
|
|
56
|
+
- `ControlId` — stable id; the join key to `DriftedControls[]`
|
|
57
|
+
- `ProductIdentifier` — owning product
|
|
58
|
+
- `Impact` — `"High"` / `"Medium"` / `"Low"`
|
|
59
|
+
- `RecommendedSetting` — the recommended value
|
|
60
|
+
- `Status` — `"deployed"` (✓ Applied) / `"not-deployed"` (✗ Not Applied) / `"manual"` (⚙ Needs Manual Configuration — admin must set a value)
|
|
61
|
+
|
|
62
|
+
`Data.Clauses[].ManualConfigChecks[]` (the actionable "what to set" detail behind every `Status == "manual"` control) — join to a `Controls[]` entry by `ControlId`, falling back to `ControlDisplayName` when `ControlId` is absent (pre-2.1.0 bundles omit it; the display name is always present):
|
|
63
|
+
- `ControlDisplayName` / `ControlId` — the setting
|
|
64
|
+
- `ProductIdentifier` — owning product
|
|
65
|
+
- `Key` — the policy formData key to set
|
|
66
|
+
- `Expected` — the value the standard requires, as a predicate object with a **PascalCase** operator key (`{Eq}` / `{Gte}` / `{Lte}` / `{Contains}`); render human-readable (`{Gte: 30}` → "at least 30", `{Eq: true}` → "Enabled")
|
|
67
|
+
- **Only the operator key is really PascalCase.** Keys *inside* a `{Contains: [...]}` entry are policy formData keys, which the CLI has also PascalCased on the way out — the real ones are kebab-case (`CodeEmbeddedRulesConfigRules` is really `code-embedded-rules-config-rules`). Read them for display only. When writing a value back, take the key from `Key` and the shape from the policy's own `aops-policy get` output — never from these.
|
|
68
|
+
- `Actual` — the value currently deployed on the tenant (absent / `null` when unset)
|
|
69
|
+
|
|
70
|
+
`Data.DeploymentPolicies[].DriftedControls[]` — settings that WERE applied by the standard and have since been changed away from it. This is the only field that separates drift from never-applied: a drifted control shows up in `Clauses[].Controls[]` as `Status: "not-deployed"`, identical to one that was never deployed. Join by `ControlId`; when `ControlId` is absent (packs authored before bundle schema 2.1.0 omit it), fall back to `ControlDisplayName` — the server dedups drift rows by the same key.
|
|
71
|
+
- `ControlId` / `ControlDisplayName` — the setting
|
|
72
|
+
- `PackValueDisplay` — the value the standard expects, already display-ready
|
|
73
|
+
- `ImpactedClauseId` — the clause whose rollup this drift pulled down
|
|
74
|
+
- `UnmetSettings[]` — `{ Key, Expected, Actual }`, same predicate shape as `ManualConfigChecks` above
|
|
52
75
|
|
|
53
76
|
`Data.Summary` (PRODUCT-grain counts + a clause rollup — read these directly, do NOT recompute):
|
|
54
|
-
- `DeploymentPolicyCount` — total products ·
|
|
77
|
+
- `DeploymentPolicyCount` — total products · four **disjoint** product tallies that sum to it: `InPlaceCount` (fully applied) + `NeedsManualConfigCount` (deployed, manual setup pending) + `UnverifiableCount` (policy missing, nothing checkable) + `NewCount` (nothing deployed). `NewCount == 0` does NOT mean fully applied — needs-manual-config and unverifiable products aren't counted in it. Omitting `UnverifiableCount` makes the tallies not add up.
|
|
78
|
+
- `DriftedControlCount` — total drifted settings across all products. `> 0` is the signal to offer `restore` (see next-action case 3a).
|
|
55
79
|
- `ClauseSummary.FullyDeployedCount` / `PartiallyDeployedCount` / `NotDeployedCount` — the clause rollup driving the SUMMARY counts and the all-applied check
|
|
56
80
|
|
|
57
81
|
`Data.PackId` / `ScopeLevel` / `ScopeTargetId` — identify the pack + tenant scope (internal; the user sees the tenant NAME from auth context, not the id).
|
|
58
82
|
|
|
59
83
|
## Posture plan presentation
|
|
60
84
|
|
|
61
|
-
Build the per-setting table directly from `coverage.Data.Clauses[].
|
|
62
|
-
- ✓ Applied — `
|
|
63
|
-
- ✗ Not Applied — `
|
|
64
|
-
-
|
|
85
|
+
Build the per-setting table directly from `coverage.Data.Clauses[].Controls[]` — do NOT derive setting state from product status:
|
|
86
|
+
- ✓ Applied — `Control.Status == "deployed"`
|
|
87
|
+
- ✗ Not Applied — `Control.Status == "not-deployed"` AND its `ControlId` is NOT in any `DriftedControls[]`
|
|
88
|
+
- ⟳ Changed Since Applied — `Control.Status == "not-deployed"` AND its `ControlId` IS in some `DeploymentPolicies[].DriftedControls[]`
|
|
89
|
+
- ⚙ Needs Manual Configuration — `Control.Status == "manual"`
|
|
90
|
+
|
|
91
|
+
The ⟳ split matters: ✗ and ⟳ look identical in `Status`, but they have different fixes. ✗ needs the setting configured in the product; ⟳ is undone by one `state restore`. Never recommend hand-editing a ⟳ setting.
|
|
92
|
+
|
|
93
|
+
Per-clause counts come from the clause's own `Controls[]` (or `DeployedControlCount` / `CheckableControlCount`). The SUMMARY clause counts come from `Data.Summary.ClauseSummary.*` directly.
|
|
94
|
+
|
|
95
|
+
For each ⚙ `manual` control, look up its `Data.Clauses[].ManualConfigChecks[]` entry (match on `ControlId`, else `ControlDisplayName`) and show what to change: **`Expected`** value vs **`Actual`** deployed value. This is the actionable detail — surface it, don't stop at the ⚙ marker.
|
|
96
|
+
|
|
97
|
+
For each ⟳ drifted control, show the same expected-vs-actual line from its `UnmetSettings[]` (or `PackValueDisplay` when you only need the expected side).
|
|
98
|
+
|
|
99
|
+
**Next-action suggestion (state-aware).** Two INDEPENDENT axes decide the call-to-action. Read each from its own source — never derive one from the other:
|
|
65
100
|
|
|
66
|
-
|
|
101
|
+
- **Is the pack applied?** — `state get` → `Data.Active`. This is the ONLY authority.
|
|
102
|
+
- **What is covered?** — the coverage counts. Posture only.
|
|
67
103
|
|
|
68
|
-
|
|
104
|
+
Coverage compares the pack against **whatever policies the tenant already has**, applied or not (`Does NOT require the pack to be enabled`). So coverage numbers cannot tell you whether the pack is on, in either direction:
|
|
105
|
+
- Pack ON, every setting changed away → every product `new`, every clause `not-deployed`. Reads as "never applied", but the remedy is `restore`, and suggesting apply would run `state enable` on an enabled pack.
|
|
106
|
+
- Pack OFF, but the tenant's own pre-existing policies happen to satisfy part of the standard → `in-place` / `needs-manual-config` products and fully/partially-deployed clauses. Reads as "already applied", and the user asking to apply the standard gets told not to.
|
|
69
107
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
108
|
+
`DriftedControlCount > 0` and any `unverifiable` product each prove the pack IS active (both only exist on an active pack), but their absence proves nothing. Call `state get` — do not guess.
|
|
109
|
+
|
|
110
|
+
Evaluate IN THIS ORDER (first match wins):
|
|
111
|
+
|
|
112
|
+
1. **Pack NOT active** (`Data.Active == false`; a never-applied known pack returns 200 with `Active: false`, not a 404 — a 404 from `state get` means the packId itself is not usable, so re-check it against `catalog list` and stop) — the pack is not applied, whatever the coverage numbers say. Offer `'Apply ISO 42001 settings'`, `'Apply High impact ISO 42001 settings'`, or `'Apply only <specific area> settings'`. If coverage already shows partial or full clause coverage, that is the tenant's own policies coinciding with the standard, NOT the pack — say so plainly ("some of these settings already match what the standard recommends; applying it will manage them going forward") and still offer to apply. Never suppress the apply offer because coverage looks good.
|
|
113
|
+
2. **Pack active, everything covered** (`Data.Active == true` and `PartiallyDeployedCount == 0 && NotDeployedCount == 0`): render the [All settings applied](#all-settings-applied) block. Nothing to apply.
|
|
114
|
+
3. **Pack active, gaps remain** (`Data.Active == true`, otherwise): do NOT suggest reapplying the standard or applying a subset. Point the user at the residual settings, checking the drift case FIRST:
|
|
115
|
+
- **3a. If `Summary.DriftedControlCount > 0` OR any product is `unverifiable`:** offer `'Reset the changed ISO 42001 settings back to the standard'` — the ⟳ items ARE that list, and restore also RECREATES the missing policy behind any Cannot-Be-Checked product (it resets every live pack policy to the bundle's suggested values and recreates deleted ones). Hand off to [`../restore/impl.md`](../restore/impl.md), which owns the confirmation gate — including the warning that restore also resets any ⚙ manual values an admin has already configured. Do NOT tell the user to hand-edit a ⟳ setting, and do NOT route ⟳ items into the AOps handoff below — that is the remedy for ⚙, not for drift.
|
|
116
|
+
- If any ⚙ `manual` controls exist: `'Configure the manual ISO 42001 settings'` — the ⚙ items with expected/actual in DETAILS ARE the to-do list. When the user accepts, hand off to the AOps plugin to update the existing pack policy — see [Configuring manual settings (AOps handoff)](#configuring-manual-settings--aops-handoff). When 3a also applies, sequence restore FIRST, then the manual values — restore would overwrite manual values configured before it.
|
|
117
|
+
- On an active pack there is no third remedy: a plain ✗ (not-deployed, not drifted) only occurs under a Cannot-Be-Checked product whose policy is missing — restore recreates it (3a). Never tell the user to configure an active pack's settings in the product's own UI. (Exception: an older server that doesn't return drift fields at all — then ✗ under an active pack is indistinguishable drift, and restore is still the remedy.)
|
|
118
|
+
- Fallback, if that ever fails to hold — ✗ settings on an active pack with no drift and no Cannot-Be-Checked product: do NOT leave them unexplained. Offer restore anyway (it re-asserts the standard's values on every live policy) and say the settings are not in place for a reason the posture data doesn't explain.
|
|
119
|
+
|
|
120
|
+
These are not exclusive — a tenant can have ⟳, ⚙, and ✗ at once. Offer each that applies, drift first.
|
|
121
|
+
|
|
122
|
+
**Degraded-response check:** the server computes drift and `unverifiable` only when its own internal pack-state read succeeds; on failure it silently returns coverage WITHOUT them (products with deleted policies then show as `new`). The tell: on an active pack, a `new` product ALWAYS carries drifted controls — so `Active == true` plus a `new` product with `DriftedControlCount == 0` means the response is degraded. Re-run coverage before acting on it.
|
|
123
|
+
|
|
124
|
+
**If `state get` fails** (401 / 5xx, so `Active` is unknown): do NOT fall back to guessing from coverage counts. Present the posture, say the pack's applied state could not be read, and offer both directions rather than picking one.
|
|
76
125
|
|
|
77
126
|
Never render product coverage — product grain is internal only.
|
|
78
127
|
|
|
79
|
-
**Graceful degrade:** if `Clauses[].
|
|
128
|
+
**Graceful degrade:** if `Clauses[].Controls[]` is missing across every clause (older CLI/server; note a single clause with an empty `Controls[]` is normal — surface-only clauses have no checkable controls), fall back to the clause-grain view (`Clauses[].Status` fully/partially/not-deployed) and add a one-line note that per-setting detail needs an updated `uip` CLI. Never fabricate per-setting state.
|
|
80
129
|
|
|
81
|
-
Progress bar: 5 cells scaled to the deployed ratio — filled = `round(
|
|
130
|
+
Progress bar: 5 cells scaled to the deployed ratio — filled = `round(DeployedControlCount / CheckableControlCount × 5)` `▓`, remainder `░` (2/5 → `▓▓░░░`, 1/4 → `▓░░░░`, 4/4 → `▓▓▓▓▓`).
|
|
82
131
|
|
|
83
|
-
A setting is a **gap** when its `
|
|
132
|
+
A setting is a **gap** when its `Status != "deployed"` — i.e. `not-deployed` (✗), drifted (⟳) and `manual` (⚙) all count as gaps in the impact tallies and per-clause counts (a manual setting is not yet applied).
|
|
84
133
|
|
|
85
|
-
**Biggest risk area:** clause with the most High-impact gap controls (`
|
|
86
|
-
**Quickest win:** clause with the fewest gap controls (`
|
|
134
|
+
**Biggest risk area:** clause with the most High-impact gap controls (`Impact == "High" && Status != "deployed"`). Ties: the clause with the LOWER deployed ratio (`DeployedControlCount / CheckableControlCount` — furthest from done); still tied, the first in the order the API returned.
|
|
135
|
+
**Quickest win:** clause with the fewest gap controls (`Status != "deployed"`) AND at least one is High impact. Ties: the clause with the HIGHER deployed ratio (closest to done); still tied, the first in the order the API returned.
|
|
136
|
+
The two tie-breaks pull opposite ways on purpose — a single-clause tie must not name the same clause in both rows. If it still does (one clause is genuinely both), leave Quickest win blank rather than repeat it.
|
|
87
137
|
|
|
88
138
|
Terminology rules:
|
|
89
139
|
- Use "settings" NOT "controls" in output
|
|
90
|
-
- Use plain-English clause names (from `
|
|
91
|
-
- Use `
|
|
92
|
-
- **NEVER write raw API status strings** — product `in-place`/`new`; clause `fully-deployed`/`partially-deployed`/`not-deployed`; control `deployed`/`not-deployed`/`manual` — in user-facing display output (posture_plan.txt, chat responses, report summaries) — translate EVERY occurrence before writing
|
|
140
|
+
- Use plain-English clause names (joined from `catalog.json` by `ClauseId` — see the pre-condition; coverage's own `ClauseName` is null) in headlines; clause IDs (e.g. A.6.2.8) as secondary reference in DETAILS only
|
|
141
|
+
- Use `Controls[].ControlDisplayName` as setting name, NOT product identifiers
|
|
142
|
+
- **NEVER write raw API status strings** — product `in-place`/`needs-manual-config`/`unverifiable`/`new`; clause `fully-deployed`/`partially-deployed`/`not-deployed`; control `deployed`/`not-deployed`/`manual` — in user-facing display output (posture_plan.txt, chat responses, report summaries) — translate EVERY occurrence before writing
|
|
93
143
|
- `"in-place"` → **Applied** (or ✓)
|
|
94
144
|
- `"new"` → **Not Applied** (or ✗)
|
|
145
|
+
- `"unverifiable"` → **Cannot Be Checked** — the product's policy is missing, so say the settings can't be verified. Never report an unverifiable product as Applied.
|
|
146
|
+
- a drifted setting → **Changed Since Applied** (or ⟳) — never "not deployed"
|
|
95
147
|
- **`coverage.json` is an internal session file** — save it as the raw `--output json` CLI response. Raw API values (`"in-place"`, `"new"`) are CORRECT and expected in this file. Do NOT translate status values when writing coverage.json.
|
|
96
148
|
- Never say "compliance gaps" — say "settings not yet configured"
|
|
97
149
|
- Never claim the tenant IS compliant
|
|
98
150
|
|
|
99
|
-
Render this gap template ONLY for cases
|
|
151
|
+
Render this gap template ONLY for cases 1 and 3 above (pack not applied, or applied with gaps). For case 2 (active and fully covered) use the [All settings applied](#all-settings-applied) block instead — never reach this template with zero gaps.
|
|
100
152
|
|
|
101
153
|
```
|
|
102
154
|
ISO 42001 Posture — <tenantName> · <date>
|
|
@@ -108,15 +160,15 @@ SUMMARY
|
|
|
108
160
|
│ Clauses fully covered │ <clausesFullyDeployed> / <totalClauses> │
|
|
109
161
|
│ Clauses with gaps │ <clausesWithGaps> / <totalClauses> │
|
|
110
162
|
├─────────────────────────┼──────────────────────────────────────┤
|
|
111
|
-
│ 🔴 High impact gaps │ <highGapCount> settings
|
|
112
|
-
│ 🟡 Medium impact gaps │ <medGapCount> settings
|
|
113
|
-
│ 🟢 Low impact gaps │ <lowGapCount> settings
|
|
163
|
+
│ 🔴 High impact gaps │ <highGapCount> settings across <highClauseCount> clauses │
|
|
164
|
+
│ 🟡 Medium impact gaps │ <medGapCount> settings across <medClauseCount> clauses │
|
|
165
|
+
│ 🟢 Low impact gaps │ <lowGapCount> settings across <lowClauseCount> clauses │
|
|
114
166
|
├─────────────────────────┼──────────────────────────────────────┤
|
|
115
|
-
│ Biggest risk area │ <clauseName with most High-impact settings
|
|
167
|
+
│ Biggest risk area │ <clauseName with most High-impact gap settings> │
|
|
116
168
|
│ Quickest win │ <clauseName with fewest gaps AND ≥1 High setting>│
|
|
117
169
|
└─────────────────────────┴──────────────────────────────────────┘
|
|
118
170
|
|
|
119
|
-
<call-to-action per Next-action suggestion (this template
|
|
171
|
+
<call-to-action per Next-action suggestion (this template renders for cases 1 and 3): case 1 (pack not applied) → 'Apply ISO 42001 settings' / 'Apply High impact ISO 42001 settings' / 'Apply only <specific area> settings'; case 3 (applied, gaps remain) → in order: 'Reset the changed ISO 42001 settings back to the standard' (when ⟳ settings or a Cannot-Be-Checked product exist), then 'Configure the manual ISO 42001 settings' (when ⚙ settings exist)>
|
|
120
172
|
|
|
121
173
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
122
174
|
DETAILS
|
|
@@ -128,16 +180,40 @@ Needs Configuration (<N> of <total>)
|
|
|
128
180
|
┌───────────────────────────────────┬─────────────────────┬────────┐
|
|
129
181
|
│ Setting │ Recommendation │ Impact │
|
|
130
182
|
├───────────────────────────────────┼─────────────────────┼────────┤
|
|
131
|
-
│ ✗ <
|
|
132
|
-
│
|
|
133
|
-
│
|
|
183
|
+
│ ✗ <ControlDisplayName> │ <RecommendedSetting>│ High │
|
|
184
|
+
│ ⟳ <ControlDisplayName> │ <RecommendedSetting>│ High │
|
|
185
|
+
│ ⚙ <ControlDisplayName> │ <RecommendedSetting>│ Medium │
|
|
186
|
+
│ ✓ <ControlDisplayName> │ Applied │ Medium │
|
|
134
187
|
└───────────────────────────────────┴─────────────────────┴────────┘
|
|
135
|
-
Marker = `
|
|
136
|
-
For each ⚙ row, add a sub-line from
|
|
137
|
-
⚙ <
|
|
188
|
+
Marker = `Control.Status` + drift join: ✓ deployed · ✗ not-deployed · ⟳ not-deployed AND in `DriftedControls[]` · ⚙ manual
|
|
189
|
+
For each ⚙ row, add a sub-line from `ManualConfigChecks` (`Expected` vs `Actual`):
|
|
190
|
+
⚙ <ControlDisplayName> — set to <Expected>; currently <Actual, or "not set">
|
|
191
|
+
For each ⟳ row, add a sub-line from `DriftedControls[].UnmetSettings[]`:
|
|
192
|
+
⟳ <ControlDisplayName> — standard expects <PackValueDisplay>; currently <Actual>
|
|
193
|
+
Rendering `Actual` — never print it verbatim, whatever its type:
|
|
194
|
+
- Scalar tokens (`yes`/`no`/`true`/`false`/`null`): translate into the vocabulary of
|
|
195
|
+
the displayed recommendation (expected `{Eq: "yes"}`, actual `"no"`, under "Display
|
|
196
|
+
EDR Status: Enabled" → "currently Disabled").
|
|
197
|
+
- Arrays and objects (common — an `Expected` of `{Contains: [...]}` has an `Actual`
|
|
198
|
+
that is the whole live array, often hundreds of characters): NEVER print the
|
|
199
|
+
structure. Say whether the required entry is present: "currently not configured"
|
|
200
|
+
when the array has no matching entry, or "configured, but not with the value the
|
|
201
|
+
standard requires" when other entries exist. Dumping the array violates the
|
|
202
|
+
no-raw-output rule.
|
|
203
|
+
- Can't tell: "currently not set to the recommended value". Never the raw token.
|
|
204
|
+
The Recommendation column, and the expected side of BOTH ⚙ and ⟳ sub-lines, always
|
|
205
|
+
show the editorial value (`RecommendedSetting` / `PackValueDisplay`), never the raw
|
|
206
|
+
predicate — the predicate is for machine comparison; the two can differ in units
|
|
207
|
+
(e.g. "Development only" vs `{Eq: true}`).
|
|
138
208
|
|
|
139
209
|
[repeat per clause with gaps]
|
|
140
210
|
|
|
211
|
+
When any product is Cannot Be Checked (unverifiable), add ONE note after the last
|
|
212
|
+
clause block, naming the affected ✗ settings without exposing product status values:
|
|
213
|
+
"Note: the ✗ settings above (<their display names or products>) sit behind a policy
|
|
214
|
+
that is missing from the tenant, so they can't currently be verified. Resetting the
|
|
215
|
+
standard recreates that policy with the recommended values."
|
|
216
|
+
|
|
141
217
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
142
218
|
|
|
143
219
|
Applied (<N> of <total>) ✓
|
|
@@ -149,13 +225,14 @@ Applied (<N> of <total>) ✓
|
|
|
149
225
|
|
|
150
226
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
151
227
|
Next action (state-aware — see "Next-action suggestion"):
|
|
152
|
-
·
|
|
228
|
+
· any ⟳ settings or Cannot-Be-Checked → 'Reset the changed ISO 42001 settings back to the standard'
|
|
229
|
+
· Active == true, partial gaps → 'Configure the manual ISO 42001 settings' · 'What does [clause name] require?'
|
|
153
230
|
· nothing applied yet → 'Apply ISO 42001 settings' (y/n) · 'Just fix the High impact gaps' · 'Apply only <specific area> settings'
|
|
154
231
|
```
|
|
155
232
|
|
|
156
233
|
## All settings applied
|
|
157
234
|
|
|
158
|
-
|
|
235
|
+
Next-action case 2 only: `state get` says `Data.Active == true` **AND** `Summary.ClauseSummary.PartiallyDeployedCount == 0 && NotDeployedCount == 0` (every clause fully deployed). Do NOT use `Summary.NewCount == 0` for this — with disjoint product counts a `needs-manual-config` product leaves `NewCount == 0` while settings still need manual setup:
|
|
159
236
|
|
|
160
237
|
```
|
|
161
238
|
All ISO 42001 recommended settings are Applied on <tenantName>.
|
|
@@ -166,17 +243,19 @@ To remove them: 'Remove ISO 42001 settings'
|
|
|
166
243
|
|
|
167
244
|
Do NOT call `state enable` in this case.
|
|
168
245
|
|
|
246
|
+
**The `Active` half is not optional.** With full clause coverage but `Active == false`, the tenant's own policies happen to match the standard — the pack is not managing anything. Use case 1 instead: say the settings already line up, and still offer to apply. Never print "To remove them" for a pack that was never applied — there is nothing to remove.
|
|
247
|
+
|
|
169
248
|
## Configuring manual settings — AOps handoff
|
|
170
249
|
|
|
171
250
|
When the user accepts `'Configure the manual ISO 42001 settings'` (offered ONLY in the already-applied / partial state), hand off to this skill's AOps policy mechanic to update the EXISTING deployed policy. Do NOT re-enable the pack (`state enable`) and do NOT create a new policy — the pack already deployed one policy per product; a `manual` setting is just an org-specific formData key on that policy that automation could not fill. This mutation happens on the **AOps branch** (Critical Rule 3: one branch per mutation).
|
|
172
251
|
|
|
173
|
-
Each ⚙ setting is a `Data.Clauses[].
|
|
252
|
+
Each ⚙ setting is a `Data.Clauses[].ManualConfigChecks[]` entry: `{ ProductIdentifier, Key, Expected, Actual }`. Group them by `ProductIdentifier` — one policy per product, updated once.
|
|
174
253
|
|
|
175
254
|
Per product:
|
|
176
255
|
1. **Resolve the pack's policy id for the product.** `uip gov aops-policy deployment tenant get <TENANT_ID> --output json` → the `TenantPolicies[]` entry whose `ProductIdentifier` matches → its `PolicyIdentifier`. Cross-check it belongs to the pack against `state get tenant <TENANT_ID> <packId>` `Policies[].ExternalPolicyId`.
|
|
177
|
-
2. **Collect the org-specific value(s).** `
|
|
178
|
-
3. **Update via the AOps plugin.** Follow [`../../aops-policy/aops-policy-manage-guide.md`](../../aops-policy/aops-policy-manage-guide.md): `aops-policy get <PolicyIdentifier>` → set each `
|
|
179
|
-
4. **Receipt + confirm.** Show a post-update receipt (Critical Rule 6), then re-run coverage; each fixed ⚙ setting should flip to ✓ (`
|
|
256
|
+
2. **Collect the org-specific value(s).** `Expected` is a predicate (`{Eq}`/`{Gte}`/`{Lte}`/`{Contains}`); `manual` means the concrete value is org-specific (an allowlist, a package set, a threshold). Ask the user, and confirm the value satisfies `Expected`. For a `{Contains: [...]}` predicate, compare against the live policy's own formData from step 3's `aops-policy get` — the keys inside the predicate entry are CLI-PascalCased formData keys, not the real ones (see the `Expected` note above), so building an entry from them writes keys the policy does not have.
|
|
257
|
+
3. **Update via the AOps plugin.** Follow [`../../aops-policy/aops-policy-manage-guide.md`](../../aops-policy/aops-policy-manage-guide.md): `aops-policy get <PolicyIdentifier>` → set each `Key` in the returned formData to the collected value (build `--input` per [`../../aops-policy/configure-aops-policy-data-guide.md`](../../aops-policy/configure-aops-policy-data-guide.md)) → `aops-policy update` (**full replacement** — pass `--identifier <PolicyIdentifier>` plus every existing field back: `--name`, `--product-name`, `--description`, `--priority`, `--availability`, `--input` — omitting any clears it, per [`../../aops-policy/aops-policy-commands.md`](../../aops-policy/aops-policy-commands.md)). Never call `state enable`.
|
|
258
|
+
4. **Receipt + confirm.** Show a post-update receipt (Critical Rule 6), then re-run coverage; each fixed ⚙ setting should flip to ✓ (`Controls[].Status == "deployed"`).
|
|
180
259
|
|
|
181
260
|
Graceful degrade: if the AOps guides are unavailable, present the ⚙ list (setting, expected, current) and tell the user to set each value on the product's deployed policy in Automation Ops — never leave the manual settings as a dead-end suggestion.
|
|
182
261
|
|
|
@@ -219,7 +298,13 @@ Always run fresh before presenting a posture plan. Coverage reflects live tenant
|
|
|
219
298
|
|
|
220
299
|
## Anti-patterns
|
|
221
300
|
|
|
222
|
-
- **Writing raw API status strings in user-facing display output** — product `in-place`/`new`; clause `fully-deployed`/`partially-deployed`/`not-deployed`; control `deployed`/`not-deployed`/`manual` — must NEVER appear in user-facing display output (posture_plan.txt, chat responses, report summaries). Translate every status before writing. `coverage.json` is an internal session file — raw API values are correct there.
|
|
301
|
+
- **Writing raw API status strings in user-facing display output** — product `in-place`/`needs-manual-config`/`unverifiable`/`new`; clause `fully-deployed`/`partially-deployed`/`not-deployed`; control `deployed`/`not-deployed`/`manual` — must NEVER appear in user-facing display output (posture_plan.txt, chat responses, report summaries). Translate every status before writing. `coverage.json` is an internal session file — raw API values are correct there.
|
|
223
302
|
- **Partial translation** — translating the summary section but leaving raw values in the DETAILS or verification section. ALL sections must use the translated labels.
|
|
224
303
|
- **Quoting API values for context** — avoid notes like "Status is still 'new'". Rephrase to "AI Trust Layer shows as Not Applied" instead.
|
|
225
|
-
- **Deriving per-setting state from product status** — use `Clauses[].
|
|
304
|
+
- **Deriving per-setting state from product status** — use `Clauses[].Controls[].Status` (`deployed`/`not-deployed`/`manual`). Never mark a setting Applied because its product is `in-place`.
|
|
305
|
+
- **Treating a drifted setting as never-applied** — telling the user to go configure a ⟳ setting in the product's own settings. It was applied and then changed; `state restore` puts it back. Always join `Controls[]` to `DriftedControls[]` (by `ControlId`, falling back to `ControlDisplayName`) before writing a remedy.
|
|
306
|
+
- **Sending the user to the product's own settings UI for an active pack's gaps** — on an active pack every gap routes to `restore` (⟳ drift and missing policies) or the AOps handoff (⚙ manual). Hand-editing product settings is never the remedy while the pack manages them.
|
|
307
|
+
- **Summing only three product counts** — `InPlaceCount + NeedsManualConfigCount + NewCount` does NOT equal `DeploymentPolicyCount` when any product is `unverifiable`. Read the counts; never recompute a total from a subset.
|
|
308
|
+
- **Reading `PolicyId` on every product** — it can be absent when there is no live policy. Check for the key; never infer its presence from `Status` (a fully-drifted product is `"new"` and does have one).
|
|
309
|
+
- **Inferring whether the pack is applied from coverage numbers** — the single most damaging mistake here, and it fails in both directions. Zero coverage can mean an enabled pack whose settings were all changed away (remedy: `restore`, not apply). Partial or full coverage can mean the tenant's own pre-existing policies coincide with the standard while the pack is off (so the apply offer must still be made). Coverage runs pack-on or pack-off by design — read `Data.Active` from `state get` and nothing else.
|
|
310
|
+
- **Suppressing the apply offer because coverage looks good** — a user asking to apply a standard on a tenant that merely happens to satisfy part of it must still be offered the apply. Coincidental coverage is not an applied pack.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Restore — Reset to Recommended Settings
|
|
2
|
+
|
|
3
|
+
**Preview gate:** Compliance Standards is a preview feature. Append the disclaimer to user-facing output; on any compliance-packs **403**, stop (org not enrolled). See [preview-gate.md](../preview-gate.md).
|
|
4
|
+
|
|
5
|
+
Resets an already-active compliance standard's policies back to the values the standard recommends — undoing any local drift. It resets live policies to the suggested config, recreates any that were deleted, and re-asserts the tenant bindings. Only works while the standard is active; custom (Rego) policies are left untouched.
|
|
6
|
+
|
|
7
|
+
Use this when the user wants to undo changes made to a configured standard, or after a `coverage` posture check shows drift (`Data.Summary.DriftedControlCount > 0`, detail in `Data.DeploymentPolicies[].DriftedControls[]` — the ⟳ rows in the posture table).
|
|
8
|
+
|
|
9
|
+
`<packName>` below = the standard's display name (e.g. "ISO 42001") — from the user's request or `Data.Packs[].PackName` in `catalog list`.
|
|
10
|
+
|
|
11
|
+
## Check current state first
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
TENANT_ID=$(grep '^UIPATH_TENANT_ID=' ~/.uipath/.auth | cut -d'=' -f2-)
|
|
15
|
+
uip gov compliance-packs state get tenant $TENANT_ID <packId> --output json
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Decide from the `state get` result:
|
|
19
|
+
- **Not active** — a successful response with `Data.Active == false` (a never-applied known pack returns 200 with `Active: false`, `PackStateId: null`): the standard isn't configured, so there is nothing to restore. Reply "<packName> is not currently configured on this tenant — enable it first with `state enable`." and stop.
|
|
20
|
+
- **404** — the packId itself is not usable (unknown, or a catalog entry with no bundle). Do NOT suggest `state enable` — it would 404 too. Re-check the id with `catalog list` and stop.
|
|
21
|
+
- **Active** — `Data.Active == true`: proceed.
|
|
22
|
+
- **State could not be read** — `state get` failed with an auth/connection error (401 / 5xx) so `Active` is unknown: do NOT claim a state. Proceed to Confirmation, then the restore step, and report whatever error the restore call surfaces. (A **403** → preview gate: see [preview-gate.md](../preview-gate.md).)
|
|
23
|
+
|
|
24
|
+
## Confirmation
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
This will reset all <packName> recommended settings on <tenantName> back to the values the standard recommends, overwriting any local changes to those policies.
|
|
28
|
+
This includes any values you configured for the standard's manual settings — those go back to the bundle defaults and will need to be configured again. Policies that were deleted are recreated.
|
|
29
|
+
|
|
30
|
+
Are you sure? (y/n)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Ask, then STOP — end your reply. Never run `state restore` in the same response as this question. Proceed only on an explicit `y` in the user's next message; halt on anything else. The user's original request ("reset my settings") is intent, not consent. Sole exception: the user explicitly waived confirmation in advance (e.g., "don't ask for confirmation") — treat the waiver as `y`.
|
|
34
|
+
|
|
35
|
+
## Restore
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
uip gov compliance-packs state restore tenant $TENANT_ID <packId> --output json
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
On failure, read the status the error carries:
|
|
42
|
+
- **404** — the packId is not in the loaded catalog. List valid packs with `uip gov compliance-packs catalog list`.
|
|
43
|
+
- **409** — either the standard is not active (enable it first with `state enable`) or another operation on this pack is already in progress (wait a few seconds and retry).
|
|
44
|
+
|
|
45
|
+
## Report
|
|
46
|
+
|
|
47
|
+
Success returns the full state detail (`Data.Active`, `Data.Policies[]`). Report:
|
|
48
|
+
|
|
49
|
+
"<packName> recommended settings on `<tenantName>` reset to the standard's suggested values."
|
|
50
|
+
|
|
51
|
+
## Arriving from a coverage drift check
|
|
52
|
+
|
|
53
|
+
When `coverage` routed here (its next-action case 3a — `Summary.DriftedControlCount > 0` or an `unverifiable` product), the ⟳ settings and Cannot-Be-Checked products it listed ARE what this call fixes. Two changes to the flow above:
|
|
54
|
+
|
|
55
|
+
- **Skip the `state get` pre-check.** Coverage already proves the pack is active — drift and `unverifiable` both exist only on an active pack. Go straight to Confirmation, and name the ⟳ settings (and any product whose policy will be recreated) so the user sees exactly what is about to change.
|
|
56
|
+
- **Verify after.** Re-run `coverage` and confirm the ⟳ settings flipped back to ✓ and no product is Cannot-Be-Checked anymore. If any is still ⟳, it did not reset — report that plainly rather than claiming success. ⚙ manual items reappearing IS expected (restore resets their values to bundle defaults); do not report those as a failure.
|
|
57
|
+
|
|
58
|
+
What restore does and does not fix, per the server's own semantics (it resets every live pack policy to the bundle's suggested formData — a FULL replacement — and recreates deleted ones):
|
|
59
|
+
- ⟳ drifted settings — fixed.
|
|
60
|
+
- Cannot-Be-Checked products (policy deleted out-of-band) — fixed: the policy is recreated with the bundle's values.
|
|
61
|
+
- ⚙ manual settings — NOT fixed, and worse: any value an admin had already configured for them is wiped back to the bundle default. After a restore, expect the ⚙ list to be back in full; say so, and point at the manual-settings flow to (re)configure them AFTER the restore, never before.
|