@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.
Files changed (143) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CODEOWNERS +18 -11
  4. package/README.md +1 -0
  5. package/assets/skill-status.json +8 -0
  6. package/hooks/hooks.json +44 -8
  7. package/hooks/send-telemetry.ps1 +392 -0
  8. package/hooks/send-telemetry.sh +118 -86
  9. package/hooks/set-session-env.ps1 +72 -0
  10. package/hooks/set-session-env.sh +64 -0
  11. package/hooks/suggest-permissions.ps1 +45 -0
  12. package/hooks/suggest-permissions.sh +4 -0
  13. package/package.json +1 -1
  14. package/skills/uipath-admin/references/audit-commands.md +2 -2
  15. package/skills/uipath-admin/references/audit-workflow-guide.md +4 -4
  16. package/skills/uipath-agents/references/coded/capabilities/batch-transform/planning.md +1 -1
  17. package/skills/uipath-agents/references/coded/capabilities/deeprag/planning.md +1 -1
  18. package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails-recommend.md +5 -2
  19. package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails.md +8 -4
  20. package/skills/uipath-agents/references/coded/embedding-in-flows.md +1 -1
  21. package/skills/uipath-agents/references/coded/flow-integration.md +2 -2
  22. package/skills/uipath-agents/references/coded/lifecycle/build.md +0 -1
  23. package/skills/uipath-agents/references/coded/lifecycle/setup.md +0 -1
  24. package/skills/uipath-agents/references/coded/quickstart.md +1 -1
  25. package/skills/uipath-agents/references/lowcode/agent-definition.md +24 -5
  26. package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/batch-transform/planning.md +1 -1
  27. package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/deeprag/planning.md +1 -1
  28. package/skills/uipath-agents/references/lowcode/capabilities/context/attachments.md +1 -0
  29. package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails-recommend.md +1 -0
  30. package/skills/uipath-api-workflow/references/cli-reference.md +1 -1
  31. package/skills/uipath-api-workflow/references/connector-activity-discovery.md +1 -1
  32. package/skills/uipath-api-workflow/references/troubleshooting.md +1 -1
  33. package/skills/uipath-automation-discovery/SKILL.md +26 -1
  34. package/skills/uipath-automation-discovery/assets/templates/estimation-worksheet-template.md +80 -0
  35. package/skills/uipath-automation-discovery/references/estimation-guide.md +104 -0
  36. package/skills/uipath-connector-builder/SKILL.md +6 -4
  37. package/skills/uipath-connector-builder/references/auth.md +137 -13
  38. package/skills/uipath-connector-builder/references/configuration.md +29 -7
  39. package/skills/uipath-connector-builder/references/debugging.md +1 -1
  40. package/skills/uipath-connector-builder/references/standard-resources.md +162 -13
  41. package/skills/uipath-governance/references/cli-cheatsheet.md +3 -3
  42. package/skills/uipath-governance/references/diagnose/references/failure-modes.md +5 -5
  43. package/skills/uipath-insights/SKILL.md +277 -0
  44. package/skills/uipath-insights/references/investigation-playbook-guide.md +145 -0
  45. package/skills/uipath-insights/references/jobs-commands-guide.md +144 -0
  46. package/skills/uipath-ixp/SKILL.md +4 -1
  47. package/skills/uipath-ixp/references/cli-reference.md +18 -3
  48. package/skills/uipath-maestro-bpmn/references/cli-conventions.md +2 -0
  49. package/skills/uipath-maestro-bpmn/validator/README.md +12 -2
  50. package/skills/uipath-maestro-case/SKILL.md +27 -13
  51. package/skills/uipath-maestro-case/assets/templates/sdd-template-examples.md +37 -4
  52. package/skills/uipath-maestro-case/assets/templates/sdd-template.md +20 -9
  53. package/skills/uipath-maestro-case/assets/templates/sdd-viewer.html +8 -7
  54. package/skills/uipath-maestro-case/references/bindings-v2-sync.md +5 -1
  55. package/skills/uipath-maestro-case/references/brownfield.md +86 -0
  56. package/skills/uipath-maestro-case/references/case-commands.md +8 -0
  57. package/skills/uipath-maestro-case/references/case-editing-operations.md +230 -21
  58. package/skills/uipath-maestro-case/references/case-schema.md +29 -11
  59. package/skills/uipath-maestro-case/references/connector-integration.md +1 -1
  60. package/skills/uipath-maestro-case/references/connector-trigger-common.md +1 -1
  61. package/skills/uipath-maestro-case/references/entry-points-sync.md +204 -0
  62. package/skills/uipath-maestro-case/references/implementation.md +19 -9
  63. package/skills/uipath-maestro-case/references/phase-0-interview.md +10 -8
  64. package/skills/uipath-maestro-case/references/phased-execution.md +11 -4
  65. package/skills/uipath-maestro-case/references/placeholder-tasks.md +24 -2
  66. package/skills/uipath-maestro-case/references/planning.md +9 -3
  67. package/skills/uipath-maestro-case/references/plugins/case/planning.md +2 -0
  68. package/skills/uipath-maestro-case/references/plugins/sla/impl-json.md +1 -1
  69. package/skills/uipath-maestro-case/references/plugins/sla/planning.md +1 -1
  70. package/skills/uipath-maestro-case/references/plugins/stages/impl-json.md +11 -10
  71. package/skills/uipath-maestro-case/references/plugins/stages/planning.md +13 -14
  72. package/skills/uipath-maestro-case/references/plugins/tasks/agent/impl-json.md +3 -1
  73. package/skills/uipath-maestro-case/references/plugins/tasks/agent/planning.md +91 -2
  74. package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/impl-json.md +3 -1
  75. package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/planning.md +87 -2
  76. package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/planning.md +1 -1
  77. package/skills/uipath-maestro-case/references/plugins/triggers/event/impl-json.md +1 -1
  78. package/skills/uipath-maestro-case/references/plugins/triggers/manual/impl-json.md +3 -1
  79. package/skills/uipath-maestro-case/references/plugins/triggers/timer/impl-json.md +2 -1
  80. package/skills/uipath-maestro-case/references/plugins/variables/bindings/impl-json.md +2 -0
  81. package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +20 -10
  82. package/skills/uipath-maestro-case/references/plugins/variables/global-vars/planning.md +9 -8
  83. package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +1 -1
  84. package/skills/uipath-maestro-case/references/plugins/variables/io-binding/planning.md +1 -1
  85. package/skills/uipath-maestro-case/references/registry-discovery.md +87 -10
  86. package/skills/uipath-maestro-case/references/sdd-generation-rules.md +34 -26
  87. package/skills/uipath-maestro-flow/SKILL.md +4 -1
  88. package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +1 -2
  89. package/skills/uipath-maestro-flow/references/author/references/editing-operations-json.md +3 -3
  90. package/skills/uipath-maestro-flow/references/author/references/greenfield.md +4 -2
  91. package/skills/uipath-maestro-flow/references/author/references/planning-arch.md +0 -1
  92. package/skills/uipath-maestro-flow/references/author/references/planning-impl.md +0 -1
  93. package/skills/uipath-maestro-flow/references/author/references/plugins/connector/impl.md +1 -0
  94. package/skills/uipath-maestro-flow/references/author/references/plugins/connector-trigger/impl.md +7 -7
  95. package/skills/uipath-maestro-flow/references/author/references/plugins/ixp/impl.md +14 -14
  96. package/skills/uipath-maestro-flow/references/author/references/plugins/script/impl.md +10 -6
  97. package/skills/uipath-maestro-flow/references/shared/cli-conventions.md +7 -0
  98. package/skills/uipath-maestro-flow/references/shared/file-format.md +1 -1
  99. package/skills/uipath-mcp-servers/references/is-activity-workflow.md +3 -3
  100. package/skills/uipath-planner/SKILL.md +1 -1
  101. package/skills/uipath-platform/SKILL.md +4 -14
  102. package/skills/uipath-platform/references/data-fabric/data-fabric.md +1 -1
  103. package/skills/uipath-platform/references/integration-service/agent-workflow.md +4 -4
  104. package/skills/uipath-platform/references/integration-service/reference-resolution.md +1 -1
  105. package/skills/uipath-platform/references/integration-service/resources.md +5 -5
  106. package/skills/uipath-platform/references/integration-service/triggers.md +10 -9
  107. package/skills/uipath-platform/references/orchestrator/setup-environment.md +2 -0
  108. package/skills/uipath-review/SKILL.md +8 -4
  109. package/skills/uipath-review/references/agents/agent-review-checklist.md +1 -22
  110. package/skills/uipath-review/references/agents/agents-coded-rules.md +24 -7
  111. package/skills/uipath-review/references/agents/agents-lowcode-rules.md +0 -1
  112. package/skills/uipath-review/references/agents/guardrails/coded-guardrails-review.md +231 -0
  113. package/skills/uipath-review/references/rule-catalog-workflow.md +4 -2
  114. package/skills/uipath-rpa/SKILL.md +2 -2
  115. package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/guides/data-service-filter-builder-guide.md +1 -1
  116. package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/coded-api.md +1 -1
  117. package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/curl-import.md +3 -3
  118. package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/http-request-upgrade.md +3 -3
  119. package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/service-discovery.md +2 -2
  120. package/skills/uipath-rpa/references/coded/coding-guidelines.md +1 -1
  121. package/skills/uipath-rpa/references/ui-automation-guide.md +7 -7
  122. package/skills/uipath-rpa/references/uia-configure-target-workflows.md +5 -5
  123. package/skills/uipath-rpa/references/uia-elements-interaction-guide.md +19 -10
  124. package/skills/uipath-rpa/references/uia-prerequisites.md +7 -7
  125. package/skills/uipath-rpa/references/validation-guide.md +2 -2
  126. package/skills/uipath-rpa/references/xaml/common-pitfalls.md +4 -0
  127. package/skills/uipath-rpa/references/xaml/csharp-activity-binding-guide.md +3 -1
  128. package/skills/uipath-rpa/references/xaml/csharp-expression-pitfalls.md +9 -4
  129. package/skills/uipath-rpa/references/xaml/workflow-guide.md +2 -2
  130. package/skills/uipath-rpa/references/xaml/xaml-basics-and-rules.md +1 -1
  131. package/skills/uipath-solution/SKILL.md +4 -4
  132. package/skills/uipath-solution/references/activate-and-manage.md +6 -1
  133. package/skills/uipath-solution/references/develop-solution.md +24 -5
  134. package/skills/uipath-solution/references/pack-and-deploy.md +5 -2
  135. package/skills/uipath-solution/references/scenarios/manual-edits.md +2 -2
  136. package/skills/uipath-solution/references/solution-overview.md +2 -2
  137. package/skills/uipath-troubleshoot/SKILL.md +3 -3
  138. package/skills/uipath-troubleshoot/references/products/agents/playbooks/context-grounding-index-not-found.md +0 -2
  139. package/skills/uipath-troubleshoot/references/products/maestro/playbooks/personal-automation-quota.md +1 -1
  140. package/version-manifest.json +3 -3
  141. package/hooks/ensure-uip.sh +0 -220
  142. package/skills/uipath-maestro-flow/references/author/references/plugins/connector/data-fabric/impl.md +0 -683
  143. package/skills/uipath-maestro-flow/references/author/references/plugins/connector/data-fabric/planning.md +0 -45
@@ -37,7 +37,7 @@ installed/published SDK documentation does not currently support HITL guardrail
37
37
 
38
38
  ## Check Tenant Availability (mandatory for built-in AI validators)
39
39
 
40
- For built-in AI validators (PII, harmful content, user prompt attacks, IP), confirm the validator is enabled on this tenant **before authoring** — run:
40
+ For built-in AI validators (PII, harmful content, user prompt attacks, IP, LLM as Judge), confirm the validator is enabled on this tenant **before authoring** — run:
41
41
 
42
42
  ```bash
43
43
  uip agent guardrails list --output json
@@ -47,6 +47,8 @@ If the requested validator has `Status != "Available"` → tell the user and sto
47
47
 
48
48
  **Skip this step only for deterministic guardrails** — they run locally with no backend dependency.
49
49
 
50
+ > **LLM as Judge also requires LLM Gateway.** If the target is `llm_as_judge`, confirm with the user that a model is configured in their LLM Gateway before proceeding. Ask the user which model ID to use for the `model` parameter — the available values depend on the LLM Gateway configuration in their tenant.
51
+
50
52
  ---
51
53
 
52
54
  ## Step 1 — Style Choice
@@ -337,7 +339,9 @@ On resume: **Approve** continues (with the reviewer's optional edit applied); **
337
339
 
338
340
  ---
339
341
 
340
- ## Verify Guardrails Are Actually Wired (mandatory after writing)
342
+ ## Verify Guardrails Are Actually Wired (mandatory after writing for LangChain ML guardrails)
343
+
344
+ > **Skip this entire section for deterministic guardrails** (`UiPathDeterministicGuardrailMiddleware` / `CustomValidator`). They run inline with no adapter registration and no LLM wrapping. For deterministic guardrails, grep-verify the class name and rule keyword are present in the file — that is sufficient.
341
345
 
342
346
  **Syntactically valid ≠ active.** Because importing from the wrong module bypasses the framework adapter and makes guardrails silently no-op (see [Imports Pattern](#imports-pattern)), `ast.parse` passing tells you nothing about whether a single guardrail will ever fire. After writing, prove the wiring at runtime.
343
347
 
@@ -379,7 +383,7 @@ For non-LangChain frameworks, there is no published adapter yet, so the decorato
379
383
  6. **Respect scope and stage constraints from the docs** — each middleware class has specific allowed scopes and stages; never apply a guardrail at a scope or stage the docs say it doesn't support.
380
384
  7. **Only add imports you use** — merge new names into any existing `from uipath_langchain.guardrails import (...)` block (LangChain) or `from uipath.platform.guardrails import (...)` block (every other framework).
381
385
  8. **For LangChain / LangGraph agents, import guardrail symbols from `uipath_langchain.guardrails`, not `uipath.platform.guardrails`.** Both expose the same names, but only `uipath_langchain.guardrails` registers the LangChain adapter as an import side effect; without it the decorator/middleware never wraps the LLM/tool/agent and every guardrail silently no-ops with no error or log. For any other framework (LlamaIndex, OpenAI Agents, plain Python), import from `uipath.platform.guardrails` — no framework adapter is published yet. See [Imports Pattern](#imports-pattern).
382
- 9. **Verify wiring at runtime after writing (LangChain only)** — confirm the LangChain adapter is registered (`len(_adapters) >= 1`) and the decorated object is wrapped (`type(llm).__name__ == "_GuardedLLM"`, or `_GuardedTool` for tools). `ast.parse` is not enough; a silently-unwrapped guardrail passes syntax but never fires. For frameworks without an adapter, this wrap-check does not apply — invoke the validator directly to confirm it runs. See [Verify Guardrails Are Actually Wired](#verify-guardrails-are-actually-wired-mandatory-after-writing).
386
+ 9. **Verify wiring at runtime after writing (LangChain only)** — confirm the LangChain adapter is registered (`len(_adapters) >= 1`) and the decorated object is wrapped (`type(llm).__name__ == "_GuardedLLM"`, or `_GuardedTool` for tools). `ast.parse` is not enough; a silently-unwrapped guardrail passes syntax but never fires. For frameworks without an adapter, this wrap-check does not apply — invoke the validator directly to confirm it runs. **For `UiPathDeterministicGuardrailMiddleware` / `CustomValidator`, skip both runtime checks — grep-verify the class name and rule keyword are present in the file instead.** See [Verify Guardrails Are Actually Wired](#verify-guardrails-are-actually-wired-mandatory-after-writing-for-langchain-ml-guardrails).
383
387
  10. **Entity/threshold values must match the docs exactly** — use enum member names, not raw strings; use only allowed threshold values.
384
388
  11. **Deterministic guardrails run locally** — no backend API call, no tenant availability check needed.
385
389
  12. **Do not duplicate existing guardrails** — read the agent code first and skip if the same guardrail is already configured.
@@ -387,4 +391,4 @@ For non-LangChain frameworks, there is no published adapter yet, so the decorato
387
391
  14. **`EscalateAction` must come from the fetched SDK docs** — if the docs do not expose the class or constructor parameters, stop and report that HITL guardrail escalation is not available in the current SDK docs/runtime. Never invent the class, import path, or arguments.
388
392
  15. **`EscalateAction` requires a deployed Action App** referenced by `app_name` + `app_folder_path` and declared as an `app` resource in **`bindings.json`** — discover it with `uip solution resources list --kind App`, resolve duplicate names by folder, pass the literal name/folder in code (not env vars), and sync bindings with [../../lifecycle/bindings-reference.md](../../lifecycle/bindings-reference.md). Route the task with `TaskRecipient` when the user names a reviewer. See [Escalation action (HITL)](#escalation-action-human-in-the-loop).
389
393
  16. **Verify the escalation app schema when tenant access is available** — the app must expose the guardrail review inputs/outputs/outcomes listed in the prerequisite section. If the schema cannot be verified in a local smoke task, say that runtime readiness is unverified.
390
- 17. **A HITL guardrail suspends, it doesn't block.** On violation `EscalateAction` suspends via `interrupt(CreateEscalation(...))`; it terminates **only on Reject** (Approve resumes). Verify by confirming the run suspends + a task is created — never expect a "block" for an escalation guardrail (Rule for the [verification step](#verify-guardrails-are-actually-wired-mandatory-after-writing)).
394
+ 17. **A HITL guardrail suspends, it doesn't block.** On violation `EscalateAction` suspends via `interrupt(CreateEscalation(...))`; it terminates **only on Reject** (Approve resumes). Verify by confirming the run suspends + a task is created — never expect a "block" for an escalation guardrail (Rule for the [verification step](#verify-guardrails-are-actually-wired-mandatory-after-writing-for-langchain-ml-guardrails)).
@@ -92,7 +92,7 @@ uip maestro flow registry list --local --output json
92
92
  uip maestro flow registry get "uipath.core.agent.<resourceKey>" --local --output json
93
93
  ```
94
94
 
95
- The second command's `Data.Node` object is what the flow skill pastes into the flow's `definitions[]`. For the node instance shape and top-level `bindings[]` entries, see [agent/impl.md § In-solution variant](../../../uipath-maestro-flow/references/plugins/agent/impl.md#node-instance-inside-nodes--in-solution-variant).
95
+ The second command's `Data.Node` object is what the flow skill pastes into the flow's `definitions[]`. For the node instance shape and top-level `bindings[]` entries, see the uipath-maestro-flow skill agent-plugin reference (In-solution variant).
96
96
 
97
97
  Without `--local`, `registry list`/`get` query the tenant registry (Orchestrator-published resources only) and will not surface the sibling project.
98
98
 
@@ -10,7 +10,7 @@ The coded agent lives as a sibling folder inside the same solution as the flow.
10
10
 
11
11
  - **Agent-side scaffolding:** [embedding-in-flows.md](embedding-in-flows.md)
12
12
  - **Wiring the agent's inputs:** [embedding-in-flows.md § Wiring the Agent's Inputs](embedding-in-flows.md#wiring-the-agents-inputs)
13
- - **Flow node JSON shape + top-level `bindings[]` + `definitions[]` entry:** [agent/impl.md § In-solution variant](../../../uipath-maestro-flow/references/plugins/agent/impl.md#node-instance-inside-nodes--in-solution-variant)
13
+ - **Flow node JSON shape + top-level `bindings[]` + `definitions[]` entry:** uipath-maestro-flow skill, agent-plugin reference (In-solution variant)
14
14
 
15
15
  The node-type's `{key}` is the local `resource.key` minted by `uip solution project add` (written to `resources/solution_folder/process/agent/<name>.json`) and surfaced by `uip maestro flow registry list --local`.
16
16
 
@@ -36,7 +36,7 @@ Fallback discovery paths if the deploy output is unavailable or unparseable, **t
36
36
 
37
37
  If all paths return empty / 404, the deploy command's stdout JSON is authoritative — re-run the deploy and capture its output rather than chasing post-hoc discovery endpoints.
38
38
 
39
- For the flow node JSON shape, see [agent/impl.md § Published variant](../../../uipath-maestro-flow/references/plugins/agent/impl.md#node-instance-inside-nodes--published-variant). `model.section` is `"Published"`.
39
+ For the flow node JSON shape, see the uipath-maestro-flow skill agent-plugin reference (Published variant). `model.section` is `"Published"`.
40
40
 
41
41
  ---
42
42
 
@@ -8,7 +8,6 @@ Read **only** the reference matching the selected framework. Do NOT load other f
8
8
 
9
9
  | Framework | Reference |
10
10
  |-----------|-----------|
11
- | Coded Function | `../frameworks/coded-function-agents.md` + `../frameworks/agent-patterns.md` |
12
11
  | LangGraph | `../frameworks/langgraph-integration.md` |
13
12
  | LlamaIndex | `../frameworks/llamaindex-integration.md` |
14
13
  | OpenAI Agents | `../frameworks/openai-agents-integration.md` |
@@ -14,7 +14,6 @@ Pick the framework before starting. The package installed in the Workflow determ
14
14
 
15
15
  | Agent Type | `<FRAMEWORK_PACKAGE>` | Framework config | Guide |
16
16
  |---|---|---|---|
17
- | Coded Function | `uipath` | `uipath.json` | [coded-function-agents.md](../frameworks/coded-function-agents.md) |
18
17
  | LangGraph | `"uipath-langchain"` | `langgraph.json` | [langgraph-integration.md](../frameworks/langgraph-integration.md) |
19
18
  | LlamaIndex | `uipath-llamaindex` | `llama_index.json` | [llamaindex-integration.md](../frameworks/llamaindex-integration.md) |
20
19
  | OpenAI Agents | `uipath-openai-agents` | `openai_agents.json` | [openai-agents-integration.md](../frameworks/openai-agents-integration.md) |
@@ -47,7 +47,7 @@ Use `uip codedagent <cmd>`, not `uv run uipath <cmd>`. The wrapper injects sessi
47
47
  - **Auth MUST be an interactive question only when needed and values are missing.** If the session check fails and the user did not provide all of environment / organization / tenant, your ENTIRE response must be a single direct question. Do NOT wrap it in bullet points, "Next Steps" headers, or status summaries. Just ask and stop:
48
48
 
49
49
  > What is your UiPath **environment** (cloud/staging/alpha), **organization name**, and **tenant name**?
50
- - **In a flow, coded agents are referenced via the [`agent`](../../../uipath-maestro-flow/references/plugins/agent/) plugin** — node type `uipath.core.agent.{key}`, `Orchestrator.StartAgentJob`. See [flow-integration.md](flow-integration.md) for the three patterns: in-solution sibling folder, Orchestrator-published, tool resource.
50
+ - **In a flow, coded agents are referenced via the `agent` plugin (uipath-maestro-flow skill)** — node type `uipath.core.agent.{key}`, `Orchestrator.StartAgentJob`. See [flow-integration.md](flow-integration.md) for the three patterns: in-solution sibling folder, Orchestrator-published, tool resource.
51
51
 
52
52
  ## Lifecycle Stages
53
53
 
@@ -271,7 +271,7 @@ For conversational, typically general behavior and steps to respond to users. Sh
271
271
 
272
272
  ### User Message
273
273
 
274
- For autonomous agents, templates input fields into the prompt using `{{input.fieldName}}`. For `job-attachment` fields the token renders metadata only (see § File Attachments).
274
+ For autonomous agents, templates input fields into the prompt using `{{input.fieldName}}`, and agent resources/outputs using `@{ }` expressions (see § contentTokens Construction). For `job-attachment` fields the token renders metadata only (see § File Attachments).
275
275
 
276
276
  ```json
277
277
  {
@@ -292,10 +292,15 @@ For conversational agents, the user-message should be ignored after initializati
292
292
 
293
293
  Every message needs both `content` (string) and `contentTokens` (array). Keep them in sync.
294
294
 
295
+ Three token types: `simpleText`, `variable`, `expression`.
296
+
295
297
  **Rules:**
296
- 1. Text outside `{{ }}` → `{ "type": "simpleText", "rawString": "<text>" }`
297
- 2. Text inside `{{ }}` → `{ "type": "variable", "rawString": "input.fieldName" }` (strip delimiters)
298
- 3. Every segment including whitespace gets its own entry
298
+ 1. Text outside `{{ }}` and `@{ }` → `{ "type": "simpleText", "rawString": "<text>" }`
299
+ 2. Text inside `{{ }}` → `{ "type": "variable", "rawString": "input.fieldName" }` (strip delimiters; input-field reference)
300
+ 3. Text inside `@{ }` `{ "type": "expression", "rawString": "<expr>" }` (strip delimiters; Studio expression referencing an agent resource or output — see families below)
301
+ 4. Every segment including whitespace gets its own entry
302
+
303
+ `@{ }` (`expression`) references an agent resource or output by family + name — `tools.<Name>`, `contexts.<Name>`, `escalations.<Name>`, or `output.<path>` — with the inner text verbatim as `rawString` (e.g. `@{contexts.Knowledge}` → `rawString: "contexts.Knowledge"`). `{{ }}` (`variable`) is for `inputSchema` fields only; `@{ }` targets are runtime-resolved and must never be declared under `inputSchema.properties`.
299
304
 
300
305
  **Example — adjacent variables:**
301
306
 
@@ -309,9 +314,23 @@ Content: `"{{input.field1}} {{input.field2}}"`
309
314
  ]
310
315
  ```
311
316
 
317
+ **Example — resource reference (`@{ }` expression):**
318
+
319
+ Reference an agent resource by family + name, e.g. a context (`resources/<Name>/resource.json`) with `@{contexts.<Name>}`.
320
+
321
+ Content: `"Extract information from the @{contexts.Test} context"`
322
+
323
+ ```json
324
+ "contentTokens": [
325
+ { "type": "simpleText", "rawString": "Extract information from the " },
326
+ { "type": "expression", "rawString": "contexts.Test" },
327
+ { "type": "simpleText", "rawString": " context" }
328
+ ]
329
+ ```
330
+
312
331
  **Common mistakes:**
313
332
  - Forgetting to update contentTokens after editing content
314
- - Including `{{` or `}}` in the variable rawString
333
+ - Including `{{`/`}}` or `@{`/`}` in the rawString
315
334
  - Missing whitespace tokens between adjacent variables
316
335
 
317
336
  ## entry-points.json
@@ -11,7 +11,7 @@ Pick this when:
11
11
 
12
12
  Confirm BatchTransform is the right mode first — see [../../../../context-grounding-patterns.md](../../../../context-grounding-patterns.md).
13
13
 
14
- For coded agents (Python, LangGraph) → [../../../coded/capabilities/batch-transform/planning.md](../../../coded/capabilities/batch-transform/planning.md).
14
+ For coded agents (Python, LangGraph) → [../../../../coded/capabilities/batch-transform/planning.md](../../../../coded/capabilities/batch-transform/planning.md).
15
15
 
16
16
  ## Inputs You Need Before Building
17
17
 
@@ -11,7 +11,7 @@ Pick this when:
11
11
 
12
12
  Confirm DeepRAG is the right mode first — see [../../../../context-grounding-patterns.md](../../../../context-grounding-patterns.md).
13
13
 
14
- For coded agents (Python, LangGraph) → [../../../coded/capabilities/deeprag/planning.md](../../../coded/capabilities/deeprag/planning.md).
14
+ For coded agents (Python, LangGraph) → [../../../../coded/capabilities/deeprag/planning.md](../../../../coded/capabilities/deeprag/planning.md).
15
15
 
16
16
  ## Inputs You Need Before Building
17
17
 
@@ -25,6 +25,7 @@ For other context variants, see [context.md](context.md).
25
25
  "description": "",
26
26
  "contextType": "attachments",
27
27
  "indexName": "<ContextName>", // same as name for attachments
28
+ "folderPath": "solution_folder",
28
29
  "attachments": {
29
30
  "description": "Array of files, documents, images to process."
30
31
  },
@@ -227,3 +227,4 @@ If the user asks to fix identified issues: apply corrections to `agent.json`, ru
227
227
  11. **Do not create separate guardrails per scope** — combine multiple scopes into a single guardrail's `scopes` array.
228
228
  12. **All map-enum keys must exactly match the corresponding enum-list values** — no extra or missing keys. This is the most common correctness error.
229
229
  13. **Read [guardrails.md](guardrails.md) before writing any JSON** — discriminator fields, PascalCase constraints, and parameter shapes are specified there and cannot be safely inferred.
230
+ 14. **Do NOT use TaskCreate, TaskUpdate, or other task-tracking tools for guardrail edits.** Edit `agent.json` directly — task management tools add bookkeeping turns without benefit and push runs over their turn budget.
@@ -353,7 +353,7 @@ Requires `uip login`. The SDK resolves folder keys via Resource Catalog Service;
353
353
 
354
354
  **Idempotency.** Import-only by design. First run for a binding triggers `addOrUpdateResourceToSolutionAsync` (status `Added`); subsequent runs skip the binding because its key is already in the solution. Re-running is safe and a no-op when nothing changed.
355
355
 
356
- Lives in `solution-tool`, not `api-workflow-tool`. Full details in the [solution skill](../uipath-platform).
356
+ Lives in `solution-tool`, not `api-workflow-tool`. Full details in the uipath-solution skill.
357
357
 
358
358
  ## `uip is resources describe`
359
359
 
@@ -247,7 +247,7 @@ Sample for Outlook `getNewestEmail`:
247
247
 
248
248
  **Heuristic:** when the stub returns empty `queryParameters`, `pathParameters`, or `bodyParameters` for a non-trivial vendor operation, it's almost certainly the bug — verified-real endpoints (CRUD operations on real objects) very rarely have zero required inputs.
249
249
 
250
- Well-known folder-name shortcuts (e.g. MS Graph's `"inbox"`, `"sentitems"`, `"drafts"`) work for `parentFolderId`-style fields at runtime, but the StudioWeb FolderPicker only displays the friendly name if the value matches a real folder ID from the lookup cache. For exact UI fidelity, fetch the real ID once via `uip is resources execute <connector-key> list <object-name> --connection-id <uuid>` against the `lookup.path` (e.g. `/MailFolders`).
250
+ Well-known folder-name shortcuts (e.g. MS Graph's `"inbox"`, `"sentitems"`, `"drafts"`) work for `parentFolderId`-style fields at runtime, but the StudioWeb FolderPicker only displays the friendly name if the value matches a real folder ID from the lookup cache. For exact UI fidelity, fetch the real ID once via `uip is resources run list <connector-key> <object-name> --connection-id <uuid>` against the `lookup.path` (e.g. `/MailFolders`).
251
251
 
252
252
  ### Step 4 — Drop into the workflow, replace placeholders, validate
253
253
 
@@ -500,7 +500,7 @@ These are issues that surface only when a workflow is opened or run in **StudioW
500
500
  }
501
501
  }
502
502
  ```
503
- - **Well-known shortcuts.** MS Graph accepts well-known folder names (`"inbox"`, `"sentitems"`, `"drafts"`) as `parentFolderId`. They run, but StudioWeb's FolderPicker only displays the friendly folder name when the value matches an ID from its lookup cache. For exact UI fidelity, fetch the real ID via `uip is resources execute <connector-key> list <object-name> --connection-id <uuid>` against the field's `lookup.path` (often `/MailFolders`, `/Folders`, etc.).
503
+ - **Well-known shortcuts.** MS Graph accepts well-known folder names (`"inbox"`, `"sentitems"`, `"drafts"`) as `parentFolderId`. They run, but StudioWeb's FolderPicker only displays the friendly folder name when the value matches an ID from its lookup cache. For exact UI fidelity, fetch the real ID via `uip is resources run list <connector-key> <object-name> --connection-id <uuid>` against the field's `lookup.path` (often `/MailFolders`, `/Folders`, etc.).
504
504
  - **Heuristic:** when the stub returns empty `queryParameters` / `pathParameters` / `bodyParameters` for a non-trivial vendor operation, treat it as the bug. Real endpoints (CRUD on real objects, list-with-filters operations) almost never have zero required inputs.
505
505
  - **Upstream:** the stub IS surfacing the metadata it has — `metadata.configuration` contains the full `inputFields` list — so this is a CLI-side fix where the stub should populate defaults/placeholders from `required: true` fields, not a missing-data issue. Until that ships, the cross-check is mandatory per skill rule 16 step 4.
506
506
  - **See also:** [connector-activity-discovery.md — Required-field cross-check](connector-activity-discovery.md#required-field-cross-check--the-stub-drops-required-true-request-fields).
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: uipath-automation-discovery
3
- description: "UiPath automation discovery — mines Slack/email/wikis/CRM/HRIS/ERP for repetitive work, SPOFs, and replicable models; produces a 4-tier prioritized opportunity report with UiPath implementation paths. Use to discover automation opportunities, find what to automate, or run an internal automation audit across an organization. For building a specific automation→uipath-rpa, authoring a Flow→uipath-maestro-flow, working with agents→uipath-agents."
3
+ description: "UiPath automation discovery — mines Slack/email/wikis/CRM/HRIS/ERP for repetitive work, SPOFs, and replicable models; produces a 4-tier prioritized opportunity report with UiPath implementation paths, then sizes build effort (complexity band → pack-hours → contingency). Use to discover automation opportunities, find what to automate, estimate/size a delivery, or run an internal automation audit across an organization. For building a specific automation→uipath-rpa, authoring a Flow→uipath-maestro-flow, working with agents→uipath-agents."
4
4
  ---
5
5
 
6
6
  # Automation Discovery
@@ -15,6 +15,7 @@ UiPath-ready backlog with recommended implementation paths.
15
15
  - User wants to **find manual work to automate** and build a UiPath implementation backlog
16
16
  - User asks "what should we automate?" while working with UiPath tools
17
17
  - User wants an **internal automation audit** to feed into UiPath Automation Hub or a UiPath pipeline
18
+ - User asks to **estimate / size / cost** discovered opportunities — pack-hours, delivery effort, complexity bands, contingency
18
19
  - User explicitly invokes `/uipath-automation-discovery`
19
20
 
20
21
  ## Critical Rules
@@ -24,6 +25,7 @@ UiPath-ready backlog with recommended implementation paths.
24
25
  3. **Verify access before mining.** Test each data source with a minimal read-only operation. If access fails, note it and move on — don't block discovery.
25
26
  4. **Evidence over opinion.** Every opportunity (Tiers 1-3) must cite a specific source, quantitative metric, and affected role or team. No unsupported claims. If a source yields fewer than 5 signals, mark all findings from that source as low-confidence. Do not promote low-confidence findings above Tier 3, except per Rule 5.
26
27
  5. **Replication is always Tier 1.** A proven model backed by a working automation that could replicate elsewhere is the highest-value finding — this overrides Rule 4's Tier 3 cap. If the replicable model's source has fewer than 5 signals, classify as Tier 1 with a low-confidence flag until corroborated by a second source. Always lead with replicable models. Never skip the replicable-model search (Phase 2C).
28
+ 6. **Never invent pack-hours or complexity thresholds (Phase 4.5).** When estimating build effort, the band→hours numbers and matrix thresholds come from the user-supplied Core RPA / Agentic complexity matrices and Pack-Hours catalogue. Do NOT recall or fabricate them — if they are not supplied, STOP and ask. Adjustment-factor and contingency percentages are `[CALIBRATE]` defaults the user confirms against actuals. Fabricated numbers recreate the estimation error this phase exists to prevent.
27
29
 
28
30
  ## Workflow Overview
29
31
 
@@ -33,6 +35,7 @@ Phase 1: MINE → Gather raw data from all verified sources
33
35
  Phase 2: ANALYZE → Extract patterns, SPOFs, replicable models, gaps
34
36
  Phase 3: REFLECT → Layer on business strategy for strategic gaps
35
37
  Phase 4: REPORT → Produce prioritized report with 4 tiers
38
+ Phase 4.5: ESTIMATE→ Size build effort (band → pack-hours → contingency) — on request
36
39
  Phase 5: HANDOFF → Map opportunities to UiPath implementation skills
37
40
  ```
38
41
 
@@ -189,6 +192,25 @@ tier definitions, evidence standards, and platform-specific guidance.
189
192
  - ROI benchmarks from existing projects included
190
193
  - Strategic analysis ties to real financials
191
194
 
195
+ ## Phase 4.5: ESTIMATE (optional — on request)
196
+
197
+ Run only when the user wants build-effort sizing (pack-hours, delivery
198
+ estimate, complexity bands, contingency). Sizes each prioritized opportunity:
199
+ opportunity → complexity band → pack-hours → adjustment factors → contingency →
200
+ total. This is delivery/pre-sales sizing — distinct from the ROI/hours-saved
201
+ impact already in the report.
202
+
203
+ The band→hours numbers and matrix thresholds are **authoritative references the
204
+ user supplies** (Core RPA + Agentic complexity matrices, Pack-Hours catalogue) —
205
+ never invented (Critical Rule 6). Ask for them if absent. The method adds the
206
+ pieces that were missing: an above-ceiling/decompose rule (>7 apps / >8
207
+ variations), a multi-entity redeploy factor, an existing-automation rebuild
208
+ discount, confidence-tiered contingency, and one unified band→hours mapping that
209
+ resolves the Tool vs Process-Automation grain.
210
+
211
+ See [references/estimation-guide.md](references/estimation-guide.md) and
212
+ [assets/templates/estimation-worksheet-template.md](assets/templates/estimation-worksheet-template.md).
213
+
192
214
  ## Phase 5: HANDOFF
193
215
 
194
216
  Map each Tier 1-2 opportunity to a UiPath implementation path. Add a
@@ -223,6 +245,7 @@ each phase with a brief summary and ask if the user wants to adjust scope.
223
245
  - [references/intake-guide.md](references/intake-guide.md) — Phase 0 detailed steps (company context, tool inventory, access verification, privacy)
224
246
  - [references/mining-guide.md](references/mining-guide.md) — Per-source search guidance (load during Phase 1)
225
247
  - [references/report-template.md](references/report-template.md) — Output structure, tier definitions, and evidence standards (load during Phase 4)
248
+ - [references/estimation-guide.md](references/estimation-guide.md) — Estimation accelerator: opportunity → band → pack-hours → contingency (load during Phase 4.5, on request)
226
249
 
227
250
  ## Anti-patterns
228
251
 
@@ -232,3 +255,5 @@ each phase with a brief summary and ask if the user wants to adjust scope.
232
255
  - **Promising ROI without source citations.** Every ROI estimate must reference an existing project benchmark or explicit data point.
233
256
  - **Skipping the replicable-model search.** The highest-value findings are always proven models that can replicate. Never skip Phase 2C.
234
257
  - **Speculating from insufficient evidence.** Below signal threshold → mark low confidence. Insufficient evidence → don't promote to Tier 1-3.
258
+ - **Fabricating pack-hours or matrix thresholds (Phase 4.5).** The band→hours numbers are authoritative user-supplied references. Guessing them recreates the estimation error the accelerator exists to prevent — stop and ask for the catalogue and matrices.
259
+ - **Clamping oversized opportunities at "High".** A cluster over the matrix ceiling (>7 apps / >8 variations) must be decomposed and summed, not sized as a single "High" unit — this was the largest source of under-estimation.
@@ -0,0 +1,80 @@
1
+ # Estimation Worksheet — <ENGAGEMENT / CUSTOMER>
2
+
3
+ Generated by: uipath-automation-discovery
4
+
5
+ > **Numbers below marked `[FROM CATALOGUE]` come from the user-supplied
6
+ > Pack-Hours catalogue and complexity matrices — never invented.** Values marked
7
+ > `[CALIBRATE]` are default assumptions to confirm against actuals before the
8
+ > estimate is treated as final. See
9
+ > [references/estimation-guide.md](../../references/estimation-guide.md).
10
+
11
+ ## 1. Sources
12
+
13
+ | Artifact | Provided? | Reference / path |
14
+ |---|---|---|
15
+ | Opportunity register | | <path or Phase 4 report> |
16
+ | Core RPA complexity matrix | | <path> |
17
+ | Agentic complexity matrix | | <path> |
18
+ | Pack-Hours catalogue | | <path> |
19
+ | Benchmark (Delivery Summary) | | <path, if any> |
20
+
21
+ ## 2. Unified band→hours mapping
22
+
23
+ Filled from the Pack-Hours catalogue. One row per band × grain.
24
+
25
+ | Complexity band | Grain | Core RPA hours | Agentic add-on hours | Catalogue source |
26
+ |---|---|---|---|---|
27
+ | Simple | Process-Automation | `[FROM CATALOGUE]` | `[FROM CATALOGUE]` | <ref> |
28
+ | Simple | Tool | `[FROM CATALOGUE]` | — | <ref> |
29
+ | Medium | Process-Automation | `[FROM CATALOGUE]` | `[FROM CATALOGUE]` | <ref> |
30
+ | Medium | Tool | `[FROM CATALOGUE]` | — | <ref> |
31
+ | High | Process-Automation | `[FROM CATALOGUE]` | `[FROM CATALOGUE]` | <ref> |
32
+ | High | Tool | `[FROM CATALOGUE]` | — | <ref> |
33
+
34
+ ## 3. Per-opportunity estimate
35
+
36
+ | # | Opportunity | Grain | Band | Base hours (source) | Redeploy factor | Rebuild discount | Confidence | Contingency % | Total hours |
37
+ |---|---|---|---|---|---|---|---|---|---|
38
+ | 1 | <name> | <Process / Tool> | <band> | <hrs> (`[FROM CATALOGUE]`) | <×N entities> | <−%> | <H/M/L> | `[CALIBRATE]` | <total> |
39
+ | 2 | | | | | | | | | |
40
+
41
+ Show the math per row: `total = (base ± factors) × (1 + contingency)`.
42
+
43
+ ## 4. Above-ceiling decomposition log
44
+
45
+ For any opportunity > 7 apps or > 8 variations, decomposed and summed.
46
+
47
+ | Parent opportunity | Trigger (apps / variations) | Sub-unit | Grain | Band | Hours |
48
+ |---|---|---|---|---|---|
49
+ | <name> | <e.g. 11 apps> | <sub-automation> | <grain> | <band> | <hrs> |
50
+ | | | <sub-automation> | | | |
51
+ | | | **Parent subtotal** | | | <sum> |
52
+
53
+ ## 5. Calibration register
54
+
55
+ Every assumption the user must confirm before the estimate is final.
56
+
57
+ | Assumption | Default used | Confirmed value | Basis |
58
+ |---|---|---|---|
59
+ | Multi-entity redeploy increment | `[CALIBRATE ~15-30%]` per extra entity | | |
60
+ | Existing-automation rebuild discount | `[CALIBRATE ~20-40%]` | | |
61
+ | Contingency — High confidence | `[CALIBRATE ~10-15%]` | | |
62
+ | Contingency — Medium confidence | `[CALIBRATE ~20-30%]` | | |
63
+ | Contingency — Low confidence | `[CALIBRATE ~40%+]` | | |
64
+
65
+ ## 6. Scenario roll-up
66
+
67
+ | Scenario | Assumptions | Portfolio total (h) |
68
+ |---|---|---|
69
+ | Option 1 — conservative full-build | no decomposition reuse, high contingency | <sum> |
70
+ | Option 2 — decomposition + reuse + redeploy | rebuild discount + redeploy factor applied | <sum> |
71
+
72
+ ## 7. Benchmark reconciliation (if a benchmark exists)
73
+
74
+ | Line | Hours |
75
+ |---|---|
76
+ | This worksheet (chosen scenario) | <sum> |
77
+ | Benchmark (Delivery Summary) | <hrs> |
78
+ | **Delta** | <diff> |
79
+
80
+ **Delta drivers:** <attribute each material gap to a band, factor, or decomposition decision>
@@ -0,0 +1,104 @@
1
+ # Estimation Accelerator
2
+
3
+ Size the **build effort** of a prioritized opportunity register: opportunity →
4
+ complexity band → pack-hours → adjustment factors → contingency → total. Runs
5
+ after Phase 4 (the report already carries the register + per-opportunity
6
+ confidence). This is delivery/pre-sales sizing, not the ROI/hours-saved impact
7
+ in the report.
8
+
9
+ Load when the user asks to estimate, size, cost, or produce pack-hours /
10
+ effort / a delivery estimate for discovered opportunities.
11
+
12
+ ## Hard rule — never invent pack-hours
13
+
14
+ The band→hours numbers and the complexity-matrix thresholds are **authoritative
15
+ UiPath references the user supplies** — the Core RPA complexity matrix, the
16
+ Agentic complexity matrix, and the Pack-Hours catalogue. Do NOT recall,
17
+ approximate, or fabricate them. Unverified numbers are the exact failure this
18
+ accelerator exists to prevent.
19
+
20
+ 1. If the user has not supplied the Pack-Hours catalogue and the complexity
21
+ matrices, STOP and ask for them (file paths or pasted tables). Do not
22
+ proceed with guessed hours.
23
+ 2. Every band→hours value written to the worksheet cites its catalogue source.
24
+ 3. Adjustment-factor and contingency percentages below are **not** authoritative
25
+ — they are `[CALIBRATE]` defaults the user tunes against the org's actuals
26
+ before the estimate is final.
27
+ 4. Show the math for every opportunity (base → factors → contingency → total)
28
+ so each number is auditable.
29
+
30
+ ## Inputs
31
+
32
+ | Input | Source | Notes |
33
+ |---|---|---|
34
+ | Opportunity register | Phase 4 report, or user `.xlsx` | Per opportunity: apps touched, variations / decision points, data & exception complexity, agentic vs deterministic, rebuild-of-existing?, deploy entity count |
35
+ | Core RPA complexity matrix | **User-supplied** | Band thresholds (apps, variations, data, exceptions) |
36
+ | Agentic complexity matrix | **User-supplied** | Band thresholds for reasoning steps, tools, autonomy, HITL |
37
+ | Pack-Hours catalogue | **User-supplied** | Band × grain → hours |
38
+ | Benchmark (optional) | Delivery Summary / official estimate | For reconciliation |
39
+
40
+ ## Procedure — per opportunity
41
+
42
+ 1. **Determine grain.** Is the unit a **Process-Automation** (end-to-end
43
+ process) or a **Tool** (reusable component / pack invoked by processes)?
44
+ Price at the matching grain — a decomposed sub-unit is often Tool-grain.
45
+ Grain ambiguity was a root cause of the estimate divergence; resolve it
46
+ explicitly and record it.
47
+ 2. **Classify complexity** on the matrix dimensions: deterministic RPA work →
48
+ Core RPA matrix; agentic/reasoning components → Agentic matrix. A hybrid
49
+ opportunity carries both a Core RPA band and an Agentic add-on.
50
+ 3. **Assign band** (Simple / Medium / High) from the matrix — unless the
51
+ above-ceiling rule fires.
52
+ 4. **Above-ceiling / decompose rule.** If an opportunity exceeds the matrix
53
+ ceiling — **> 7 applications OR > 8 variations / decision points** — do NOT
54
+ clamp it to "High". Decompose into sub-automations (by sub-process or
55
+ application cluster), classify and size each at its own grain, and sum.
56
+ Record the decomposition. Clamping oversized clusters at "High" is the
57
+ single largest source of under-estimation — this rule is the primary fix.
58
+ 5. **Map band → base pack-hours** from the supplied catalogue at the resolved
59
+ grain. Cite the catalogue row.
60
+ 6. **Apply adjustment factors** (`[CALIBRATE]` defaults — confirm against
61
+ actuals):
62
+ - **Multi-entity redeploy:** same automation deployed across N legal
63
+ entities / regions → do NOT count each as a full build. `base + (N-1) ×
64
+ [CALIBRATE ~15-30%] × base` per additional entity; raise it when per-entity
65
+ localization or regulatory variation is significant.
66
+ - **Existing-automation rebuild discount:** rebuilding / migrating an
67
+ automation that already exists (known logic, documented process) →
68
+ `[CALIBRATE ~20-40%]` reduction vs greenfield, scaled by reuse and
69
+ documentation quality.
70
+ 7. **Add confidence-tiered contingency**, keyed to the opportunity's discovery
71
+ confidence: High `[CALIBRATE ~10-15%]`, Medium `[~20-30%]`, Low / ambiguous
72
+ scope / unknown systems `[~40%+]`.
73
+ 8. **Total** = (base ± factors) × (1 + contingency). Write base, each factor,
74
+ contingency, and total to the worksheet.
75
+
76
+ ## Unified band→hours mapping (ask #3)
77
+
78
+ Replace the disconnected matrix-image + catalogue pair with one table so band,
79
+ grain, and hours live together. Fill values from the user's catalogue:
80
+
81
+ | Complexity band | Grain | Core RPA hours | Agentic add-on hours | Catalogue source |
82
+ |---|---|---|---|---|
83
+ | Simple | Process-Automation | `[FROM CATALOGUE]` | `[FROM CATALOGUE]` | `<ref>` |
84
+ | Simple | Tool | `[FROM CATALOGUE]` | — | `<ref>` |
85
+ | Medium | … | … | … | … |
86
+ | High | … | … | … | … |
87
+ | Above-ceiling | (decompose) | sum of sub-units | sum of sub-units | — |
88
+
89
+ ## Scenarios & reconciliation
90
+
91
+ - Produce ≥ 2 scenarios (e.g. **Option 1** conservative full-build; **Option 2**
92
+ with decomposition + rebuild discount + redeploy factor applied). The source
93
+ engagement delivered three (16.2k / 12.1k / 10.7k h) — the spread comes from
94
+ these factors, not from different base numbers.
95
+ - When a benchmark estimate exists, reconcile the portfolio total against it and
96
+ attribute each material delta to a band, factor, or decomposition decision.
97
+
98
+ ## Output
99
+
100
+ Use [assets/templates/estimation-worksheet-template.md](../assets/templates/estimation-worksheet-template.md):
101
+ per-opportunity estimate table, the unified band→hours mapping, the
102
+ decomposition log, the calibration register (every `[CALIBRATE]` value awaiting
103
+ confirmation), and the scenario roll-up. Append an **Estimation** section to the
104
+ Phase 4 report, or emit a standalone worksheet.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: uipath-connector-builder
3
- description: "UiPath Integration Service connector authoring (REST+JSON) on disk via `uip is connectors builder`. Triggers on `element.json`, `element-metadata.json`, `standard-resources/*.json`, a `periodic-uipath-*`/`periodic-design-*` connector repo, or any request to build/edit an IS connector: init the connector shell, configure auth (14 types via `auth set`), add activities with fields/params/methods/hooks, wire polling/webhook triggers, add auth-system resources, inspect, validate, and surgically read/write files via state. Import + publish live on the parent `uip is connectors` (need `uip login`). NOT for operating a published connector — connections, ping, run an activity→uipath-platform; NOT for `.flow` connector nodes→uipath-maestro-flow."
3
+ description: "UiPath Integration Service connector authoring (REST+JSON) on disk via `uip is connectors builder`. Triggers on `element.json`, `element-metadata.json`, `standard-resources/*.json`, a `periodic-uipath-*`/`periodic-design-*` connector repo, or any request to build/edit an IS connector: init the connector shell, configure auth (19 types via `auth set`, incl. jwtOauth claims, FPS, none), add activities with fields/params/methods/hooks, wire polling/webhook triggers, add auth-system resources, inspect, validate, and surgically read/write files via state. Import + publish live on the parent `uip is connectors` (need `uip login`). NOT for operating a published connector — connections, ping, run an activity→uipath-platform; NOT for `.flow` connector nodes→uipath-maestro-flow."
4
4
  allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion
5
5
  ---
6
6
 
@@ -25,7 +25,7 @@ Author UiPath Integration Service connectors on disk with `uip is connectors bui
25
25
  3. **`auth set` owns all authentication.** It writes the config entries, `authentication.type` / `typeOauth` / `authenticationTypes`, and the token-refresh resource in one call. Define scopes here too (`--scope`, `--scope-options`, `--required-scopes`, `--preselected-scopes`) — there is no separate scope command. `init --auth oauth2|customApiKey` is inline sugar for the create-time common case; everything else goes through `auth set`. Never hand-roll auth via `state patch`.
26
26
  4. **`activity create` writes both sides in one call** — the standard-resource file AND one `element.json` entry per method. Re-running on an existing activity appends/merges. Pass `--skip-sr` (or use `auth system create`) only for system resources that need no SR file. Model `GETBYID`/`PATCH`/`PUT`/`DELETE` only for TRUE by-id endpoints — never for search. The `/{primaryKey}` path param is added automatically: ALWAYS for `GETBYID`, and for `PATCH`/`PUT`/`DELETE` only when the activity is CRUD (it also has a `GET`/`GETBYID`); a write-only/action activity keeps its base path.
27
27
  5. **`state patch` REPLACES the whole node at a pointer (no merge).** To change one field: `state query` the entry, edit it, then `state patch` the COMPLETE object back. `element-metadata.json` has no addressable sub-paths — round-trip the whole file. Activity paths in pointers are URL-encoded: `/contacts` → `%2Fcontacts`. Use the dedicated authoring verbs for creation, not `state patch`.
28
- 6. **Connector targeting.** Builder verbs walk up from the cwd, then scan immediate subdirectories — run from inside the connector dir, or pass `--connector-dir <PATH>` to target one explicitly (required when multiple connectors are nearby). `import` reads `--connector-dir` the same way (the connector root holding `app/element/element.json`); on `download` it instead names the OUTPUT directory to write the pulled connector into. **Exception — `init` does NOT scan subdirectories** (it would otherwise resolve a SIBLING connector and silently EDIT/rename it): to CREATE, run `init` from a fresh/empty directory (a dir that merely *contains* connector subdirs — e.g. `/tmp` — creates a new connector, it will not dive into a child to edit it); to EDIT, run from inside the connector or pass `--connector-dir`.
28
+ 6. **Connector targeting.** Builder verbs walk up from the cwd, then scan immediate subdirectories, then fall back to the `.uip-connector.json` marker `init` writes in the directory it ran from so follow-up commands from that same directory hit the last-init connector automatically, even next to other connector dirs. Pass `--connector-dir <PATH>` to override or when working from elsewhere. `import` reads `--connector-dir` the same way (the connector root holding `app/element/element.json`); on `download` it instead names the OUTPUT directory to write the pulled connector into. **Exception — `init` does NOT scan subdirectories** (it would otherwise resolve a SIBLING connector and silently EDIT/rename it): to CREATE, run `init` from a fresh/empty directory (a dir that merely *contains* connector subdirs — e.g. `/tmp` — creates a new connector, it will not dive into a child to edit it); to EDIT, run from inside the connector or pass `--connector-dir`.
29
29
  7. **Output is the `{Result, Code, Data}` envelope.** Add `--output json` to parse it. Failures exit non-zero. Never suppress stderr.
30
30
  8. **`import` / `download` / `publish` — and `init` when CREATING — need `uip login`.** Authenticate before any tenant pull/push. A NEW connector's key `design-{org}-{slug}` takes its org from your logged-in session, so `init` create ERRORS when you're not logged in. Let it derive the org; do NOT pass a guessed `--organization` (a wrong org bakes into the key and only surfaces, mismatched, at import/publish) — `--organization <slug>` is only for offline/CI builds with a known org.
31
31
  9. **Never echo, log, or hard-code a secret.** Secret config keys (client secret, API key, password, token) are written by `auth set` ENCRYPTED (`encrypt: true`) — most as `PASSWORD` fields, though some (OAuth tokens, a service-account JSON) are encrypted `TEXTFIELD`/`TEXTAREA`. End users supply real credentials at connection time; the connector holds only the auth TYPE + endpoint URLs + scopes. Use placeholders in every example command.
@@ -39,6 +39,7 @@ Decide how each per-connection value reaches the request BEFORE scaffolding —
39
39
  - **One config drives the host — not three URLs.** When the base, token, and authorize hosts share a per-connection part (an instance name, region, datacenter, or workspace), surface ONE config and template it into every URL: `init --base-url 'https://{instance}.../api'` + `auth set --token-url 'https://{instance}.../token' --authorization-url 'https://{instance}.../authorize'`. The CLI auto-seeds a single fillable `{instance}` field that resolves all three ([references/configuration.md](references/configuration.md) §Templated hosts). Do NOT expose `base.url`/`oauth.token.url`/`oauth.authorization.url` as separate connection fields.
40
40
  - **Open value → TEXTFIELD; fixed set → COMBO.** A free-form instance/workspace/account name is the auto-seeded templated TEXTFIELD — that is a legitimate, common shape, not a smell. Only a genuinely fixed datacenter/environment list becomes a COMBO (`state patch` the seeded entry to `type:COMBO` with `options`, whose `value` can be the host fragment itself).
41
41
  - **Derive or discover before you ask.** If a per-connection value (the API host, an org/account id) is returned in the token response or is discoverable via an authenticated call, capture it instead of adding a manual field — but ONLY when it is genuinely needed AND obtainable; a single templated config is the simpler default, so don't over-engineer discovery where a plain field suffices. Token-response host → a `postRequest` hook that validates (https + allowlisted host, never log the token) and persists via `done({configuration})` — recipe: [references/hooks.md](references/hooks.md) §"Pattern: base URL …". Discoverable id → an `onProvision` system resource that calls the lookup at connection time ([references/system-resources.md](references/system-resources.md)).
42
+ - **User-facing configs need guidance.** Every `configScreenType:"pre"` or `"pre-optional"` field should have `hintText` with an example or where to find the value. give every visible connection-form field a hint (`validate` does not currently check this) for instance/workspace IDs, tenant hosts, and token-type-specific credentials.
42
43
  - **Multi-datacenter OAuth:** the accounts/token host itself varies by region — template the region config into `--token-url`/`--authorization-url` too, not just the base URL.
43
44
 
44
45
  ## Workflows
@@ -117,6 +118,7 @@ uip is connectors builder validate
117
118
 
118
119
  ### Customize a curated activity
119
120
  `activity create` auto-curates every method into a standalone Studio activity by default (opt out with `--no-curate`). Use `method curate` only to override the generated name/displayName, or to curate a `--no-curate` method.
121
+ Generic CRUD activities are always present separately from curated activities: List/Get/Create/Update/Delete Records let the user choose any object that supports that method. Do not remove them or report them as pollution when you add a curated/list-capable object; author the curated service action alongside the generic object picker.
120
122
  ```bash
121
123
  uip is connectors builder activity method curate --resource cases --method GET \
122
124
  --display-name 'Get Support Request'
@@ -134,7 +136,7 @@ uip is connectors builder state patch element.json/configuration/oauth.token.url
134
136
  --value '<full entry from the query above, with defaultValue corrected>'
135
137
  uip is connectors builder validate
136
138
  ```
137
- For a derived base URL (e.g. Salesforce `instance_url` from the token response): a `postRequest` hook VALIDATES the URL (https + allowlisted host) and persists it with `done({configuration})` — NOT `state patch`, which baking-time-edits one org's URL into every connection. Full recipe: [references/hooks.md](references/hooks.md) §"Pattern: base URL …"; investigation checklists: [references/debugging.md](references/debugging.md).
139
+ For a base URL or id derived at connection time: use a token-response `postRequest` hook when the value is returned by the token call, or an `onProvision` system resource when it must be discovered after auth. Validate the value, then persist it with `done({configuration})` — NOT `state patch`, which baking-time-edits one connection's value into every connection. Full recipe: [references/hooks.md](references/hooks.md) §"Pattern: base URL …"; investigation checklists: [references/debugging.md](references/debugging.md).
138
140
 
139
141
  ## Command Map
140
142
 
@@ -171,7 +173,7 @@ Depth lives in `references/` — each self-contained. SKILL.md owns the workflow
171
173
  | element.json internals: top-level fields, resources[], parameters[], value interpolation, hook order | [references/element-json.md](references/element-json.md) |
172
174
  | Standard-resource files: linking, metadata.method, curated, fields (visibility/design/searchable) | [references/standard-resources.md](references/standard-resources.md) |
173
175
  | configuration[] entries: widget types, screen types, per-auth key sets, pagination + event keys | [references/configuration.md](references/configuration.md) |
174
- | Authentication setup: all 14 auth types and the OAuth/JWT scope surface | [references/auth.md](references/auth.md) |
176
+ | Authentication setup: all 19 auth types (incl. JWT Bearer claims, FPS, none) and the OAuth/JWT scope surface | [references/auth.md](references/auth.md) |
175
177
  | Auth-system resources: auth-validation, onProvision/onDelete, OAuth token overrides | [references/system-resources.md](references/system-resources.md) |
176
178
  | When to write a hook vs use a built-in (decision table + good/avoidable patterns), execution order, context vars, done(), naming | [references/hooks.md](references/hooks.md) |
177
179
  | Polling and webhook triggers: config keys, event.poller.configuration schema | [references/events.md](references/events.md) |