@celonis/content-cli 1.10.0 → 1.11.0

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 (26) hide show
  1. package/README.md +1 -1
  2. package/commands/asset-registry/asset-registry-api.js +14 -26
  3. package/commands/asset-registry/asset-registry-error.js +57 -0
  4. package/commands/asset-registry/asset-registry.service.js +38 -10
  5. package/commands/asset-registry/module.js +7 -6
  6. package/commands/configuration-management/api/batch-import-export-api.js +14 -2
  7. package/commands/configuration-management/api/node-diff-api.js +15 -1
  8. package/commands/configuration-management/batch-import-export.service.js +21 -8
  9. package/commands/configuration-management/config-command.service.js +12 -10
  10. package/commands/configuration-management/module.js +19 -5
  11. package/commands/configuration-management/node-diff.service.js +40 -17
  12. package/commands/configuration-management/studio.service.js +3 -2
  13. package/core/utils/branches.js +23 -0
  14. package/lib/commands/asset-registry/asset-registry-api.d.ts +2 -2
  15. package/lib/commands/asset-registry/asset-registry-error.d.ts +3 -0
  16. package/lib/commands/asset-registry/asset-registry.interfaces.d.ts +13 -1
  17. package/lib/commands/asset-registry/asset-registry.service.d.ts +2 -1
  18. package/lib/commands/asset-registry/module.d.ts +1 -1
  19. package/lib/commands/configuration-management/api/batch-import-export-api.d.ts +3 -2
  20. package/lib/commands/configuration-management/api/node-diff-api.d.ts +2 -1
  21. package/lib/commands/configuration-management/batch-import-export.service.d.ts +5 -4
  22. package/lib/commands/configuration-management/config-command.service.d.ts +1 -1
  23. package/lib/commands/configuration-management/interfaces/node-diff.interfaces.d.ts +8 -0
  24. package/lib/commands/configuration-management/node-diff.service.d.ts +3 -0
  25. package/lib/core/utils/branches.d.ts +4 -0
  26. package/package.json +1 -1
package/README.md CHANGED
@@ -168,5 +168,5 @@ For details on command development, refer to the [How to Add a Command](https://
168
168
 
169
169
  Copyright (c) 2021 Celonis SE
170
170
 
171
- This project is licensed under the MIT License -
171
+ This project is licensed under the MIT License -
172
172
  see [LICENSE](https://github.com/celonis/content-cli/blob/main/LICENSE) file for details.
@@ -13,13 +13,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
13
13
  if (v !== undefined) module.exports = v;
14
14
  }
15
15
  else if (typeof define === "function" && define.amd) {
16
- define(["require", "exports", "../../core/utils/logger"], factory);
16
+ define(["require", "exports", "./asset-registry-error"], factory);
17
17
  }
18
18
  })(function (require, exports) {
19
19
  "use strict";
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
21
  exports.AssetRegistryApi = void 0;
22
- const logger_1 = require("../../core/utils/logger");
22
+ const asset_registry_error_1 = require("./asset-registry-error");
23
23
  class AssetRegistryApi {
24
24
  constructor(context) {
25
25
  this.httpClient = () => context.httpClient;
@@ -28,54 +28,42 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
28
28
  return __awaiter(this, void 0, void 0, function* () {
29
29
  return this.httpClient()
30
30
  .get("/pacman/api/core/asset-registry/types")
31
- .catch((e) => {
32
- throw new logger_1.FatalError(`Problem listing asset registry types: ${e}`);
33
- });
31
+ .catch((e) => (0, asset_registry_error_1.handleAssetRegistryApiError)("listing asset registry types", e));
32
+ });
33
+ }
34
+ listSkills() {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ return this.httpClient()
37
+ .get("/pacman/api/core/asset-registry/skills")
38
+ .catch((e) => (0, asset_registry_error_1.handleAssetRegistryApiError)("listing asset registry skills", e));
34
39
  });
35
40
  }
36
41
  getType(assetType) {
37
42
  return __awaiter(this, void 0, void 0, function* () {
38
43
  return this.httpClient()
39
44
  .get(`/pacman/api/core/asset-registry/types/${encodeURIComponent(assetType)}`)
40
- .catch((e) => {
41
- throw new logger_1.FatalError(`Problem getting asset type '${assetType}': ${e}`);
42
- });
45
+ .catch((e) => (0, asset_registry_error_1.handleAssetRegistryApiError)(`getting asset type '${assetType}'`, e));
43
46
  });
44
47
  }
45
48
  getSchema(assetType) {
46
49
  return __awaiter(this, void 0, void 0, function* () {
47
50
  return this.httpClient()
48
51
  .get(`/pacman/api/core/asset-registry/schemas/${encodeURIComponent(assetType)}`)
49
- .catch((e) => {
50
- throw new logger_1.FatalError(`Problem getting schema for asset type '${assetType}': ${e}`);
51
- });
52
+ .catch((e) => (0, asset_registry_error_1.handleAssetRegistryApiError)(`getting schema for asset type '${assetType}'`, e));
52
53
  });
53
54
  }
54
55
  getExamples(assetType) {
55
56
  return __awaiter(this, void 0, void 0, function* () {
56
57
  return this.httpClient()
57
58
  .get(`/pacman/api/core/asset-registry/examples/${encodeURIComponent(assetType)}`)
58
- .catch((e) => {
59
- throw new logger_1.FatalError(`Problem getting examples for asset type '${assetType}': ${e}`);
60
- });
61
- });
62
- }
63
- getMethodology(assetType) {
64
- return __awaiter(this, void 0, void 0, function* () {
65
- return this.httpClient()
66
- .get(`/pacman/api/core/asset-registry/methodologies/${encodeURIComponent(assetType)}`)
67
- .catch((e) => {
68
- throw new logger_1.FatalError(`Problem getting methodology for asset type '${assetType}': ${e}`);
69
- });
59
+ .catch((e) => (0, asset_registry_error_1.handleAssetRegistryApiError)(`getting examples for asset type '${assetType}'`, e));
70
60
  });
71
61
  }
72
62
  validate(assetType, body) {
73
63
  return __awaiter(this, void 0, void 0, function* () {
74
64
  return this.httpClient()
75
65
  .post(`/pacman/api/core/asset-registry/validate/${encodeURIComponent(assetType)}`, body)
76
- .catch((e) => {
77
- throw new logger_1.FatalError(`Problem validating asset type '${assetType}': ${e}`);
78
- });
66
+ .catch((e) => (0, asset_registry_error_1.handleAssetRegistryApiError)(`validating asset type '${assetType}'`, e));
79
67
  });
80
68
  }
81
69
  }
@@ -0,0 +1,57 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports", "../../core/utils/logger"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.handleAssetRegistryApiError = exports.ASSET_REGISTRY_DISABLED_USER_MESSAGE = exports.ASSET_REGISTRY_DISABLED_ERROR = void 0;
13
+ const logger_1 = require("../../core/utils/logger");
14
+ exports.ASSET_REGISTRY_DISABLED_ERROR = "Asset registry feature is currently disabled";
15
+ exports.ASSET_REGISTRY_DISABLED_USER_MESSAGE = "Asset registry is not enabled for this team. Contact your administrator to enable the feature.";
16
+ function extractErrorText(error) {
17
+ if (typeof error === "string") {
18
+ return error;
19
+ }
20
+ if (error instanceof Error) {
21
+ return error.message;
22
+ }
23
+ return String(error);
24
+ }
25
+ function parseErrorField(error) {
26
+ const payload = extractJsonPayload(extractErrorText(error));
27
+ if (!payload) {
28
+ return undefined;
29
+ }
30
+ try {
31
+ const parsed = JSON.parse(payload);
32
+ return typeof parsed.error === "string" ? parsed.error : undefined;
33
+ }
34
+ catch (_a) {
35
+ return undefined;
36
+ }
37
+ }
38
+ function extractJsonPayload(text) {
39
+ let candidate = text.trim();
40
+ const fatalErrorPrefix = "FatalError: ";
41
+ const fatalErrorIndex = candidate.lastIndexOf(fatalErrorPrefix);
42
+ if (fatalErrorIndex >= 0) {
43
+ candidate = candidate.slice(fatalErrorIndex + fatalErrorPrefix.length).trim();
44
+ }
45
+ if (!candidate.startsWith("{")) {
46
+ return undefined;
47
+ }
48
+ return candidate;
49
+ }
50
+ function handleAssetRegistryApiError(operation, error) {
51
+ if (parseErrorField(error) === exports.ASSET_REGISTRY_DISABLED_ERROR) {
52
+ throw new logger_1.FatalError(exports.ASSET_REGISTRY_DISABLED_USER_MESSAGE);
53
+ }
54
+ throw new logger_1.FatalError(`Problem ${operation}: ${extractErrorText(error)}`);
55
+ }
56
+ exports.handleAssetRegistryApiError = handleAssetRegistryApiError;
57
+ });
@@ -48,6 +48,25 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
48
48
  }
49
49
  });
50
50
  }
51
+ listSkills(jsonResponse) {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ const response = yield this.api.listSkills();
54
+ if (jsonResponse) {
55
+ const filename = (0, uuid_1.v4)() + ".json";
56
+ file_service_1.fileService.writeToFileWithGivenName(JSON.stringify(response), filename);
57
+ logger_1.logger.info(file_service_1.FileService.fileDownloadedMessage + filename);
58
+ }
59
+ else {
60
+ if (response.skills.length === 0) {
61
+ logger_1.logger.info("No agent skills registered.");
62
+ return;
63
+ }
64
+ response.skills.forEach((skill) => {
65
+ this.logSkillSummary(skill);
66
+ });
67
+ }
68
+ });
69
+ }
51
70
  getType(assetType, jsonResponse) {
52
71
  return __awaiter(this, void 0, void 0, function* () {
53
72
  const descriptor = yield this.api.getType(assetType);
@@ -73,12 +92,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
73
92
  this.outputResponse(data, jsonResponse);
74
93
  });
75
94
  }
76
- getMethodology(assetType, jsonResponse) {
77
- return __awaiter(this, void 0, void 0, function* () {
78
- const data = yield this.api.getMethodology(assetType);
79
- this.outputResponse(data, jsonResponse);
80
- });
81
- }
82
95
  validate(opts) {
83
96
  return __awaiter(this, void 0, void 0, function* () {
84
97
  const payload = this.buildValidatePayload(opts);
@@ -138,7 +151,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
138
151
  }
139
152
  }
140
153
  logDescriptorSummary(descriptor) {
141
- logger_1.logger.info(`${descriptor.assetType} - ${descriptor.displayName} [${descriptor.group}]`);
154
+ const base = `${descriptor.assetType} - ${descriptor.displayName} [${descriptor.group}]`;
155
+ if (descriptor.description) {
156
+ logger_1.logger.info(`${base} - ${descriptor.description}`);
157
+ }
158
+ else {
159
+ logger_1.logger.info(base);
160
+ }
161
+ }
162
+ logSkillSummary(skill) {
163
+ const base = `${skill.name} (${skill.path})`;
164
+ if (skill.description) {
165
+ logger_1.logger.info(`${base} - ${skill.description}`);
166
+ }
167
+ else {
168
+ logger_1.logger.info(base);
169
+ }
142
170
  }
143
171
  logDescriptorDetail(descriptor) {
144
172
  logger_1.logger.info(`Asset Type: ${descriptor.assetType}`);
@@ -152,12 +180,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
152
180
  logger_1.logger.info(`Endpoints:`);
153
181
  logger_1.logger.info(` schema: ${descriptor.endpoints.schema}`);
154
182
  logger_1.logger.info(` validate: ${descriptor.endpoints.validate}`);
155
- if (descriptor.endpoints.methodology) {
156
- logger_1.logger.info(` methodology: ${descriptor.endpoints.methodology}`);
157
- }
158
183
  if (descriptor.endpoints.examples) {
159
184
  logger_1.logger.info(` examples: ${descriptor.endpoints.examples}`);
160
185
  }
186
+ if (descriptor.endpoints.skills) {
187
+ logger_1.logger.info(` skills: ${descriptor.endpoints.skills}`);
188
+ }
161
189
  }
162
190
  }
163
191
  exports.AssetRegistryService = AssetRegistryService;
@@ -51,11 +51,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
51
51
  .option("-f, --file <file>", "Path to a JSON file containing a full ValidateRequest body. Mutually exclusive with the build-from-options flags.")
52
52
  .option("--json", "Return the response as a JSON file")
53
53
  .action(this.validate);
54
- assetRegistryCommand.command("methodology")
55
- .description("Get the methodology / best-practices guide for an asset type")
56
- .requiredOption("--assetType <assetType>", "The asset type identifier (e.g., BOARD_V2)")
54
+ const skillsCommand = assetRegistryCommand.command("skills")
55
+ .description("Discover agent skills exposed by the asset registry");
56
+ skillsCommand.command("list")
57
+ .description("List all available agent skills (name, description, path)")
57
58
  .option("--json", "Return the response as a JSON file")
58
- .action(this.getMethodology);
59
+ .action(this.listSkills);
59
60
  }
60
61
  listTypes(context, command, options) {
61
62
  return __awaiter(this, void 0, void 0, function* () {
@@ -89,9 +90,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
89
90
  yield new asset_registry_service_1.AssetRegistryService(context).getExamples(options.assetType, !!options.json);
90
91
  });
91
92
  }
92
- getMethodology(context, command, options) {
93
+ listSkills(context, command, options) {
93
94
  return __awaiter(this, void 0, void 0, function* () {
94
- yield new asset_registry_service_1.AssetRegistryService(context).getMethodology(options.assetType, !!options.json);
95
+ yield new asset_registry_service_1.AssetRegistryService(context).listSkills(!!options.json);
95
96
  });
96
97
  }
97
98
  }
@@ -24,23 +24,35 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
24
24
  constructor(context) {
25
25
  this.httpClient = () => context.httpClient;
26
26
  }
27
- findAllActivePackages(flavors, withDependencies = false) {
27
+ findAllActivePackages(flavors, withDependencies = false, includeBranches = false) {
28
28
  return __awaiter(this, void 0, void 0, function* () {
29
29
  const queryParams = new URLSearchParams();
30
30
  queryParams.set("withDependencies", withDependencies.toString());
31
+ queryParams.set("includeBranches", includeBranches.toString());
31
32
  flavors.forEach(flavor => queryParams.append("flavors", flavor));
32
33
  return this.httpClient().get(`/package-manager/api/core/packages/export/list?${queryParams.toString()}`).catch(e => {
33
34
  throw new logger_1.FatalError(`Problem getting active packages: ${e}`);
34
35
  });
35
36
  });
36
37
  }
37
- findActivePackagesByVariableValue(flavors, variableValue, variableType) {
38
+ findAllStagingPackages(flavors, includeBranches = false) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ const queryParams = new URLSearchParams();
41
+ queryParams.set("includeBranches", includeBranches.toString());
42
+ flavors.forEach(flavor => queryParams.append("flavors", flavor));
43
+ return this.httpClient().get(`/pacman/api/core/staging/packages/export/list?${queryParams.toString()}`).catch(e => {
44
+ throw new logger_1.FatalError(`Problem getting staging packages: ${e}`);
45
+ });
46
+ });
47
+ }
48
+ findActivePackagesByVariableValue(flavors, variableValue, variableType, includeBranches = false) {
38
49
  return __awaiter(this, void 0, void 0, function* () {
39
50
  const queryParams = new URLSearchParams();
40
51
  queryParams.set("variableValue", variableValue);
41
52
  if (variableType) {
42
53
  queryParams.set("variableType", variableType);
43
54
  }
55
+ queryParams.set("includeBranches", includeBranches.toString());
44
56
  flavors.forEach(flavor => queryParams.append("flavors", flavor));
45
57
  return this.httpClient().get(`/package-manager/api/core/packages/export/list-by-variable-value?${queryParams.toString()}`).catch(e => {
46
58
  throw new logger_1.FatalError(`Problem getting active packages by variable value: ${e}`);
@@ -13,12 +13,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
13
13
  if (v !== undefined) module.exports = v;
14
14
  }
15
15
  else if (typeof define === "function" && define.amd) {
16
- define(["require", "exports", "../../../core/utils/logger"], factory);
16
+ define(["require", "exports", "form-data", "../../../core/utils/logger"], factory);
17
17
  }
18
18
  })(function (require, exports) {
19
19
  "use strict";
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
21
  exports.NodeDiffApi = void 0;
22
+ const FormData = require("form-data");
22
23
  const logger_1 = require("../../../core/utils/logger");
23
24
  class NodeDiffApi {
24
25
  constructor(context) {
@@ -36,6 +37,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
36
37
  });
37
38
  });
38
39
  }
40
+ diffWithFile(request) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ const queryParams = new URLSearchParams();
43
+ queryParams.set("baseVersion", request.baseVersion);
44
+ const formData = new FormData();
45
+ formData.append("file", request.file);
46
+ return this.httpClient()
47
+ .postFile(`/pacman/api/core/packages/${request.packageKey}/nodes/${request.nodeKey}/diff/configuration/with-file?${queryParams.toString()}`, formData)
48
+ .catch(exception => {
49
+ throw new logger_1.FatalError(`Problem getting the node diff: ${exception}`);
50
+ });
51
+ });
52
+ }
39
53
  }
40
54
  exports.NodeDiffApi = NodeDiffApi;
41
55
  });
@@ -40,15 +40,28 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
40
40
  this.studioService = new studio_service_1.StudioService(context);
41
41
  this.gitService = new git_service_1.GitService(context);
42
42
  }
43
- listActivePackages(flavors) {
43
+ listActivePackages(flavors, includeBranches) {
44
44
  return __awaiter(this, void 0, void 0, function* () {
45
- const activePackages = yield this.batchImportExportApi.findAllActivePackages(flavors);
45
+ const activePackages = yield this.batchImportExportApi.findAllActivePackages(flavors, false, includeBranches);
46
46
  activePackages.forEach(pkg => {
47
47
  logger_1.logger.info(`${pkg.name} - Key: "${pkg.key}"`);
48
48
  });
49
49
  });
50
50
  }
51
- findAndExportListOfPackages(flavors, packageKeys, keysByVersion, withDependencies) {
51
+ listStagingPackages(flavors, includeBranches, jsonResponse) {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ const stagingPackages = yield this.batchImportExportApi.findAllStagingPackages(flavors, includeBranches);
54
+ if (jsonResponse) {
55
+ this.exportListOfPackages(stagingPackages);
56
+ }
57
+ else {
58
+ stagingPackages.forEach(pkg => {
59
+ logger_1.logger.info(`${pkg.name} - Key: "${pkg.key}"`);
60
+ });
61
+ }
62
+ });
63
+ }
64
+ findAndExportListOfPackages(flavors, packageKeys, keysByVersion, withDependencies, includeBranches) {
52
65
  return __awaiter(this, void 0, void 0, function* () {
53
66
  let packagesToExport;
54
67
  if (keysByVersion.length) {
@@ -58,7 +71,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
58
71
  packagesToExport = yield this.batchImportExportApi.findActivePackagesByKeys(packageKeys, withDependencies);
59
72
  }
60
73
  else {
61
- packagesToExport = yield this.batchImportExportApi.findAllActivePackages(flavors, withDependencies);
74
+ packagesToExport = yield this.batchImportExportApi.findAllActivePackages(flavors, withDependencies, includeBranches);
62
75
  }
63
76
  packagesToExport = yield this.studioService.getExportPackagesWithStudioData(packagesToExport, withDependencies);
64
77
  this.exportListOfPackages(packagesToExport);
@@ -156,16 +169,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
156
169
  logger_1.logger.info("Config import report file: " + reportFileName);
157
170
  });
158
171
  }
159
- findAndExportListOfActivePackagesByVariableValue(flavors, variableValue, variableType) {
172
+ findAndExportListOfActivePackagesByVariableValue(flavors, variableValue, variableType, includeBranches) {
160
173
  return __awaiter(this, void 0, void 0, function* () {
161
- let packagesToExport = yield this.batchImportExportApi.findActivePackagesByVariableValue(flavors, variableValue, variableType);
174
+ let packagesToExport = yield this.batchImportExportApi.findActivePackagesByVariableValue(flavors, variableValue, variableType, includeBranches);
162
175
  packagesToExport = yield this.studioService.getExportPackagesWithStudioData(packagesToExport, false);
163
176
  this.exportListOfPackages(packagesToExport);
164
177
  });
165
178
  }
166
- listActivePackagesByVariableValue(flavors, variableValue, variableType) {
179
+ listActivePackagesByVariableValue(flavors, variableValue, variableType, includeBranches) {
167
180
  return __awaiter(this, void 0, void 0, function* () {
168
- const packagesByVariableValue = yield this.batchImportExportApi.findActivePackagesByVariableValue(flavors, variableValue, variableType);
181
+ const packagesByVariableValue = yield this.batchImportExportApi.findActivePackagesByVariableValue(flavors, variableValue, variableType, includeBranches);
169
182
  packagesByVariableValue.forEach(pkg => {
170
183
  logger_1.logger.info(`${pkg.name} - Key: "${pkg.key}"`);
171
184
  });
@@ -29,20 +29,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
29
29
  this.variableService = new variable_service_1.VariableService(context);
30
30
  this.diffService = new diff_service_1.DiffService(context);
31
31
  }
32
- listPackages(jsonResponse, flavors, withDependencies, packageKeys, keysByVersion, variableValue, variableType) {
32
+ listPackages(jsonResponse, flavors, withDependencies, packageKeys, keysByVersion, variableValue, variableType, includeBranches, staging) {
33
33
  return __awaiter(this, void 0, void 0, function* () {
34
- if (variableValue) {
35
- yield this.listPackagesByVariableValue(jsonResponse, flavors, variableValue, variableType);
36
- return;
34
+ if (staging) {
35
+ yield this.batchImportExportService.listStagingPackages(flavors !== null && flavors !== void 0 ? flavors : [], includeBranches, jsonResponse);
37
36
  }
38
- if (jsonResponse) {
39
- yield this.batchImportExportService.findAndExportListOfPackages(flavors !== null && flavors !== void 0 ? flavors : [], packageKeys !== null && packageKeys !== void 0 ? packageKeys : [], keysByVersion !== null && keysByVersion !== void 0 ? keysByVersion : [], withDependencies);
37
+ else if (variableValue) {
38
+ yield this.listPackagesByVariableValue(jsonResponse, flavors, variableValue, variableType, includeBranches);
39
+ }
40
+ else if (jsonResponse) {
41
+ yield this.batchImportExportService.findAndExportListOfPackages(flavors !== null && flavors !== void 0 ? flavors : [], packageKeys !== null && packageKeys !== void 0 ? packageKeys : [], keysByVersion !== null && keysByVersion !== void 0 ? keysByVersion : [], withDependencies, includeBranches);
40
42
  }
41
43
  else if (keysByVersion) {
42
44
  yield this.batchImportExportService.listPackagesByKeysWithVersion(keysByVersion, withDependencies);
43
45
  }
44
46
  else {
45
- yield this.batchImportExportService.listActivePackages(flavors !== null && flavors !== void 0 ? flavors : []);
47
+ yield this.batchImportExportService.listActivePackages(flavors !== null && flavors !== void 0 ? flavors : [], includeBranches);
46
48
  }
47
49
  });
48
50
  }
@@ -92,13 +94,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
92
94
  diffPackages(file, hasChanges, jsonResponse) {
93
95
  return this.diffService.diffPackages(file, hasChanges, jsonResponse);
94
96
  }
95
- listPackagesByVariableValue(jsonResponse, flavors, variableValue, variableType) {
97
+ listPackagesByVariableValue(jsonResponse, flavors, variableValue, variableType, includeBranches) {
96
98
  return __awaiter(this, void 0, void 0, function* () {
97
99
  if (jsonResponse) {
98
- yield this.batchImportExportService.findAndExportListOfActivePackagesByVariableValue(flavors !== null && flavors !== void 0 ? flavors : [], variableValue, variableType);
100
+ yield this.batchImportExportService.findAndExportListOfActivePackagesByVariableValue(flavors !== null && flavors !== void 0 ? flavors : [], variableValue, variableType, includeBranches);
99
101
  }
100
102
  else {
101
- yield this.batchImportExportService.listActivePackagesByVariableValue(flavors !== null && flavors !== void 0 ? flavors : [], variableValue, variableType);
103
+ yield this.batchImportExportService.listActivePackagesByVariableValue(flavors !== null && flavors !== void 0 ? flavors : [], variableValue, variableType, includeBranches);
102
104
  }
103
105
  });
104
106
  }
@@ -34,12 +34,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
34
34
  configCommand.command("list")
35
35
  .description("Command to list packages")
36
36
  .option("--json", "Return response as json type", "")
37
- .option("--flavors <flavors...>", "Lists only active packages of the given flavors")
37
+ .option("--flavors <flavors...>", "Lists only packages of the given flavors")
38
38
  .option("--withDependencies", "Include dependencies", "")
39
39
  .option("--packageKeys <packageKeys...>", "Lists only active versions of given package keys")
40
40
  .option("--keysByVersion <keysByVersion...>", "Lists packages by given key and version [packageKey.version]")
41
41
  .option("--variableValue <variableValue>", "Variable value for filtering packages by.")
42
42
  .option("--variableType <variableType>", "Variable type for filtering packages by.")
43
+ .option("--branches", "Include branches", false)
44
+ .option("--staging", "List staging packages instead", false)
43
45
  .action(this.listPackages);
44
46
  configCommand.command("export")
45
47
  .description("Command to export package configs")
@@ -70,7 +72,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
70
72
  configCommand.command("validate")
71
73
  .description("Validate package node configurations")
72
74
  .requiredOption("--packageKey <packageKey>", "Key of the package to validate")
73
- .option("--layers <layers...>", "Validation layers to run", ["SCHEMA"])
75
+ .option("--layers <layers...>", "Validation layers to run. Allowed values: SCHEMA, BUSINESS, PACKAGE_SETTINGS (can be combined, e.g. --layers SCHEMA BUSINESS PACKAGE_SETTINGS). Defaults to SCHEMA.", ["SCHEMA"])
74
76
  .option("--nodeKeys <nodeKeys...>", "Specific node keys to validate (default: all nodes)")
75
77
  .option("--json", "Return the response as a JSON file")
76
78
  .action(this.validatePackage);
@@ -153,7 +155,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
153
155
  .requiredOption("--packageKey <packageKey>", "Identifier of the package")
154
156
  .requiredOption("--nodeKey <nodeKey>", "Identifier of the node")
155
157
  .requiredOption("--baseVersion <baseVersion>", "Base version of the node")
156
- .requiredOption("--compareVersion <compareVersion>", "Compare version of the node")
158
+ .option("--compareVersion <compareVersion>", "Compare version of the node, mutually exclusive with --file (exactly one required)")
159
+ .option("-f, --file <file>", "Local node JSON file to diff against the base version, mutually exclusive with --compareVersion (exactly one required)")
157
160
  .option("--json", "Return the response as a JSON file")
158
161
  .action(this.diffNode);
159
162
  const nodeDependenciesCommand = nodesCommand.command("dependencies")
@@ -175,10 +178,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
175
178
  }
176
179
  listPackages(context, command, options) {
177
180
  return __awaiter(this, void 0, void 0, function* () {
181
+ if (options.staging && (options.withDependencies || options.packageKeys || options.keysByVersion || options.variableValue || options.variableType)) {
182
+ throw new Error("Staging parameter is not compatible with --withDependencies, --packageKeys, --keysByVersion, --variableValue, --variableType");
183
+ }
178
184
  if (options.packageKeys && options.keysByVersion) {
179
185
  throw new Error("Please provide either --packageKeys or --keysByVersion, but not both.");
180
186
  }
181
- yield new config_command_service_1.ConfigCommandService(context).listPackages(options.json, options.flavors, options.withDependencies, options.packageKeys, options.keysByVersion, options.variableValue, options.variableType);
187
+ yield new config_command_service_1.ConfigCommandService(context).listPackages(options.json, options.flavors, options.withDependencies, options.packageKeys, options.keysByVersion, options.variableValue, options.variableType, options.branches, options.staging);
182
188
  });
183
189
  }
184
190
  batchExportPackages(context, command, options) {
@@ -281,7 +287,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
281
287
  }
282
288
  diffNode(context, command, options) {
283
289
  return __awaiter(this, void 0, void 0, function* () {
284
- yield new node_diff_service_1.NodeDiffService(context).diff(options.packageKey, options.nodeKey, options.baseVersion, options.compareVersion, options.json);
290
+ if ((options.file && options.compareVersion) || (!options.file && !options.compareVersion)) {
291
+ throw new Error("Please provide either --compareVersion or --file, but not both.");
292
+ }
293
+ if (options.file) {
294
+ yield new node_diff_service_1.NodeDiffService(context).diffWithFile(options.packageKey, options.nodeKey, options.baseVersion, options.file, options.json);
295
+ }
296
+ else {
297
+ yield new node_diff_service_1.NodeDiffService(context).diff(options.packageKey, options.nodeKey, options.baseVersion, options.compareVersion, options.json);
298
+ }
285
299
  });
286
300
  }
287
301
  listNodeDependencies(context, command, options) {
@@ -13,12 +13,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
13
13
  if (v !== undefined) module.exports = v;
14
14
  }
15
15
  else if (typeof define === "function" && define.amd) {
16
- define(["require", "exports", "uuid", "../../core/utils/logger", "../../core/utils/file-service", "./api/node-diff-api"], factory);
16
+ define(["require", "exports", "node:fs", "uuid", "../../core/utils/logger", "../../core/utils/file-service", "./api/node-diff-api"], factory);
17
17
  }
18
18
  })(function (require, exports) {
19
19
  "use strict";
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
21
  exports.NodeDiffService = void 0;
22
+ const fs = require("node:fs");
22
23
  const uuid_1 = require("uuid");
23
24
  const logger_1 = require("../../core/utils/logger");
24
25
  const file_service_1 = require("../../core/utils/file-service");
@@ -36,27 +37,49 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
36
37
  compareVersion,
37
38
  });
38
39
  if (jsonResponse) {
39
- const filename = (0, uuid_1.v4)() + ".json";
40
- file_service_1.fileService.writeToFileWithGivenName(JSON.stringify(nodeDiff, null, 2), filename);
41
- logger_1.logger.info(file_service_1.FileService.fileDownloadedMessage + filename);
40
+ this.exportDiffAsJson(nodeDiff);
42
41
  }
43
42
  else {
44
- logger_1.logger.info(`Package Key: ${nodeDiff.packageKey}`);
45
- logger_1.logger.info(`Node Key: ${nodeDiff.nodeKey}`);
46
- logger_1.logger.info(`Name: ${nodeDiff.name}`);
47
- logger_1.logger.info(`Type: ${nodeDiff.type}`);
48
- logger_1.logger.info(`Is invalid configuration: ${nodeDiff.invalidContent}`);
49
- if (nodeDiff.parentNodeKey) {
50
- logger_1.logger.info(`Parent Node Key: ${nodeDiff.parentNodeKey}`);
51
- }
52
- logger_1.logger.info(`Change Date: ${new Date(nodeDiff.changeDate).toISOString()}`);
53
- logger_1.logger.info(`Updated By: ${nodeDiff.updatedBy}`);
54
- logger_1.logger.info(`Change Type: ${nodeDiff.changeType}`);
55
- logger_1.logger.info(`Changes: ${JSON.stringify(nodeDiff.changes)}`);
56
- logger_1.logger.info(`Metadata Changes: ${JSON.stringify(nodeDiff.metadataChanges)}`);
43
+ this.logDiff(nodeDiff);
57
44
  }
58
45
  });
59
46
  }
47
+ diffWithFile(packageKey, nodeKey, baseVersion, file, jsonResponse) {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ const nodeDiff = yield this.nodeDiffApi.diffWithFile({
50
+ packageKey,
51
+ nodeKey,
52
+ baseVersion,
53
+ file: fs.createReadStream(file),
54
+ });
55
+ if (jsonResponse) {
56
+ this.exportDiffAsJson(nodeDiff);
57
+ }
58
+ else {
59
+ this.logDiff(nodeDiff);
60
+ }
61
+ });
62
+ }
63
+ exportDiffAsJson(nodeDiff) {
64
+ const filename = (0, uuid_1.v4)() + ".json";
65
+ file_service_1.fileService.writeToFileWithGivenName(JSON.stringify(nodeDiff, null, 2), filename);
66
+ logger_1.logger.info(file_service_1.FileService.fileDownloadedMessage + filename);
67
+ }
68
+ logDiff(nodeDiff) {
69
+ logger_1.logger.info(`Package Key: ${nodeDiff.packageKey}`);
70
+ logger_1.logger.info(`Node Key: ${nodeDiff.nodeKey}`);
71
+ logger_1.logger.info(`Name: ${nodeDiff.name}`);
72
+ logger_1.logger.info(`Type: ${nodeDiff.type}`);
73
+ logger_1.logger.info(`Is invalid configuration: ${nodeDiff.invalidContent}`);
74
+ if (nodeDiff.parentNodeKey) {
75
+ logger_1.logger.info(`Parent Node Key: ${nodeDiff.parentNodeKey}`);
76
+ }
77
+ logger_1.logger.info(`Change Date: ${new Date(nodeDiff.changeDate).toISOString()}`);
78
+ logger_1.logger.info(`Updated By: ${nodeDiff.updatedBy}`);
79
+ logger_1.logger.info(`Change Type: ${nodeDiff.changeType}`);
80
+ logger_1.logger.info(`Changes: ${JSON.stringify(nodeDiff.changes)}`);
81
+ logger_1.logger.info(`Metadata Changes: ${JSON.stringify(nodeDiff.metadataChanges)}`);
82
+ }
60
83
  }
61
84
  exports.NodeDiffService = NodeDiffService;
62
85
  });
@@ -13,7 +13,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
13
13
  if (v !== undefined) module.exports = v;
14
14
  }
15
15
  else if (typeof define === "function" && define.amd) {
16
- define(["require", "exports", "adm-zip", "../studio/interfaces/package-manager.interfaces", "./interfaces/batch-export-import.constants", "../../core/utils/json", "../studio/api/package-api", "../studio/service/data-model.service", "../studio/api/node-api", "../studio/api/space-api", "../studio/api/studio-variables-api", "../studio/service/space.service", "../studio/service/studio-variable.service"], factory);
16
+ define(["require", "exports", "adm-zip", "../studio/interfaces/package-manager.interfaces", "./interfaces/batch-export-import.constants", "../../core/utils/json", "../studio/api/package-api", "../studio/service/data-model.service", "../studio/api/node-api", "../studio/api/space-api", "../studio/api/studio-variables-api", "../studio/service/space.service", "../studio/service/studio-variable.service", "../../core/utils/branches"], factory);
17
17
  }
18
18
  })(function (require, exports) {
19
19
  "use strict";
@@ -30,6 +30,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
30
30
  const studio_variables_api_1 = require("../studio/api/studio-variables-api");
31
31
  const space_service_1 = require("../studio/service/space.service");
32
32
  const studio_variable_service_1 = require("../studio/service/studio-variable.service");
33
+ const branches_1 = require("../../core/utils/branches");
33
34
  class StudioService {
34
35
  constructor(context) {
35
36
  this.studioPackageApi = new package_api_1.PackageApi(context);
@@ -89,7 +90,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
89
90
  }
90
91
  for (const manifest of studioManifests) {
91
92
  const existingPackage = existingStudioPackages.find(existingPackage => existingPackage.key === manifest.packageKey);
92
- if (existingPackage) {
93
+ if (existingPackage && !branches_1.BranchUtils.isBranchPackageKey(existingPackage.key)) {
93
94
  yield this.studioPackageApi.movePackageToSpace(existingPackage.id, manifest.space.id);
94
95
  }
95
96
  yield this.assignRuntimeVariables(manifest);
@@ -0,0 +1,23 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BranchUtils = void 0;
13
+ class BranchUtils {
14
+ static isBranchPackageKey(packageKey) {
15
+ if (!packageKey || packageKey.trim().length === 0) {
16
+ throw new Error("Package key cannot be empty");
17
+ }
18
+ return packageKey.includes(BranchUtils.BRANCH_SEPARATOR);
19
+ }
20
+ }
21
+ exports.BranchUtils = BranchUtils;
22
+ BranchUtils.BRANCH_SEPARATOR = "@";
23
+ });
@@ -1,12 +1,12 @@
1
1
  import { Context } from "../../core/command/cli-context";
2
- import { AssetRegistryDescriptor, AssetRegistryMetadata } from "./asset-registry.interfaces";
2
+ import { AgentSkillsResponse, AssetRegistryDescriptor, AssetRegistryMetadata } from "./asset-registry.interfaces";
3
3
  export declare class AssetRegistryApi {
4
4
  private httpClient;
5
5
  constructor(context: Context);
6
6
  listTypes(): Promise<AssetRegistryMetadata>;
7
+ listSkills(): Promise<AgentSkillsResponse>;
7
8
  getType(assetType: string): Promise<AssetRegistryDescriptor>;
8
9
  getSchema(assetType: string): Promise<any>;
9
10
  getExamples(assetType: string): Promise<any>;
10
- getMethodology(assetType: string): Promise<any>;
11
11
  validate(assetType: string, body: any): Promise<any>;
12
12
  }
@@ -0,0 +1,3 @@
1
+ export declare const ASSET_REGISTRY_DISABLED_ERROR = "Asset registry feature is currently disabled";
2
+ export declare const ASSET_REGISTRY_DISABLED_USER_MESSAGE = "Asset registry is not enabled for this team. Contact your administrator to enable the feature.";
3
+ export declare function handleAssetRegistryApiError(operation: string, error: unknown): never;
@@ -20,8 +20,8 @@ export interface AssetService {
20
20
  export interface AssetEndpoints {
21
21
  schema: string;
22
22
  validate: string;
23
- methodology?: string;
24
23
  examples?: string;
24
+ skills?: string;
25
25
  }
26
26
  export interface AssetContributions {
27
27
  pigEntityTypes: string[];
@@ -36,3 +36,15 @@ export interface ValidateOptions {
36
36
  file?: string;
37
37
  json: boolean;
38
38
  }
39
+ export interface AgentSkillMetadata {
40
+ version: string;
41
+ }
42
+ export interface AgentSkill {
43
+ name: string;
44
+ description: string;
45
+ path: string;
46
+ metadata: AgentSkillMetadata;
47
+ }
48
+ export interface AgentSkillsResponse {
49
+ skills: AgentSkill[];
50
+ }
@@ -4,15 +4,16 @@ export declare class AssetRegistryService {
4
4
  private api;
5
5
  constructor(context: Context);
6
6
  listTypes(jsonResponse: boolean): Promise<void>;
7
+ listSkills(jsonResponse: boolean): Promise<void>;
7
8
  getType(assetType: string, jsonResponse: boolean): Promise<void>;
8
9
  getSchema(assetType: string, jsonResponse: boolean): Promise<void>;
9
10
  getExamples(assetType: string, jsonResponse: boolean): Promise<void>;
10
- getMethodology(assetType: string, jsonResponse: boolean): Promise<void>;
11
11
  validate(opts: ValidateOptions): Promise<void>;
12
12
  private static readonly INLINE_VALIDATION_NODE_KEY;
13
13
  private buildValidatePayload;
14
14
  private parseJson;
15
15
  private outputResponse;
16
16
  private logDescriptorSummary;
17
+ private logSkillSummary;
17
18
  private logDescriptorDetail;
18
19
  }
@@ -7,6 +7,6 @@ declare class Module extends IModule {
7
7
  private getSchema;
8
8
  private validate;
9
9
  private getExamples;
10
- private getMethodology;
10
+ private listSkills;
11
11
  }
12
12
  export = Module;
@@ -5,8 +5,9 @@ import { Context } from "../../../core/command/cli-context";
5
5
  export declare class BatchImportExportApi {
6
6
  private httpClient;
7
7
  constructor(context: Context);
8
- findAllActivePackages(flavors: string[], withDependencies?: boolean): Promise<PackageExportTransport[]>;
9
- findActivePackagesByVariableValue(flavors: string[], variableValue: string, variableType: string): Promise<PackageExportTransport[]>;
8
+ findAllActivePackages(flavors: string[], withDependencies?: boolean, includeBranches?: boolean): Promise<PackageExportTransport[]>;
9
+ findAllStagingPackages(flavors: string[], includeBranches?: boolean): Promise<PackageExportTransport[]>;
10
+ findActivePackagesByVariableValue(flavors: string[], variableValue: string, variableType: string, includeBranches?: boolean): Promise<PackageExportTransport[]>;
10
11
  findActivePackagesByKeys(packageKeys: string[], withDependencies?: boolean): Promise<PackageExportTransport[]>;
11
12
  findPackagesByKeysAndVersion(packageKeysWithVersion: string[], withDependencies?: boolean): Promise<PackageExportTransport[]>;
12
13
  exportPackages(packageKeys: string[], withDependencies: boolean): Promise<Buffer>;
@@ -1,7 +1,8 @@
1
1
  import { Context } from "../../../core/command/cli-context";
2
- import { GetNodeDiffRequest, NodeConfigurationDiffTransport } from "../interfaces/node-diff.interfaces";
2
+ import { GetNodeDiffRequest, GetNodeDiffWithFileRequest, NodeConfigurationDiffTransport } from "../interfaces/node-diff.interfaces";
3
3
  export declare class NodeDiffApi {
4
4
  private httpClient;
5
5
  constructor(context: Context);
6
6
  diff(request: GetNodeDiffRequest): Promise<NodeConfigurationDiffTransport>;
7
+ diffWithFile(request: GetNodeDiffWithFileRequest): Promise<NodeConfigurationDiffTransport>;
7
8
  }
@@ -5,14 +5,15 @@ export declare class BatchImportExportService {
5
5
  private studioService;
6
6
  private gitService;
7
7
  constructor(context: Context);
8
- listActivePackages(flavors: string[]): Promise<void>;
9
- findAndExportListOfPackages(flavors: string[], packageKeys: string[], keysByVersion: string[], withDependencies: boolean): Promise<void>;
8
+ listActivePackages(flavors: string[], includeBranches: boolean): Promise<void>;
9
+ listStagingPackages(flavors: string[], includeBranches: boolean, jsonResponse: boolean): Promise<void>;
10
+ findAndExportListOfPackages(flavors: string[], packageKeys: string[], keysByVersion: string[], withDependencies: boolean, includeBranches: boolean): Promise<void>;
10
11
  listPackagesByKeysWithVersion(keysByVersion: string[], withDependencies: boolean): Promise<void>;
11
12
  batchExportPackages(packageKeys: string[], packageKeysByVersion: string[], withDependencies: boolean, gitBranch: string, unzip: boolean): Promise<void>;
12
13
  batchExportPackagesMetadata(packageKeys: string[], jsonResponse: boolean): Promise<void>;
13
14
  batchImportPackages(sourcePath: string, overwrite: boolean, gitBranch: string, performValidation?: boolean): Promise<void>;
14
- findAndExportListOfActivePackagesByVariableValue(flavors: string[], variableValue: string, variableType: string): Promise<void>;
15
- listActivePackagesByVariableValue(flavors: string[], variableValue: string, variableType: string): Promise<void>;
15
+ findAndExportListOfActivePackagesByVariableValue(flavors: string[], variableValue: string, variableType: string, includeBranches: boolean): Promise<void>;
16
+ listActivePackagesByVariableValue(flavors: string[], variableValue: string, variableType: string, includeBranches: boolean): Promise<void>;
16
17
  private exportListOfPackages;
17
18
  private getVersionsByPackageKey;
18
19
  private getVersionedVariablesForPackagesWithKeys;
@@ -4,7 +4,7 @@ export declare class ConfigCommandService {
4
4
  private variableService;
5
5
  private diffService;
6
6
  constructor(context: Context);
7
- listPackages(jsonResponse: boolean, flavors: string[], withDependencies: boolean, packageKeys: string[], keysByVersion: string[], variableValue: string, variableType: string): Promise<void>;
7
+ listPackages(jsonResponse: boolean, flavors: string[], withDependencies: boolean, packageKeys: string[], keysByVersion: string[], variableValue: string, variableType: string, includeBranches: boolean, staging: boolean): Promise<void>;
8
8
  listVariables(jsonResponse: boolean, keysByVersion: string[], keysByVersionFile: string, packageKeys: string[]): Promise<void>;
9
9
  batchExportPackages(packageKeys: string[], packageKeysByVersion: string[], withDependencies: boolean, gitBranch: string, unzip: boolean): Promise<void>;
10
10
  batchExportPackagesMetadata(packageKeys: string[], jsonResponse: boolean): Promise<void>;
@@ -1,3 +1,5 @@
1
+ /// <reference types="node" />
2
+ import { ReadStream } from "node:fs";
1
3
  import { ConfigurationChangeTransport, NodeConfigurationChangeType } from "./diff-package.interfaces";
2
4
  export interface GetNodeDiffRequest {
3
5
  packageKey: string;
@@ -5,6 +7,12 @@ export interface GetNodeDiffRequest {
5
7
  baseVersion: string;
6
8
  compareVersion: string;
7
9
  }
10
+ export interface GetNodeDiffWithFileRequest {
11
+ packageKey: string;
12
+ nodeKey: string;
13
+ baseVersion: string;
14
+ file: ReadStream;
15
+ }
8
16
  export interface NodeConfigurationDiffTransport {
9
17
  packageKey: string;
10
18
  nodeKey: string;
@@ -3,4 +3,7 @@ export declare class NodeDiffService {
3
3
  private nodeDiffApi;
4
4
  constructor(context: Context);
5
5
  diff(packageKey: string, nodeKey: string, baseVersion: string, compareVersion: string, jsonResponse: boolean): Promise<void>;
6
+ diffWithFile(packageKey: string, nodeKey: string, baseVersion: string, file: string, jsonResponse: boolean): Promise<void>;
7
+ private exportDiffAsJson;
8
+ private logDiff;
6
9
  }
@@ -0,0 +1,4 @@
1
+ export declare class BranchUtils {
2
+ private static readonly BRANCH_SEPARATOR;
3
+ static isBranchPackageKey(packageKey: string): boolean;
4
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celonis/content-cli",
3
- "version": "1.10.0",
3
+ "version": "1.11.0",
4
4
  "description": "CLI Tool to help manage content in Celonis Platform",
5
5
  "main": "content-cli.js",
6
6
  "bin": {