@uipath/case-tool 1.203.0-preview.205 → 1.204.0-preview.206
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/README.md +6 -1
- package/dist/THIRD-PARTY-NOTICES.md +48 -9
- package/dist/authoring-0hr88kff.js +623 -0
- package/dist/{case-api-v6cjyrfw.js → case-api-gdaj9469.js} +5 -5
- package/dist/case-bindings-service-c2mze9vj.js +476 -0
- package/dist/{case-debug-studio-web-service-shg84pn8.js → case-debug-studio-web-service-cc0vj7md.js} +11 -10
- package/dist/case-described-io-service-cpe5h2ks.js +132 -0
- package/dist/{case-format-service-q345a2fd.js → case-format-service-qwyjyt0y.js} +2 -2
- package/dist/{case-pack-service-29rza2q2.js → case-pack-service-47yrvmg0.js} +11 -11
- package/dist/case-shape-reader-mw58avr0.js +13 -0
- package/dist/case-splice-service-9zvw19ca.js +312 -0
- package/dist/{case-validate-service-2n2bqc1g.js → case-validate-service-vrvx19c1.js} +415 -1449
- package/dist/{connector-enrichment-service-h662r92z.js → connector-enrichment-service-rg87npf0.js} +20 -18
- package/dist/{connector-lookup-service-y7x6xsc6.js → connector-lookup-service-c49pvfwb.js} +7 -7
- package/dist/{connector-task-spec-qm6q8qma.js → connector-task-spec-t3tjeeqt.js} +86 -26
- package/dist/{debug-service-8x087xxt.js → debug-service-vf5mw0nr.js} +3 -3
- package/dist/{embedded-file-reader-0sjt4nkj.js → embedded-file-reader-v8c2yj2a.js} +2 -2
- package/dist/{enrichment-service-7vbxcwge.js → enrichment-service-78b0gqck.js} +8 -7
- package/dist/index-hhsf00x8.js +15 -0
- package/dist/{index-fz4ttsde.js → index-j2r3jb6c.js} +5 -3
- package/dist/{index-jxj2jz45.js → index-rgw7caht.js} +416 -87
- package/dist/{index-k4xz16db.js → index-wmffgzmr.js} +12522 -7316
- package/dist/{index-va9sm89y.js → index-ynnr55wk.js} +59 -27
- package/dist/index.js +15 -11
- package/dist/{input-reader-pnh948bq.js → input-reader-bb0ptk2v.js} +2 -2
- package/dist/migration-diagnosis-ag2sgd1e.js +71 -0
- package/dist/{node-strategy-gc4sg6a2.js → node-strategy-5pz40tee.js} +1 -1
- package/dist/{node-sync-service-mehbp4qq.js → node-sync-service-xw3tpfj5.js} +6 -6
- package/dist/out-target-1f4n9vqb.js +70 -0
- package/dist/{packager-tool-wefb1zw3.js → packager-tool-0p3td5zv.js} +8 -7
- package/dist/packager-tool-21qfsbxn.js +17 -0
- package/dist/{strict-sdd-audit-8e2fh9jg.js → packager-tool-4e56rmwe.js} +2771 -1746
- package/dist/{packager-tool-sfkyb4kz.js → packager-tool-4rqd21wc.js} +194 -2
- package/dist/packager-tool-57pzrd0g.js +32 -0
- package/dist/{packager-tool-kpcjnxd1.js → packager-tool-58kx79ta.js} +586 -113
- package/dist/{packager-tool-hrdan5ms.js → packager-tool-5qghkdd0.js} +2 -2
- package/dist/packager-tool-5qp9xza1.js +10 -0
- package/dist/packager-tool-8a9yqfq7.js +76 -0
- package/dist/{packager-tool-40vq60aa.js → packager-tool-8mpxsyje.js} +4 -4
- package/dist/{packager-tool-e3k5gzd3.js → packager-tool-a6wztj6y.js} +669 -100
- package/dist/{packager-tool-p0zh9hw6.js → packager-tool-ayevyw80.js} +5 -5
- package/dist/packager-tool-b250k6w4.js +75 -0
- package/dist/packager-tool-bfgdz1zh.js +73 -0
- package/dist/{packager-tool-p7jgrm5r.js → packager-tool-cmwets3m.js} +1 -1
- package/dist/{packager-tool-d4sjk46c.js → packager-tool-cv05dwac.js} +18 -21
- package/dist/packager-tool-d7jjng8a.js +21 -0
- package/dist/packager-tool-dthjwajc.js +13 -0
- package/dist/{packager-tool-zcsm7dsj.js → packager-tool-e760vtgg.js} +4 -4
- package/dist/packager-tool-f78ntj5g.js +228 -0
- package/dist/{packager-tool-2xfyykm0.js → packager-tool-ggbvxvey.js} +320 -200
- package/dist/{packager-tool-6karkrc8.js → packager-tool-jx0yq0b5.js} +6 -6
- package/dist/{packager-tool-cg2j4rma.js → packager-tool-kacqd7h7.js} +4 -4
- package/dist/packager-tool-mknccck5.js +24 -0
- package/dist/{packager-tool-sv0d6wb6.js → packager-tool-nj4seavy.js} +7 -3
- package/dist/{packager-tool-adcaxdhs.js → packager-tool-paepfv5d.js} +1 -1
- package/dist/{packager-tool-052kvydg.js → packager-tool-pm646ag4.js} +1 -1
- package/dist/{packager-tool-dd8bq6az.js → packager-tool-rgpdaxbx.js} +548 -108
- package/dist/{packager-tool-8q7vzh65.js → packager-tool-s3e2kepj.js} +455 -13
- package/dist/{packager-tool-r84ng21s.js → packager-tool-sag9gz55.js} +3 -1
- package/dist/{packager-tool-0mj06yen.js → packager-tool-sq931c23.js} +5 -22
- package/dist/{packager-tool-yrsrzz1a.js → packager-tool-v99ygh9f.js} +23 -8
- package/dist/packager-tool-wj9d9mqe.js +267 -0
- package/dist/{packager-tool-hz1mz8fs.js → packager-tool-wjaya2k2.js} +2 -2
- package/dist/packager-tool-xcd87qyx.js +44 -0
- package/dist/{packager-tool-0v3s8r01.js → packager-tool-xdxr3ync.js} +4 -2
- package/dist/{packager-tool-61hxhgeg.js → packager-tool-xkgq5fkf.js} +3 -3
- package/dist/packager-tool.js +6 -6
- package/dist/{project-artifacts-8snev67g.js → project-artifacts-wzrhketn.js} +1 -1
- package/dist/resolved-check-p99hysaw.js +50 -0
- package/dist/{resourcesSyncService-pmfwz9cd.js → resourcesSyncService-1ezvhcbc.js} +25 -18
- package/dist/rule-group-members-zje7n3kf.js +76 -0
- package/dist/sdd-convert-service-gp9733qv.js +1962 -0
- package/dist/{sdd-lookup-x08j9g9m.js → sdd-lookup-vpjej1kt.js} +2 -2
- package/dist/sdd-resolve-service-4hx64x3z.js +288 -0
- package/dist/strict-case-rules-ksy8q7pg.js +731 -0
- package/dist/strict-entry-points-v14d7y50.js +124 -0
- package/dist/strict-sdd-audit-k6hh0mbr.js +23 -0
- package/dist/task-selector-8bjn35dv.js +57 -0
- package/dist/tool.js +15 -11
- package/dist/{trigger-enrichment-service-xexg7qbk.js → trigger-enrichment-service-pjw5ysny.js} +41 -23
- package/package.json +2 -2
- package/dist/authoring-kngaggwm.js +0 -360
- package/dist/case-bindings-service-1wxfghzd.js +0 -240
- package/dist/packager-tool-83qnybab.js +0 -1564
- package/dist/strict-case-rules-x6t0vb40.js +0 -409
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
resolveCaseSchemaVersion
|
|
3
|
+
} from "./packager-tool-57pzrd0g.js";
|
|
4
|
+
import {
|
|
5
|
+
createTaskBindings
|
|
6
|
+
} from "./packager-tool-sq931c23.js";
|
|
7
|
+
import {
|
|
8
|
+
CASE_PLAN_FILENAME,
|
|
9
|
+
buildMinimalCaseDocument
|
|
10
|
+
} from "./packager-tool-xcd87qyx.js";
|
|
11
|
+
import {
|
|
3
12
|
prefixedId
|
|
4
|
-
} from "./packager-tool-
|
|
13
|
+
} from "./packager-tool-mknccck5.js";
|
|
5
14
|
import {
|
|
6
15
|
DEFAULT_TRIGGER_ID,
|
|
7
16
|
DEFAULT_TRIGGER_LABEL,
|
|
@@ -20,18 +29,18 @@ import {
|
|
|
20
29
|
remapBindingRefs,
|
|
21
30
|
requireStageNode,
|
|
22
31
|
requireTask
|
|
23
|
-
} from "./packager-tool-
|
|
32
|
+
} from "./packager-tool-nj4seavy.js";
|
|
24
33
|
import {
|
|
25
34
|
registerSharedIncidentCommands,
|
|
26
35
|
registerSharedInstanceCommands,
|
|
27
36
|
registerSharedProcessCommands,
|
|
28
37
|
registerSharedProcessesCommands
|
|
29
|
-
} from "./packager-tool-
|
|
38
|
+
} from "./packager-tool-kacqd7h7.js";
|
|
30
39
|
import {
|
|
31
40
|
GET_SEARCHABLE_TYPES,
|
|
32
41
|
RESOURCE_TYPES,
|
|
33
42
|
TYPECACHE_INDEX_TYPES
|
|
34
|
-
} from "./packager-tool-
|
|
43
|
+
} from "./packager-tool-sag9gz55.js";
|
|
35
44
|
import {
|
|
36
45
|
VALID_PROJECT_NAME_REGEX,
|
|
37
46
|
formatTraceLine
|
|
@@ -43,15 +52,14 @@ import {
|
|
|
43
52
|
catchError,
|
|
44
53
|
createHiddenDeprecatedTenantOption,
|
|
45
54
|
instructionsFor,
|
|
46
|
-
isPreviewBuild,
|
|
47
55
|
logger,
|
|
48
56
|
mapPackageMetadataOptions,
|
|
49
57
|
processContext,
|
|
50
58
|
registerPackageMetadataOptions
|
|
51
|
-
} from "./packager-tool-
|
|
59
|
+
} from "./packager-tool-58kx79ta.js";
|
|
52
60
|
import {
|
|
53
61
|
getFileSystem
|
|
54
|
-
} from "./packager-tool-
|
|
62
|
+
} from "./packager-tool-xdxr3ync.js";
|
|
55
63
|
import {
|
|
56
64
|
__require
|
|
57
65
|
} from "./packager-tool-1yh8g550.js";
|
|
@@ -60,7 +68,7 @@ var package_default = {
|
|
|
60
68
|
name: "@uipath/case-tool",
|
|
61
69
|
author: "UiPath",
|
|
62
70
|
license: "SEE LICENSE IN LICENSE.txt",
|
|
63
|
-
version: "1.
|
|
71
|
+
version: "1.204.0-preview.206",
|
|
64
72
|
description: "Manage Case Management instances, processes, and incidents.",
|
|
65
73
|
private: false,
|
|
66
74
|
repository: {
|
|
@@ -98,7 +106,7 @@ var package_default = {
|
|
|
98
106
|
devDependencies: {
|
|
99
107
|
"@uipath/auth": "workspace:*",
|
|
100
108
|
"@uipath/builder-sdk": "workspace:*",
|
|
101
|
-
"@uipath/case-schema": "
|
|
109
|
+
"@uipath/case-schema": "0.1147.0",
|
|
102
110
|
"@uipath/common": "workspace:*",
|
|
103
111
|
"@uipath/filesystem": "workspace:*",
|
|
104
112
|
"@uipath/integrationservice-sdk": "workspace:*",
|
|
@@ -131,11 +139,13 @@ var CASE_BINDINGS_SYNC_EXAMPLES = [
|
|
|
131
139
|
];
|
|
132
140
|
var registerBindingsCommand = (program) => {
|
|
133
141
|
const bindings = program.command("bindings").description("Generate the bindings_v2.json sidecar from a case plan. Required input to 'uip solution resources refresh' for solutions authored without opening Studio Web.").addHelpText("after", `
|
|
134
|
-
The sidecar is a pure derivation of the case plan
|
|
135
|
-
'
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
142
|
+
The sidecar is a pure derivation of the case plan: the 'name' and
|
|
143
|
+
'folderPath' bindings that share a resourceKey collapse into one entry keyed
|
|
144
|
+
by that resourceKey, each distinct connection collapses the same way, and each
|
|
145
|
+
connector start trigger adds an 'EventTrigger' entry (and a 'Property' entry
|
|
146
|
+
for its parameters) so the trigger is created on deploy. The only other file
|
|
147
|
+
read is 'entry-points.json' beside the case plan, for each trigger's entry
|
|
148
|
+
point id — no network call, no registry file.
|
|
139
149
|
|
|
140
150
|
Generate it rather than writing it by hand. The consumer deserializes the
|
|
141
151
|
on-disk 'key' field, so an entry written as 'resourceKey' has no identity and
|
|
@@ -145,7 +155,7 @@ invisible to 'uip solution resources refresh'.
|
|
|
145
155
|
Subcommands:
|
|
146
156
|
sync Write 'bindings_v2.json' next to a case plan.`);
|
|
147
157
|
bindings.command("sync").description("Derive bindings_v2.json from a case plan and write it into the same directory.").argument("<file>", "Path to the case plan JSON file. The output 'bindings_v2.json' is written next to it, overwriting any existing file.").examples(CASE_BINDINGS_SYNC_EXAMPLES).trackedAction(processContext, async (file) => {
|
|
148
|
-
const { syncCaseBindings } = await import("./case-bindings-service-
|
|
158
|
+
const { syncCaseBindings } = await import("./case-bindings-service-c2mze9vj.js");
|
|
149
159
|
const [error, result] = await catchError(syncCaseBindings(file));
|
|
150
160
|
if (error) {
|
|
151
161
|
OutputFormatter.error({
|
|
@@ -527,40 +537,6 @@ var registerCaseExitConditionsCommand = (program) => {
|
|
|
527
537
|
});
|
|
528
538
|
};
|
|
529
539
|
|
|
530
|
-
// src/utils/case-document.ts
|
|
531
|
-
var CASE_SCHEMA_VERSION = "30.0.0";
|
|
532
|
-
var CASE_PLAN_FILENAME = "caseplan.json";
|
|
533
|
-
function buildMinimalCaseDocument(options) {
|
|
534
|
-
return {
|
|
535
|
-
id: prefixedId("case-", 10),
|
|
536
|
-
name: options.name,
|
|
537
|
-
version: CASE_SCHEMA_VERSION,
|
|
538
|
-
...options.description !== undefined && {
|
|
539
|
-
description: options.description
|
|
540
|
-
},
|
|
541
|
-
bindings: [],
|
|
542
|
-
variables: { inputOutputs: [] },
|
|
543
|
-
metadata: {
|
|
544
|
-
caseIdentifier: options.caseIdentifier ?? options.name,
|
|
545
|
-
caseAppEnabled: options.caseAppEnabled ?? false,
|
|
546
|
-
caseIdentifierType: options.identifierType ?? "constant",
|
|
547
|
-
publishVersion: 2
|
|
548
|
-
},
|
|
549
|
-
nodes: [
|
|
550
|
-
{
|
|
551
|
-
id: DEFAULT_TRIGGER_ID,
|
|
552
|
-
type: "uipath.case.trigger",
|
|
553
|
-
data: {
|
|
554
|
-
typeVersion: "1.0.0",
|
|
555
|
-
display: { label: DEFAULT_TRIGGER_LABEL },
|
|
556
|
-
inputs: { serviceType: "None" }
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
],
|
|
560
|
-
edges: []
|
|
561
|
-
};
|
|
562
|
-
}
|
|
563
|
-
|
|
564
540
|
// src/commands/cases.ts
|
|
565
541
|
var CASES_ADD_EXAMPLES = [
|
|
566
542
|
{
|
|
@@ -576,7 +552,7 @@ var CASES_ADD_EXAMPLES = [
|
|
|
576
552
|
CaseIdentifierType: "constant",
|
|
577
553
|
CaseAppEnabled: false,
|
|
578
554
|
TriggerId: DEFAULT_TRIGGER_ID,
|
|
579
|
-
Version: "
|
|
555
|
+
Version: "32.0.3"
|
|
580
556
|
}
|
|
581
557
|
}
|
|
582
558
|
}
|
|
@@ -649,7 +625,10 @@ var registerCasesCommand = (program) => {
|
|
|
649
625
|
processContext.exit(1);
|
|
650
626
|
return;
|
|
651
627
|
}
|
|
652
|
-
const schema = buildMinimalCaseDocument(
|
|
628
|
+
const schema = buildMinimalCaseDocument({
|
|
629
|
+
...options,
|
|
630
|
+
schemaVersion: await resolveCaseSchemaVersion()
|
|
631
|
+
});
|
|
653
632
|
const triggerId = schema.nodes.find(isAnyTriggerNode)?.id;
|
|
654
633
|
const [writeError] = await catchError(writeSchema(options.file, schema));
|
|
655
634
|
if (writeError) {
|
|
@@ -780,7 +759,7 @@ var CASE_DEBUG_EXAMPLES = [
|
|
|
780
759
|
];
|
|
781
760
|
function registerDebugCommand(program) {
|
|
782
761
|
program.command("debug").description("Debug a case project by uploading to Studio Web and running a debug session").argument("<project-path>", "Path to the case project directory (must contain project.uiproj)").option("--folder-id <id>", "Orchestrator folder ID (OrganizationUnitId). Auto-detected if not provided.").option("--poll-interval <ms>", "Polling interval in milliseconds", "2000").option("--login-validity <minutes>", "Minimum minutes before token expiration to trigger a refresh (default: 10)", parseInt, 10).examples(CASE_DEBUG_EXAMPLES).trackedAction(processContext, async (projectPath, options) => {
|
|
783
|
-
const { getLoginStatusAsync } = await import("./index-
|
|
762
|
+
const { getLoginStatusAsync } = await import("./index-j2r3jb6c.js");
|
|
784
763
|
const [loginError, loginStatus] = await catchError(getLoginStatusAsync({
|
|
785
764
|
ensureTokenValidityMinutes: options.loginValidity
|
|
786
765
|
}));
|
|
@@ -883,8 +862,8 @@ function registerDebugCommand(program) {
|
|
|
883
862
|
logger.info(` Tenant: ${tenantName} (${tenantId})`);
|
|
884
863
|
logger.info(` Base URL: ${baseUrl}`);
|
|
885
864
|
const pollInterval = parseInt(options.pollInterval || "2000", 10);
|
|
886
|
-
const { CaseDebugStudioWebService } = await import("./case-debug-studio-web-service-
|
|
887
|
-
const { DebugPollTimeoutError, buildPollTimeoutFailureOutput } = await import("./debug-service-
|
|
865
|
+
const { CaseDebugStudioWebService } = await import("./case-debug-studio-web-service-cc0vj7md.js");
|
|
866
|
+
const { DebugPollTimeoutError, buildPollTimeoutFailureOutput } = await import("./debug-service-vf5mw0nr.js");
|
|
888
867
|
const service = new CaseDebugStudioWebService;
|
|
889
868
|
logger.info(`Starting Studio Web debug session for: ${projectPath}`);
|
|
890
869
|
const [executeError, result] = await catchError(service.executeProjectViaStudioWeb(projectPath, studioWebConfig, {
|
|
@@ -910,7 +889,7 @@ function registerDebugCommand(program) {
|
|
|
910
889
|
const {
|
|
911
890
|
buildSolutionUploadFailureOutput,
|
|
912
891
|
isSolutionUploadHttpError
|
|
913
|
-
} = await import("./index-
|
|
892
|
+
} = await import("./index-ynnr55wk.js");
|
|
914
893
|
if (isSolutionUploadHttpError(executeError)) {
|
|
915
894
|
OutputFormatter.error(buildSolutionUploadFailureOutput(executeError, {
|
|
916
895
|
subject: "case",
|
|
@@ -1025,7 +1004,7 @@ function requireEdge(schema, edgeId) {
|
|
|
1025
1004
|
}
|
|
1026
1005
|
function isTriggerSource(schema, sourceId) {
|
|
1027
1006
|
const sourceNode = schema.nodes.find((n) => n.id === sourceId);
|
|
1028
|
-
return sourceNode
|
|
1007
|
+
return sourceNode !== undefined && isAnyTriggerNode(sourceNode);
|
|
1029
1008
|
}
|
|
1030
1009
|
var registerEdgesCommand = (program) => {
|
|
1031
1010
|
const edges = program.command("edges").description("Manage edges within a case management definition JSON file");
|
|
@@ -1256,7 +1235,7 @@ var CASE_FORMAT_EXAMPLES = [
|
|
|
1256
1235
|
];
|
|
1257
1236
|
var registerFormatCommand = (program) => {
|
|
1258
1237
|
program.command("format").description("Rewrite a case plan JSON file pretty-printed (2-space indent, one key per line) so it can be patched with a file-edit tool.").argument("<file>", "Path to the case plan JSON file, rewritten in place").examples(CASE_FORMAT_EXAMPLES).trackedAction(processContext, async (file) => {
|
|
1259
|
-
const { formatCasePlan } = await import("./case-format-service-
|
|
1238
|
+
const { formatCasePlan } = await import("./case-format-service-qwyjyt0y.js");
|
|
1260
1239
|
const [error, result] = await catchError(formatCasePlan(file));
|
|
1261
1240
|
if (error) {
|
|
1262
1241
|
OutputFormatter.error({
|
|
@@ -1319,7 +1298,7 @@ var initCaseProject = async (name, options) => {
|
|
|
1319
1298
|
throw new Error(`Invalid project name "${name}". Name can only contain letters, numbers, underscores (_), and hyphens (-).`);
|
|
1320
1299
|
}
|
|
1321
1300
|
const fs = getFileSystem();
|
|
1322
|
-
const { prepareProjectLocation, tryRegisterProjectInParentSolution } = await import("./index-
|
|
1301
|
+
const { prepareProjectLocation, tryRegisterProjectInParentSolution } = await import("./index-ynnr55wk.js");
|
|
1323
1302
|
const { projectDir, autoCreatedSolution } = await prepareProjectLocation(fs, fs.path.resolve(name), name, { skipRegistration: options.skipSolutionRegistration === true });
|
|
1324
1303
|
const projectDirExists = await fs.stat(projectDir).then(() => true).catch((err) => {
|
|
1325
1304
|
const code = err instanceof Error ? err.code : undefined;
|
|
@@ -1406,13 +1385,16 @@ var initCaseProject = async (name, options) => {
|
|
|
1406
1385
|
const casePlanPath = fs.path.join(projectDir, CASE_PLAN_FILENAME);
|
|
1407
1386
|
const casePlanExists = await fs.exists(casePlanPath);
|
|
1408
1387
|
if (!casePlanExists) {
|
|
1409
|
-
await fs.writeFile(casePlanPath, `${JSON.stringify(buildMinimalCaseDocument({
|
|
1388
|
+
await fs.writeFile(casePlanPath, `${JSON.stringify(buildMinimalCaseDocument({
|
|
1389
|
+
name,
|
|
1390
|
+
schemaVersion: await resolveCaseSchemaVersion()
|
|
1391
|
+
}), null, 4)}
|
|
1410
1392
|
`);
|
|
1411
1393
|
}
|
|
1412
1394
|
const solutionRegistration = await tryRegisterProjectInParentSolution(fs, projectDir, { skipRegistration: options.skipSolutionRegistration === true });
|
|
1413
1395
|
let projectArtifacts;
|
|
1414
1396
|
if ((solutionRegistration.Status === "Registered" || solutionRegistration.Status === "AlreadyRegistered") && solutionRegistration.Solution && solutionRegistration.ProjectId) {
|
|
1415
|
-
const { ensureProjectArtifacts } = await import("./project-artifacts-
|
|
1397
|
+
const { ensureProjectArtifacts } = await import("./project-artifacts-wzrhketn.js");
|
|
1416
1398
|
projectArtifacts = await ensureProjectArtifacts({
|
|
1417
1399
|
solutionDir: fs.path.dirname(solutionRegistration.Solution),
|
|
1418
1400
|
projectId: solutionRegistration.ProjectId,
|
|
@@ -1467,8 +1449,8 @@ var registerInstancesCommand = (program) => {
|
|
|
1467
1449
|
};
|
|
1468
1450
|
|
|
1469
1451
|
// src/commands/job.ts
|
|
1470
|
-
var loadAuth = () => import("./index-
|
|
1471
|
-
var loadCaseApi = () => import("./case-api-
|
|
1452
|
+
var loadAuth = () => import("./index-j2r3jb6c.js");
|
|
1453
|
+
var loadCaseApi = () => import("./case-api-gdaj9469.js");
|
|
1472
1454
|
var CASE_JOB_STATUS_EXAMPLES = [
|
|
1473
1455
|
{
|
|
1474
1456
|
Description: "Get detailed status of a case job",
|
|
@@ -1714,7 +1696,7 @@ var CASE_PACK_EXAMPLES = [
|
|
|
1714
1696
|
var registerPackCommand = (program) => {
|
|
1715
1697
|
const command = program.command("pack").description("Pack a Case project into a .nupkg file").argument("<project-path>", "Path to the Case project directory").argument("<output-path>", "Output directory where the .nupkg will be saved").option("-n, --name <name>", "Package name (default: project folder name)").option("-v, --version <version>", "Package version (default: 1.0.0)", "1.0.0");
|
|
1716
1698
|
registerPackageMetadataOptions(command).examples(CASE_PACK_EXAMPLES).trackedAction(processContext, async (projectPath, outputPath, options) => {
|
|
1717
|
-
const { CasePackService } = await import("./case-pack-service-
|
|
1699
|
+
const { CasePackService } = await import("./case-pack-service-47yrvmg0.js");
|
|
1718
1700
|
const service = new CasePackService;
|
|
1719
1701
|
const [error, result] = await catchError(service.execute(projectPath, {
|
|
1720
1702
|
output: outputPath,
|
|
@@ -1796,8 +1778,8 @@ var CASE_PROCESS_RUN_EXAMPLES = [
|
|
|
1796
1778
|
}
|
|
1797
1779
|
}
|
|
1798
1780
|
];
|
|
1799
|
-
var loadAuth2 = () => import("./index-
|
|
1800
|
-
var loadCaseApi2 = () => import("./case-api-
|
|
1781
|
+
var loadAuth2 = () => import("./index-j2r3jb6c.js");
|
|
1782
|
+
var loadCaseApi2 = () => import("./case-api-gdaj9469.js");
|
|
1801
1783
|
function registerProcessCommand(program) {
|
|
1802
1784
|
const processCmd = program.command("process").description("Manage Case processes");
|
|
1803
1785
|
registerSharedProcessCommands(processCmd, { toolLabel: "Case" });
|
|
@@ -2035,7 +2017,7 @@ function registerProcessCommand(program) {
|
|
|
2035
2017
|
}
|
|
2036
2018
|
inputs = parsed;
|
|
2037
2019
|
} else {
|
|
2038
|
-
const { readStdin } = await import("./input-reader-
|
|
2020
|
+
const { readStdin } = await import("./input-reader-bb0ptk2v.js");
|
|
2039
2021
|
const [stdinError, stdinData] = await catchError(readStdin());
|
|
2040
2022
|
if (!stdinError && stdinData) {
|
|
2041
2023
|
const [parseError, parsed] = await catchError(parseCaseInputs(stdinData));
|
|
@@ -2245,12 +2227,13 @@ var REGISTRY_SEARCH_EXAMPLES = [
|
|
|
2245
2227
|
Filters: null,
|
|
2246
2228
|
Type: null,
|
|
2247
2229
|
ResultCount: 1,
|
|
2230
|
+
Local: false,
|
|
2248
2231
|
Resources: [
|
|
2249
2232
|
{
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2233
|
+
ResourceType: "typecache-activities",
|
|
2234
|
+
Resource: {
|
|
2235
|
+
Name: "InvoiceParser",
|
|
2236
|
+
UiPathActivityTypeId: "a1b2c3d4-0000-0000-0000-000000000001"
|
|
2254
2237
|
}
|
|
2255
2238
|
}
|
|
2256
2239
|
]
|
|
@@ -2266,11 +2249,12 @@ var REGISTRY_LIST_EXAMPLES = [
|
|
|
2266
2249
|
Code: "ResourceListSuccess",
|
|
2267
2250
|
Data: {
|
|
2268
2251
|
ResourcesCount: 128,
|
|
2252
|
+
Local: false,
|
|
2269
2253
|
ResourceTypes: [
|
|
2270
2254
|
{ Type: "typecache-activities", Count: 80 },
|
|
2271
2255
|
{ Type: "typecache-triggers", Count: 48 }
|
|
2272
2256
|
],
|
|
2273
|
-
|
|
2257
|
+
Resources: []
|
|
2274
2258
|
}
|
|
2275
2259
|
}
|
|
2276
2260
|
}
|
|
@@ -2349,7 +2333,7 @@ Subcommands:
|
|
|
2349
2333
|
search Find resources by keyword and/or field filters
|
|
2350
2334
|
get Get full schema for a single resource`);
|
|
2351
2335
|
registry.command("pull").description("Pull and sync data from Case registry").option("-f, --force", "Force refresh, ignore cache").option("-s, --solution-id <solutionId>", "Include the registry of the solution").examples(REGISTRY_PULL_EXAMPLES).trackedAction(processContext, async (options) => {
|
|
2352
|
-
const { pullResources } = await import("./resourcesSyncService-
|
|
2336
|
+
const { pullResources } = await import("./resourcesSyncService-1ezvhcbc.js");
|
|
2353
2337
|
const [mapError, promises] = catchError(() => RESOURCE_TYPES.map((type) => pullResources({
|
|
2354
2338
|
force: options.force,
|
|
2355
2339
|
solutionId: options.solutionId
|
|
@@ -2401,7 +2385,7 @@ Subcommands:
|
|
|
2401
2385
|
processContext.exit(1);
|
|
2402
2386
|
return;
|
|
2403
2387
|
}
|
|
2404
|
-
const { searchResources, searchResourcesWithFilters } = await import("./resourcesSyncService-
|
|
2388
|
+
const { searchResources, searchResourcesWithFilters } = await import("./resourcesSyncService-1ezvhcbc.js");
|
|
2405
2389
|
let searchResult;
|
|
2406
2390
|
if (options.filter) {
|
|
2407
2391
|
const [parseError, filters] = catchError(() => parseFilterString(options.filter));
|
|
@@ -2459,7 +2443,7 @@ Subcommands:
|
|
|
2459
2443
|
});
|
|
2460
2444
|
});
|
|
2461
2445
|
registry.command("list").description("List all resources (use pull to update list)").option("--local", "List only in-solution sibling project resources (requires a .uipx in the current directory, its parent, or grandparent). Skips the tenant cache.").examples(REGISTRY_LIST_EXAMPLES).trackedAction(processContext, async (options) => {
|
|
2462
|
-
const { listLocalResources, listResources } = await import("./resourcesSyncService-
|
|
2446
|
+
const { listLocalResources, listResources } = await import("./resourcesSyncService-1ezvhcbc.js");
|
|
2463
2447
|
let grouped;
|
|
2464
2448
|
if (options.local) {
|
|
2465
2449
|
const [localError, localGrouped] = await catchError(listLocalResources());
|
|
@@ -2506,7 +2490,7 @@ Subcommands:
|
|
|
2506
2490
|
});
|
|
2507
2491
|
});
|
|
2508
2492
|
registry.command("get").description("Get resource(s) by identifier (entityKey or id)").argument("<identifier>", "The entityKey (process-types) or id (action-apps) of the resource").addOption(new Option("-t, --type <type>", `Limit search to a specific resource type (${GET_SEARCHABLE_TYPES.map((t) => t.type).join(", ")})`).choices(GET_SEARCHABLE_TYPES.map((t) => t.type))).option("--connection-id <id>", "Connection ID for connector-specific IS field metadata (custom fields). Only applies to typecache-* activity / trigger results.").option("--local", "Resolve the identifier against in-solution sibling project resources (requires a .uipx in the current directory, its parent, or grandparent). Skips the tenant cache. The identifier is the sibling's resource key or .uipx project Id.").examples(REGISTRY_GET_EXAMPLES).trackedAction(processContext, async (identifier, options) => {
|
|
2509
|
-
const { getResources } = await import("./resourcesSyncService-
|
|
2493
|
+
const { getResources } = await import("./resourcesSyncService-1ezvhcbc.js");
|
|
2510
2494
|
const [error, matches] = await catchError(getResources(identifier, options.type, {
|
|
2511
2495
|
local: options.local
|
|
2512
2496
|
}));
|
|
@@ -2543,11 +2527,11 @@ Subcommands:
|
|
|
2543
2527
|
const id = m.resource.uiPathActivityTypeId;
|
|
2544
2528
|
if (typeof id !== "string")
|
|
2545
2529
|
return m;
|
|
2546
|
-
const { lookupTypeCacheEntry } = await import("./connector-lookup-service-
|
|
2530
|
+
const { lookupTypeCacheEntry } = await import("./connector-lookup-service-c49pvfwb.js");
|
|
2547
2531
|
const [lookupError, lookupResult] = await catchError(lookupTypeCacheEntry(id, m.resourceType));
|
|
2548
2532
|
if (lookupError)
|
|
2549
2533
|
return m;
|
|
2550
|
-
const { enrichConnectorRegistryEntry } = await import("./connector-enrichment-service-
|
|
2534
|
+
const { enrichConnectorRegistryEntry } = await import("./connector-enrichment-service-rg87npf0.js");
|
|
2551
2535
|
const [enrichError, definitions] = await catchError(enrichConnectorRegistryEntry(lookupResult.config, options.connectionId));
|
|
2552
2536
|
if (enrichError || definitions === null)
|
|
2553
2537
|
return m;
|
|
@@ -2573,7 +2557,7 @@ Subcommands:
|
|
|
2573
2557
|
});
|
|
2574
2558
|
});
|
|
2575
2559
|
registry.command("get-connector").description(`Look up a connector activity/trigger from the local TypeCache index. ${OUTPUT_CASING_HINT}`).addOption(new Option("-t, --type <type>", "Resource type").choices([...TYPECACHE_INDEX_TYPES]).makeOptionMandatory()).requiredOption("--activity-type-id <id>", "The uiPathActivityTypeId to look up").examples(REGISTRY_GET_CONNECTOR_EXAMPLES).trackedAction(processContext, async (options) => {
|
|
2576
|
-
const { lookupTypeCacheEntry } = await import("./connector-lookup-service-
|
|
2560
|
+
const { lookupTypeCacheEntry } = await import("./connector-lookup-service-c49pvfwb.js");
|
|
2577
2561
|
const [error, result] = await catchError(lookupTypeCacheEntry(options.activityTypeId, options.type));
|
|
2578
2562
|
if (error) {
|
|
2579
2563
|
OutputFormatter.error({
|
|
@@ -2594,7 +2578,7 @@ Subcommands:
|
|
|
2594
2578
|
}, { preserveDataKeys: VERBATIM_REGISTRY_FIELDS });
|
|
2595
2579
|
});
|
|
2596
2580
|
registry.command("get-connection").description(`Look up a connector and fetch available connections from Integration Service. ${OUTPUT_CASING_HINT}`).addOption(new Option("-t, --type <type>", "Resource type").choices([...TYPECACHE_INDEX_TYPES]).makeOptionMandatory()).requiredOption("--activity-type-id <id>", "The uiPathActivityTypeId to look up").examples(REGISTRY_GET_CONNECTION_EXAMPLES).trackedAction(processContext, async (options) => {
|
|
2597
|
-
const { fetchConnectorConnections, lookupTypeCacheEntry } = await import("./connector-lookup-service-
|
|
2581
|
+
const { fetchConnectorConnections, lookupTypeCacheEntry } = await import("./connector-lookup-service-c49pvfwb.js");
|
|
2598
2582
|
const [lookupError, lookupResult] = await catchError(lookupTypeCacheEntry(options.activityTypeId, options.type));
|
|
2599
2583
|
if (lookupError) {
|
|
2600
2584
|
OutputFormatter.error({
|
|
@@ -2627,6 +2611,399 @@ Subcommands:
|
|
|
2627
2611
|
});
|
|
2628
2612
|
};
|
|
2629
2613
|
|
|
2614
|
+
// src/commands/sdd.ts
|
|
2615
|
+
var reportReadFailure = (file, error) => {
|
|
2616
|
+
OutputFormatter.error({
|
|
2617
|
+
Result: RESULTS.Failure,
|
|
2618
|
+
ErrorCode: "invalid_argument",
|
|
2619
|
+
Retry: "RetryWillNotFix",
|
|
2620
|
+
Message: `Could not read ${file}: ${error?.message ?? "the file is no longer there"}`,
|
|
2621
|
+
Instructions: `Check that ${file} is a readable text file.`
|
|
2622
|
+
});
|
|
2623
|
+
processContext.exit(1);
|
|
2624
|
+
};
|
|
2625
|
+
var reportParseFailure = (file, error) => {
|
|
2626
|
+
OutputFormatter.error({
|
|
2627
|
+
Result: RESULTS.Failure,
|
|
2628
|
+
ErrorCode: "invalid_argument",
|
|
2629
|
+
Retry: "RetryWillNotFix",
|
|
2630
|
+
Message: `Could not parse ${file}: ${error.message}`,
|
|
2631
|
+
Instructions: "The document is read as Markdown. Check that its tables are well formed."
|
|
2632
|
+
});
|
|
2633
|
+
processContext.exit(1);
|
|
2634
|
+
};
|
|
2635
|
+
var SDD_PARSE_EXAMPLES = [
|
|
2636
|
+
{
|
|
2637
|
+
Description: "Read an SDD and print the structured model the --sdd audit checks a caseplan against",
|
|
2638
|
+
Command: "uip maestro case sdd parse sdd.md",
|
|
2639
|
+
Output: {
|
|
2640
|
+
Code: "SddParse",
|
|
2641
|
+
Data: {
|
|
2642
|
+
File: "sdd.md",
|
|
2643
|
+
Model: {
|
|
2644
|
+
stages: [
|
|
2645
|
+
{
|
|
2646
|
+
name: "Stage One",
|
|
2647
|
+
tasks: [
|
|
2648
|
+
{ name: "Wait Timer", type: "wait-for-timer" }
|
|
2649
|
+
],
|
|
2650
|
+
intake: { entryRows: 1, exitRows: 1 }
|
|
2651
|
+
}
|
|
2652
|
+
],
|
|
2653
|
+
triggers: 1,
|
|
2654
|
+
variables: ["invoiceId"],
|
|
2655
|
+
intake: { sawVariableSection: true, parseNotes: [] }
|
|
2656
|
+
}
|
|
2657
|
+
}
|
|
2658
|
+
}
|
|
2659
|
+
}
|
|
2660
|
+
];
|
|
2661
|
+
var SDD_RESOLVE_EXAMPLES = [
|
|
2662
|
+
{
|
|
2663
|
+
Description: "Resolve an SDD's task resources against the pulled registry caches",
|
|
2664
|
+
Command: "uip maestro case sdd resolve sdd.md --out tasks/registry-resolved.json",
|
|
2665
|
+
Output: {
|
|
2666
|
+
Code: "SddResolve",
|
|
2667
|
+
Data: {
|
|
2668
|
+
File: "sdd.md",
|
|
2669
|
+
Out: "tasks/registry-resolved.json",
|
|
2670
|
+
Counts: { tasks: 15, selected: 13, ambiguous: 1, absent: 1 },
|
|
2671
|
+
Unresolved: [
|
|
2672
|
+
{
|
|
2673
|
+
name: "SimpleApprovalApp",
|
|
2674
|
+
taskType: "action",
|
|
2675
|
+
reason: "ambiguous",
|
|
2676
|
+
usages: [
|
|
2677
|
+
{ stage: "Stage 2", task: "Manager Approval" }
|
|
2678
|
+
],
|
|
2679
|
+
creatable: false
|
|
2680
|
+
}
|
|
2681
|
+
]
|
|
2682
|
+
}
|
|
2683
|
+
}
|
|
2684
|
+
}
|
|
2685
|
+
];
|
|
2686
|
+
var SDD_CONVERT_EXAMPLES = [
|
|
2687
|
+
{
|
|
2688
|
+
Description: "Emit a case plan from an SDD, and list what the SDD does not determine",
|
|
2689
|
+
Command: "uip maestro case sdd convert sdd.md --out caseplan.json",
|
|
2690
|
+
Output: {
|
|
2691
|
+
Code: "SddConvert",
|
|
2692
|
+
Data: {
|
|
2693
|
+
File: "sdd.md",
|
|
2694
|
+
Out: "caseplan.json",
|
|
2695
|
+
Derived: { stages: 8, tasks: 15, conditions: 11, variables: 0 },
|
|
2696
|
+
Unresolved: [
|
|
2697
|
+
{
|
|
2698
|
+
kind: "resource-binding",
|
|
2699
|
+
where: "nodes[Stage 1].data.tasks[Analyze Expense Request]",
|
|
2700
|
+
detail: 'a "agent" task runs a tenant resource; its name and folder have to be resolved and bound before the plan can deploy'
|
|
2701
|
+
}
|
|
2702
|
+
]
|
|
2703
|
+
}
|
|
2704
|
+
}
|
|
2705
|
+
}
|
|
2706
|
+
];
|
|
2707
|
+
var registerSddCommand = (program) => {
|
|
2708
|
+
const sdd = program.command("sdd").description("Read and inspect a Solution Design Document (sdd.md) — the document `validate --sdd` audits a case plan against.");
|
|
2709
|
+
sdd.command("parse").description("Print the structured model parsed out of an sdd.md, as JSON. Reads the document only: it audits nothing and needs no case plan. Fields under `intake` describe the read (row counts, whether a section was seen, parser notes) rather than the document.").argument("<file>", "Path to the sdd.md to read").examples(SDD_PARSE_EXAMPLES).trackedAction(processContext, async (file) => {
|
|
2710
|
+
const { getFileSystemAsync } = await import("./index-hhsf00x8.js");
|
|
2711
|
+
const fs = await getFileSystemAsync();
|
|
2712
|
+
if (!await fs.exists(file)) {
|
|
2713
|
+
OutputFormatter.error({
|
|
2714
|
+
Result: RESULTS.Failure,
|
|
2715
|
+
ErrorCode: "invalid_argument",
|
|
2716
|
+
Retry: "RetryWillNotFix",
|
|
2717
|
+
Message: `No such file: ${file}`,
|
|
2718
|
+
Instructions: "Pass the path to an sdd.md. `uip maestro case sdd parse --help` shows an example."
|
|
2719
|
+
});
|
|
2720
|
+
processContext.exit(1);
|
|
2721
|
+
return;
|
|
2722
|
+
}
|
|
2723
|
+
const [readError, text] = await catchError(fs.readFile(file, "utf-8"));
|
|
2724
|
+
if (readError || text === null) {
|
|
2725
|
+
reportReadFailure(file, readError);
|
|
2726
|
+
return;
|
|
2727
|
+
}
|
|
2728
|
+
const { parseSddToJson } = await import("./strict-sdd-audit-k6hh0mbr.js");
|
|
2729
|
+
const [parseError, model] = catchError(() => parseSddToJson(text));
|
|
2730
|
+
if (parseError) {
|
|
2731
|
+
reportParseFailure(file, parseError);
|
|
2732
|
+
return;
|
|
2733
|
+
}
|
|
2734
|
+
OutputFormatter.success({
|
|
2735
|
+
Result: RESULTS.Success,
|
|
2736
|
+
Code: "SddParse",
|
|
2737
|
+
Data: { File: file, Model: model }
|
|
2738
|
+
}, { preserveDataKeys: ["model"] });
|
|
2739
|
+
});
|
|
2740
|
+
sdd.command("resolve").description("Resolve an sdd.md's task resources against the caches `registry pull` wrote. Does the part of the registry gate that has one right answer — which index a task type uses, the exact-name search, the folder narrowing — and reports the part that does not: a name matching several resources is left for a person to choose between, and a name matching none is grouped for one batched question. Reads caches only: no tenant, no network.").argument("<file>", "Path to the sdd.md to resolve").option("--out <file>", "Write the resolved file to this path instead of printing it").examples(SDD_RESOLVE_EXAMPLES).trackedAction(processContext, async (file, options) => {
|
|
2741
|
+
const { getFileSystemAsync } = await import("./index-hhsf00x8.js");
|
|
2742
|
+
const fs = await getFileSystemAsync();
|
|
2743
|
+
if (!await fs.exists(file)) {
|
|
2744
|
+
OutputFormatter.error({
|
|
2745
|
+
Result: RESULTS.Failure,
|
|
2746
|
+
ErrorCode: "invalid_argument",
|
|
2747
|
+
Retry: "RetryWillNotFix",
|
|
2748
|
+
Message: `No such file: ${file}`,
|
|
2749
|
+
Instructions: "Pass the path to an sdd.md. `uip maestro case sdd resolve --help` shows an example."
|
|
2750
|
+
});
|
|
2751
|
+
processContext.exit(1);
|
|
2752
|
+
return;
|
|
2753
|
+
}
|
|
2754
|
+
const [readError, text] = await catchError(fs.readFile(file, "utf-8"));
|
|
2755
|
+
if (readError || text === null) {
|
|
2756
|
+
reportReadFailure(file, readError);
|
|
2757
|
+
return;
|
|
2758
|
+
}
|
|
2759
|
+
const { parseSddToJson } = await import("./strict-sdd-audit-k6hh0mbr.js");
|
|
2760
|
+
const { resolveSddResources } = await import("./sdd-resolve-service-4hx64x3z.js");
|
|
2761
|
+
const [parseError, model] = catchError(() => parseSddToJson(text));
|
|
2762
|
+
if (parseError) {
|
|
2763
|
+
reportParseFailure(file, parseError);
|
|
2764
|
+
return;
|
|
2765
|
+
}
|
|
2766
|
+
const result = await resolveSddResources(model);
|
|
2767
|
+
const counts = {
|
|
2768
|
+
tasks: result.resolved.length,
|
|
2769
|
+
selected: result.resolved.filter((one) => one.selected !== null).length,
|
|
2770
|
+
ambiguous: result.unresolved.filter((one) => one.reason === "ambiguous").length,
|
|
2771
|
+
absent: result.unresolved.filter((one) => one.reason === "absent").length
|
|
2772
|
+
};
|
|
2773
|
+
if (options.out !== undefined) {
|
|
2774
|
+
const payload = {
|
|
2775
|
+
resolved: result.resolved,
|
|
2776
|
+
unresolved: result.unresolved,
|
|
2777
|
+
scope: result.scope
|
|
2778
|
+
};
|
|
2779
|
+
const [writeError] = await catchError(fs.writeFile(options.out, `${JSON.stringify(payload, null, 2)}
|
|
2780
|
+
`));
|
|
2781
|
+
if (writeError) {
|
|
2782
|
+
OutputFormatter.error({
|
|
2783
|
+
Result: RESULTS.Failure,
|
|
2784
|
+
ErrorCode: "unknown_error",
|
|
2785
|
+
Message: `Could not write ${options.out}: ${writeError.message}`,
|
|
2786
|
+
Instructions: "Check that the target directory exists and is writable."
|
|
2787
|
+
});
|
|
2788
|
+
processContext.exit(1);
|
|
2789
|
+
return;
|
|
2790
|
+
}
|
|
2791
|
+
}
|
|
2792
|
+
const { staleCacheWarning } = await import("./sdd-resolve-service-4hx64x3z.js");
|
|
2793
|
+
const warnings = [
|
|
2794
|
+
...result.scope.missingIndexes.map((missing) => `The \`${missing}\` index is not pulled, so tasks needing it were not searched. Run \`uip maestro case registry pull\`.`),
|
|
2795
|
+
staleCacheWarning(result.scope.cache)
|
|
2796
|
+
].filter((line) => line !== undefined);
|
|
2797
|
+
for (const line of warnings)
|
|
2798
|
+
logger.warn(line);
|
|
2799
|
+
OutputFormatter.success({
|
|
2800
|
+
Result: RESULTS.Success,
|
|
2801
|
+
Code: "SddResolve",
|
|
2802
|
+
Data: {
|
|
2803
|
+
File: file,
|
|
2804
|
+
...options.out !== undefined && {
|
|
2805
|
+
Out: options.out
|
|
2806
|
+
},
|
|
2807
|
+
Counts: counts,
|
|
2808
|
+
Scope: result.scope,
|
|
2809
|
+
...warnings.length > 0 && { Warnings: warnings },
|
|
2810
|
+
Unresolved: result.unresolved,
|
|
2811
|
+
...options.out === undefined && {
|
|
2812
|
+
Resolved: result.resolved
|
|
2813
|
+
}
|
|
2814
|
+
}
|
|
2815
|
+
}, {
|
|
2816
|
+
preserveDataKeys: [
|
|
2817
|
+
"resolved",
|
|
2818
|
+
"unresolved",
|
|
2819
|
+
"counts",
|
|
2820
|
+
"scope",
|
|
2821
|
+
"searchQuery",
|
|
2822
|
+
"cacheFile",
|
|
2823
|
+
"taskType",
|
|
2824
|
+
"identifierField"
|
|
2825
|
+
]
|
|
2826
|
+
});
|
|
2827
|
+
});
|
|
2828
|
+
sdd.command("convert").description("Emit a case plan from an sdd.md. Writes only what the document determines and reports what it does not — a resource that has to be resolved against a tenant, a cross-task reference, a connector's connection. The result is checked with `case validate`, not here.").argument("<file>", "Path to the sdd.md to convert").option("--out <file>", "Write the case plan to this path instead of printing it").option("--resolved <file>", "Read a `sdd resolve` file and use it to fill a resource name or folder the document left out").examples(SDD_CONVERT_EXAMPLES).trackedAction(processContext, async (file, options) => {
|
|
2829
|
+
const { getFileSystemAsync } = await import("./index-hhsf00x8.js");
|
|
2830
|
+
const fs = await getFileSystemAsync();
|
|
2831
|
+
if (!await fs.exists(file)) {
|
|
2832
|
+
OutputFormatter.error({
|
|
2833
|
+
Result: RESULTS.Failure,
|
|
2834
|
+
ErrorCode: "invalid_argument",
|
|
2835
|
+
Retry: "RetryWillNotFix",
|
|
2836
|
+
Message: `No such file: ${file}`,
|
|
2837
|
+
Instructions: "Pass the path to an sdd.md. `uip maestro case sdd convert --help` shows an example."
|
|
2838
|
+
});
|
|
2839
|
+
processContext.exit(1);
|
|
2840
|
+
return;
|
|
2841
|
+
}
|
|
2842
|
+
const [readError, text] = await catchError(fs.readFile(file, "utf-8"));
|
|
2843
|
+
if (readError || text === null) {
|
|
2844
|
+
reportReadFailure(file, readError);
|
|
2845
|
+
return;
|
|
2846
|
+
}
|
|
2847
|
+
const { parseSddToJson } = await import("./strict-sdd-audit-k6hh0mbr.js");
|
|
2848
|
+
const { convertSddToCasePlan } = await import("./sdd-convert-service-gp9733qv.js");
|
|
2849
|
+
let resolved;
|
|
2850
|
+
let resolvedEntries = [];
|
|
2851
|
+
if (options.resolved !== undefined) {
|
|
2852
|
+
const [resolvedError, resolvedText] = await catchError(fs.readFile(options.resolved, "utf-8"));
|
|
2853
|
+
if (resolvedError || resolvedText === null) {
|
|
2854
|
+
OutputFormatter.error({
|
|
2855
|
+
Result: RESULTS.Failure,
|
|
2856
|
+
ErrorCode: "invalid_argument",
|
|
2857
|
+
Retry: "RetryWillNotFix",
|
|
2858
|
+
Message: `Could not read ${options.resolved}: ${resolvedError?.message ?? "empty file"}`,
|
|
2859
|
+
Instructions: `Write it with \`uip maestro case sdd resolve ${file} --out ${options.resolved}\` first.`
|
|
2860
|
+
});
|
|
2861
|
+
processContext.exit(1);
|
|
2862
|
+
return;
|
|
2863
|
+
}
|
|
2864
|
+
const [parseError2, parsed] = catchError(() => JSON.parse(resolvedText));
|
|
2865
|
+
if (parseError2 || parsed === null) {
|
|
2866
|
+
OutputFormatter.error({
|
|
2867
|
+
Result: RESULTS.Failure,
|
|
2868
|
+
ErrorCode: "invalid_argument",
|
|
2869
|
+
Retry: "RetryWillNotFix",
|
|
2870
|
+
Message: `${options.resolved} is not valid JSON: ${parseError2?.message ?? "empty"}`,
|
|
2871
|
+
Instructions: `Write it with \`uip maestro case sdd resolve ${file} --out ${options.resolved}\`.`
|
|
2872
|
+
});
|
|
2873
|
+
processContext.exit(1);
|
|
2874
|
+
return;
|
|
2875
|
+
}
|
|
2876
|
+
const entries = parsed.resolved;
|
|
2877
|
+
if (entries === undefined) {
|
|
2878
|
+
OutputFormatter.error({
|
|
2879
|
+
Result: RESULTS.Failure,
|
|
2880
|
+
ErrorCode: "invalid_argument",
|
|
2881
|
+
Retry: "RetryWillNotFix",
|
|
2882
|
+
Message: `${options.resolved} has no \`resolved\` array, so there is nothing to read task resources from.`,
|
|
2883
|
+
Instructions: `Write it with \`uip maestro case sdd resolve ${file} --out ${options.resolved}\`, which writes \`resolved\` as an array of one entry per task.`
|
|
2884
|
+
});
|
|
2885
|
+
processContext.exit(1);
|
|
2886
|
+
return;
|
|
2887
|
+
}
|
|
2888
|
+
if (!Array.isArray(entries)) {
|
|
2889
|
+
OutputFormatter.error({
|
|
2890
|
+
Result: RESULTS.Failure,
|
|
2891
|
+
ErrorCode: "invalid_argument",
|
|
2892
|
+
Retry: "RetryWillNotFix",
|
|
2893
|
+
Message: `${options.resolved} has a \`resolved\` key that is not an array, so there is nothing to read task resources from.`,
|
|
2894
|
+
Instructions: `Write it with \`uip maestro case sdd resolve ${file} --out ${options.resolved}\`, which writes \`resolved\` as an array of one entry per task.`
|
|
2895
|
+
});
|
|
2896
|
+
processContext.exit(1);
|
|
2897
|
+
return;
|
|
2898
|
+
}
|
|
2899
|
+
const byTask = new Map;
|
|
2900
|
+
const malformed = (entries ?? []).findIndex((entry) => entry === null || typeof entry !== "object" || Array.isArray(entry));
|
|
2901
|
+
if (malformed !== -1) {
|
|
2902
|
+
OutputFormatter.error({
|
|
2903
|
+
Result: RESULTS.Failure,
|
|
2904
|
+
ErrorCode: "invalid_argument",
|
|
2905
|
+
Retry: "RetryWillNotFix",
|
|
2906
|
+
Message: `${options.resolved} has a \`resolved\` entry at index ${malformed} that is not an object, so there is no task to read a resource for.`,
|
|
2907
|
+
Instructions: `Write it with \`uip maestro case sdd resolve ${file} --out ${options.resolved}\`, which writes each entry as an object carrying \`stage\`, \`task\` and \`selected\`.`
|
|
2908
|
+
});
|
|
2909
|
+
processContext.exit(1);
|
|
2910
|
+
return;
|
|
2911
|
+
}
|
|
2912
|
+
const { isDeferredEntry } = await import("./resolved-check-p99hysaw.js");
|
|
2913
|
+
const deferred = new Set;
|
|
2914
|
+
for (const entry of entries ?? []) {
|
|
2915
|
+
if (isDeferredEntry(entry)) {
|
|
2916
|
+
deferred.add(`${String(entry.stage ?? "")}\x01${String(entry.task ?? "")}`);
|
|
2917
|
+
continue;
|
|
2918
|
+
}
|
|
2919
|
+
const picked = entry.selected;
|
|
2920
|
+
if (picked === null || picked === undefined || typeof picked.name !== "string" || picked.name === "") {
|
|
2921
|
+
continue;
|
|
2922
|
+
}
|
|
2923
|
+
byTask.set(`${String(entry.stage ?? "")}\x01${String(entry.task ?? "")}`, {
|
|
2924
|
+
name: picked.name,
|
|
2925
|
+
...typeof picked.folder === "string" && {
|
|
2926
|
+
folder: picked.folder
|
|
2927
|
+
}
|
|
2928
|
+
});
|
|
2929
|
+
}
|
|
2930
|
+
resolved = { byTask, deferred };
|
|
2931
|
+
resolvedEntries = entries ?? [];
|
|
2932
|
+
}
|
|
2933
|
+
const [parseError, model] = catchError(() => parseSddToJson(text));
|
|
2934
|
+
if (parseError) {
|
|
2935
|
+
reportParseFailure(file, parseError);
|
|
2936
|
+
return;
|
|
2937
|
+
}
|
|
2938
|
+
const { staleResolvedEntry } = await import("./resolved-check-p99hysaw.js");
|
|
2939
|
+
const stale = staleResolvedEntry(model, resolvedEntries);
|
|
2940
|
+
if (stale !== undefined) {
|
|
2941
|
+
OutputFormatter.error({
|
|
2942
|
+
Result: RESULTS.Failure,
|
|
2943
|
+
ErrorCode: "invalid_argument",
|
|
2944
|
+
Retry: "RetryWillNotFix",
|
|
2945
|
+
Message: `${options.resolved} does not match ${file}: ${stale}.`,
|
|
2946
|
+
Instructions: `Resolve this SDD again: \`uip maestro case sdd resolve ${file} --out ${options.resolved}\`.`
|
|
2947
|
+
});
|
|
2948
|
+
processContext.exit(1);
|
|
2949
|
+
return;
|
|
2950
|
+
}
|
|
2951
|
+
const fromFile = fs.path.basename(file).replace(/\.md$/i, "").replace(/^sdd[-_.]?/i, "");
|
|
2952
|
+
const fallback = fromFile === "" ? "case" : fromFile;
|
|
2953
|
+
const result = convertSddToCasePlan(model, {
|
|
2954
|
+
name: model.caseName ?? fallback,
|
|
2955
|
+
schemaVersion: await resolveCaseSchemaVersion(),
|
|
2956
|
+
...model.caseDescription !== undefined && {
|
|
2957
|
+
description: model.caseDescription
|
|
2958
|
+
},
|
|
2959
|
+
...resolved !== undefined && { resolved }
|
|
2960
|
+
});
|
|
2961
|
+
if (options.out !== undefined) {
|
|
2962
|
+
const { correctedConvert, projectsBelowOut } = await import("./out-target-1f4n9vqb.js");
|
|
2963
|
+
const meant = await projectsBelowOut(fs, options.out);
|
|
2964
|
+
if (meant.length > 0) {
|
|
2965
|
+
const corrected = meant.length === 1 ? correctedConvert(file, meant[0], options.resolved) : undefined;
|
|
2966
|
+
OutputFormatter.error({
|
|
2967
|
+
Result: RESULTS.Failure,
|
|
2968
|
+
ErrorCode: "invalid_argument",
|
|
2969
|
+
Retry: "RetryWillNotFix",
|
|
2970
|
+
Message: `${options.out} is not in a case project, and the folder holding it contains ${meant.length === 1 ? "one" : `${meant.length}`}: ${meant.join(", ")}. Writing here leaves a second case plan beside the project's.`,
|
|
2971
|
+
Instructions: meant.length === 1 ? corrected === undefined ? `Pass \`--out\` as ${meant[0]}, the caseplan.json inside the project.` : `Write into the project: \`${corrected}\`.` : `Pass \`--out\` as the caseplan.json path inside the project you mean — one of ${meant.join(", ")}.`
|
|
2972
|
+
});
|
|
2973
|
+
processContext.exit(1);
|
|
2974
|
+
return;
|
|
2975
|
+
}
|
|
2976
|
+
const [writeError] = await catchError(fs.writeFile(options.out, `${JSON.stringify(result.document, null, 2)}
|
|
2977
|
+
`));
|
|
2978
|
+
if (writeError) {
|
|
2979
|
+
OutputFormatter.error({
|
|
2980
|
+
Result: RESULTS.Failure,
|
|
2981
|
+
ErrorCode: "unknown_error",
|
|
2982
|
+
Message: `Could not write ${options.out}: ${writeError.message}`,
|
|
2983
|
+
Instructions: "Check that the target directory exists and is writable."
|
|
2984
|
+
});
|
|
2985
|
+
processContext.exit(1);
|
|
2986
|
+
return;
|
|
2987
|
+
}
|
|
2988
|
+
}
|
|
2989
|
+
OutputFormatter.success({
|
|
2990
|
+
Result: RESULTS.Success,
|
|
2991
|
+
Code: "SddConvert",
|
|
2992
|
+
Data: {
|
|
2993
|
+
File: file,
|
|
2994
|
+
...options.out !== undefined && {
|
|
2995
|
+
Out: options.out
|
|
2996
|
+
},
|
|
2997
|
+
Derived: result.derived,
|
|
2998
|
+
Unresolved: result.unresolved,
|
|
2999
|
+
...options.out === undefined && {
|
|
3000
|
+
Document: result.document
|
|
3001
|
+
}
|
|
3002
|
+
}
|
|
3003
|
+
}, { preserveDataKeys: ["document", "unresolved", "derived"] });
|
|
3004
|
+
});
|
|
3005
|
+
};
|
|
3006
|
+
|
|
2630
3007
|
// src/commands/sla.ts
|
|
2631
3008
|
var VALID_UNITS = ["min", "h", "d", "w", "m"];
|
|
2632
3009
|
var SLA_SET_EXAMPLES = [
|
|
@@ -3341,8 +3718,8 @@ var SPEC_EXAMPLES = [
|
|
|
3341
3718
|
}
|
|
3342
3719
|
},
|
|
3343
3720
|
{
|
|
3344
|
-
Description: "Get the full spec for a curated connector trigger (Email Received)",
|
|
3345
|
-
Command: "uip maestro case spec --type trigger --activity-type-id 7dc57f24-894c-5ae2-a902-66056fa40609 --connection-id fc82e610-c454-4bc7-a1a5-b5aa529d1ba6",
|
|
3721
|
+
Description: "Get the full spec for a curated connector start trigger (Email Received)",
|
|
3722
|
+
Command: "uip maestro case spec --type trigger --trigger-kind start --activity-type-id 7dc57f24-894c-5ae2-a902-66056fa40609 --connection-id fc82e610-c454-4bc7-a1a5-b5aa529d1ba6",
|
|
3346
3723
|
Output: {
|
|
3347
3724
|
Code: "ConnectorTaskSpec",
|
|
3348
3725
|
Data: {
|
|
@@ -3367,7 +3744,7 @@ var SPEC_EXAMPLES = [
|
|
|
3367
3744
|
}
|
|
3368
3745
|
];
|
|
3369
3746
|
var registerSpecCommand = (program) => {
|
|
3370
|
-
program.command("spec").description(`Generate a normalized ConnectorTaskSpec — a one-stop description of everything a consumer needs to construct a runnable Integration Service activity or trigger task. Looks up the typeId in the local TypeCache, lists IS connections for the connector, and fetches IS metadata. ${OUTPUT_CASING_HINT}`).addOption(new Option("--type <type>", "TypeCache to look up").choices(["activity", "trigger"]).makeOptionMandatory()).requiredOption("--activity-type-id <uuid>", "Studio Web uiPathActivityTypeId — found via 'uip maestro case registry pull' + reading typecache-{activities,triggers}-index.json or 'uip maestro case registry get-connector'").requiredOption("--connection-id <id>", "Connection UUID. List candidates with `uip maestro case registry get-connection --type typecache-{activities,triggers} --activity-type-id <uuid>` and pick one before invoking spec.").option("--object-name <name>", "Override the typecache objectName. Required for entity-typed Curated triggers whose typecache stores a placeholder (e.g. Data Service `{tenantEntityName|folderEntityName}` — pick a real entity name).").option("--skip-case-shape", "Omit `caseShape` (`inputs[]`, `outputs[]`, `context[]`) from the response. Use during the planning phase when the caller only needs the connector contract (`inputs.*[?required]`, `references[*].discoverCommand`, `outputs.responseFields`). Re-run without the flag during implementation to get the full caseShape scaffold. Mutually exclusive with --input-details.").option("--input-details <json>", "JSON values to fold into the generated `caseShape`. Activity accepts {bodyParameters, queryParameters, pathParameters, filter}; trigger accepts {eventParameters, filter}. See `packages/case-tool/docs/spec-input-details.md` for the full reference. Mutually exclusive with --skip-case-shape.").examples(SPEC_EXAMPLES).trackedAction(processContext, async (options) => {
|
|
3747
|
+
program.command("spec").description(`Generate a normalized ConnectorTaskSpec — a one-stop description of everything a consumer needs to construct a runnable Integration Service activity or trigger task. Looks up the typeId in the local TypeCache, lists IS connections for the connector, and fetches IS metadata. ${OUTPUT_CASING_HINT}`).addOption(new Option("--type <type>", "TypeCache to look up").choices(["activity", "trigger"]).makeOptionMandatory()).requiredOption("--activity-type-id <uuid>", "Studio Web uiPathActivityTypeId — found via 'uip maestro case registry pull' + reading typecache-{activities,triggers}-index.json or 'uip maestro case registry get-connector'").requiredOption("--connection-id <id>", "Connection UUID. List candidates with `uip maestro case registry get-connection --type typecache-{activities,triggers} --activity-type-id <uuid>` and pick one before invoking spec.").option("--object-name <name>", "Override the typecache objectName. Required for entity-typed Curated triggers whose typecache stores a placeholder (e.g. Data Service `{tenantEntityName|folderEntityName}` — pick a real entity name).").addOption(new Option("--trigger-kind <kind>", "With --type trigger: 'start' for a case start trigger (Intsvc.EventTrigger on a trigger node, runtime type CuratedTrigger) or 'wait-for' for a wait-for-connector task or condition rule (runtime type CuratedWaitFor). Ignored for --type activity.").choices(["start", "wait-for"]).default("wait-for")).option("--skip-case-shape", "Omit `caseShape` (`inputs[]`, `outputs[]`, `context[]`) from the response. Use during the planning phase when the caller only needs the connector contract (`inputs.*[?required]`, `references[*].discoverCommand`, `outputs.responseFields`). Re-run without the flag during implementation to get the full caseShape scaffold. Mutually exclusive with --input-details.").option("--input-details <json>", "JSON values to fold into the generated `caseShape`. Activity accepts {bodyParameters, queryParameters, pathParameters, filter}; trigger accepts {eventParameters, queryParameters, pathParameters, filter}. See `packages/case-tool/docs/spec-input-details.md` for the full reference. Mutually exclusive with --skip-case-shape.").examples(SPEC_EXAMPLES).trackedAction(processContext, async (options) => {
|
|
3371
3748
|
logger.info(`Fetching ${options.type} spec for typeId ${options.activityTypeId} (connection: ${options.connectionId})`);
|
|
3372
3749
|
let parsedInputDetails;
|
|
3373
3750
|
if (options.inputDetails !== undefined) {
|
|
@@ -3395,9 +3772,10 @@ var registerSpecCommand = (program) => {
|
|
|
3395
3772
|
const fetchOpts = {
|
|
3396
3773
|
objectNameOverride: options.objectName,
|
|
3397
3774
|
skipCaseShape: options.skipCaseShape === true,
|
|
3775
|
+
triggerKind: options.triggerKind,
|
|
3398
3776
|
inputDetails: parsedInputDetails
|
|
3399
3777
|
};
|
|
3400
|
-
const { fetchConnectorTaskSpec } = await import("./connector-task-spec-
|
|
3778
|
+
const { fetchConnectorTaskSpec } = await import("./connector-task-spec-t3tjeeqt.js");
|
|
3401
3779
|
const [error, spec] = await catchError(fetchConnectorTaskSpec(options.type, options.activityTypeId, options.connectionId, fetchOpts));
|
|
3402
3780
|
if (error) {
|
|
3403
3781
|
OutputFormatter.error({
|
|
@@ -3416,6 +3794,196 @@ var registerSpecCommand = (program) => {
|
|
|
3416
3794
|
});
|
|
3417
3795
|
};
|
|
3418
3796
|
|
|
3797
|
+
// src/commands/splice.ts
|
|
3798
|
+
var SPLICE_EXAMPLES = [
|
|
3799
|
+
{
|
|
3800
|
+
Description: "Splice a connector activity's spec into the task that runs it",
|
|
3801
|
+
Command: "uip maestro case splice caseplan.json --task-id tP6mWC2aG --spec slack-send.json",
|
|
3802
|
+
Output: {
|
|
3803
|
+
Code: "ConnectorShapeSpliced",
|
|
3804
|
+
Data: {
|
|
3805
|
+
Path: "caseplan.json",
|
|
3806
|
+
Summary: {
|
|
3807
|
+
TaskId: "tP6mWC2aG",
|
|
3808
|
+
TaskType: "execute-connector-activity",
|
|
3809
|
+
ServiceType: "Intsvc.ActivityExecution",
|
|
3810
|
+
ContextEntries: 8,
|
|
3811
|
+
Inputs: 3,
|
|
3812
|
+
Outputs: 0,
|
|
3813
|
+
ConnectionBindingId: "bA1b2C3d",
|
|
3814
|
+
FolderBindingId: "bD4e5F6g",
|
|
3815
|
+
BindingsReused: false
|
|
3816
|
+
}
|
|
3817
|
+
}
|
|
3818
|
+
}
|
|
3819
|
+
}
|
|
3820
|
+
];
|
|
3821
|
+
var registerSpliceCommand = (program) => {
|
|
3822
|
+
program.command("splice").description("Write a connector task's `caseShape` from a `case spec` result into the task that runs it: `data.context` with the binding references resolved, `data.inputs`/`data.outputs` with their ids minted, the matching `serviceType`, and the connection's root bindings. Does the transport by hand-carrying nothing — the shape comes from the spec, the bindings from the binding builder, the service type from the task's own type. Offline: it reads the spec you hand it and never fetches one.").argument("<file>", "Path to the case plan to splice into").option("--task-id <task-id>", "Id of the connector task to write into, from `nodes[].data.tasks[][].id`. Pass this or --task-name.").option("--task-name <task-name>", "Display name of the task to write into, exactly as the plan spells it — same case and spacing, the way the SDD audit compares it. Pass this or --task-id.").option("--described <file>", "A `uip maestro case tasks describe` result saved as JSON. Writes a resource task's inputs and outputs from the resource's own contract — types, schemas and options — keeping the ids the plan already carries. Use instead of --spec for a process, rpa, api-workflow, agent, action, function or child-case task.").option("--spec <file>", "A `uip maestro case spec` result saved as JSON — the envelope as written, `Data.CaseShape` and all. A bare shape or an older PascalCased save is read too. Must carry the shape: run spec without `--skip-case-shape`.").option("--connection-id <id>", "Connection UUID the task runs against. Optional: it defaults to the connection the spec was fetched for, which the spec's own `caseShape.context.resourceKey` states. Pass it to override, and a value that disagrees with the spec is refused. The root bindings are keyed on it, so splicing twice for the same connection reuses them rather than appending a second pair.").option("--folder-key <key>", "Folder key for the connection. Optional: it defaults to the folder the spec's own `Data.Connection.FolderKey` states, and a value that disagrees with the spec is refused. When the connection has no folder, `case spec` returns a shape with no `folderKey` entry, and this drops any folder binding left over for that connection rather than leaving one with no `default`. If the shape asks for a folder binding and neither this nor the spec gives one, that is refused rather than written.").option("--out <file>", "Write the spliced plan here instead of in place").examples(SPLICE_EXAMPLES).trackedAction(processContext, async (file, options) => {
|
|
3823
|
+
const { getFileSystemAsync } = await import("./index-hhsf00x8.js");
|
|
3824
|
+
const fs = await getFileSystemAsync();
|
|
3825
|
+
const mode = options.described !== undefined ? "described" : "spec";
|
|
3826
|
+
if (options.described === undefined === (options.spec === undefined)) {
|
|
3827
|
+
OutputFormatter.error({
|
|
3828
|
+
Result: RESULTS.Failure,
|
|
3829
|
+
ErrorCode: "invalid_argument",
|
|
3830
|
+
Message: "Pass exactly one of --spec or --described",
|
|
3831
|
+
Instructions: "--spec splices a connector's `case spec` shape; --described writes a resource task's `case tasks describe` contract.",
|
|
3832
|
+
Retry: "RetryWillNotFix"
|
|
3833
|
+
});
|
|
3834
|
+
processContext.exit(1);
|
|
3835
|
+
return;
|
|
3836
|
+
}
|
|
3837
|
+
const source = options.described ?? options.spec;
|
|
3838
|
+
const missing = [file, source].filter((path) => path !== undefined);
|
|
3839
|
+
for (const path of missing) {
|
|
3840
|
+
if (await fs.exists(path))
|
|
3841
|
+
continue;
|
|
3842
|
+
OutputFormatter.error({
|
|
3843
|
+
Result: RESULTS.Failure,
|
|
3844
|
+
ErrorCode: "invalid_argument",
|
|
3845
|
+
Message: `File not found: ${path}`,
|
|
3846
|
+
Instructions: "Pass an existing case plan and an existing `case spec` result.",
|
|
3847
|
+
Retry: "RetryWillNotFix"
|
|
3848
|
+
});
|
|
3849
|
+
processContext.exit(1);
|
|
3850
|
+
return;
|
|
3851
|
+
}
|
|
3852
|
+
const read = async (path) => {
|
|
3853
|
+
const text = await fs.readFile(path, "utf-8") ?? "";
|
|
3854
|
+
const [error, parsed] = catchError(() => JSON.parse(text));
|
|
3855
|
+
if (error)
|
|
3856
|
+
return;
|
|
3857
|
+
return typeof parsed === "object" && parsed !== null && !Array.isArray(parsed) ? parsed : undefined;
|
|
3858
|
+
};
|
|
3859
|
+
const plan = await read(file);
|
|
3860
|
+
const specDocument = await read(source);
|
|
3861
|
+
if (plan === undefined || specDocument === undefined) {
|
|
3862
|
+
OutputFormatter.error({
|
|
3863
|
+
Result: RESULTS.Failure,
|
|
3864
|
+
ErrorCode: "invalid_argument",
|
|
3865
|
+
Message: `${plan === undefined ? file : String(source)} is not a JSON object`,
|
|
3866
|
+
Instructions: "Both inputs are JSON documents. Save the spec with `--output json`.",
|
|
3867
|
+
Retry: "RetryWillNotFix"
|
|
3868
|
+
});
|
|
3869
|
+
processContext.exit(1);
|
|
3870
|
+
return;
|
|
3871
|
+
}
|
|
3872
|
+
const { isTaskSelectorFailure, resolveTaskSelector } = await import("./task-selector-8bjn35dv.js");
|
|
3873
|
+
const selected = resolveTaskSelector(plan, {
|
|
3874
|
+
taskId: options.taskId,
|
|
3875
|
+
taskName: options.taskName
|
|
3876
|
+
});
|
|
3877
|
+
if (isTaskSelectorFailure(selected)) {
|
|
3878
|
+
OutputFormatter.error({
|
|
3879
|
+
Result: RESULTS.Failure,
|
|
3880
|
+
ErrorCode: "invalid_argument",
|
|
3881
|
+
Message: selected.message,
|
|
3882
|
+
Instructions: selected.instructions,
|
|
3883
|
+
Retry: "RetryWillNotFix"
|
|
3884
|
+
});
|
|
3885
|
+
processContext.exit(1);
|
|
3886
|
+
return;
|
|
3887
|
+
}
|
|
3888
|
+
const taskId = selected.id;
|
|
3889
|
+
if (mode === "described") {
|
|
3890
|
+
const { applyDescribedIo, isDescribedIoFailure } = await import("./case-described-io-service-cpe5h2ks.js");
|
|
3891
|
+
const applied = applyDescribedIo(plan, specDocument, {
|
|
3892
|
+
taskId
|
|
3893
|
+
});
|
|
3894
|
+
if (isDescribedIoFailure(applied)) {
|
|
3895
|
+
OutputFormatter.error({
|
|
3896
|
+
Result: RESULTS.Failure,
|
|
3897
|
+
ErrorCode: "invalid_argument",
|
|
3898
|
+
Message: applied.message,
|
|
3899
|
+
Instructions: applied.instructions,
|
|
3900
|
+
Retry: "RetryWillNotFix"
|
|
3901
|
+
});
|
|
3902
|
+
processContext.exit(1);
|
|
3903
|
+
return;
|
|
3904
|
+
}
|
|
3905
|
+
const target2 = options.out ?? file;
|
|
3906
|
+
await fs.writeFile(target2, `${JSON.stringify(applied.document, null, 4)}
|
|
3907
|
+
`);
|
|
3908
|
+
logger.info(`Wrote described I/O for ${taskId} into ${target2}`);
|
|
3909
|
+
OutputFormatter.success({
|
|
3910
|
+
Result: RESULTS.Success,
|
|
3911
|
+
Code: "DescribedIoApplied",
|
|
3912
|
+
Data: {
|
|
3913
|
+
Path: target2,
|
|
3914
|
+
Summary: {
|
|
3915
|
+
TaskId: applied.summary.taskId,
|
|
3916
|
+
InputsUpdated: applied.summary.inputsUpdated,
|
|
3917
|
+
OutputsUpdated: applied.summary.outputsUpdated,
|
|
3918
|
+
Unmatched: applied.summary.unmatched
|
|
3919
|
+
},
|
|
3920
|
+
NextSteps: "Run `uip maestro case validate <file> --strict` to check the task."
|
|
3921
|
+
}
|
|
3922
|
+
});
|
|
3923
|
+
return;
|
|
3924
|
+
}
|
|
3925
|
+
const { readCaseShape, readSpecFolderKey } = await import("./case-shape-reader-mw58avr0.js");
|
|
3926
|
+
const caseShape = readCaseShape(specDocument);
|
|
3927
|
+
if (caseShape === undefined) {
|
|
3928
|
+
OutputFormatter.error({
|
|
3929
|
+
Result: RESULTS.Failure,
|
|
3930
|
+
ErrorCode: "invalid_argument",
|
|
3931
|
+
Message: `${options.spec} carries no \`caseShape\``,
|
|
3932
|
+
Instructions: "Re-run `uip maestro case spec` without `--skip-case-shape` and save that result.",
|
|
3933
|
+
Retry: "RetryWillNotFix"
|
|
3934
|
+
});
|
|
3935
|
+
processContext.exit(1);
|
|
3936
|
+
return;
|
|
3937
|
+
}
|
|
3938
|
+
const { spliceConnectorShape, isSpliceFailure } = await import("./case-splice-service-9zvw19ca.js");
|
|
3939
|
+
const result = spliceConnectorShape(plan, caseShape, {
|
|
3940
|
+
taskId,
|
|
3941
|
+
connectionId: options.connectionId,
|
|
3942
|
+
folderKey: options.folderKey,
|
|
3943
|
+
specFolderKey: readSpecFolderKey(specDocument)
|
|
3944
|
+
});
|
|
3945
|
+
if (isSpliceFailure(result)) {
|
|
3946
|
+
OutputFormatter.error({
|
|
3947
|
+
Result: RESULTS.Failure,
|
|
3948
|
+
ErrorCode: "invalid_argument",
|
|
3949
|
+
Message: result.message,
|
|
3950
|
+
Instructions: result.instructions,
|
|
3951
|
+
Retry: "RetryWillNotFix"
|
|
3952
|
+
});
|
|
3953
|
+
processContext.exit(1);
|
|
3954
|
+
return;
|
|
3955
|
+
}
|
|
3956
|
+
const target = options.out ?? file;
|
|
3957
|
+
await fs.writeFile(target, `${JSON.stringify(result.document, null, 4)}
|
|
3958
|
+
`);
|
|
3959
|
+
logger.info(`Spliced ${taskId} into ${target}`);
|
|
3960
|
+
const { summary } = result;
|
|
3961
|
+
OutputFormatter.success({
|
|
3962
|
+
Result: RESULTS.Success,
|
|
3963
|
+
Code: "ConnectorShapeSpliced",
|
|
3964
|
+
Data: {
|
|
3965
|
+
Path: target,
|
|
3966
|
+
Summary: {
|
|
3967
|
+
TaskId: summary.taskId,
|
|
3968
|
+
TaskType: summary.taskType,
|
|
3969
|
+
ServiceType: summary.serviceType,
|
|
3970
|
+
ContextEntries: summary.contextEntries,
|
|
3971
|
+
Inputs: summary.inputs,
|
|
3972
|
+
Outputs: summary.outputs,
|
|
3973
|
+
ConnectionBindingId: summary.connectionBindingId,
|
|
3974
|
+
...summary.folderBindingId !== undefined && {
|
|
3975
|
+
FolderBindingId: summary.folderBindingId
|
|
3976
|
+
},
|
|
3977
|
+
BindingsReused: summary.bindingsReused,
|
|
3978
|
+
BindingsCompleted: summary.bindingsCompleted,
|
|
3979
|
+
BindingsDropped: summary.bindingsDropped
|
|
3980
|
+
},
|
|
3981
|
+
NextSteps: "Run `uip maestro case validate <file> --strict` to check the spliced task, then `uip maestro case bindings sync <file>` to bring bindings_v2.json in line."
|
|
3982
|
+
}
|
|
3983
|
+
});
|
|
3984
|
+
});
|
|
3985
|
+
};
|
|
3986
|
+
|
|
3419
3987
|
// src/commands/stage-entry-conditions.ts
|
|
3420
3988
|
var STAGE_ENTRY_CONDITIONS_ADD_EXAMPLES = [
|
|
3421
3989
|
{
|
|
@@ -5263,9 +5831,9 @@ var TASKS_DESCRIBE_EXAMPLES = [
|
|
|
5263
5831
|
}
|
|
5264
5832
|
}
|
|
5265
5833
|
];
|
|
5266
|
-
var loadConnectorEnrichment = () => import("./connector-enrichment-service-
|
|
5267
|
-
var loadTriggerEnrichment = () => import("./trigger-enrichment-service-
|
|
5268
|
-
var loadEnrichment = () => import("./enrichment-service-
|
|
5834
|
+
var loadConnectorEnrichment = () => import("./connector-enrichment-service-rg87npf0.js");
|
|
5835
|
+
var loadTriggerEnrichment = () => import("./trigger-enrichment-service-pjw5ysny.js");
|
|
5836
|
+
var loadEnrichment = () => import("./enrichment-service-78b0gqck.js");
|
|
5269
5837
|
var TASK_TYPES = [
|
|
5270
5838
|
"process",
|
|
5271
5839
|
"action",
|
|
@@ -5285,7 +5853,8 @@ var ENRICHABLE_TYPES = [
|
|
|
5285
5853
|
"action",
|
|
5286
5854
|
"api-workflow",
|
|
5287
5855
|
"case-management",
|
|
5288
|
-
"flow-process"
|
|
5856
|
+
"flow-process",
|
|
5857
|
+
"function"
|
|
5289
5858
|
];
|
|
5290
5859
|
var EXTERNAL_DESCRIBE_INDEXES = {
|
|
5291
5860
|
"external-workflow": "typecache-external-automation-activities",
|
|
@@ -5479,7 +6048,7 @@ async function describeConnectorActivity(id, connectionId, indexType = "typecach
|
|
|
5479
6048
|
}
|
|
5480
6049
|
async function describeConnectorTrigger(id, connectionId) {
|
|
5481
6050
|
const { enrichConnectorTrigger, fetchTriggerFieldInfo } = await loadTriggerEnrichment();
|
|
5482
|
-
const result = await enrichConnectorTrigger(id, connectionId);
|
|
6051
|
+
const result = await enrichConnectorTrigger("wait-for", id, connectionId);
|
|
5483
6052
|
const [, fieldInfo] = await catchError(fetchTriggerFieldInfo(result.config.connectorKey, result.config.objectName, result.config.eventOperation));
|
|
5484
6053
|
const inputs = fieldInfo ? result.inputs.map((input) => {
|
|
5485
6054
|
const all = fieldInfo.allFields[input.name];
|
|
@@ -5706,7 +6275,7 @@ var registerTasksCommand = (program) => {
|
|
|
5706
6275
|
} else {
|
|
5707
6276
|
const eventParams = parsedInputValues?.body ? Object.fromEntries(Object.entries(parsedInputValues.body).map(([k, v]) => [k, String(v)])) : undefined;
|
|
5708
6277
|
const { enrichConnectorTrigger } = await loadTriggerEnrichment();
|
|
5709
|
-
enrichment = await enrichConnectorTrigger(options.typeId, options.connectionId, eventParams);
|
|
6278
|
+
enrichment = await enrichConnectorTrigger("wait-for", options.typeId, options.connectionId, eventParams);
|
|
5710
6279
|
taskType = "wait-for-connector";
|
|
5711
6280
|
serviceType = "Intsvc.WaitForEvent";
|
|
5712
6281
|
}
|
|
@@ -6298,8 +6867,8 @@ var registerTriggersCommand = (program) => {
|
|
|
6298
6867
|
const result = await readAndBuildTrigger(file, options.displayName, options.position, options.description);
|
|
6299
6868
|
if (result.error)
|
|
6300
6869
|
return;
|
|
6301
|
-
const { enrichConnectorTrigger } = await import("./trigger-enrichment-service-
|
|
6302
|
-
const [enrichError, enrichment] = await catchError(enrichConnectorTrigger(options.typeId, options.connectionId, parsedEventParams));
|
|
6870
|
+
const { enrichConnectorTrigger } = await import("./trigger-enrichment-service-pjw5ysny.js");
|
|
6871
|
+
const [enrichError, enrichment] = await catchError(enrichConnectorTrigger("start", options.typeId, options.connectionId, parsedEventParams));
|
|
6303
6872
|
if (enrichError) {
|
|
6304
6873
|
OutputFormatter.error({
|
|
6305
6874
|
Result: RESULTS.Failure,
|
|
@@ -6431,11 +7000,11 @@ var toIssueData = (issues) => issues.map((issue) => ({
|
|
|
6431
7000
|
Severity: issue.severity
|
|
6432
7001
|
}));
|
|
6433
7002
|
var suppressedAudit = async (file, shown) => {
|
|
6434
|
-
const { findAdjacentSdd } = await import("./sdd-lookup-
|
|
7003
|
+
const { findAdjacentSdd } = await import("./sdd-lookup-vpjej1kt.js");
|
|
6435
7004
|
const [lookupError, sdd] = await catchError(Promise.resolve(findAdjacentSdd(file)));
|
|
6436
7005
|
if (lookupError || sdd === undefined)
|
|
6437
7006
|
return;
|
|
6438
|
-
const { CaseValidateService } = await import("./case-validate-service-
|
|
7007
|
+
const { CaseValidateService } = await import("./case-validate-service-vrvx19c1.js");
|
|
6439
7008
|
const [auditError, audited] = await catchError(new CaseValidateService().validateFileUsingSDK(file, {
|
|
6440
7009
|
profile: "strict",
|
|
6441
7010
|
sddPath: sdd
|
|
@@ -6451,7 +7020,7 @@ var suppressedAudit = async (file, shown) => {
|
|
|
6451
7020
|
};
|
|
6452
7021
|
};
|
|
6453
7022
|
var executeCaseValidate = async (file, options = {}) => {
|
|
6454
|
-
const { CaseValidateService } = await import("./case-validate-service-
|
|
7023
|
+
const { CaseValidateService } = await import("./case-validate-service-vrvx19c1.js");
|
|
6455
7024
|
const service = new CaseValidateService;
|
|
6456
7025
|
const [error, result] = await catchError(service.validateFileUsingSDK(file, {
|
|
6457
7026
|
profile: resolveProfile(options),
|
|
@@ -6842,11 +7411,10 @@ var metadata = {
|
|
|
6842
7411
|
commandPrefix: "case"
|
|
6843
7412
|
};
|
|
6844
7413
|
var registerCommands = async (program) => {
|
|
6845
|
-
|
|
6846
|
-
|
|
6847
|
-
registerCaseAuthoringCommands(program);
|
|
6848
|
-
}
|
|
7414
|
+
const { registerCaseAuthoringCommands } = await import("./authoring-0hr88kff.js");
|
|
7415
|
+
registerCaseAuthoringCommands(program);
|
|
6849
7416
|
registerInitCommand(program);
|
|
7417
|
+
registerSddCommand(program);
|
|
6850
7418
|
registerBindingsCommand(program);
|
|
6851
7419
|
registerFormatCommand(program);
|
|
6852
7420
|
registerPackCommand(program);
|
|
@@ -6862,6 +7430,7 @@ var registerCommands = async (program) => {
|
|
|
6862
7430
|
registerTasksCommand(program);
|
|
6863
7431
|
registerSlaCommand(program);
|
|
6864
7432
|
registerSpecCommand(program);
|
|
7433
|
+
registerSpliceCommand(program);
|
|
6865
7434
|
registerTriggersCommand(program);
|
|
6866
7435
|
registerStickyNotesCommand(program);
|
|
6867
7436
|
registerEdgesCommand(program);
|
|
@@ -6876,4 +7445,4 @@ var registerCommands = async (program) => {
|
|
|
6876
7445
|
|
|
6877
7446
|
export { metadata, registerCommands };
|
|
6878
7447
|
|
|
6879
|
-
//# debugId=
|
|
7448
|
+
//# debugId=E5DD82D58051555764756E2164756E21
|