@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.
Files changed (85) hide show
  1. package/README.md +6 -1
  2. package/dist/THIRD-PARTY-NOTICES.md +48 -9
  3. package/dist/authoring-0hr88kff.js +623 -0
  4. package/dist/{case-api-v6cjyrfw.js → case-api-gdaj9469.js} +5 -5
  5. package/dist/case-bindings-service-c2mze9vj.js +476 -0
  6. package/dist/{case-debug-studio-web-service-shg84pn8.js → case-debug-studio-web-service-cc0vj7md.js} +11 -10
  7. package/dist/case-described-io-service-cpe5h2ks.js +132 -0
  8. package/dist/{case-format-service-q345a2fd.js → case-format-service-qwyjyt0y.js} +2 -2
  9. package/dist/{case-pack-service-29rza2q2.js → case-pack-service-47yrvmg0.js} +11 -11
  10. package/dist/case-shape-reader-mw58avr0.js +13 -0
  11. package/dist/case-splice-service-9zvw19ca.js +312 -0
  12. package/dist/{case-validate-service-2n2bqc1g.js → case-validate-service-vrvx19c1.js} +415 -1449
  13. package/dist/{connector-enrichment-service-h662r92z.js → connector-enrichment-service-rg87npf0.js} +20 -18
  14. package/dist/{connector-lookup-service-y7x6xsc6.js → connector-lookup-service-c49pvfwb.js} +7 -7
  15. package/dist/{connector-task-spec-qm6q8qma.js → connector-task-spec-t3tjeeqt.js} +86 -26
  16. package/dist/{debug-service-8x087xxt.js → debug-service-vf5mw0nr.js} +3 -3
  17. package/dist/{embedded-file-reader-0sjt4nkj.js → embedded-file-reader-v8c2yj2a.js} +2 -2
  18. package/dist/{enrichment-service-7vbxcwge.js → enrichment-service-78b0gqck.js} +8 -7
  19. package/dist/index-hhsf00x8.js +15 -0
  20. package/dist/{index-fz4ttsde.js → index-j2r3jb6c.js} +5 -3
  21. package/dist/{index-jxj2jz45.js → index-rgw7caht.js} +416 -87
  22. package/dist/{index-k4xz16db.js → index-wmffgzmr.js} +12522 -7316
  23. package/dist/{index-va9sm89y.js → index-ynnr55wk.js} +59 -27
  24. package/dist/index.js +15 -11
  25. package/dist/{input-reader-pnh948bq.js → input-reader-bb0ptk2v.js} +2 -2
  26. package/dist/migration-diagnosis-ag2sgd1e.js +71 -0
  27. package/dist/{node-strategy-gc4sg6a2.js → node-strategy-5pz40tee.js} +1 -1
  28. package/dist/{node-sync-service-mehbp4qq.js → node-sync-service-xw3tpfj5.js} +6 -6
  29. package/dist/out-target-1f4n9vqb.js +70 -0
  30. package/dist/{packager-tool-wefb1zw3.js → packager-tool-0p3td5zv.js} +8 -7
  31. package/dist/packager-tool-21qfsbxn.js +17 -0
  32. package/dist/{strict-sdd-audit-8e2fh9jg.js → packager-tool-4e56rmwe.js} +2771 -1746
  33. package/dist/{packager-tool-sfkyb4kz.js → packager-tool-4rqd21wc.js} +194 -2
  34. package/dist/packager-tool-57pzrd0g.js +32 -0
  35. package/dist/{packager-tool-kpcjnxd1.js → packager-tool-58kx79ta.js} +586 -113
  36. package/dist/{packager-tool-hrdan5ms.js → packager-tool-5qghkdd0.js} +2 -2
  37. package/dist/packager-tool-5qp9xza1.js +10 -0
  38. package/dist/packager-tool-8a9yqfq7.js +76 -0
  39. package/dist/{packager-tool-40vq60aa.js → packager-tool-8mpxsyje.js} +4 -4
  40. package/dist/{packager-tool-e3k5gzd3.js → packager-tool-a6wztj6y.js} +669 -100
  41. package/dist/{packager-tool-p0zh9hw6.js → packager-tool-ayevyw80.js} +5 -5
  42. package/dist/packager-tool-b250k6w4.js +75 -0
  43. package/dist/packager-tool-bfgdz1zh.js +73 -0
  44. package/dist/{packager-tool-p7jgrm5r.js → packager-tool-cmwets3m.js} +1 -1
  45. package/dist/{packager-tool-d4sjk46c.js → packager-tool-cv05dwac.js} +18 -21
  46. package/dist/packager-tool-d7jjng8a.js +21 -0
  47. package/dist/packager-tool-dthjwajc.js +13 -0
  48. package/dist/{packager-tool-zcsm7dsj.js → packager-tool-e760vtgg.js} +4 -4
  49. package/dist/packager-tool-f78ntj5g.js +228 -0
  50. package/dist/{packager-tool-2xfyykm0.js → packager-tool-ggbvxvey.js} +320 -200
  51. package/dist/{packager-tool-6karkrc8.js → packager-tool-jx0yq0b5.js} +6 -6
  52. package/dist/{packager-tool-cg2j4rma.js → packager-tool-kacqd7h7.js} +4 -4
  53. package/dist/packager-tool-mknccck5.js +24 -0
  54. package/dist/{packager-tool-sv0d6wb6.js → packager-tool-nj4seavy.js} +7 -3
  55. package/dist/{packager-tool-adcaxdhs.js → packager-tool-paepfv5d.js} +1 -1
  56. package/dist/{packager-tool-052kvydg.js → packager-tool-pm646ag4.js} +1 -1
  57. package/dist/{packager-tool-dd8bq6az.js → packager-tool-rgpdaxbx.js} +548 -108
  58. package/dist/{packager-tool-8q7vzh65.js → packager-tool-s3e2kepj.js} +455 -13
  59. package/dist/{packager-tool-r84ng21s.js → packager-tool-sag9gz55.js} +3 -1
  60. package/dist/{packager-tool-0mj06yen.js → packager-tool-sq931c23.js} +5 -22
  61. package/dist/{packager-tool-yrsrzz1a.js → packager-tool-v99ygh9f.js} +23 -8
  62. package/dist/packager-tool-wj9d9mqe.js +267 -0
  63. package/dist/{packager-tool-hz1mz8fs.js → packager-tool-wjaya2k2.js} +2 -2
  64. package/dist/packager-tool-xcd87qyx.js +44 -0
  65. package/dist/{packager-tool-0v3s8r01.js → packager-tool-xdxr3ync.js} +4 -2
  66. package/dist/{packager-tool-61hxhgeg.js → packager-tool-xkgq5fkf.js} +3 -3
  67. package/dist/packager-tool.js +6 -6
  68. package/dist/{project-artifacts-8snev67g.js → project-artifacts-wzrhketn.js} +1 -1
  69. package/dist/resolved-check-p99hysaw.js +50 -0
  70. package/dist/{resourcesSyncService-pmfwz9cd.js → resourcesSyncService-1ezvhcbc.js} +25 -18
  71. package/dist/rule-group-members-zje7n3kf.js +76 -0
  72. package/dist/sdd-convert-service-gp9733qv.js +1962 -0
  73. package/dist/{sdd-lookup-x08j9g9m.js → sdd-lookup-vpjej1kt.js} +2 -2
  74. package/dist/sdd-resolve-service-4hx64x3z.js +288 -0
  75. package/dist/strict-case-rules-ksy8q7pg.js +731 -0
  76. package/dist/strict-entry-points-v14d7y50.js +124 -0
  77. package/dist/strict-sdd-audit-k6hh0mbr.js +23 -0
  78. package/dist/task-selector-8bjn35dv.js +57 -0
  79. package/dist/tool.js +15 -11
  80. package/dist/{trigger-enrichment-service-xexg7qbk.js → trigger-enrichment-service-pjw5ysny.js} +41 -23
  81. package/package.json +2 -2
  82. package/dist/authoring-kngaggwm.js +0 -360
  83. package/dist/case-bindings-service-1wxfghzd.js +0 -240
  84. package/dist/packager-tool-83qnybab.js +0 -1564
  85. package/dist/strict-case-rules-x6t0vb40.js +0 -409
@@ -1,7 +1,16 @@
1
1
  import {
2
- createTaskBindings,
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-0mj06yen.js";
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-sv0d6wb6.js";
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-cg2j4rma.js";
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-r84ng21s.js";
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-kpcjnxd1.js";
59
+ } from "./packager-tool-58kx79ta.js";
52
60
  import {
53
61
  getFileSystem
54
- } from "./packager-tool-0v3s8r01.js";
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.203.0-preview.205",
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": "^0.1052.3",
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's root 'bindings' array: the
135
- 'name' and 'folderPath' bindings that share a resourceKey collapse into one
136
- entry keyed by that resourceKey, and each distinct connection collapses the
137
- same way. Nothing else is read — no network call, no registry file — so the
138
- output depends only on the case plan you pass in.
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-1wxfghzd.js");
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: "30.0.0"
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(options);
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-fz4ttsde.js");
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-shg84pn8.js");
887
- const { DebugPollTimeoutError, buildPollTimeoutFailureOutput } = await import("./debug-service-8x087xxt.js");
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-va9sm89y.js");
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?.type === "case-management:Trigger";
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-q345a2fd.js");
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-va9sm89y.js");
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({ name }), null, 4)}
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-8snev67g.js");
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-fz4ttsde.js");
1471
- var loadCaseApi = () => import("./case-api-v6cjyrfw.js");
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-29rza2q2.js");
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-fz4ttsde.js");
1800
- var loadCaseApi2 = () => import("./case-api-v6cjyrfw.js");
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-pnh948bq.js");
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
- resourceType: "typecache-activities",
2251
- resource: {
2252
- name: "InvoiceParser",
2253
- uiPathActivityTypeId: "a1b2c3d4-0000-0000-0000-000000000001"
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
- resources: []
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-pmfwz9cd.js");
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-pmfwz9cd.js");
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-pmfwz9cd.js");
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-pmfwz9cd.js");
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-y7x6xsc6.js");
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-h662r92z.js");
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-y7x6xsc6.js");
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-y7x6xsc6.js");
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-qm6q8qma.js");
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-h662r92z.js");
5267
- var loadTriggerEnrichment = () => import("./trigger-enrichment-service-xexg7qbk.js");
5268
- var loadEnrichment = () => import("./enrichment-service-7vbxcwge.js");
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-xexg7qbk.js");
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-x08j9g9m.js");
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-2n2bqc1g.js");
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-2n2bqc1g.js");
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
- if (isPreviewBuild()) {
6846
- const { registerCaseAuthoringCommands } = await import("./authoring-kngaggwm.js");
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=75AB57A3115FA0D364756E2164756E21
7448
+ //# debugId=E5DD82D58051555764756E2164756E21