@uipath/skills 1.197.2 → 1.198.0-preview.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CODEOWNERS +18 -11
- package/README.md +1 -0
- package/assets/skill-status.json +8 -0
- package/hooks/hooks.json +44 -8
- package/hooks/send-telemetry.ps1 +392 -0
- package/hooks/send-telemetry.sh +118 -86
- package/hooks/set-session-env.ps1 +72 -0
- package/hooks/set-session-env.sh +64 -0
- package/hooks/suggest-permissions.ps1 +45 -0
- package/hooks/suggest-permissions.sh +4 -0
- package/package.json +1 -1
- package/skills/uipath-admin/references/audit-commands.md +2 -2
- package/skills/uipath-admin/references/audit-workflow-guide.md +4 -4
- package/skills/uipath-agents/references/coded/capabilities/batch-transform/planning.md +1 -1
- package/skills/uipath-agents/references/coded/capabilities/deeprag/planning.md +1 -1
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails-recommend.md +5 -2
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails.md +8 -4
- package/skills/uipath-agents/references/coded/embedding-in-flows.md +1 -1
- package/skills/uipath-agents/references/coded/flow-integration.md +2 -2
- package/skills/uipath-agents/references/coded/lifecycle/build.md +0 -1
- package/skills/uipath-agents/references/coded/lifecycle/setup.md +0 -1
- package/skills/uipath-agents/references/coded/quickstart.md +1 -1
- package/skills/uipath-agents/references/lowcode/agent-definition.md +24 -5
- package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/batch-transform/planning.md +1 -1
- package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/deeprag/planning.md +1 -1
- package/skills/uipath-agents/references/lowcode/capabilities/context/attachments.md +1 -0
- package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails-recommend.md +1 -0
- package/skills/uipath-api-workflow/references/cli-reference.md +1 -1
- package/skills/uipath-api-workflow/references/connector-activity-discovery.md +1 -1
- package/skills/uipath-api-workflow/references/troubleshooting.md +1 -1
- package/skills/uipath-automation-discovery/SKILL.md +26 -1
- package/skills/uipath-automation-discovery/assets/templates/estimation-worksheet-template.md +80 -0
- package/skills/uipath-automation-discovery/references/estimation-guide.md +104 -0
- package/skills/uipath-connector-builder/SKILL.md +6 -4
- package/skills/uipath-connector-builder/references/auth.md +137 -13
- package/skills/uipath-connector-builder/references/configuration.md +29 -7
- package/skills/uipath-connector-builder/references/debugging.md +1 -1
- package/skills/uipath-connector-builder/references/standard-resources.md +162 -13
- package/skills/uipath-governance/references/cli-cheatsheet.md +3 -3
- package/skills/uipath-governance/references/diagnose/references/failure-modes.md +5 -5
- package/skills/uipath-insights/SKILL.md +277 -0
- package/skills/uipath-insights/references/investigation-playbook-guide.md +145 -0
- package/skills/uipath-insights/references/jobs-commands-guide.md +144 -0
- package/skills/uipath-ixp/SKILL.md +4 -1
- package/skills/uipath-ixp/references/cli-reference.md +18 -3
- package/skills/uipath-maestro-bpmn/references/cli-conventions.md +2 -0
- package/skills/uipath-maestro-bpmn/validator/README.md +12 -2
- package/skills/uipath-maestro-case/SKILL.md +27 -13
- package/skills/uipath-maestro-case/assets/templates/sdd-template-examples.md +37 -4
- package/skills/uipath-maestro-case/assets/templates/sdd-template.md +20 -9
- package/skills/uipath-maestro-case/assets/templates/sdd-viewer.html +8 -7
- package/skills/uipath-maestro-case/references/bindings-v2-sync.md +5 -1
- package/skills/uipath-maestro-case/references/brownfield.md +86 -0
- package/skills/uipath-maestro-case/references/case-commands.md +8 -0
- package/skills/uipath-maestro-case/references/case-editing-operations.md +230 -21
- package/skills/uipath-maestro-case/references/case-schema.md +29 -11
- package/skills/uipath-maestro-case/references/connector-integration.md +1 -1
- package/skills/uipath-maestro-case/references/connector-trigger-common.md +1 -1
- package/skills/uipath-maestro-case/references/entry-points-sync.md +204 -0
- package/skills/uipath-maestro-case/references/implementation.md +19 -9
- package/skills/uipath-maestro-case/references/phase-0-interview.md +10 -8
- package/skills/uipath-maestro-case/references/phased-execution.md +11 -4
- package/skills/uipath-maestro-case/references/placeholder-tasks.md +24 -2
- package/skills/uipath-maestro-case/references/planning.md +9 -3
- package/skills/uipath-maestro-case/references/plugins/case/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/sla/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/sla/planning.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/stages/impl-json.md +11 -10
- package/skills/uipath-maestro-case/references/plugins/stages/planning.md +13 -14
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/impl-json.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/agent/planning.md +91 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/impl-json.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/tasks/api-workflow/planning.md +87 -2
- package/skills/uipath-maestro-case/references/plugins/tasks/connector-activity/planning.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/triggers/event/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/triggers/manual/impl-json.md +3 -1
- package/skills/uipath-maestro-case/references/plugins/triggers/timer/impl-json.md +2 -1
- package/skills/uipath-maestro-case/references/plugins/variables/bindings/impl-json.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +20 -10
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/planning.md +9 -8
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +1 -1
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/planning.md +1 -1
- package/skills/uipath-maestro-case/references/registry-discovery.md +87 -10
- package/skills/uipath-maestro-case/references/sdd-generation-rules.md +34 -26
- package/skills/uipath-maestro-flow/SKILL.md +4 -1
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +1 -2
- package/skills/uipath-maestro-flow/references/author/references/editing-operations-json.md +3 -3
- package/skills/uipath-maestro-flow/references/author/references/greenfield.md +4 -2
- package/skills/uipath-maestro-flow/references/author/references/planning-arch.md +0 -1
- package/skills/uipath-maestro-flow/references/author/references/planning-impl.md +0 -1
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector/impl.md +1 -0
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector-trigger/impl.md +7 -7
- package/skills/uipath-maestro-flow/references/author/references/plugins/ixp/impl.md +14 -14
- package/skills/uipath-maestro-flow/references/author/references/plugins/script/impl.md +10 -6
- package/skills/uipath-maestro-flow/references/shared/cli-conventions.md +7 -0
- package/skills/uipath-maestro-flow/references/shared/file-format.md +1 -1
- package/skills/uipath-mcp-servers/references/is-activity-workflow.md +3 -3
- package/skills/uipath-planner/SKILL.md +1 -1
- package/skills/uipath-platform/SKILL.md +4 -14
- package/skills/uipath-platform/references/data-fabric/data-fabric.md +1 -1
- package/skills/uipath-platform/references/integration-service/agent-workflow.md +4 -4
- package/skills/uipath-platform/references/integration-service/reference-resolution.md +1 -1
- package/skills/uipath-platform/references/integration-service/resources.md +5 -5
- package/skills/uipath-platform/references/integration-service/triggers.md +10 -9
- package/skills/uipath-platform/references/orchestrator/setup-environment.md +2 -0
- package/skills/uipath-review/SKILL.md +8 -4
- package/skills/uipath-review/references/agents/agent-review-checklist.md +1 -22
- package/skills/uipath-review/references/agents/agents-coded-rules.md +24 -7
- package/skills/uipath-review/references/agents/agents-lowcode-rules.md +0 -1
- package/skills/uipath-review/references/agents/guardrails/coded-guardrails-review.md +231 -0
- package/skills/uipath-review/references/rule-catalog-workflow.md +4 -2
- package/skills/uipath-rpa/SKILL.md +2 -2
- package/skills/uipath-rpa/references/activity-docs/UiPath.DataService.Activities/guides/data-service-filter-builder-guide.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/coded-api.md +1 -1
- package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/curl-import.md +3 -3
- package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/http-request-upgrade.md +3 -3
- package/skills/uipath-rpa/references/activity-docs/UiPath.Web.Activities/2.5/coded/service-discovery.md +2 -2
- package/skills/uipath-rpa/references/coded/coding-guidelines.md +1 -1
- package/skills/uipath-rpa/references/ui-automation-guide.md +7 -7
- package/skills/uipath-rpa/references/uia-configure-target-workflows.md +5 -5
- package/skills/uipath-rpa/references/uia-elements-interaction-guide.md +19 -10
- package/skills/uipath-rpa/references/uia-prerequisites.md +7 -7
- package/skills/uipath-rpa/references/validation-guide.md +2 -2
- package/skills/uipath-rpa/references/xaml/common-pitfalls.md +4 -0
- package/skills/uipath-rpa/references/xaml/csharp-activity-binding-guide.md +3 -1
- package/skills/uipath-rpa/references/xaml/csharp-expression-pitfalls.md +9 -4
- package/skills/uipath-rpa/references/xaml/workflow-guide.md +2 -2
- package/skills/uipath-rpa/references/xaml/xaml-basics-and-rules.md +1 -1
- package/skills/uipath-solution/SKILL.md +4 -4
- package/skills/uipath-solution/references/activate-and-manage.md +6 -1
- package/skills/uipath-solution/references/develop-solution.md +24 -5
- package/skills/uipath-solution/references/pack-and-deploy.md +5 -2
- package/skills/uipath-solution/references/scenarios/manual-edits.md +2 -2
- package/skills/uipath-solution/references/solution-overview.md +2 -2
- package/skills/uipath-troubleshoot/SKILL.md +3 -3
- package/skills/uipath-troubleshoot/references/products/agents/playbooks/context-grounding-index-not-found.md +0 -2
- package/skills/uipath-troubleshoot/references/products/maestro/playbooks/personal-automation-quota.md +1 -1
- package/version-manifest.json +3 -3
- package/hooks/ensure-uip.sh +0 -220
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector/data-fabric/impl.md +0 -683
- package/skills/uipath-maestro-flow/references/author/references/plugins/connector/data-fabric/planning.md +0 -45
|
@@ -8,6 +8,14 @@ PO.Frontend `Node[] / Edge[] / CanvasState` model from the parse tree, and runs
|
|
|
8
8
|
(`VARIABLE_DOES_NOT_EXIST`, including element-local `result.X`, and the
|
|
9
9
|
flow-order `VARIABLE_NOT_SET` warning) and an optional connection-liveness ping.
|
|
10
10
|
|
|
11
|
+
> **Authoring scope:** everything under `test/fixtures/` is validator test data,
|
|
12
|
+
> not authoring material. **Do not read the fixtures to infer the BPMN pattern**
|
|
13
|
+
> — it is the top reason authoring runs out of time. Author from the complete
|
|
14
|
+
> minimal file in
|
|
15
|
+
> [../references/structural-bpmn.md](../references/structural-bpmn.md#a-complete-minimal-file-author-from-this-not-from-fixtures)
|
|
16
|
+
> instead. This README documents the validator and its test suite; run the
|
|
17
|
+
> validator (below) as your check, and leave the corpus to CI.
|
|
18
|
+
|
|
11
19
|
## Usage
|
|
12
20
|
|
|
13
21
|
```bash
|
|
@@ -50,8 +58,10 @@ npm test # runs all three suites below; green = no drift from the frontend
|
|
|
50
58
|
3. **Integration over real `.bpmn` files** (`test/integration.test.mjs`): every
|
|
51
59
|
file in `test/fixtures/` is a real, externally-validated artifact (backend
|
|
52
60
|
BpmnParser/Worker/Athena/V2-E2E TestData, and PO.Frontend editor mocks),
|
|
53
|
-
bundled so the suite is self-contained in CI.
|
|
54
|
-
|
|
61
|
+
bundled so the suite is self-contained in CI. These files exist to exercise
|
|
62
|
+
the rule engine — they are **not** authoring templates; see the authoring-scope
|
|
63
|
+
note at the top before reaching for one as an example. `fixtures/known-good/`
|
|
64
|
+
must produce **zero** ERROR-severity findings; `fixtures/expected-findings/` assert
|
|
55
65
|
the exact ERROR codes the frontend would also raise (each verified by reading
|
|
56
66
|
the file). Set `MAESTRO_BPMN_TESTDATA` / `MAESTRO_BPMN_FRONTEND_MOCKS` to also
|
|
57
67
|
sweep a live corpus during development.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: uipath-maestro-case
|
|
3
|
-
description: "Always invoke for `caseplan.json` files. UiPath Case Management authoring (caseplan.json) from sdd.md, or via lightweight interview if sdd.md absent. Produces tasks.md plan, writes caseplan.json via per-plugin JSON recipes. For .xaml→uipath-rpa, .flow→uipath-maestro-flow, .bpmn→uipath-maestro-bpmn. For PDD→SDD or complex/multi-product→uipath-planner."
|
|
4
|
-
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion, TodoWrite
|
|
3
|
+
description: "Always invoke for `caseplan.json` files. UiPath Case Management authoring (caseplan.json) from sdd.md, or via lightweight interview if sdd.md absent. Produces tasks.md plan, writes caseplan.json via per-plugin JSON recipes. Edits an existing caseplan.json via targeted operations (skips planning). For .xaml→uipath-rpa, .flow→uipath-maestro-flow, .bpmn→uipath-maestro-bpmn. For PDD→SDD or complex/multi-product→uipath-planner."
|
|
4
|
+
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion, TodoWrite, Agent
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# UiPath Case Management Authoring Assistant
|
|
@@ -10,7 +10,7 @@ Builds UiPath Case Management definitions from `sdd.md`. Generates `tasks.md` pl
|
|
|
10
10
|
|
|
11
11
|
When `sdd.md` is absent, **Phase 0 interview** generates one interactively (listen → sketch → progressive ask-walk → resolve → approve, with optional HTML preview before handing off). Complex / multi-product cases redirect to `uipath-planner` — see [references/phase-0-interview.md § Thresholds](references/phase-0-interview.md#thresholds) for caps.
|
|
12
12
|
|
|
13
|
-
**Scope:** new case from `sdd.md
|
|
13
|
+
**Scope:** two journeys — **greenfield** (build a new case from `sdd.md`, user-provided or Phase 0-generated) and **brownfield** (targeted edits to an existing `caseplan.json` — see [references/brownfield.md](references/brownfield.md)). Editing a case that also lives in Studio Web? Brownfield pulls the current server state first (`uip solution download` / `solution project resync`) so re-publish can't silently clobber server-side changes — see [brownfield.md § Pull latest first](references/brownfield.md#pull-latest-first-before-editing).
|
|
14
14
|
|
|
15
15
|
## When to Use This Skill
|
|
16
16
|
|
|
@@ -18,6 +18,7 @@ When `sdd.md` is absent, **Phase 0 interview** generates one interactively (list
|
|
|
18
18
|
- User asks to create new case management project but has no `sdd.md` (Phase 0 interview generates one)
|
|
19
19
|
- User asks to create new case management project or definition
|
|
20
20
|
- User asks to generate implementation tasks from `sdd.md` or convert spec to plan
|
|
21
|
+
- User asks to edit, modify, or update an existing `caseplan.json` (add/remove a stage or task, change a condition, swap a trigger) — targeted edits skip planning; see [references/brownfield.md](references/brownfield.md)
|
|
21
22
|
- User asks about case management JSON schema — nodes, transitions, tasks, rules, SLA
|
|
22
23
|
- User wants to manage runtime case instances (list, pause, resume, cancel) — see [references/case-commands.md](references/case-commands.md)
|
|
23
24
|
|
|
@@ -30,7 +31,7 @@ When `sdd.md` is absent, **Phase 0 interview** generates one interactively (list
|
|
|
30
31
|
3. **Run `uip maestro case registry pull` before planning.** Discovery reads cache files at `~/.uip/case-resources/<type>-index.json` directly. `registry search` has known gaps (esp. action-apps). See [references/registry-discovery.md](references/registry-discovery.md).
|
|
31
32
|
4. **`--output json` on every parsed read.**
|
|
32
33
|
5. **Follow plugin per node type.** Open matching `planning.md` during planning + `impl-json.md` during execution. Never guess JSON shapes from memory.
|
|
33
|
-
6. **`tasks.md` declarative only.** No shell commands inside. Field names use plain identifiers (e.g., `type:`, `displayName:`, `lane:`), not CLI flag syntax. One T-entry per sdd.md declaration — every stage, task, trigger, condition, SLA rule, **variable, and argument** gets own T-number, even when value looks like default (`current-stage-entered`, `case-entered`, `exit-only`, `is-interrupting: false`, `runOnlyOnce: true`, `marks-stage-complete: true`). Never group, never silently omit. **When an sdd.md row's format is unrecognized, ambiguous, or cannot be categorized — invoke AskUserQuestion before skipping. Silent omission is forbidden.** Always regenerate from scratch. See [`references/planning.md` §4.0](references/planning.md).
|
|
34
|
+
6. **`tasks.md` declarative only.** No shell commands inside. Field names use plain identifiers (e.g., `type:`, `displayName:`, `lane:`), not CLI flag syntax. One T-entry per sdd.md declaration — every stage, task, trigger, condition, SLA rule, **variable, and argument** gets own T-number, even when value looks like default (`current-stage-entered`, `case-entered`, `exit-only`, `is-interrupting: false`, `runOnlyOnce: true`, `marks-stage-complete: true`). Never group, never silently omit. **When an sdd.md row's format is unrecognized, ambiguous, or cannot be categorized — invoke AskUserQuestion before skipping. Silent omission is forbidden.** Always regenerate from scratch (greenfield/planning only — brownfield targeted edits mutate in place and preserve IDs; see [references/brownfield.md](references/brownfield.md)). See [`references/planning.md` §4.0](references/planning.md).
|
|
34
35
|
7. **HARD STOP after `tasks.md`.** AskUserQuestion: `Approve and proceed` / `Request changes`. Re-read `tasks.md` before executing.
|
|
35
36
|
8. **Unresolved resource → placeholder, never fabricate IDs.** Keep `<UNRESOLVED: ...>` markers in `tasks.md`. Placeholder **task**: node with `type` + `displayName` + structural fields, `data: {}`; conditions still reference the TaskId. Placeholder **event trigger**: node with render fields + `data.uipath: { serviceType: "Intsvc.EventTrigger" }` only (no other `data.uipath` keys); `entry-points.json` entry appended. No trigger-edge is created (edges retired) — the first stage's `case-entered` entry condition starts the case. See [references/placeholder-tasks.md](references/placeholder-tasks.md) and [references/plugins/triggers/event/impl-json.md § Placeholder fallback](references/plugins/triggers/event/impl-json.md).
|
|
36
37
|
9. **Persist every registry resolution to `registry-resolved.json`** — search query, all matches, selected result, rationale.
|
|
@@ -41,9 +42,18 @@ When `sdd.md` is absent, **Phase 0 interview** generates one interactively (list
|
|
|
41
42
|
14. **Always run `uip solution resources refresh` before `uip solution upload` or `uip maestro case debug`** — syncs resources from `bindings_v2.json` so Studio Web can resolve connector dependencies.
|
|
42
43
|
15. **Never auto-invoke `uipath-planner`.** On Phase 0 threshold breach or stuck-round detection, print plain-text suggestion of the skill name. User re-invokes manually. No tool-call cross-skill handoff.
|
|
43
44
|
16. **Caseplan task `type` enum is closed — 9 values, schema-kebab.** Any task node written into `caseplan.json` MUST have `type` exactly one of: `process` | `agent` | `rpa` | `action` | `api-workflow` | `case-management` | `execute-connector-activity` | `wait-for-connector` | `wait-for-timer`. **Never** write the plugin folder name (`connector-activity`, `connector-trigger`) or the CLI `--type` flag value into the JSON node — those name the planning artifacts, not the schema. Never write `external-agent`, `external-workflow`, `document-extraction`, `flow-process`, `wait-for-event`, or any hallucinated value — there is no plugin to back them. `external-agent`, `external-workflow`, `document-extraction`, and `flow-process` are **not supported yet**. See [references/case-schema.md § Task type](references/case-schema.md) and the Plugin Index naming-asymmetry table below.
|
|
44
|
-
17. **Empty registry lookup → AskUserQuestion
|
|
45
|
+
17. **Empty registry lookup → AskUserQuestion BEFORE any placeholder fallback.** When a planning-phase lookup returns 0 matches, present AskUserQuestion per lookup-batch (one prompt, not per-task) BEFORE any placeholder T-entry or per-plugin Unresolved Fallback, with options: (a) `Force pull and re-resolve` — loops back for still-empty; (b) `Skip and use placeholders`; (c) `Create the missing resource(s) inline` — shown ONLY when ≥1 still-empty is creatable (an `agent` or an `api-workflow`) AND the CLI supports `registry --local`. **Create covers agents and API workflows only, gate-selected only** (never from SDD content alone; agent → `uipath-agents`, api-workflow → `uipath-api-workflow`); unselected + non-creatable empties (regular RPA process, action, connectors, agentic processes) → placeholder; the option is suppressed when `--local` is absent. Do NOT pre-judge via resource-name heuristics — the user's call. Placeholder fallback is valid only after `Skip`. Build/register/verify mechanics live in [references/registry-discovery.md § Create-on-Missing](references/registry-discovery.md#create-on-missing-build-and-rediscovery) (gate detail: [§ MUST Confirm](references/registry-discovery.md#must-confirm-before-placeholder-fallback)).
|
|
45
46
|
18. **Layout state lives in top-level `layout`, not on the node/edge.** Do NOT emit node-level `position`, `style`, `measured`, `width`, `height`, `zIndex`. Do NOT compute stage `position.x = 100 + count * 500`. Do NOT emit edge `data.waypoints`. Emit top-level `layout: {}` (empty object) — FE auto-layouts on canvas load. The frontend's `transformCaseInMemoryJsonToDiskJson` strips these fields anyway when round-tripping through canvas; emitting them is harmless on read but wastes tokens. See [`references/case-editing-operations.md`](references/case-editing-operations.md).
|
|
46
47
|
|
|
48
|
+
## Routing — greenfield vs brownfield
|
|
49
|
+
|
|
50
|
+
| Condition | Journey |
|
|
51
|
+
|---|---|
|
|
52
|
+
| New case, or `sdd.md` provided, or no `caseplan.json` yet, or user asks to (re)build from a spec | **Greenfield** — Phase 0→6 below |
|
|
53
|
+
| `caseplan.json` exists AND intent is a targeted edit ("add a stage", "remove task X", "change a condition", "swap the trigger") | **Brownfield** — skip Phase 0→6, go to [references/brownfield.md](references/brownfield.md) |
|
|
54
|
+
|
|
55
|
+
Brownfield bypasses planning, prototyping, and their hard stops; it still honors the debug-consent gate (Rule 12) and reuses the Phase 5 / Phase 6 contracts.
|
|
56
|
+
|
|
47
57
|
## Workflow
|
|
48
58
|
|
|
49
59
|
Up to seven hard stops (Phase 0 + Phase 2 second prompt + Phase 4 conditional): **Phase 0** (interview → sdd.md, only when sdd.md absent) → approve → **Phase 1 Planning** (sdd.md → tasks.md) → approve → **Phase 2 Prototyping** (placeholder) → publish-for-review stop → continue-after-publish stop (publish branch only) → **Phase 3 Implementation** (detail) → **Phase 4 Validate** (retry-cap stop on 3rd failure) → **Phase 5 Debug** (Run vs Skip-to-Publish stop) → **Phase 6 Publish** (Publish vs Done stop).
|
|
@@ -67,6 +77,7 @@ Read [references/planning.md](references/planning.md). Produces:
|
|
|
67
77
|
|
|
68
78
|
- `tasks/tasks.md` — T-numbered entries (stages → tasks → conditions → SLA)
|
|
69
79
|
- `tasks/registry-resolved.json` — audit trail
|
|
80
|
+
- When the user picks **Create** at the Rule 17 gate, Phase 1 also builds the selected agent(s) / API workflow(s) as in-solution siblings (one sub-agent per resource — `uipath-agents` for agents, `uipath-api-workflow` for API workflows), registers them (`uip solution project add` + `resources refresh`), and binds them as resolved tasks. Registration and `--local` rediscovery need an enclosing solution `.uipx`, so the Create flow **first ensures the solution exists** (`uip solution init` if absent — Phase 2 Step 6.0 then skips its own `init`). See [references/registry-discovery.md § Create-on-Missing](references/registry-discovery.md#create-on-missing-build-and-rediscovery).
|
|
70
81
|
|
|
71
82
|
> **`tasks/` is created at the working root, adjacent to `sdd.md` — NEVER inside the solution/project folder (`<Solution>/`).** This holds regardless of where the case file lives: `caseplan.json` sits at `<Solution>/<Project>/caseplan.json`, but the planning artifacts (`tasks.md`, `registry-resolved.json`) stay next to `sdd.md` at the root.
|
|
72
83
|
|
|
@@ -78,11 +89,12 @@ Read [references/implementation.md](references/implementation.md) + [references/
|
|
|
78
89
|
|
|
79
90
|
1. Solution + project + root case (Step 6)
|
|
80
91
|
2. Triggers — manual / timer / event, including placeholder event triggers per Rule 8 (Step 6.1)
|
|
81
|
-
3. Global variables + arguments (Step 6.2) — including In arguments whose `elementId` references
|
|
82
|
-
4.
|
|
83
|
-
5.
|
|
84
|
-
6.
|
|
85
|
-
7.
|
|
92
|
+
3. Global variables + arguments (Step 6.2) — including In arguments whose `elementId` references the `TriggerId` (captured in Step 6.1) of the trigger named by the row's `sourceTriggers`, or the primary trigger when blank
|
|
93
|
+
4. Refresh entry-points.json input/output from the declared In/Out args (Step 6.3) — per [`references/entry-points-sync.md`](references/entry-points-sync.md)
|
|
94
|
+
5. Stages (Step 7)
|
|
95
|
+
6. Tasks — shape only (Step 9): non-connector with full `data.inputs[]` schema + empty values; connector with `typeId` + `connectionId` only (no `case spec`); unresolved as placeholders per Rule 8
|
|
96
|
+
7. Informational validate (Step 9.5.1) — do NOT halt on errors/warnings
|
|
97
|
+
8. **HARD STOP** (Step 9.5.2–9.5.5): `Publish for review` / `Skip publish and continue` / `Abort`. On `Publish`: `uip solution resources refresh --solution-folder <SolutionDir> --output json` then `uip solution upload`, print DesignerUrl, AskUserQuestion: `Continue to phase 3` / `Abort`. On `Abort`: dump `build-issues.md`, exit (no cleanup).
|
|
86
98
|
|
|
87
99
|
### Phase 3 — Implementation
|
|
88
100
|
|
|
@@ -116,8 +128,9 @@ Completion report + **HARD STOP** AskUserQuestion (Step 13): `Run debug session`
|
|
|
116
128
|
| Generate sdd.md interactively when none provided | [references/phase-0-interview.md](references/phase-0-interview.md) |
|
|
117
129
|
| Plan tasks from sdd.md | [references/planning.md](references/planning.md) |
|
|
118
130
|
| Execute tasks.md into a case | [references/implementation.md](references/implementation.md) |
|
|
131
|
+
| Edit an existing caseplan.json (targeted edits) | [references/brownfield.md](references/brownfield.md) |
|
|
119
132
|
| Phase 2 → 3 → 4 → 5 → 6 split + hard stop contracts | [references/phased-execution.md](references/phased-execution.md) |
|
|
120
|
-
|
|
|
133
|
+
| Cross-cutting edit mechanics (IDs, anchoring, batch contract) | [references/case-editing-operations.md](references/case-editing-operations.md) |
|
|
121
134
|
| Case JSON schema | [references/case-schema.md](references/case-schema.md) |
|
|
122
135
|
| Surviving CLI commands (registry, validate, debug, runtime) | [references/case-commands.md](references/case-commands.md) |
|
|
123
136
|
| Troubleshoot a failed case | [references/troubleshooting-guide.md](references/troubleshooting-guide.md) |
|
|
@@ -127,6 +140,7 @@ Completion report + **HARD STOP** AskUserQuestion (Step 13): `Run debug session`
|
|
|
127
140
|
| Construct `case spec --input-details` JSON | [references/case-spec-input-details.md](references/case-spec-input-details.md) |
|
|
128
141
|
| Placeholder tasks for unresolved resources | [references/placeholder-tasks.md](references/placeholder-tasks.md) |
|
|
129
142
|
| Sync bindings_v2.json + connection resources | [references/bindings-v2-sync.md](references/bindings-v2-sync.md) |
|
|
143
|
+
| Refresh entry-points.json input/output from In/Out args | [references/entry-points-sync.md](references/entry-points-sync.md) |
|
|
130
144
|
|
|
131
145
|
### Plugin Index
|
|
132
146
|
|
|
@@ -135,7 +149,7 @@ Completion report + **HARD STOP** AskUserQuestion (Step 13): `Run debug session`
|
|
|
135
149
|
| Plugin | Scope |
|
|
136
150
|
|--------|-------|
|
|
137
151
|
| [case](references/plugins/case/planning.md) | Root case (T01) |
|
|
138
|
-
| [stages](references/plugins/stages/planning.md) | Regular and
|
|
152
|
+
| [stages](references/plugins/stages/planning.md) | Regular (primary) and secondary stages |
|
|
139
153
|
| [sla](references/plugins/sla/planning.md) | Default SLA, conditional rules, escalation |
|
|
140
154
|
| [global-vars](references/plugins/variables/global-vars/planning.md) | Case variables and arguments |
|
|
141
155
|
| [io-binding](references/plugins/variables/io-binding/planning.md) | Task I/O wiring, cross-task refs |
|
|
@@ -190,6 +204,6 @@ Completion report + **HARD STOP** AskUserQuestion (Step 13): `Run debug session`
|
|
|
190
204
|
- **Do NOT edit `content/*.bpmn`.** Auto-generated, will be overwritten. Edit `content/*.json` only.
|
|
191
205
|
- **Do NOT fabricate expression syntax for conditional SLA rules.** Describe condition in natural language; execution phase determines exact form.
|
|
192
206
|
- **Do NOT place `tasks/` inside the solution or project directory.** `tasks/` (and its `tasks.md`, `registry-resolved.json`) lives next to `sdd.md` at the working root — NOT inside `<Solution>/` or `<Solution>/<Project>/`. The case file path (`<Solution>/<Project>/caseplan.json`) does NOT root the planning artifacts; they track `sdd.md`, not `caseplan.json`.
|
|
193
|
-
- **Do NOT invoke other skills automatically.** If case needs process/
|
|
207
|
+
- **Do NOT invoke other skills automatically — except the inline-create path.** If case needs a regular RPA process / action / connector / agentic process that doesn't exist, emit placeholder task (Rule 8) and list missing resources in completion report; on-demand creation of those kinds is a future milestone. **Exception (agent + API workflow):** when the user picks `Create` at the Rule 17 gate, the skill builds the missing agent / API workflow inline by spawning a sub-agent that invokes `uipath-agents` (agent) or `uipath-api-workflow` (API workflow) — gate-selected only, never from SDD content alone. The `uipath-planner` handoff stays plain-text (Rule 15).
|
|
194
208
|
|
|
195
209
|
> **Trouble?** Use `/uipath-feedback` to send report.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Companion to [`sdd-template.md`](sdd-template.md). Each section shows the SDD authoring snippets for a common pattern an author will encounter. Use as a reference when writing a new `sdd.md`.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Fourteen v1-supported patterns. Two intentionally-dropped patterns documented at the end with workarounds.
|
|
6
6
|
|
|
7
7
|
## Quick lookup
|
|
8
8
|
|
|
@@ -13,6 +13,7 @@ Thirteen v1-supported patterns. Two intentionally-dropped patterns documented at
|
|
|
13
13
|
| 2b | Multi-trigger Variable (same slot from N triggers) | `Variable` | Case Variables + Triggers tables | — |
|
|
14
14
|
| 2c | Trigger-sourced file Variable (event payload carries an attachment) | `Variable` (file) | Case Variables + Triggers tables | — |
|
|
15
15
|
| 3 | Caller-supplied / Default-initialized input | `In` | Case Variables table | — |
|
|
16
|
+
| 3b | In-arg bound to a specific trigger | `In` | Case Variables + Triggers tables | — |
|
|
16
17
|
| 4 | Returned output to caller | `Out` | Case Variables + producer task's Outputs | `->` |
|
|
17
18
|
| 5 | Task extracts response field → case var | (any) | Task's Outputs table | `->` |
|
|
18
19
|
| 6 | Task writes literal/computed value to existing var | (any) | Task's Outputs table | `=` |
|
|
@@ -98,6 +99,7 @@ In Case Variables — one row with CSV + keyed format:
|
|
|
98
99
|
- Each T-number in `sourceTriggers` MUST have a matching keyed entry in `sourceFields`. Mismatch → Phase 2 validation error.
|
|
99
100
|
- Order of T-numbers doesn't matter — the keyed format disambiguates per-trigger.
|
|
100
101
|
- Same Type and same Default apply across all listed triggers.
|
|
102
|
+
- CSV `sourceTriggers` is a `Variable`-only construct. An `In`-arg binds to exactly ONE trigger — a single `sourceTriggers` T-number with **empty** `sourceFields` (see Use Case 3b).
|
|
101
103
|
|
|
102
104
|
**When to use Use Case 2b vs declaring per-trigger Variables:**
|
|
103
105
|
- **Use Case 2b** when the value is *semantically the same thing* across triggers (e.g., "the initiator", "the customer ID"). One variable, one downstream reference.
|
|
@@ -163,7 +165,38 @@ In Case Variables:
|
|
|
163
165
|
|
|
164
166
|
**Runtime behavior:** caller submits `{applicantId: "ALC-123", requestedAmount: 50000}` via API. Engine routes these to `vars.applicantId` and `vars.requestedAmount` at case start. Downstream tasks read them via `=vars.applicantId` etc.
|
|
165
167
|
|
|
166
|
-
**Trigger type:** `In` works with any trigger type — manual, timer, or event. For event triggers, the In-arg's `Default` value propagates through to the case variable at trigger fire (no caller-override path, since events don't have an API caller). Use `In` when authoring a value that *could* be caller-supplied; use `Variable` + `sourceTriggers` + `sourceFields` (Use Case 2) when the value is *extracted from* the trigger's payload directly.
|
|
168
|
+
**Trigger type:** `In` works with any trigger type — manual, timer, or event. For event triggers, the In-arg's `Default` value propagates through to the case variable at trigger fire (no caller-override path, since events don't have an API caller). Use `In` when authoring a value that *could* be caller-supplied; use `Variable` + `sourceTriggers` + `sourceFields` (Use Case 2) when the value is *extracted from* the trigger's payload directly. In a multi-trigger case, bind an In-arg to a specific (non-primary) trigger via a single `sourceTriggers` T-number — see Use Case 3b.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Use Case 3b — In-arg bound to a specific trigger
|
|
173
|
+
|
|
174
|
+
**Scenario:** A case starts from more than one trigger. By default an In-arg binds to the **primary trigger** (T02). To bind a caller-supplied value to a *different* trigger, name that trigger in `sourceTriggers`.
|
|
175
|
+
|
|
176
|
+
**SDD authoring:**
|
|
177
|
+
|
|
178
|
+
In Case Triggers (two triggers):
|
|
179
|
+
```markdown
|
|
180
|
+
| T# | Trigger Type | Source | Configuration |
|
|
181
|
+
|----|---------------------|--------|---------------------------|
|
|
182
|
+
| T02 | Manual | API | N/A |
|
|
183
|
+
| T03 | Intsvc.EventTrigger | Slack | Message posted in #intake |
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
In Case Variables:
|
|
187
|
+
```markdown
|
|
188
|
+
| Name | Category | Type | sourceTriggers | sourceFields | Default | Description |
|
|
189
|
+
|------------|----------|--------|----------------|--------------|--------------|---------------------------------------------------|
|
|
190
|
+
| caseId | In | string | | | | Bound to the primary trigger (T02) — blank sourceTriggers |
|
|
191
|
+
| approverId | In | string | T03 | | "unassigned" | Bound to the T03 event trigger; events have no caller, so it initializes from Default at trigger fire |
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Rules:**
|
|
195
|
+
- `sourceTriggers` on an `In` row is a SINGLE T-number — never a CSV. A CSV is the multi-trigger `Variable` form (Use Case 2b).
|
|
196
|
+
- `sourceFields` stays EMPTY on `In` rows. An In-arg *selects* a trigger; it does not *extract* a payload field — that's the `Variable` operation (Use Case 2).
|
|
197
|
+
- Blank `sourceTriggers` = bind to the primary trigger (T02) — backward compatible with the single-trigger case.
|
|
198
|
+
|
|
199
|
+
**Runtime behavior:** `caseId` is supplied by the API caller at case start via the primary manual trigger (T02). `approverId` is bound to the T03 event trigger, which has no API caller — so it initializes from its `Default` (`"unassigned"`) when that trigger fires. Downstream tasks read each via `=vars.caseId` / `=vars.approverId`.
|
|
167
200
|
|
|
168
201
|
---
|
|
169
202
|
|
|
@@ -491,8 +524,8 @@ When writing a new SDD, run through this list:
|
|
|
491
524
|
|
|
492
525
|
- [ ] Every variable referenced via `=vars.X` somewhere (input bindings, conditions, SLA expressions) — declared in Case Variables OR is a task's auto-emitted schema field
|
|
493
526
|
- [ ] Every `Out` Category row has either a `Default` value OR a producer task with a matching binding row
|
|
494
|
-
- [ ] Every `In` Category row has `
|
|
495
|
-
- [ ] Every `Variable` with `sourceTriggers` set has matching entries in `sourceFields` — single path for one trigger; keyed `T<N>: <path>` format for CSV multi-trigger
|
|
527
|
+
- [ ] Every `In` Category row has `sourceFields` empty, and `sourceTriggers` either blank (binds the primary trigger) or a single `T<N>` (binds that trigger) — never a CSV
|
|
528
|
+
- [ ] Every `Variable` with `sourceTriggers` set has matching entries in `sourceFields` — single path for one trigger; keyed `T<N>: <path>` format for CSV multi-trigger (an `In` row is the exception: a single `sourceTriggers` T-number with **no** `sourceFields`)
|
|
496
529
|
- [ ] Every `sourceFields` is a valid dot-path (no `[0]` indexing)
|
|
497
530
|
- [ ] In each task's Outputs table: each target case variable appears in ≤1 row
|
|
498
531
|
- [ ] In each task's Outputs table: `->` rows have a non-empty Field column; `=` rows have `Field` as `—`
|
|
@@ -197,7 +197,7 @@ The generated SDD must start with:
|
|
|
197
197
|
|
|
198
198
|
| Trigger type | What to write |
|
|
199
199
|
|---|---|
|
|
200
|
-
| Event trigger | The operation in business terms (e.g., `Calendar created`, `Email received`). Append a filter expression if the user wants filtering (e.g., `Email received in Inbox; filter: subject contains "URGENT"`). Append a required event-param value only when the user supplies it explicitly (e.g., `Email received in folder "<folder name>"`). |
|
|
200
|
+
| Event trigger | The operation in business terms (e.g., `Calendar created`, `Email received`, `Record created`). For tenant case-entity / business data-object starts, preserve the object name in Source (e.g., `expense_requests`) and write the business event in Configuration (e.g., `Record created`). Append a filter expression if the user wants filtering (e.g., `Email received in Inbox; filter: subject contains "URGENT"`). Append a required event-param value only when the user supplies it explicitly (e.g., `Email received in folder "<folder name>"`). |
|
|
201
201
|
| Timer trigger | Cycle or duration (e.g., `every 24 hours`, `daily at 09:00 UTC`). |
|
|
202
202
|
| Manual | `N/A` or omit. |
|
|
203
203
|
|
|
@@ -207,6 +207,13 @@ DO NOT include in Configuration:
|
|
|
207
207
|
- Meta notes like `No required event parameters` or `No user filter` (absence is the default; the skill discovers required params at `case spec` time).
|
|
208
208
|
- Connector activity slug, HTTP method, or any spec-discovered detail.
|
|
209
209
|
|
|
210
|
+
> **Tenant object starts are still event triggers.** If the user says a case starts
|
|
211
|
+
> when a tenant case-entity / data-object record is created, author
|
|
212
|
+
> `Intsvc.EventTrigger` with that object name as Source. Do NOT downgrade to
|
|
213
|
+
> `Manual` just because the eval sandbox or current tenant may not have the
|
|
214
|
+
> object provisioned. Planning/implementation preserve unresolved event triggers
|
|
215
|
+
> as placeholders.
|
|
216
|
+
|
|
210
217
|
### Case Exit Conditions
|
|
211
218
|
|
|
212
219
|
> **WHEN ↔ Marks Case Complete pairing is a schema constraint (see Key Rule 4):** `Yes` row MUST use `required-stages-completed` (preferred) or `wait-for-connector`; `No` row MAY use `selected-stage-completed(...)` / `selected-stage-exited(...)` / `wait-for-connector`. Mixing `Yes` with a `selected-*` rule is invalid.
|
|
@@ -225,11 +232,11 @@ DO NOT include in Configuration:
|
|
|
225
232
|
|
|
226
233
|
| Name | Category | Type | sourceTriggers | sourceFields | Default | Description |
|
|
227
234
|
|------|----------|------|----------------|--------------|---------|-------------|
|
|
228
|
-
| {camelCase name} | {In \| Out \| Variable} | {string \| integer \| float \| double \| boolean \| datetime \| date \| jsonSchema \| file} | {
|
|
235
|
+
| {camelCase name} | {In \| Out \| Variable} | {string \| integer \| float \| double \| boolean \| datetime \| date \| jsonSchema \| file} | {`Variable`: single `T<N>` or CSV when multiple triggers feed the same slot. `In`: optional single `T<N>` selecting the bound trigger (blank = primary trigger; never CSV). Empty for pure state / Out-args} | {single payload path when one trigger; keyed `T<N>: <path>; T<M>: <path>` when multiple triggers; empty on `In` rows} | {default value or empty} | {what this variable represents} |
|
|
229
236
|
|
|
230
237
|
**Category semantics (author-facing summary; canonical definition in [`global-vars/impl-json.md` § Pattern shapes by category](../../references/plugins/variables/global-vars/impl-json.md)):**
|
|
231
238
|
|
|
232
|
-
- **`In`** — formal case argument supplied at case start by an external caller (manual trigger via API) OR initialized from `Default` (event / timer triggers, which have no caller). Works with any trigger type. For event-trigger-payload-extraction (where the value comes from the event's payload), use `Variable` with `sourceTriggers` + `sourceFields` (Use Case 2) instead — that's a different operation. **File-type In-args:** the runtime caller must pre-create the JobAttachment (`POST /odata/Attachments`, then `PUT` the bytes to the returned blob URI) and pass the resulting `{ID, FullName, MimeType, Metadata}` record as the In-arg value plus the attachment ID in `StartProcessDto.Attachments[]`. The Maestro Studio Web "Start case" dialog handles this automatically when the user picks a file; programmatic callers must do it themselves.
|
|
239
|
+
- **`In`** — formal case argument supplied at case start by an external caller (manual trigger via API) OR initialized from `Default` (event / timer triggers, which have no caller). Works with any trigger type. By default an In-arg binds to the primary trigger (T02); to bind it to a specific trigger, put that trigger's single `T<N>` in `sourceTriggers` (one only, never a CSV). `sourceFields` stays empty for `In` rows. For event-trigger-payload-extraction (where the value comes from the event's payload), use `Variable` with `sourceTriggers` + `sourceFields` (Use Case 2) instead — that's a different operation. **File-type In-args:** the runtime caller must pre-create the JobAttachment (`POST /odata/Attachments`, then `PUT` the bytes to the returned blob URI) and pass the resulting `{ID, FullName, MimeType, Metadata}` record as the In-arg value plus the attachment ID in `StartProcessDto.Attachments[]`. The Maestro Studio Web "Start case" dialog handles this automatically when the user picks a file; programmatic callers must do it themselves.
|
|
233
240
|
- **`Out`** — formal case argument returned to the caller at case end. Value comes from a task's Outputs row that targets this Name (the producer) OR from a `Default` value if no task fires. `sourceTriggers` MUST be empty (direction mismatch — values flow case→caller, not trigger→case).
|
|
234
241
|
- **`Variable`** — case-internal state. May be populated by one trigger's payload (single T-number in `sourceTriggers` + single path in `sourceFields`), by multiple triggers' payloads sharing the same slot (CSV in `sourceTriggers` + keyed `T<N>: <path>` format in `sourceFields`), by a task output (use `->` operator in that task's Outputs table — same Name on both sides drives the wiring), or initialized via `Default` only.
|
|
235
242
|
|
|
@@ -255,7 +262,8 @@ If neither holds, the io-binding validator surfaces the misalignment.
|
|
|
255
262
|
| caseStatus | Variable | string | | | "Open" | Pure case state, initialized at case start |
|
|
256
263
|
| subject | Variable | string | T02 | response.subject | | Populated by event trigger payload at trigger fire |
|
|
257
264
|
| caseStarter | Variable | string | T02, T03 | T02: response.user; T03: response.initiator | | Shared slot — whichever trigger fires populates it |
|
|
258
|
-
| applicantName | In | string | | | | Formal In-arg supplied by API caller
|
|
265
|
+
| applicantName | In | string | | | | Formal In-arg supplied by API caller; blank sourceTriggers → bound to primary trigger |
|
|
266
|
+
| reviewerNote | In | string | T03 | | | In-arg bound to the T03 trigger (single T-number; sourceFields stays empty) |
|
|
259
267
|
| finalDecision | Out | string | | | "Pending" | Out-arg; producer is "Approve Decision" task; "Pending" returned if no task fires |
|
|
260
268
|
| reviewCount | Variable | integer | | | 0 | Counter incremented by tasks via `=` operator |
|
|
261
269
|
|
|
@@ -263,7 +271,7 @@ If neither holds, the io-binding validator surfaces the misalignment.
|
|
|
263
271
|
|
|
264
272
|
## Section 2: Stages & Tasks
|
|
265
273
|
|
|
266
|
-
**Purpose:** The case plan — every stage as a self-contained subsection with its own entry/exit conditions, SLA, and task definitions with inline I/O bindings. Stages use
|
|
274
|
+
**Purpose:** The case plan — every stage as a self-contained subsection with its own entry/exit conditions, SLA, and task definitions with inline I/O bindings. Stages use the single node type `case-management:Stage`; a secondary stage is distinguished by `data.stageType: "secondary"` (a primary stage omits `stageType`).
|
|
267
275
|
|
|
268
276
|
**I/O bindings — how the Inputs / Outputs tables drive task wiring:**
|
|
269
277
|
|
|
@@ -302,16 +310,19 @@ The runtime engine resolves the binding when the task completes, writing the res
|
|
|
302
310
|
|
|
303
311
|
### Stage {N}: {Stage Name}
|
|
304
312
|
|
|
305
|
-
**
|
|
313
|
+
> **Heading form:** a **primary** stage uses `### Stage {N}: {Stage Name}` (N = main-flow sequence number); a **secondary** stage uses `### Secondary Stage: {Stage Name}` instead (no number). Both render a `case-management:Stage` node — the kind is set by the `**Stage Kind:**` field below.
|
|
314
|
+
|
|
315
|
+
**Type:** Stage
|
|
316
|
+
**Stage Kind:** {primary \| secondary} _(secondary stages use the `### Secondary Stage:` heading AND set `secondary`; primary stages use `### Stage {N}:` and OMIT this line — default = primary)_
|
|
306
317
|
**Description:** {Prose description of what this stage accomplishes in the case lifecycle}
|
|
307
318
|
**Required for Case Completion:** {Yes \| No}
|
|
308
|
-
**Interrupting:** {Yes \| No} _(
|
|
319
|
+
**Interrupting:** {Yes \| No} _(secondary stages only — i.e. Stage Kind: secondary; omit for primary)_
|
|
309
320
|
|
|
310
321
|
#### Stage Entry Conditions
|
|
311
322
|
|
|
312
323
|
> **Valid WHEN rule types for stage entry (strict subset of Key Rule 3):** `case-entered` (first stage of the case — no target), `selected-stage-completed("StageName")`, `selected-stage-exited("StageName")`, `user-selected-stage` (target of an upstream `wait-for-user` exit — no target; stage opts into the picker by declaring this rule), `wait-for-connector` (event-driven entry / interrupt — typically pairs with `Interrupting: Yes`). Other rule types from Key Rule 3 are NOT valid here.
|
|
313
324
|
>
|
|
314
|
-
> **Interrupting column:** `Yes` lets the condition fire while another stage is active and interrupt it — used for exception / fraud / escalation flows on
|
|
325
|
+
> **Interrupting column:** `Yes` lets the condition fire while another stage is active and interrupt it — used for exception / fraud / escalation flows on a secondary stage (Stage Kind: secondary). `No` for normal sequential entry on regular stages.
|
|
315
326
|
>
|
|
316
327
|
> Each row is a separate entry condition. List multiple rows when a stage can be entered through more than one path (e.g., normal completion of an upstream stage AND an interrupting connector event).
|
|
317
328
|
|
|
@@ -325,7 +336,7 @@ The runtime engine resolves the binding when the task completes, writing the res
|
|
|
325
336
|
|
|
326
337
|
> **WHEN ↔ Marks Stage Complete pairing is a schema constraint (see Key Rule 4):** `Yes` row MUST use `required-tasks-completed` (or `required-stages-completed`); `No` row MAY use `selected-tasks-completed(...)`. Mixing is invalid.
|
|
327
338
|
> Completion (`Yes`) and routing (`No`) rows share this one table. **Regular stage-to-stage routing is expressed by the destination stages' Entry Conditions** (`selected-stage-completed("This Stage")` / `selected-stage-exited("This Stage")`) — one stage can fan out to N stages, each declaring it as their entry trigger. `return-to-origin` returns to the origin stage automatically.
|
|
328
|
-
> **Exception carve-out:** to route this stage INTO a decision/signal-routed exception lane, add a gated divert row here — `Marks Stage Complete: No`, `selected-tasks-completed("<decider>")`, `IF =js:(<signal> === <exception-value>)`, `exit-only`, with `exitToStageId` → the
|
|
339
|
+
> **Exception carve-out:** to route this stage INTO a decision/signal-routed exception lane, add a gated divert row here — `Marks Stage Complete: No`, `selected-tasks-completed("<decider>")`, `IF =js:(<signal> === <exception-value>)`, `exit-only`, with `exitToStageId` → the secondary stage — AND gate this stage's `Yes` completion row with the inverse `IF`. The lane returns via `return-to-origin`. Omitting the divert row → dual-fire or deadlock. See sdd-generation-rules § Logical integrity step 5.
|
|
329
340
|
|
|
330
341
|
| WHEN | IF | Exit Type | Marks Stage Complete | Display Name |
|
|
331
342
|
|------|-----|-----------|---------------------|--------------|
|
|
@@ -511,10 +511,11 @@
|
|
|
511
511
|
"stages": [
|
|
512
512
|
{
|
|
513
513
|
"name": string,
|
|
514
|
-
"type": "Stage"
|
|
514
|
+
"type": "Stage",
|
|
515
|
+
"stageType": "primary" | "secondary" | null, // omit/null = primary, "secondary" = secondary/exception stage
|
|
515
516
|
"description": string,
|
|
516
517
|
"requiredForCompletion": boolean,
|
|
517
|
-
"interrupting": boolean | null, //
|
|
518
|
+
"interrupting": boolean | null, // secondary stages only (stageType === "secondary")
|
|
518
519
|
"entryConditions": [{ "when": string, "if": string, "interrupting": "Yes"|"No", "displayName": string }],
|
|
519
520
|
"exitConditions": [{ "when": string, "if": string, "exitType": string, "marksComplete": "Yes"|"No", "displayName": string }],
|
|
520
521
|
"sla": { "count": number, "unit": string, "atRiskPct": string, "atRiskAction": string, "breachAction": string } | null,
|
|
@@ -827,7 +828,7 @@
|
|
|
827
828
|
}));
|
|
828
829
|
const stageNodes = stages.map((s, i) => ({
|
|
829
830
|
id: "s-" + i,
|
|
830
|
-
kind: s.type === "ExceptionStage" ? "exception" : "stage",
|
|
831
|
+
kind: (s.stageType === "secondary" || s.type === "ExceptionStage") ? "exception" : "stage",
|
|
831
832
|
label: s.name || "(unnamed)",
|
|
832
833
|
sub: pluralize((s.tasks || []).length, "task") + (s.sla ? ` · SLA ${s.sla.count}${s.sla.unit}` : ""),
|
|
833
834
|
stageIdx: i,
|
|
@@ -1007,7 +1008,7 @@
|
|
|
1007
1008
|
glyph.setAttribute("fill", stroke);
|
|
1008
1009
|
glyph.setAttribute("font-weight", "600");
|
|
1009
1010
|
glyph.setAttribute("text-transform", "uppercase");
|
|
1010
|
-
glyph.textContent = n.kind === "trigger" ? "TRIGGER" : (n.kind === "exception" ? "
|
|
1011
|
+
glyph.textContent = n.kind === "trigger" ? "TRIGGER" : (n.kind === "exception" ? "SECONDARY" : "STAGE");
|
|
1011
1012
|
g.appendChild(glyph);
|
|
1012
1013
|
|
|
1013
1014
|
// label
|
|
@@ -1053,7 +1054,7 @@
|
|
|
1053
1054
|
legend.innerHTML =
|
|
1054
1055
|
'<span><span class="swatch" style="background:#fff1ea;border-color:#fa4616"></span>Trigger</span>' +
|
|
1055
1056
|
'<span><span class="swatch" style="background:#ffffff;border-color:#cdd2d9"></span>Stage</span>' +
|
|
1056
|
-
'<span><span class="swatch" style="background:#fef2f2;border-color:#ef4444"></span>
|
|
1057
|
+
'<span><span class="swatch" style="background:#fef2f2;border-color:#ef4444"></span>Secondary stage</span>' +
|
|
1057
1058
|
'<span><span class="swatch" style="background:transparent;border-color:transparent;border-bottom:2px dashed #ef4444"></span>Interrupting edge</span>' +
|
|
1058
1059
|
'<span style="color:var(--text-subtle)">· Click a stage to jump to its detail card.</span>';
|
|
1059
1060
|
wrap.appendChild(legend);
|
|
@@ -1070,7 +1071,7 @@
|
|
|
1070
1071
|
|
|
1071
1072
|
function renderStage(stage, idx) {
|
|
1072
1073
|
const id = "stage-" + slug(stage.name) || "stage-" + idx;
|
|
1073
|
-
const isException = stage.type === "ExceptionStage";
|
|
1074
|
+
const isException = stage.stageType === "secondary" || stage.type === "ExceptionStage";
|
|
1074
1075
|
const collapsed = state.collapsedStages.has(idx);
|
|
1075
1076
|
const root = el("div", {
|
|
1076
1077
|
class: "stage" + (isException ? " exception" : "") + (collapsed ? " collapsed" : ""),
|
|
@@ -1085,7 +1086,7 @@
|
|
|
1085
1086
|
const title = el("div", { class: "stage-title" }, [
|
|
1086
1087
|
el("span", { class: "seq" }, "Stage " + (idx + 1) + " ·"),
|
|
1087
1088
|
document.createTextNode(stage.name || "(unnamed)"),
|
|
1088
|
-
el("span", { class: "stage-type" }, isException ? "
|
|
1089
|
+
el("span", { class: "stage-type" }, isException ? "Secondary" : "Stage")
|
|
1089
1090
|
]);
|
|
1090
1091
|
titleWrap.appendChild(title);
|
|
1091
1092
|
const summary = el("div", { class: "stage-summary" });
|
|
@@ -43,6 +43,8 @@ After writing bindings to top-level `bindings[]`, regenerate `bindings_v2.json`.
|
|
|
43
43
|
}
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
+
> **Inline-built sibling exception (agent / api-workflow) — the one case where the shape's `<folderPath binding default>` placeholder does NOT take the caseplan default.** `value.folderPath.defaultValue` is **`"solution_folder"`** (resource identity), NOT the caseplan `folderPath` binding `default` (which is `""` for an inline sibling). `bindings_v2.json` keeps the `solution_folder` sentinel while the caseplan runtime `folderPath` stays `""` — they are intentionally decoupled. `value.name.defaultValue` and `metadata.subType` (`"Agent"` / `"Api"` per kind) follow the caseplan binding as usual. Full rationale: the inline-built-sibling decoupling blockquote later in this file.
|
|
47
|
+
|
|
46
48
|
### Connector resource entry
|
|
47
49
|
|
|
48
50
|
```json
|
|
@@ -124,10 +126,12 @@ With `bindings_v2.json` and IS cache in place, `uip solution resources refresh`
|
|
|
124
126
|
|
|
125
127
|
All three required for `uip solution upload` and `uip maestro case debug` to work without "Resource is not configured" warnings.
|
|
126
128
|
|
|
129
|
+
> **Inline-built siblings (agent / api-workflow) — `bindings_v2` identity and the caseplan runtime `folderPath` are DECOUPLED.** This is the one case where `bindings_v2.json` does NOT mirror the caseplan binding's `folderPath`. Keep the **resource identity** at the `solution_folder` sentinel everywhere it belongs — `bindings_v2.json` `key` (`"solution_folder.<name>"`) and `value.folderPath.defaultValue` (`"solution_folder"`), plus the caseplan `resourceKey` and the `resources/solution_folder/…` path. **BUT the caseplan task's `folderPath` binding `default` MUST be `""`** (co-located runtime folder), NOT the sentinel — `"solution_folder"` there fails at invocation with `folder not exist`. Prerequisite for deploy/debug: the sibling registered in the `.uipx`. Full rationale (deploy provisioning, runtime invocation): [agent/planning.md § Creating an Agent inline → Step 3 Binding](plugins/tasks/agent/planning.md#creating-an-agent-inline) / [api-workflow/planning.md § Step 3 Binding](plugins/tasks/api-workflow/planning.md#creating-an-api-workflow-inline).
|
|
130
|
+
|
|
127
131
|
---
|
|
128
132
|
|
|
129
133
|
## Cleanup on task or rule removal
|
|
130
134
|
|
|
131
|
-
When any task or connector condition rule is removed and its root bindings are pruned (per [case-editing-operations.md](case-editing-operations.md) § Delete a node / § Delete a
|
|
135
|
+
When any task or connector condition rule is removed and its root bindings are pruned (per [case-editing-operations.md](case-editing-operations.md) § Delete a node / § Delete a condition rule / § Delete a task):
|
|
132
136
|
|
|
133
137
|
1. After pruning root bindings, regenerate `bindings_v2.json` from the updated array.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Brownfield — Edit an Existing Case
|
|
2
|
+
|
|
3
|
+
Targeted changes to an existing `caseplan.json`. Skips the Phase 0–6 build pipeline. Terminates at `validate`, then hands off to Phase 5 (debug) / Phase 6 (publish).
|
|
4
|
+
|
|
5
|
+
> **Greenfield (new case from `sdd.md`) uses a different journey.** If `caseplan.json` does not yet exist, or the user wants to (re)build from a spec, see [planning.md](planning.md) → [implementation.md](implementation.md) → [phased-execution.md](phased-execution.md) instead.
|
|
6
|
+
|
|
7
|
+
## When this journey applies
|
|
8
|
+
|
|
9
|
+
`caseplan.json` already exists AND the user wants a targeted edit ("add a stage", "remove task X", "change this condition", "swap the trigger"). No `sdd.md`, no `tasks.md`, no planning approval, no prototyping hard stop. Routing lives in [SKILL.md](../SKILL.md#routing--greenfield-vs-brownfield).
|
|
10
|
+
|
|
11
|
+
## Pull latest first (before editing)
|
|
12
|
+
|
|
13
|
+
Most "edit an existing case" requests mean a case **deployed in Studio Web**, not just a local file. Editing the local `caseplan.json` and re-publishing (Phase 6 `uip solution upload`) **overwrites server state** — if the case changed in Studio Web after the local copy was made, the upload silently clobbers those changes, with no diff and no conflict check. Reconcile **before** the first edit.
|
|
14
|
+
|
|
15
|
+
1. **Determine where the case lives.** If not already known, AskUserQuestion: `Edit my Studio Web case (pull latest first)` (default) / `Edit a local-only project (no pull)`.
|
|
16
|
+
2. **Lives in Studio Web (has a SolutionId)** → pull current server state into the working dir before editing:
|
|
17
|
+
- Standalone export: `uip solution download <SolutionId> -d <WorkingDir> --extract --output json` — exports the `.uis` archive and unpacks it; edit the extracted project.
|
|
18
|
+
- Already-linked local solution project: `uip solution project resync --project-name <ProjectName> --sync-option Sync --output json`.
|
|
19
|
+
- SolutionId unknown → ask the user for it; never guess.
|
|
20
|
+
- `--extract` / `resync` **overwrite the destination**. Run before any edit. If you have already edited the local copy this session, pulling discards those edits — confirm with the user first.
|
|
21
|
+
3. **Local-only project (no SolutionId)** → proceed as today, no pull.
|
|
22
|
+
4. The pull is a CLI boundary operation (like `uip solution upload`), not a Rule 13 artifact mutation — it runs once, before editing. After it, all edits resume via Read/Write/Edit only.
|
|
23
|
+
|
|
24
|
+
Record the outcome (pulled from SW at `<SolutionId>`, or local-only) for the freshness note in [Completion Output](#completion-output).
|
|
25
|
+
|
|
26
|
+
> **Do NOT regenerate from scratch.** SKILL.md Rule 6 ("always regenerate from scratch") is a greenfield/planning rule. Brownfield edits the file in place and preserves every node `id` / `elementId` — re-minting IDs breaks `=vars.*` references, conditions, and `entry-points.json`.
|
|
27
|
+
|
|
28
|
+
## Large or sweeping edits
|
|
29
|
+
|
|
30
|
+
Edit size never changes the journey — many edits still stay brownfield (in-place, IDs preserved). No complexity threshold escalates to greenfield. Batch multi-edit passes per [case-editing-operations.md § Per-section batch write contract](case-editing-operations.md#per-section-batch-write-contract--canonical): one `validate` at the end, not per edit.
|
|
31
|
+
|
|
32
|
+
When an edit touches many nodes or reads like "rebuild this case", confirm scope first via AskUserQuestion — `Edit in place` (default) vs `Rebuild from an updated spec` (greenfield via [planning.md](planning.md), re-mints IDs). Only an explicit rebuild choice or a new/updated `sdd.md` escalates to greenfield.
|
|
33
|
+
|
|
34
|
+
## Read this first
|
|
35
|
+
|
|
36
|
+
- **All mutations via Read/Write/Edit only** (Rule 13). CLI never mutates the case file in place: metadata fetches (`uip maestro case tasks describe`, `uip maestro case spec`, `is resources/triggers describe`), `uip maestro case validate`, the pre-edit pull (`uip solution download` / `solution project resync` — see [§ Pull latest first](#pull-latest-first-before-editing)), and (on handoff) `uip solution resources refresh` / `uip solution upload` / `uip maestro case debug`. No `python`/`node`/`jq`/`sed`/`awk`/helper scripts touching the file.
|
|
37
|
+
- **`id-map.json` may be absent.** When editing a `caseplan.json` not built in this session, the `id-map.json` sidecar may not exist. Read node IDs directly from `caseplan.json`; do not assume the sidecar is present. If absent, do not synthesize one.
|
|
38
|
+
- **Connector edits need a metadata fetch first.** Adding/altering a connector-activity task or connector-bound rule requires `uip maestro case spec --type ...` (or `tasks describe`) before authoring the shape — never hand-author connector schemas. See [connector-integration.md](connector-integration.md).
|
|
39
|
+
- **Cross-cutting mechanics** (ID generation, Pre-flight Checklist, expression prefixes, per-section batch contract) live in [case-editing-operations.md](case-editing-operations.md). This doc routes; that doc supplies the recipe.
|
|
40
|
+
|
|
41
|
+
## Common edits
|
|
42
|
+
|
|
43
|
+
| Edit | Operation + recipe |
|
|
44
|
+
|---|---|
|
|
45
|
+
| Add / insert a stage | [case-editing-operations.md § Add a node](case-editing-operations.md#add-a-node-trigger--stage) + [plugins/stages/impl-json.md](plugins/stages/impl-json.md). Every regular stage needs ≥1 entry condition (Step 10). |
|
|
46
|
+
| Insert a stage between two existing stages | [case-editing-operations.md § Insert a stage between two existing stages](case-editing-operations.md#insert-a-stage-between-two-existing-stages) |
|
|
47
|
+
| Add a task to a stage | [case-editing-operations.md § Add a task to a stage](case-editing-operations.md#add-a-task-to-a-stage) + the task type's [plugins/tasks/<type>/impl-json.md](plugins/tasks/) |
|
|
48
|
+
| Bind / change a task input | [case-editing-operations.md § Bind an input](case-editing-operations.md#bind-an-input) + [bindings-and-expressions.md](bindings-and-expressions.md) |
|
|
49
|
+
| Move a task to a different stage or lane | [case-editing-operations.md § Move a task to a different stage or lane](case-editing-operations.md#move-a-task-to-a-different-stage-or-lane) |
|
|
50
|
+
| Remove / delete a task | [case-editing-operations.md § Delete a task](case-editing-operations.md#delete-a-task) |
|
|
51
|
+
| Add / change a condition (4 scopes) | the matching [plugins/conditions/<scope>/impl-json.md](plugins/conditions/) |
|
|
52
|
+
| Modify a condition rule in place (operator / expression / type) | [case-editing-operations.md § Modify a condition rule in place](case-editing-operations.md#modify-a-condition-rule-in-place) |
|
|
53
|
+
| Delete a condition rule (plain or connector, any scope) | [case-editing-operations.md § Delete a condition rule](case-editing-operations.md#delete-a-condition-rule) |
|
|
54
|
+
| Remove a case-exit completion / exit rule | [case-editing-operations.md § Delete a case-exit completion rule](case-editing-operations.md#delete-a-case-exit-completion-rule) |
|
|
55
|
+
| Replace a placeholder task with a real one | [case-editing-operations.md § Replace a placeholder task with an enriched task](case-editing-operations.md#replace-a-placeholder-task-with-an-enriched-task) + [placeholder-tasks.md](placeholder-tasks.md) |
|
|
56
|
+
| Re-sync a task whose source schema changed | [case-editing-operations.md § Re-sync a task after its source schema changed](case-editing-operations.md#re-sync-a-task-after-its-source-schema-changed) + the task type's [plugins/tasks/<type>/impl-json.md](plugins/tasks/) |
|
|
57
|
+
| Repoint a non-connector task at a different resource (swap which process/agent it runs) | [case-editing-operations.md § Repoint a non-connector task at a different resource](case-editing-operations.md#repoint-a-non-connector-task-at-a-different-resource) + the task type's [plugins/tasks/<type>/impl-json.md](plugins/tasks/) |
|
|
58
|
+
| Replace a trigger with a different type | [case-editing-operations.md § Replace a trigger with a different type](case-editing-operations.md#replace-a-trigger-with-a-different-type) |
|
|
59
|
+
| Re-target an event trigger (same type, different event) | [case-editing-operations.md § Re-target an event trigger](case-editing-operations.md#re-target-an-event-trigger-same-type-different-event) |
|
|
60
|
+
| Convert a Stage to/from an Exception Stage | [case-editing-operations.md § Convert a Stage to/from an Exception Stage](case-editing-operations.md#convert-a-stage-tofrom-an-exception-stage) |
|
|
61
|
+
| Delete a node (incl. a stage with successors — repoint their entry conditions) | [case-editing-operations.md § Delete a node](case-editing-operations.md#delete-a-node) |
|
|
62
|
+
| Delete a trigger (prune `entry-points.json` + In-arg variable cascade) | [case-editing-operations.md § Delete a node](case-editing-operations.md#delete-a-node) (Trigger branch, steps 5–6) |
|
|
63
|
+
| Delete a connector condition rule | [case-editing-operations.md § Delete a condition rule](case-editing-operations.md#delete-a-condition-rule) (connector cascade, steps 4–6) |
|
|
64
|
+
| Add SLA / escalation | [plugins/sla/impl-json.md](plugins/sla/impl-json.md) |
|
|
65
|
+
| Modify / remove an SLA or escalation | [case-editing-operations.md § Modify or remove an SLA or escalation](case-editing-operations.md#modify-or-remove-an-sla-or-escalation) |
|
|
66
|
+
| Add a global variable / argument | [plugins/variables/global-vars/impl-json.md](plugins/variables/global-vars/impl-json.md) |
|
|
67
|
+
| Rename / delete a global variable or argument | [case-editing-operations.md § Rename or delete a global variable or argument](case-editing-operations.md#rename-or-delete-a-global-variable-or-argument) + [plugins/variables/global-vars/impl-json.md](plugins/variables/global-vars/impl-json.md) |
|
|
68
|
+
| Change a variable's type or default | [case-editing-operations.md § Change a variable's type or default](case-editing-operations.md#change-a-variables-type-or-default) + [plugins/variables/global-vars/impl-json.md](plugins/variables/global-vars/impl-json.md) |
|
|
69
|
+
|
|
70
|
+
## After edits
|
|
71
|
+
|
|
72
|
+
1. **Validate** — `uip maestro case validate <ProjectName>/caseplan.json --output json`. Authoritative; retry ≤3, fix on failure. On 3rd failure HARD STOP: AskUserQuestion `Retry with fix` / `Pause for manual edit` / `Abort` (same contract as Phase 4).
|
|
73
|
+
2. **Any edit that adds, removes, or repoints a resource binding — connector OR non-connector** — regenerate `bindings_v2.json` per [bindings-v2-sync.md](bindings-v2-sync.md), then `uip solution resources refresh --solution-folder <SolutionDir> --output json` (Rule 14) before any debug/publish. `bindings_v2.json` holds non-connector bindings too (process/agent/rpa/action/api-workflow/case-management — [bindings-v2-sync.md § What `resource refresh` produces](bindings-v2-sync.md#what-resource-refresh-produces)); a stale file makes `uip solution upload` / `debug` throw "Resource is not configured". A pure schema-only re-sync (same resource, no binding change) needs no refresh.
|
|
74
|
+
|
|
75
|
+
## Completion Output
|
|
76
|
+
|
|
77
|
+
Report: file path edited, what changed (nodes/tasks/conditions added/removed/modified), validation status, any placeholder tasks still unresolved, any connector connections the user must create, and a **freshness note** — whether the local copy was pulled from Studio Web first (so re-publish reflects current server state) or is a local-only project not synced from SW (re-publish overwrites whatever is on the server). Then AskUserQuestion "What's next":
|
|
78
|
+
|
|
79
|
+
| Option | What it does |
|
|
80
|
+
|---|---|
|
|
81
|
+
| **Run debug session** | Phase 5 — executes the case for real (consent-gated, Rule 12). |
|
|
82
|
+
| **Publish to Studio Web** | Phase 6 — `uip solution resources refresh` then `uip solution upload`, print DesignerUrl. |
|
|
83
|
+
| **Done** (default) | Stop here. |
|
|
84
|
+
| **Something else** | Free-form. |
|
|
85
|
+
|
|
86
|
+
Do not run debug or publish without explicit selection. On selection, follow the existing [phased-execution.md](phased-execution.md) Phase 5 / Phase 6 contracts.
|
|
@@ -237,6 +237,11 @@ uip maestro case registry search <keyword> --filter "name:contains=Foo" --type a
|
|
|
237
237
|
uip maestro case registry get <identifier>
|
|
238
238
|
uip maestro case registry get <identifier> --type agent
|
|
239
239
|
uip maestro case registry get <uiPathActivityTypeId> --type typecache-activities --connection-id <uuid>
|
|
240
|
+
|
|
241
|
+
# --local: in-solution (offline) discovery of sibling projects (.uipx in cwd/parent/grandparent), no tenant/login
|
|
242
|
+
uip maestro case registry list --local --output json
|
|
243
|
+
uip maestro case registry search "<Name>" --type <agent|api> --local --output json # matches by name (keyword); `agent` = agent sibling, `api` = api-workflow sibling
|
|
244
|
+
uip maestro case registry get "<entityKey-or-projectId>" --type <agent|api> --local --output json # matches by key, NOT name
|
|
240
245
|
```
|
|
241
246
|
|
|
242
247
|
Resource types: `agent`, `process`, `api`, `processOrchestration`, `caseManagement`, `typecache-activities`, `typecache-triggers`, `action-apps`, `solution`.
|
|
@@ -262,6 +267,9 @@ Options for `get`:
|
|
|
262
267
|
| `<identifier>` | **(required)** The entityKey (process types), id (action-apps), or uiPathActivityTypeId (typecache) of the resource |
|
|
263
268
|
| `-t, --type <type>` | Limit to a specific resource type |
|
|
264
269
|
| `--connection-id <id>` | Connection UUID for connector-specific IS field metadata. Only applies to `typecache-activities` / `typecache-triggers` results |
|
|
270
|
+
| `--local` | Resolve against in-solution sibling projects (offline; no login). On `list`/`search`/`get`. Local types: `agent`, `process`, `api`, `processOrchestration`, `caseManagement`. |
|
|
271
|
+
|
|
272
|
+
**`--local` semantics.** Discovers sibling projects from the enclosing solution `.uipx` (walks cwd → parent → grandparent). Keys (`--output json`, PascalCased): `search`/`get` nest each match under `Data.Resources[].Resource.{EntityKey,Name,Category,Folders[].FullyQualifiedName,Inputs,Outputs,Source}`; `list` flattens to `Data.Resources[].{EntityKey,Name,Category,Source}` (no `Resource` wrapper, no I/O). **`get --local` matches the identifier only against `entityKey`/`.uipx` project Id — never the display name; to find a sibling by name use `search "<Name>" --local`.** A freshly-built, unpacked sibling's `EntityKey` equals its `.uipx` project Id. No solution found → `Result:"Failure"`, `Message:"No solution found for --local"`, exit 1.
|
|
265
273
|
|
|
266
274
|
Output: `{ MatchCount, Resources: [{ ResourceType, Resource }] }`.
|
|
267
275
|
|