docs(uipath-maestro-flow): add IxP extraction plugin#515
Conversation
49e1957 to
9008c70
Compare
|
|
||
| The `definitions[]` entry is copied verbatim from `registry get` (`Data.Node`). Critical Rule #7 applies unchanged. | ||
|
|
||
| ### Self-check before `uip maestro flow validate` |
There was a problem hiding this comment.
should this be part of uip maestro flow validate as a per-node-type hook?
There was a problem hiding this comment.
Ideally, yes we should have that Bai.
There was a problem hiding this comment.
Thanks - Submitted PR here: https://github.com/UiPath/cli/pull/1866
| > | ||
| > The Authoring rules above are the source of truth for the instance contract. The registry's `inputDefinition.properties` is **not** a license to override them: it is the schema of the property catalog (current keys only — `digitizationMode`, `documentTaxonomy`, `attachmentId`, `fileName`, `mimeType` are NOT returned by `registry get`). If a forbidden field appears in your `inputs`, you put it there from training-data recall, not from the registry response. | ||
|
|
||
| ```bash |
There was a problem hiding this comment.
this validation logic shouldn't be part of the skill - the agent just needs to run the validation script not produce it. Or better move it into the flow validate command.
There was a problem hiding this comment.
Will replace with https://github.com/UiPath/cli/pull/1866
| echo "no .flow file under ../.." >&2 | ||
| exit 1 | ||
| fi | ||
| python3 - "$f" <<'PY' |
There was a problem hiding this comment.
is this duplicating the self check script again?
There was a problem hiding this comment.
Will replace with https://github.com/UiPath/cli/pull/1866
| @@ -0,0 +1,114 @@ | |||
| task_id: skill-flow-ixp-activation | |||
There was a problem hiding this comment.
the current file structure is misleading because they're all under single_node but are not actually. Let's put them all under uipath-maestro-flow/ixp.
|
|
||
| dataset: | ||
| rows: | ||
| - id: aviation |
There was a problem hiding this comment.
This PR currently adds a very large number of test cases (26 in total) which will substantially increase the cost and time of the daily run (currently there are 54 test cases in the whole flow project). Let's avoid multiple similar tests as much as possible.
| --- | ||
| name: uipath-maestro-flow | ||
| description: "UiPath Maestro Flow (.flow) — read, edit, author, debug. `uip` CLI: nodes, edges, subflows, scripts, variables, triggers, End nodes, registry. For C#/XAML→uipath-rpa. For agents→uipath-agents." | ||
| description: "UiPath Maestro Flow (.flow) — read, edit, author, debug. `uip` CLI: nodes, edges, subflows, scripts, variables, triggers, End nodes, registry, IxP document extraction (PDFs, invoices, receipts, forms). For C#/XAML→uipath-rpa. For agents→uipath-agents." |
There was a problem hiding this comment.
Rebase should show a conflict. I could see adding a keyword to it, but we should be mindful of our character limits and what keywords we want this skill to trigger for -- which are more likely centered around flow keywords. Open to adding a few if we can spare the chars :)
There was a problem hiding this comment.
thanks - rebased and shortened insertion; finding activation is flakey without it
| Smoke: minimal scaffold — manual trigger → IxP extract → script (logs "ok") | ||
| → validate. Tests that the agent picks the IxP plugin, authors a single | ||
| extraction node via Direct JSON, and produces a flow that passes | ||
| `uip maestro flow validate`. |
|
|
||
| Validate-only: no `uip maestro flow debug`. | ||
|
|
||
| tags: [uipath-maestro-flow, smoke, lifecycle:generate, shape:multi-node, node:ixp] |
- Move IxP test suite from single_node/ixp/ to ixp/ (matches uipath-data-fabric layout; the suite contains multi-node and e2e flows that don't belong under single_node). - Replace impl.md self-check heredoc with a single invocation of the canonical self-check.py (the heredoc duplicated the script logic). - Trim activation/listing/negative test rows (6/3/3 to 2/1/1) to reduce daily-run cost. - Add task_timeout: 600 to smoke_01 and smoke_02. - Trim SKILL.md description: drop "document" and "receipts" to free flow-keyword tokens. - Update CODEOWNERS path to match the new test dir.
- Drop 8 of 10 dataset rows (kept aviation, birth-certificate); shrink the case statement to match. - Replace the inline self-check Python with a call to the canonical self-check.py shipped alongside impl.md.
Delete `self-check.py` and the "Self-check before uip maestro flow validate" section in `impl.md`. The rules now run inside `uip maestro flow validate` via the new `ixpNodeValidator` (UiPath/cli#1866). Drops the corresponding `run_command` stanza from `e2e_02_project_selection.yaml`.
UiPath/cli#1866's `ixpNodeValidator` emits self-contained error messages with `path` like `nodes[<nodeId>].inputs.model` (not "Rule #1 ..."), so the impl.md callout was misdescribing what an agent will see when `flow validate` fails on an IxP node.
9008c70 to
596af4d
Compare
|
Claude finished @joe-prosser's task in 4m 31s —— View job Coder-eval task lint (advisory)8 task YAMLs changed; verdicts: 0 Critical, 0 High, 0 Medium, 2 Low, 6 OK. One theme at Medium (validate-only e2e/integration). This check is advisory and never blocks merge. Rubric: .claude/commands/lint-task.md. Evidence of passing run❌ High — PR body does not claim the changed tasks have been run and passed. Please consider editing the PR description to add a line like:
Per-task lint
|
|
Addressed review comments:
|
…low-add-ixp-plugin # Conflicts: # skills/uipath-maestro-flow/SKILL.md # skills/uipath-maestro-flow/references/author/CAPABILITY.md
| ```bash | ||
| uip login status --output json # confirm auth — without login, tenant IxP nodes are hidden | ||
| uip maestro flow registry pull --force | ||
| uip maestro flow registry search "uipath.ixp" --output json |
There was a problem hiding this comment.
Agent might take the value literally.
There was a problem hiding this comment.
That's fine - uipath.ixp is the standard prefix for all ixp nodes
|
|
||
| Rules for the listing path: | ||
|
|
||
| - **Do NOT scaffold a solution, run `uip maestro flow init`, or write a `.flow` file.** Listing is read-only Q&A. |
There was a problem hiding this comment.
Some of these I understand but hope we can handle at high levels of the skill. Your call if you wish to keep for now.
There was a problem hiding this comment.
I'd advocate for keeping initially - agree some could be generalized later
| - **Do NOT mock.** If `Data: []`, answer directly: no IxP models are published on this tenant. The `core.logic.mock` fallback is for build-time planning, not for listing-time Q&A. | ||
| - **Do NOT log in for the user.** If `uip login status` shows logged-out, tell the user to run `uip login` and stop — listing without auth returns OOTB-only results and is misleading. | ||
| - **Do NOT search by `"runtime"`, `"document extractor"`, `"extractor"`, or `"IXP"` (uppercase).** These return empty results or agent-tool variants — not extraction nodes. Use `"uipath.ixp"` (lowercase) only. | ||
| - **Do NOT use `uip maestro flow process list` or any Orchestrator folder iteration.** `flow process list` enumerates *deployed flow process instances* (with `--folder-key`) — that is a different question. Listing published IxP models always goes through `registry search "uipath.ixp"`. |
There was a problem hiding this comment.
Not sure about the that is a different question.
| - **Do NOT log in for the user.** If `uip login status` shows logged-out, tell the user to run `uip login` and stop — listing without auth returns OOTB-only results and is misleading. | ||
| - **Do NOT search by `"runtime"`, `"document extractor"`, `"extractor"`, or `"IXP"` (uppercase).** These return empty results or agent-tool variants — not extraction nodes. Use `"uipath.ixp"` (lowercase) only. | ||
| - **Do NOT use `uip maestro flow process list` or any Orchestrator folder iteration.** `flow process list` enumerates *deployed flow process instances* (with `--folder-key`) — that is a different question. Listing published IxP models always goes through `registry search "uipath.ixp"`. | ||
| - **Do NOT guess `uip maestro flow list-*` or `uip maestro ixp list-*` subcommands.** None exist. The CLI returns `unknown command 'list-...'` and there is no fallback path to pursue. |
There was a problem hiding this comment.
Have we seen this behavior? Curious how it would go down this route.
There was a problem hiding this comment.
I've seen this when older instances of uip that do not have the uip ixp ... commands is installed
| Run this once and source every field below from the response: | ||
|
|
||
| ```bash | ||
| uip maestro flow registry get "<nodeType>" --output json > /tmp/ixp-def.json |
There was a problem hiding this comment.
Are we sure about the literal value for the tmp file?
| { | ||
| "id": "extractInvoiceFields", | ||
| "type": "uipath.ixp.invoice-model.shared-invoice-model", | ||
| "typeVersion": "1.0.0", |
There was a problem hiding this comment.
We should templitize this value 1.0.0, we've been having issues when we do not. The agent will sometimes take as a literal value which is incorrect in practice.
…s/ixp/impl.md Co-authored-by: Rocky Madden <github@rockymadden.com>
Summary
New plugin under
references/plugins/ixp/for IxP document-extraction nodes (PDFs, invoices, receipts, contracts, forms). Addsplanning.md,impl.md, aself-check.py, parent-skill registration, CODEOWNERS, and 7 test scenarios.What changed
planning.md,impl.md(sanitization, discovery, listing, build procedure, 6 numbered authoring rules, self-check, output-access path, mock fallback, debug table),self-check.py(canonical) + logically-equivalent heredoc inimpl.md.SKILL.mddescription, When-to-Use bullet, Reference Navigation + Plugin Index rows, Critical Rule 14 link.planning-arch.mdresource-node table + ports + decision branch.planning-impl.md"context-dispatched, no bindings" subsection.tests/tasks/uipath-maestro-flow/single_node/ixp/): activation (6 rows), activation_listing (3 rows, asserts no.flowwritten), activation_negative (3 rows, asserts nouipath.ixp.*node lands), smoke_01/smoke_02, integration_handle_routing (canonicalFields.findpath), e2e_01 (SharePoint→IxP→HTTP), e2e_02 (10-row per-domain project selection).