@semiont/cli 0.2.42 → 0.2.45

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 (2) hide show
  1. package/dist/cli.mjs +99 -83
  2. package/package.json +3 -3
package/dist/cli.mjs CHANGED
@@ -341,10 +341,10 @@ function mergeDefs(...defs) {
341
341
  function cloneDef(schema2) {
342
342
  return mergeDefs(schema2._zod.def);
343
343
  }
344
- function getElementAtPath(obj, path39) {
345
- if (!path39)
344
+ function getElementAtPath(obj, path40) {
345
+ if (!path40)
346
346
  return obj;
347
- return path39.reduce((acc, key) => acc?.[key], obj);
347
+ return path40.reduce((acc, key) => acc?.[key], obj);
348
348
  }
349
349
  function promiseAllObject(promisesObj) {
350
350
  const keys = Object.keys(promisesObj);
@@ -634,11 +634,11 @@ function aborted(x, startIndex = 0) {
634
634
  }
635
635
  return false;
636
636
  }
637
- function prefixIssues(path39, issues) {
637
+ function prefixIssues(path40, issues) {
638
638
  return issues.map((iss) => {
639
639
  var _a4;
640
640
  (_a4 = iss).path ?? (_a4.path = []);
641
- iss.path.unshift(path39);
641
+ iss.path.unshift(path40);
642
642
  return iss;
643
643
  });
644
644
  }
@@ -859,7 +859,7 @@ function formatError(error46, mapper = (issue2) => issue2.message) {
859
859
  }
860
860
  function treeifyError(error46, mapper = (issue2) => issue2.message) {
861
861
  const result = { errors: [] };
862
- const processError = (error47, path39 = []) => {
862
+ const processError = (error47, path40 = []) => {
863
863
  var _a4, _b;
864
864
  for (const issue2 of error47.issues) {
865
865
  if (issue2.code === "invalid_union" && issue2.errors.length) {
@@ -869,7 +869,7 @@ function treeifyError(error46, mapper = (issue2) => issue2.message) {
869
869
  } else if (issue2.code === "invalid_element") {
870
870
  processError({ issues: issue2.issues }, issue2.path);
871
871
  } else {
872
- const fullpath = [...path39, ...issue2.path];
872
+ const fullpath = [...path40, ...issue2.path];
873
873
  if (fullpath.length === 0) {
874
874
  result.errors.push(mapper(issue2));
875
875
  continue;
@@ -901,8 +901,8 @@ function treeifyError(error46, mapper = (issue2) => issue2.message) {
901
901
  }
902
902
  function toDotPath(_path) {
903
903
  const segs = [];
904
- const path39 = _path.map((seg) => typeof seg === "object" ? seg.key : seg);
905
- for (const seg of path39) {
904
+ const path40 = _path.map((seg) => typeof seg === "object" ? seg.key : seg);
905
+ for (const seg of path40) {
906
906
  if (typeof seg === "number")
907
907
  segs.push(`[${seg}]`);
908
908
  else if (typeof seg === "symbol")
@@ -17027,9 +17027,9 @@ async function startJanusGraph(context) {
17027
17027
  }
17028
17028
  };
17029
17029
  }
17030
- async function fileExists(path39) {
17030
+ async function fileExists(path40) {
17031
17031
  try {
17032
- await fs17.access(path39);
17032
+ await fs17.access(path40);
17033
17033
  return true;
17034
17034
  } catch {
17035
17035
  return false;
@@ -17963,9 +17963,9 @@ Files placed here will persist across service restarts.
17963
17963
  // src/platforms/posix/handlers/graph-provision.ts
17964
17964
  import * as fs23 from "fs/promises";
17965
17965
  import { execFileSync as execFileSync9 } from "child_process";
17966
- async function fileExists2(path39) {
17966
+ async function fileExists2(path40) {
17967
17967
  try {
17968
- await fs23.access(path39);
17968
+ await fs23.access(path40);
17969
17969
  return true;
17970
17970
  } catch {
17971
17971
  return false;
@@ -18268,7 +18268,23 @@ var init_backend_provision = __esm({
18268
18268
  }
18269
18269
  if (paths.fromNpmPackage) {
18270
18270
  if (!service.quiet) {
18271
- printInfo("Using pre-built npm package \u2014 skipping install, build, and prisma generate");
18271
+ printInfo("Using pre-built npm package \u2014 skipping install and build");
18272
+ }
18273
+ if (fs24.existsSync(prismaSchemaPath)) {
18274
+ if (!service.quiet) {
18275
+ printInfo("Generating Prisma client...");
18276
+ }
18277
+ try {
18278
+ execFileSync10("npx", ["prisma", "generate"], {
18279
+ cwd: backendSourceDir,
18280
+ stdio: service.verbose ? "inherit" : "pipe"
18281
+ });
18282
+ if (!service.quiet) {
18283
+ printSuccess("Prisma client generated");
18284
+ }
18285
+ } catch (error46) {
18286
+ printWarning(`Failed to generate Prisma client: ${error46}`);
18287
+ }
18272
18288
  }
18273
18289
  } else {
18274
18290
  if (!service.quiet) {
@@ -19198,9 +19214,9 @@ async function stopJanusGraph(context) {
19198
19214
  };
19199
19215
  }
19200
19216
  }
19201
- async function fileExists3(path39) {
19217
+ async function fileExists3(path40) {
19202
19218
  try {
19203
- await fs27.access(path39);
19219
+ await fs27.access(path40);
19204
19220
  return true;
19205
19221
  } catch {
19206
19222
  return false;
@@ -21283,9 +21299,9 @@ async function startJanusGraph2(context) {
21283
21299
  };
21284
21300
  }
21285
21301
  }
21286
- async function fileExists4(path39) {
21302
+ async function fileExists4(path40) {
21287
21303
  try {
21288
- await fs33.access(path39);
21304
+ await fs33.access(path40);
21289
21305
  return true;
21290
21306
  } catch {
21291
21307
  return false;
@@ -24438,9 +24454,9 @@ async function stopJanusGraph2(context) {
24438
24454
  };
24439
24455
  }
24440
24456
  }
24441
- async function fileExists5(path39) {
24457
+ async function fileExists5(path40) {
24442
24458
  try {
24443
- await fs36.access(path39);
24459
+ await fs36.access(path40);
24444
24460
  return true;
24445
24461
  } catch {
24446
24462
  return false;
@@ -30000,12 +30016,12 @@ var init_path = __esm({
30000
30016
  "../../node_modules/@anthropic-ai/sdk/internal/utils/path.mjs"() {
30001
30017
  init_error();
30002
30018
  EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));
30003
- createPathTagFunction = (pathEncoder = encodeURIPath) => function path39(statics, ...params) {
30019
+ createPathTagFunction = (pathEncoder = encodeURIPath) => function path40(statics, ...params) {
30004
30020
  if (statics.length === 1)
30005
30021
  return statics[0];
30006
30022
  let postPath = false;
30007
30023
  const invalidSegments = [];
30008
- const path40 = statics.reduce((previousValue, currentValue, index) => {
30024
+ const path41 = statics.reduce((previousValue, currentValue, index) => {
30009
30025
  if (/[?#]/.test(currentValue)) {
30010
30026
  postPath = true;
30011
30027
  }
@@ -30022,7 +30038,7 @@ var init_path = __esm({
30022
30038
  }
30023
30039
  return previousValue + currentValue + (index === params.length ? "" : encoded);
30024
30040
  }, "");
30025
- const pathOnly = path40.split(/[?#]/, 1)[0];
30041
+ const pathOnly = path41.split(/[?#]/, 1)[0];
30026
30042
  const invalidSegmentPattern = /(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;
30027
30043
  let match;
30028
30044
  while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {
@@ -30043,10 +30059,10 @@ var init_path = __esm({
30043
30059
  }, "");
30044
30060
  throw new AnthropicError(`Path parameters result in path with invalid segments:
30045
30061
  ${invalidSegments.map((e) => e.error).join("\n")}
30046
- ${path40}
30062
+ ${path41}
30047
30063
  ${underline}`);
30048
30064
  }
30049
- return path40;
30065
+ return path41;
30050
30066
  };
30051
30067
  path33 = /* @__PURE__ */ createPathTagFunction(encodeURIPath);
30052
30068
  }
@@ -32729,9 +32745,9 @@ var init_client = __esm({
32729
32745
  makeStatusError(status, error46, message, headers) {
32730
32746
  return APIError.generate(status, error46, message, headers);
32731
32747
  }
32732
- buildURL(path39, query, defaultBaseURL) {
32748
+ buildURL(path40, query, defaultBaseURL) {
32733
32749
  const baseURL = !__classPrivateFieldGet(this, _BaseAnthropic_instances, "m", _BaseAnthropic_baseURLOverridden).call(this) && defaultBaseURL || this.baseURL;
32734
- const url2 = isAbsoluteURL(path39) ? new URL(path39) : new URL(baseURL + (baseURL.endsWith("/") && path39.startsWith("/") ? path39.slice(1) : path39));
32750
+ const url2 = isAbsoluteURL(path40) ? new URL(path40) : new URL(baseURL + (baseURL.endsWith("/") && path40.startsWith("/") ? path40.slice(1) : path40));
32735
32751
  const defaultQuery = this.defaultQuery();
32736
32752
  if (!isEmptyObj(defaultQuery)) {
32737
32753
  query = { ...defaultQuery, ...query };
@@ -32762,24 +32778,24 @@ var init_client = __esm({
32762
32778
  */
32763
32779
  async prepareRequest(request, { url: url2, options }) {
32764
32780
  }
32765
- get(path39, opts) {
32766
- return this.methodRequest("get", path39, opts);
32781
+ get(path40, opts) {
32782
+ return this.methodRequest("get", path40, opts);
32767
32783
  }
32768
- post(path39, opts) {
32769
- return this.methodRequest("post", path39, opts);
32784
+ post(path40, opts) {
32785
+ return this.methodRequest("post", path40, opts);
32770
32786
  }
32771
- patch(path39, opts) {
32772
- return this.methodRequest("patch", path39, opts);
32787
+ patch(path40, opts) {
32788
+ return this.methodRequest("patch", path40, opts);
32773
32789
  }
32774
- put(path39, opts) {
32775
- return this.methodRequest("put", path39, opts);
32790
+ put(path40, opts) {
32791
+ return this.methodRequest("put", path40, opts);
32776
32792
  }
32777
- delete(path39, opts) {
32778
- return this.methodRequest("delete", path39, opts);
32793
+ delete(path40, opts) {
32794
+ return this.methodRequest("delete", path40, opts);
32779
32795
  }
32780
- methodRequest(method, path39, opts) {
32796
+ methodRequest(method, path40, opts) {
32781
32797
  return this.request(Promise.resolve(opts).then((opts2) => {
32782
- return { method, path: path39, ...opts2 };
32798
+ return { method, path: path40, ...opts2 };
32783
32799
  }));
32784
32800
  }
32785
32801
  request(options, remainingRetries = null) {
@@ -32883,8 +32899,8 @@ var init_client = __esm({
32883
32899
  }));
32884
32900
  return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };
32885
32901
  }
32886
- getAPIList(path39, Page3, opts) {
32887
- return this.requestAPIList(Page3, { method: "get", path: path39, ...opts });
32902
+ getAPIList(path40, Page3, opts) {
32903
+ return this.requestAPIList(Page3, { method: "get", path: path40, ...opts });
32888
32904
  }
32889
32905
  requestAPIList(Page3, options) {
32890
32906
  const request = this.makeRequest(options, null, void 0);
@@ -32971,8 +32987,8 @@ var init_client = __esm({
32971
32987
  }
32972
32988
  async buildRequest(inputOptions, { retryCount = 0 } = {}) {
32973
32989
  const options = { ...inputOptions };
32974
- const { method, path: path39, query, defaultBaseURL } = options;
32975
- const url2 = this.buildURL(path39, query, defaultBaseURL);
32990
+ const { method, path: path40, query, defaultBaseURL } = options;
32991
+ const url2 = this.buildURL(path40, query, defaultBaseURL);
32976
32992
  if ("timeout" in options)
32977
32993
  validatePositiveInteger("timeout", options.timeout);
32978
32994
  options.timeout = options.timeout ?? this.timeout;
@@ -34850,12 +34866,12 @@ var init_path2 = __esm({
34850
34866
  "../../node_modules/openai/internal/utils/path.mjs"() {
34851
34867
  init_error3();
34852
34868
  EMPTY2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));
34853
- createPathTagFunction2 = (pathEncoder = encodeURIPath2) => function path39(statics, ...params) {
34869
+ createPathTagFunction2 = (pathEncoder = encodeURIPath2) => function path40(statics, ...params) {
34854
34870
  if (statics.length === 1)
34855
34871
  return statics[0];
34856
34872
  let postPath = false;
34857
34873
  const invalidSegments = [];
34858
- const path40 = statics.reduce((previousValue, currentValue, index) => {
34874
+ const path41 = statics.reduce((previousValue, currentValue, index) => {
34859
34875
  if (/[?#]/.test(currentValue)) {
34860
34876
  postPath = true;
34861
34877
  }
@@ -34872,7 +34888,7 @@ var init_path2 = __esm({
34872
34888
  }
34873
34889
  return previousValue + currentValue + (index === params.length ? "" : encoded);
34874
34890
  }, "");
34875
- const pathOnly = path40.split(/[?#]/, 1)[0];
34891
+ const pathOnly = path41.split(/[?#]/, 1)[0];
34876
34892
  const invalidSegmentPattern = /(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;
34877
34893
  let match;
34878
34894
  while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {
@@ -34893,10 +34909,10 @@ var init_path2 = __esm({
34893
34909
  }, "");
34894
34910
  throw new OpenAIError(`Path parameters result in path with invalid segments:
34895
34911
  ${invalidSegments.map((e) => e.error).join("\n")}
34896
- ${path40}
34912
+ ${path41}
34897
34913
  ${underline}`);
34898
34914
  }
34899
- return path40;
34915
+ return path41;
34900
34916
  };
34901
34917
  path34 = /* @__PURE__ */ createPathTagFunction2(encodeURIPath2);
34902
34918
  }
@@ -40049,9 +40065,9 @@ var init_client2 = __esm({
40049
40065
  this.apiKey = token;
40050
40066
  return true;
40051
40067
  }
40052
- buildURL(path39, query, defaultBaseURL) {
40068
+ buildURL(path40, query, defaultBaseURL) {
40053
40069
  const baseURL = !__classPrivateFieldGet2(this, _OpenAI_instances, "m", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL || this.baseURL;
40054
- const url2 = isAbsoluteURL2(path39) ? new URL(path39) : new URL(baseURL + (baseURL.endsWith("/") && path39.startsWith("/") ? path39.slice(1) : path39));
40070
+ const url2 = isAbsoluteURL2(path40) ? new URL(path40) : new URL(baseURL + (baseURL.endsWith("/") && path40.startsWith("/") ? path40.slice(1) : path40));
40055
40071
  const defaultQuery = this.defaultQuery();
40056
40072
  if (!isEmptyObj2(defaultQuery)) {
40057
40073
  query = { ...defaultQuery, ...query };
@@ -40075,24 +40091,24 @@ var init_client2 = __esm({
40075
40091
  */
40076
40092
  async prepareRequest(request, { url: url2, options }) {
40077
40093
  }
40078
- get(path39, opts) {
40079
- return this.methodRequest("get", path39, opts);
40094
+ get(path40, opts) {
40095
+ return this.methodRequest("get", path40, opts);
40080
40096
  }
40081
- post(path39, opts) {
40082
- return this.methodRequest("post", path39, opts);
40097
+ post(path40, opts) {
40098
+ return this.methodRequest("post", path40, opts);
40083
40099
  }
40084
- patch(path39, opts) {
40085
- return this.methodRequest("patch", path39, opts);
40100
+ patch(path40, opts) {
40101
+ return this.methodRequest("patch", path40, opts);
40086
40102
  }
40087
- put(path39, opts) {
40088
- return this.methodRequest("put", path39, opts);
40103
+ put(path40, opts) {
40104
+ return this.methodRequest("put", path40, opts);
40089
40105
  }
40090
- delete(path39, opts) {
40091
- return this.methodRequest("delete", path39, opts);
40106
+ delete(path40, opts) {
40107
+ return this.methodRequest("delete", path40, opts);
40092
40108
  }
40093
- methodRequest(method, path39, opts) {
40109
+ methodRequest(method, path40, opts) {
40094
40110
  return this.request(Promise.resolve(opts).then((opts2) => {
40095
- return { method, path: path39, ...opts2 };
40111
+ return { method, path: path40, ...opts2 };
40096
40112
  }));
40097
40113
  }
40098
40114
  request(options, remainingRetries = null) {
@@ -40196,8 +40212,8 @@ var init_client2 = __esm({
40196
40212
  }));
40197
40213
  return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };
40198
40214
  }
40199
- getAPIList(path39, Page3, opts) {
40200
- return this.requestAPIList(Page3, { method: "get", path: path39, ...opts });
40215
+ getAPIList(path40, Page3, opts) {
40216
+ return this.requestAPIList(Page3, { method: "get", path: path40, ...opts });
40201
40217
  }
40202
40218
  requestAPIList(Page3, options) {
40203
40219
  const request = this.makeRequest(options, null, void 0);
@@ -40275,8 +40291,8 @@ var init_client2 = __esm({
40275
40291
  }
40276
40292
  async buildRequest(inputOptions, { retryCount = 0 } = {}) {
40277
40293
  const options = { ...inputOptions };
40278
- const { method, path: path39, query, defaultBaseURL } = options;
40279
- const url2 = this.buildURL(path39, query, defaultBaseURL);
40294
+ const { method, path: path40, query, defaultBaseURL } = options;
40295
+ const url2 = this.buildURL(path40, query, defaultBaseURL);
40280
40296
  if ("timeout" in options)
40281
40297
  validatePositiveInteger2("timeout", options.timeout);
40282
40298
  options.timeout = options.timeout ?? this.timeout;
@@ -42753,7 +42769,7 @@ var require_package = __commonJS({
42753
42769
  "package.json"(exports, module) {
42754
42770
  module.exports = {
42755
42771
  name: "@semiont/cli",
42756
- version: "0.2.42",
42772
+ version: "0.2.45",
42757
42773
  description: "Semiont CLI - Unified environment management tool",
42758
42774
  _comment: "AWS SDK dependencies (@aws-sdk/*) are only used by platforms/aws",
42759
42775
  type: "module",
@@ -42817,8 +42833,8 @@ var require_package = __commonJS({
42817
42833
  "@aws-sdk/client-secrets-manager": "^3.600.0",
42818
42834
  "@aws-sdk/client-sts": "^3.859.0",
42819
42835
  "@aws-sdk/client-wafv2": "^3.859.0",
42820
- "@semiont/api-client": "^0.2.42",
42821
- "@semiont/core": "^0.2.42",
42836
+ "@semiont/api-client": "^0.2.45",
42837
+ "@semiont/core": "^0.2.45",
42822
42838
  "@testcontainers/postgresql": "^11.5.1",
42823
42839
  arg: "^5.0.2",
42824
42840
  argon2: "^0.43.0",
@@ -43893,10 +43909,11 @@ init_cli_logger();
43893
43909
  init_config_loader();
43894
43910
  import * as crypto4 from "crypto";
43895
43911
  import * as argon2 from "argon2";
43912
+ import * as path36 from "path";
43896
43913
  import { createRequire as createRequire3 } from "module";
43897
- function loadPrismaClient() {
43914
+ function loadPrismaClient(projectRoot) {
43915
+ const req = createRequire3(path36.join(projectRoot, "node_modules", ".package.json"));
43898
43916
  try {
43899
- const req = createRequire3(import.meta.url);
43900
43917
  const backendPkgPath = req.resolve("@semiont/backend/package.json");
43901
43918
  const backendReq = createRequire3(backendPkgPath);
43902
43919
  const mod = backendReq("@prisma/client");
@@ -43904,7 +43921,6 @@ function loadPrismaClient() {
43904
43921
  } catch {
43905
43922
  }
43906
43923
  try {
43907
- const req = createRequire3(import.meta.url);
43908
43924
  const mod = req("@prisma/client");
43909
43925
  return mod.PrismaClient;
43910
43926
  } catch {
@@ -43965,7 +43981,7 @@ async function useradd(options) {
43965
43981
  throw new Error("Incomplete database configuration: need POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB, and port");
43966
43982
  }
43967
43983
  const databaseUrl = `postgresql://${dbUser}:${dbPassword}@${dbHost}:${dbPort}/${dbName}`;
43968
- const PrismaClient = loadPrismaClient();
43984
+ const PrismaClient = loadPrismaClient(projectRoot);
43969
43985
  const prisma = new PrismaClient({
43970
43986
  datasources: { db: { url: databaseUrl } }
43971
43987
  });
@@ -44189,7 +44205,7 @@ function isCommandDefinition(obj) {
44189
44205
 
44190
44206
  // src/core/service-discovery.ts
44191
44207
  init_config_loader();
44192
- import * as path36 from "path";
44208
+ import * as path37 from "path";
44193
44209
  import * as fs44 from "fs";
44194
44210
  var BUILT_IN_SERVICES = ["frontend", "backend", "database", "filesystem"];
44195
44211
  var environmentServicesCache = /* @__PURE__ */ new Map();
@@ -44199,7 +44215,7 @@ async function loadEnvironmentServices(environment) {
44199
44215
  }
44200
44216
  try {
44201
44217
  const PROJECT_ROOT = findProjectRoot();
44202
- const configPath = path36.join(PROJECT_ROOT, "environments", `${environment}.json`);
44218
+ const configPath = path37.join(PROJECT_ROOT, "environments", `${environment}.json`);
44203
44219
  if (!fs44.existsSync(configPath)) {
44204
44220
  return [...BUILT_IN_SERVICES];
44205
44221
  }
@@ -44234,7 +44250,7 @@ async function isValidService(service, environment) {
44234
44250
  import { parseEnvironment as parseEnvironment2 } from "@semiont/core";
44235
44251
 
44236
44252
  // src/core/service-resolver.ts
44237
- import * as path37 from "path";
44253
+ import * as path38 from "path";
44238
44254
  import { ConfigurationError as ConfigurationError2 } from "@semiont/core";
44239
44255
  function getServicePlatform(serviceName, config2) {
44240
44256
  const environment = config2._metadata?.environment;
@@ -44282,7 +44298,7 @@ function resolveServiceDeployments(serviceNames, config2) {
44282
44298
  const serviceConfig = config2.services?.[serviceName];
44283
44299
  if (!serviceConfig) {
44284
44300
  const availableServices = Object.keys(config2.services || {});
44285
- const configPath = path37.join(projectRoot, "environments", `${environment}.json`);
44301
+ const configPath = path38.join(projectRoot, "environments", `${environment}.json`);
44286
44302
  console.warn(`\u274C Service '${serviceName}' not found in environment '${environment}'`);
44287
44303
  if (availableServices.length > 0) {
44288
44304
  console.warn(` Available services: ${availableServices.join(", ")}`);
@@ -44321,7 +44337,7 @@ function resolveServiceDeployments(serviceNames, config2) {
44321
44337
  // src/core/command-service-matcher.ts
44322
44338
  init_service_factory();
44323
44339
  init_service_command_capabilities();
44324
- import * as path38 from "path";
44340
+ import * as path39 from "path";
44325
44341
  async function checkServiceSupportsCommand(serviceName, command, envConfig) {
44326
44342
  try {
44327
44343
  const projectRoot = envConfig._metadata?.projectRoot;
@@ -44405,7 +44421,7 @@ async function resolveServiceSelector(selector, capability, envConfig) {
44405
44421
  if (!projectRoot) {
44406
44422
  throw new Error("Project root is required in envConfig._metadata");
44407
44423
  }
44408
- const configPath = path38.join(projectRoot, "environments", `${environment}.json`);
44424
+ const configPath = path39.join(projectRoot, "environments", `${environment}.json`);
44409
44425
  const errorMessage = [
44410
44426
  `Unknown service '${selector}' in environment '${environment}'`,
44411
44427
  `Available services: ${availableServices.join(", ")}`,
@@ -44901,14 +44917,14 @@ var OutputFormatter = class {
44901
44917
  /**
44902
44918
  * Get nested value from object using dot notation
44903
44919
  */
44904
- static getNestedValue(obj, path39) {
44905
- return path39.split(".").reduce((current, key) => current?.[key], obj);
44920
+ static getNestedValue(obj, path40) {
44921
+ return path40.split(".").reduce((current, key) => current?.[key], obj);
44906
44922
  }
44907
44923
  /**
44908
44924
  * Set nested value in object using dot notation
44909
44925
  */
44910
- static setNestedValue(obj, path39, value) {
44911
- const keys = path39.split(".");
44926
+ static setNestedValue(obj, path40, value) {
44927
+ const keys = path40.split(".");
44912
44928
  const lastKey = keys.pop();
44913
44929
  const target = keys.reduce((current, key) => {
44914
44930
  if (!(key in current)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@semiont/cli",
3
- "version": "0.2.42",
3
+ "version": "0.2.45",
4
4
  "description": "Semiont CLI - Unified environment management tool",
5
5
  "_comment": "AWS SDK dependencies (@aws-sdk/*) are only used by platforms/aws",
6
6
  "type": "module",
@@ -64,8 +64,8 @@
64
64
  "@aws-sdk/client-secrets-manager": "^3.600.0",
65
65
  "@aws-sdk/client-sts": "^3.859.0",
66
66
  "@aws-sdk/client-wafv2": "^3.859.0",
67
- "@semiont/api-client": "0.2.42",
68
- "@semiont/core": "0.2.42",
67
+ "@semiont/api-client": "0.2.45",
68
+ "@semiont/core": "0.2.45",
69
69
  "@testcontainers/postgresql": "^11.5.1",
70
70
  "arg": "^5.0.2",
71
71
  "argon2": "^0.43.0",