Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion .github/workflows/run-coder-eval.yml
Original file line number Diff line number Diff line change
Expand Up @@ -321,19 +321,29 @@ jobs:
docker pull "ghcr.io/uipath/coder-eval-agent:${CE_IMAGE_TAG}"

# Build the skills extension image (`@uipath/cli`, its tool plugins, and
# `@uipath/flow-sdk` on top of coder-eval-agent). Matches
# `@uipath/maestro-builder-sdk` on top of coder-eval-agent). Matches
# smoke-skills.yml + daily.sh.
- name: Build skills Docker image
env:
DOCKER_BUILDKIT: "1"
NPM_AUTH_TOKEN: ${{ secrets.GH_PACKAGES_TOKEN || secrets.GH_PAT }}
CE_IMAGE_TAG: ${{ needs.partition.outputs.image_tag }}
FLOW_SDK_PKG_NAME: ${{ vars.FLOW_SDK_PKG_NAME }}
run: |
# The image's ARG default is the post-rename package name; override it
# only when a repo var pins a different one. The pre-rename baseline
# needs BOTH this and FLOW_SDK_VERSION (see tests/docker/Dockerfile) —
# pinning the version alone asks for a version the new name never had.
pkg_name_arg=()
if [ -n "${FLOW_SDK_PKG_NAME:-}" ]; then
pkg_name_arg=(--build-arg "FLOW_SDK_PKG_NAME=${FLOW_SDK_PKG_NAME}")
fi
docker build \
--build-arg CODER_EVAL_IMAGE="ghcr.io/uipath/coder-eval-agent:${CE_IMAGE_TAG}" \
--secret id=npm_auth_token,env=NPM_AUTH_TOKEN \
--build-arg CLI_VERSION="${{ inputs.cli_version }}" \
--build-arg FLOW_SDK_VERSION="${{ vars.FLOW_SDK_VERSION || 'latest' }}" \
${pkg_name_arg[@]+"${pkg_name_arg[@]}"} \
-t skills-image:latest \
-f tests/docker/Dockerfile \
.
Expand Down
12 changes: 11 additions & 1 deletion .github/workflows/smoke-skills.yml
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,7 @@ jobs:

# Build custom smoke image extending coder-eval-agent with @uipath/cli,
# every whitelisted tool plugin from GitHub Packages @dev, and the latest
# published @uipath/flow-sdk (see tests/docker/Dockerfile). Every push to
# published @uipath/maestro-builder-sdk (see tests/docker/Dockerfile). Every push to
# `cli/main` publishes a `-dev.<run>` prerelease under the `dev` dist-tag
# (cli PR #2650 renamed the old `alpha` tag → `dev` on 2026-06-26), so
# smoke tracks main — not stale `latest` from public npm (which lags by ~2
Expand All @@ -386,11 +386,21 @@ jobs:
env:
DOCKER_BUILDKIT: "1"
NPM_AUTH_TOKEN: ${{ secrets.GH_PACKAGES_TOKEN || secrets.GH_PAT }}
FLOW_SDK_PKG_NAME: ${{ vars.FLOW_SDK_PKG_NAME }}
run: |
# The image's ARG default is the post-rename package name; override it
# only when a repo var pins a different one. The pre-rename baseline
# needs BOTH this and FLOW_SDK_VERSION (see tests/docker/Dockerfile) —
# pinning the version alone asks for a version the new name never had.
pkg_name_arg=()
if [ -n "${FLOW_SDK_PKG_NAME:-}" ]; then
pkg_name_arg=(--build-arg "FLOW_SDK_PKG_NAME=${FLOW_SDK_PKG_NAME}")
fi
docker build \
--build-arg CODER_EVAL_IMAGE=ghcr.io/uipath/coder-eval-agent:${{ steps.ceref.outputs.version }} \
--secret id=npm_auth_token,env=NPM_AUTH_TOKEN \
--build-arg FLOW_SDK_VERSION="${{ vars.FLOW_SDK_VERSION || 'latest' }}" \
${pkg_name_arg[@]+"${pkg_name_arg[@]}"} \
-t skills-image:latest \
-f tests/docker/Dockerfile \
.
Expand Down
8 changes: 4 additions & 4 deletions preview/skills/uipath-maestro-bpmn/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
---
name: uipath-maestro-bpmn
description: "TRIGGER for authoring structural-core UiPath Maestro BPMN as `<Name>.bpmn.ts` with the TypeScript builder SDK (`@uipath/flow-sdk/bpmn`) and running the `uip maestro bpmn` check/compile/format/validate loop. Covers events, gateways, tasks, sub-processes, sequence flows, bindings, static rules, and semantic `.bpmn` output. Flow builder authoring → uipath-maestro-flow; case plans → uipath-maestro-case. DO NOT TRIGGER for registry-backed typed BPMN nodes beyond the structural core."
description: "TRIGGER for authoring structural-core UiPath Maestro BPMN as `<Name>.bpmn.ts` with the TypeScript builder SDK (`@uipath/maestro-builder-sdk/bpmn`) and running the `uip maestro bpmn` check/compile/format/validate loop. Covers events, gateways, tasks, sub-processes, sequence flows, bindings, static rules, and semantic `.bpmn` output. Flow builder authoring → uipath-maestro-flow; case plans → uipath-maestro-case. DO NOT TRIGGER for registry-backed typed BPMN nodes beyond the structural core."
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion
---
<!--
Provenance: snapshot of UiPath/flow-builder-sdk
`typescript/sdk/skill/SKILL-bpmn.md` @ 4aa3d67. Canonical source lives there;
`typescript/sdk/skill/SKILL-bpmn.md` @ a82b640. Canonical source lives there;
edit upstream and re-sync (see UiPath/flow-builder-sdk#405).
-->

Expand All @@ -26,7 +26,7 @@ need, then let TypeScript and `bpmn check` provide the detailed contract.
product tooling require. Run it inside a solution to join that solution; run it
outside one and a parent `<Name>Solution` is scaffolded around it.
2. Keep `<Name>.bpmn.ts` at the workspace root, beside `package.json`.
3. Import from `@uipath/flow-sdk/bpmn` and default-export a chain ending in `.build()`.
3. Import from `@uipath/maestro-builder-sdk/bpmn` and default-export a chain ending in `.build()`.
4. Start from the closest staged `examples/*.bpmn.ts`.
5. Run `uip maestro bpmn check <Name>.bpmn.ts --source` after structural changes.
6. Compile **into the scaffolded project**, format only when layout is needed, and run
Expand Down Expand Up @@ -55,7 +55,7 @@ need, then let TypeScript and `bpmn check` provide the detailed contract.
## Minimal shape

```ts
import { bpmn } from '@uipath/flow-sdk/bpmn';
import { bpmn } from '@uipath/maestro-builder-sdk/bpmn';

export default bpmn('notify')
.name('Notify')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
* `connectionId` added, which the source export omitted. It compiles, and that is what
* it is for — reading, and rendering the canvas diagram on this page.
*/
import { bpmn, errorSchema, errorSchemaWithResponse } from "@uipath/flow-sdk/bpmn";
import { bpmn, errorSchema, errorSchemaWithResponse } from "@uipath/maestro-builder-sdk/bpmn";

export default bpmn("Process_1")
.name("Process")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* `uip maestro bpmn compile NotifyChannel.bpmn.ts -o NotifyChannel.bpmn
* --library "$FLOW_SDK_LIBRARY_JSON"`, then `uip maestro bpmn validate`.
*/
import { bpmn } from '@uipath/flow-sdk/bpmn';
import { bpmn } from '@uipath/maestro-builder-sdk/bpmn';

export default bpmn('notify-channel')
.name('NotifyChannel')
Expand Down
6 changes: 3 additions & 3 deletions preview/skills/uipath-maestro-bpmn/references/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

# BPMN SDK API

Exact `@uipath/flow-sdk/bpmn` authoring signatures and option shapes, from the public
Exact `@uipath/maestro-builder-sdk/bpmn` authoring signatures and option shapes, from the public
declarations. Signatures, fields, optionality, and declaration comments are
generated from the built types; longer tutorials stay in the node references.

Expand All @@ -16,8 +16,8 @@ generated from the built types; longer tutorials stay in the node references.
> names a type whose members or rules you need, read the declaration:
>
> ```bash
> grep -rln "declare function err" node_modules/@uipath/flow-sdk/dist --include="*.d.ts"
> # -> node_modules/@uipath/flow-sdk/dist/core/expr.d.ts
> grep -rln "declare function err" node_modules/@uipath/maestro-builder-sdk/dist --include="*.d.ts"
> # -> node_modules/@uipath/maestro-builder-sdk/dist/core/expr.d.ts
> ```
>
> Grep the **`.d.ts`**, never `dist/*.js` — the compiled JavaScript carries no
Expand Down
8 changes: 4 additions & 4 deletions preview/skills/uipath-maestro-case/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
---
name: uipath-maestro-case
description: "TRIGGER for authoring UiPath Maestro Case plans as `<Name>.case.ts` with the reference-mode TypeScript builder SDK (`@uipath/flow-sdk/case`), compiling to `caseplan.json`, and running the `uip maestro case` check/compile/validate loop. Covers stages, tasks, rules, bindings, published-resource references, and brownfield decompile/edit/recompile. Flow builder authoring → uipath-maestro-flow; structural-core BPMN → uipath-maestro-bpmn. DO NOT TRIGGER for C#/XAML automation → uipath-rpa."
description: "TRIGGER for authoring UiPath Maestro Case plans as `<Name>.case.ts` with the reference-mode TypeScript builder SDK (`@uipath/maestro-builder-sdk/case`), compiling to `caseplan.json`, and running the `uip maestro case` check/compile/validate loop. Covers stages, tasks, rules, bindings, published-resource references, and brownfield decompile/edit/recompile. Flow builder authoring → uipath-maestro-flow; structural-core BPMN → uipath-maestro-bpmn. DO NOT TRIGGER for C#/XAML automation → uipath-rpa."
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion
---
<!--
Provenance: snapshot of UiPath/flow-builder-sdk
`typescript/sdk/skill/SKILL-case.md` @ 4aa3d67. Canonical source lives there;
`typescript/sdk/skill/SKILL-case.md` @ a82b640. Canonical source lives there;
edit upstream and re-sync (see UiPath/flow-builder-sdk#405).

This is a snapshot of a generated file. In flow-builder-sdk,
Expand All @@ -24,7 +24,7 @@ Use this as a router: read only the capability reference you need, then let Type
1. Scaffold with `uip solution init <SolutionName>`, then run `uip maestro case init <CaseName>` inside it. Scaffold once: exactly one `project.uiproj` declaring `ProjectType: "CaseManagement"` may survive, because `uip solution projects import` copies rather than moves and validators cannot choose between duplicates. If a bare `<CaseName>/` project already exists outside the solution, import it and delete the original rather than leaving both.
2. Keep `<Name>.case.ts` beside this `SKILL.md` and the workspace `package.json`.
3. If the request requires `tasks/tasks.md`, write it before code and treat explicit stage/task rules, required flags, routing, and unresolved resources as authoritative and pre-approved.
4. Import from `@uipath/flow-sdk/case`; default-export a chain ending in `.build()`.
4. Import from `@uipath/maestro-builder-sdk/case`; default-export a chain ending in `.build()`.
5. Start from the closest staged `examples/*.case.ts`; change only scenario data.
6. Run `uip maestro case check <Name>.case.ts --source` after each structural change.
7. Compile into the scaffolded Case project, then validate. Compile syncs existing sidecars; refresh added bindings and remove orphaned resources before refreshing.
Expand All @@ -50,7 +50,7 @@ Use this as a router: read only the capability reference you need, then let Type
## Minimal shape

```ts
import { casePlan, rule } from '@uipath/flow-sdk/case';
import { casePlan, rule } from '@uipath/maestro-builder-sdk/case';

export default casePlan('loan-approval')
.name('Loan Approval')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
* `uip maestro case compile`, check source with `uip maestro case check`, and validate
* the artifact with `uip maestro case validate`.
*/
import { casePlan, rule, escalation, toUser, toGroup } from '@uipath/flow-sdk/case';
import { casePlan, rule, escalation, toUser, toGroup } from '@uipath/maestro-builder-sdk/case';

export default casePlan('claim-review-sla')
.name('ClaimReviewSLA')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* connector library — compile with `uip maestro case compile` and check source
* with `uip maestro case check`.
*/
import { casePlan, rule, manualTrigger, timerTrigger } from '@uipath/flow-sdk/case';
import { casePlan, rule, manualTrigger, timerTrigger } from '@uipath/maestro-builder-sdk/case';

const manual = manualTrigger({ name: 'Manual start' });
const hourly = timerTrigger({ every: 'R/PT1H', name: 'Hourly sweep' });
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* No bindings or connector library — compile with `uip maestro case compile`,
* check source with `uip maestro case check`, then run `uip maestro case validate`.
*/
import { casePlan, rule, manualTrigger, timerTrigger } from '@uipath/flow-sdk/case';
import { casePlan, rule, manualTrigger, timerTrigger } from '@uipath/maestro-builder-sdk/case';

export default casePlan('nightly-rollup')
.name('NightlyRollup')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
* real connection + folder. Compile with the connector library on
* `$FLOW_SDK_LIBRARY_JSON` or `uip maestro case compile --library` supplies it.
*/
import { casePlan, rule } from '@uipath/flow-sdk/case';
import { casePlan, rule } from '@uipath/maestro-builder-sdk/case';

export default casePlan('notify-on-approval')
.name('NotifyOnApproval')
Expand Down
27 changes: 21 additions & 6 deletions preview/skills/uipath-maestro-case/references/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

# Case SDK API

Exact `@uipath/flow-sdk/case` authoring signatures and option shapes, from the public
Exact `@uipath/maestro-builder-sdk/case` authoring signatures and option shapes, from the public
declarations. Signatures, fields, optionality, and declaration comments are
generated from the built types; longer tutorials stay in the node references.

Expand All @@ -16,8 +16,8 @@ generated from the built types; longer tutorials stay in the node references.
> names a type whose members or rules you need, read the declaration:
>
> ```bash
> grep -rln "declare function err" node_modules/@uipath/flow-sdk/dist --include="*.d.ts"
> # -> node_modules/@uipath/flow-sdk/dist/core/expr.d.ts
> grep -rln "declare function err" node_modules/@uipath/maestro-builder-sdk/dist --include="*.d.ts"
> # -> node_modules/@uipath/maestro-builder-sdk/dist/core/expr.d.ts
> ```
>
> Grep the **`.d.ts`**, never `dist/*.js` — the compiled JavaScript carries no
Expand All @@ -29,7 +29,7 @@ generated from the built types; longer tutorials stay in the node references.

**Option shapes** — [RuleOpts](#ruleopts-interface) · [EscalationOpts](#escalationopts-interface) · [ManualTriggerOpts](#manualtriggeropts-interface) · [TimerTriggerOpts](#timertriggeropts-interface) · [ResolvedEventTriggerOpts](#resolvedeventtriggeropts-interface) · [EventTriggerOpts](#eventtriggeropts-interface) · [EventSubscription](#eventsubscription-interface) · [TriggerOptions](#triggeroptions-interface) · [SlaOpts](#slaopts-interface) · [EntryOpts](#entryopts-interface) · [ExitOpts](#exitopts-interface) · [ExternalTaskOptions](#externaltaskoptions-interface) · [ConnectorOpts](#connectoropts-interface)

**Supporting types** — [CaseRuleType](#caseruletype-type) · [CaseRule](#caserule-interface) · [WhenExpression](#whenexpression-interface) · [BuiltEscalation](#builtescalation-interface) · [EscalationRecipient](#escalationrecipient-interface) · [BuiltTrigger](#builttrigger-interface) · [TriggerDescriptor](#triggerdescriptor-type) · [JsonSchemaType](#jsonschematype-interface) · [WaitConnectorSpec](#waitconnectorspec-type) · [EscalationTrigger](#escalationtrigger-type) · [CaseTriggerKind](#casetriggerkind-type) · [TaskOutputBinding](#taskoutputbinding-interface) · [TriggerMeta](#triggermeta-interface) · [TypeDesc](#typedesc-type) · [CaseAppConfig](#caseappconfig-interface) · [CaseLayout](#caselayout-interface) · [CaseRuleGrid](#caserulegrid-type) · [BuiltCase](#builtcase-interface) · [WaitConnectorPlaceholderSpec](#waitconnectorplaceholderspec-interface) · [EventFilter](#eventfilter-type) · [CaseAppSection](#caseappsection-interface) · [CaseNodeLayout](#casenodelayout-interface) · [BuiltStage](#builtstage-interface) · [CaseRuleInput](#caseruleinput-type) · [SlaUnit](#slaunit-type) · [CaseVarDecl](#casevardecl-interface) · [BuiltCaseExitCondition](#builtcaseexitcondition-interface) · [BuiltSla](#builtsla-interface) · [CaseAppDetailValue](#caseappdetailvalue-type) · [UnresolvedReferenceTaskKind](#unresolvedreferencetaskkind-type) · [ConnectorDescriptor](#connectordescriptor-type) · [RecipientType](#recipienttype-type) · [ActionField](#actionfield-interface) · [TimerSpecData](#timerspecdata-type) · [BuiltTask](#builttask-interface) · [StageExitType](#stageexittype-type) · [SelectNextStageSpec](#selectnextstagespec-interface) · [BuiltEntryCondition](#builtentrycondition-interface) · [BuiltExitCondition](#builtexitcondition-interface) · [ConnectorMeta](#connectormeta-interface) · [ExternalExecutionMode](#externalexecutionmode-type) · [TaskKind](#taskkind-type) · [TaskRef](#taskref-interface) · [ActionSpecData](#actionspecdata-interface) · [ConnectorSpecData](#connectorspecdata-type) · [ExternalTaskSpecData](#externaltaskspecdata-interface) · [TaskInputBinding](#taskinputbinding-interface) · [BuiltTaskEntryCondition](#builttaskentrycondition-interface) · [LookupSpec](#lookupspec-interface) · [LookupStrategy](#lookupstrategy-type)
**Supporting types** — [CaseRuleType](#caseruletype-type) · [CaseRule](#caserule-interface) · [WhenExpression](#whenexpression-interface) · [BuiltEscalation](#builtescalation-interface) · [EscalationRecipient](#escalationrecipient-interface) · [BuiltTrigger](#builttrigger-interface) · [TriggerDescriptor](#triggerdescriptor-type) · [JsonSchemaType](#jsonschematype-interface) · [WaitConnectorSpec](#waitconnectorspec-type) · [EscalationTrigger](#escalationtrigger-type) · [CaseTriggerKind](#casetriggerkind-type) · [TaskOutputBinding](#taskoutputbinding-interface) · [TriggerMeta](#triggermeta-interface) · [TypeDesc](#typedesc-type) · [CaseAppConfig](#caseappconfig-interface) · [CaseLayout](#caselayout-interface) · [CaseRuleGrid](#caserulegrid-type) · [BuiltCase](#builtcase-interface) · [WaitConnectorPlaceholderSpec](#waitconnectorplaceholderspec-interface) · [LookupToken](#lookuptoken-interface) · [EventFilter](#eventfilter-type) · [CaseAppSection](#caseappsection-interface) · [CaseNodeLayout](#casenodelayout-interface) · [BuiltStage](#builtstage-interface) · [CaseRuleInput](#caseruleinput-type) · [SlaUnit](#slaunit-type) · [CaseVarDecl](#casevardecl-interface) · [BuiltCaseExitCondition](#builtcaseexitcondition-interface) · [BuiltSla](#builtsla-interface) · [CaseAppDetailValue](#caseappdetailvalue-type) · [UnresolvedReferenceTaskKind](#unresolvedreferencetaskkind-type) · [ConnectorDescriptor](#connectordescriptor-type) · [RecipientType](#recipienttype-type) · [ActionField](#actionfield-interface) · [TimerSpecData](#timerspecdata-type) · [BuiltTask](#builttask-interface) · [StageExitType](#stageexittype-type) · [SelectNextStageSpec](#selectnextstagespec-interface) · [BuiltEntryCondition](#builtentrycondition-interface) · [BuiltExitCondition](#builtexitcondition-interface) · [ConnectorMeta](#connectormeta-interface) · [ExternalExecutionMode](#externalexecutionmode-type) · [TaskKind](#taskkind-type) · [TaskRef](#taskref-interface) · [ActionSpecData](#actionspecdata-interface) · [ConnectorSpecData](#connectorspecdata-type) · [ExternalTaskSpecData](#externaltaskspecdata-interface) · [TaskInputBinding](#taskinputbinding-interface) · [BuiltTaskEntryCondition](#builttaskentrycondition-interface) · [LookupSpec](#lookupspec-interface) · [LookupStrategy](#lookupstrategy-type)

## rule (function)

Expand Down Expand Up @@ -497,7 +497,7 @@ export interface EventSubscription {
* bound connection (`uip is triggers describe <key> <EVENT> <object>
* --connection-id <id>`).
*/
where?: Record<string, string>;
where?: Record<string, string | LookupToken>;
/**
* The OBJECT a GENERIC event watches (a Data Fabric entity, a Salesforce or
* ServiceNow object, a Jira record type). Required for such an event, refused
Expand Down Expand Up @@ -529,7 +529,9 @@ export interface TriggerOptions<W = Record<string, string>> {
* registers. Loose offline; for Outlook `email-received` that is
* `{ parentFolderId: '<mail folder id>' }`.
*/
where?: W;
where?: {
[K in keyof W]?: W[K] | LookupToken;
};
/**
* The OBJECT a GENERIC event watches — the one thing its node type does not
* say. `record-created` / `record-updated` on Data Fabric, Salesforce,
Expand Down Expand Up @@ -834,6 +836,19 @@ export interface WaitConnectorPlaceholderSpec {
}
````

## LookupToken (interface)

````ts
export interface LookupToken {
readonly __lookup: {
readonly nodeType: string;
readonly field: string;
readonly by: string;
readonly value: unknown;
};
}
````

## EventFilter (type)

````ts
Expand Down
Loading
Loading