@coana-tech/cli 14.12.170 → 14.12.172

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cli.mjs CHANGED
@@ -14866,8 +14866,8 @@ var require_utils = __commonJS({
14866
14866
  exports2.toPosixSlashes = (str) => str.replace(REGEX_BACKSLASH, "/");
14867
14867
  exports2.isWindows = () => {
14868
14868
  if (typeof navigator !== "undefined" && navigator.platform) {
14869
- const platform9 = navigator.platform.toLowerCase();
14870
- return platform9 === "win32" || platform9 === "windows";
14869
+ const platform10 = navigator.platform.toLowerCase();
14870
+ return platform10 === "win32" || platform10 === "windows";
14871
14871
  }
14872
14872
  if (typeof process !== "undefined" && process.platform) {
14873
14873
  return process.platform === "win32";
@@ -56426,8 +56426,8 @@ var require_path_key = __commonJS({
56426
56426
  "use strict";
56427
56427
  var pathKey = (options = {}) => {
56428
56428
  const environment = options.env || process.env;
56429
- const platform9 = options.platform || process.platform;
56430
- if (platform9 !== "win32") {
56429
+ const platform10 = options.platform || process.platform;
56430
+ if (platform10 !== "win32") {
56431
56431
  return "PATH";
56432
56432
  }
56433
56433
  return Object.keys(environment).reverse().find((key) => key.toUpperCase() === "PATH") || "Path";
@@ -69910,7 +69910,7 @@ var require_lockfile = __commonJS({
69910
69910
  }
69911
69911
  const file = _ref22;
69912
69912
  if (yield exists2(file)) {
69913
- return readFile38(file);
69913
+ return readFile39(file);
69914
69914
  }
69915
69915
  }
69916
69916
  return null;
@@ -69929,7 +69929,7 @@ var require_lockfile = __commonJS({
69929
69929
  })();
69930
69930
  let readJsonAndFile = exports3.readJsonAndFile = (() => {
69931
69931
  var _ref24 = (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* (loc) {
69932
- const file = yield readFile38(loc);
69932
+ const file = yield readFile39(loc);
69933
69933
  try {
69934
69934
  return {
69935
69935
  object: (0, (_map || _load_map()).default)(JSON.parse(stripBOM2(file))),
@@ -70169,7 +70169,7 @@ var require_lockfile = __commonJS({
70169
70169
  };
70170
70170
  })();
70171
70171
  exports3.copy = copy;
70172
- exports3.readFile = readFile38;
70172
+ exports3.readFile = readFile39;
70173
70173
  exports3.readFileRaw = readFileRaw;
70174
70174
  exports3.normalizeOS = normalizeOS;
70175
70175
  var _fs;
@@ -70267,7 +70267,7 @@ var require_lockfile = __commonJS({
70267
70267
  });
70268
70268
  });
70269
70269
  }
70270
- function readFile38(loc) {
70270
+ function readFile39(loc) {
70271
70271
  return _readFile(loc, "utf8").then(normalizeOS);
70272
70272
  }
70273
70273
  function readFileRaw(loc) {
@@ -70346,9 +70346,9 @@ var require_lockfile = __commonJS({
70346
70346
  const SINGLE_INSTANCE_PORT = exports3.SINGLE_INSTANCE_PORT = 31997;
70347
70347
  const SINGLE_INSTANCE_FILENAME = exports3.SINGLE_INSTANCE_FILENAME = ".yarn-single-instance";
70348
70348
  const ENV_PATH_KEY = exports3.ENV_PATH_KEY = getPathKey(process.platform, process.env);
70349
- function getPathKey(platform9, env) {
70349
+ function getPathKey(platform10, env) {
70350
70350
  let pathKey = "PATH";
70351
- if (platform9 === "win32") {
70351
+ if (platform10 === "win32") {
70352
70352
  pathKey = "Path";
70353
70353
  for (const key in env) {
70354
70354
  if (key.toLowerCase() === "path") {
@@ -176243,7 +176243,7 @@ var require_client_metadata = __commonJS({
176243
176243
  const name3 = Buffer.byteLength(appName, "utf8") <= 128 ? options.appName : Buffer.from(appName, "utf8").subarray(0, 128).toString("utf8");
176244
176244
  metadataDocument.ifItFitsItSits("application", { name: name3 });
176245
176245
  }
176246
- const { name: name2 = "", version: version4 = "", platform: platform9 = "" } = options.driverInfo;
176246
+ const { name: name2 = "", version: version4 = "", platform: platform10 = "" } = options.driverInfo;
176247
176247
  const driverInfo = {
176248
176248
  name: name2.length > 0 ? `nodejs|${name2}` : "nodejs",
176249
176249
  version: version4.length > 0 ? `${NODE_DRIVER_VERSION}|${version4}` : NODE_DRIVER_VERSION
@@ -176252,8 +176252,8 @@ var require_client_metadata = __commonJS({
176252
176252
  throw new error_1.MongoInvalidArgumentError("Unable to include driverInfo name and version, metadata cannot exceed 512 bytes");
176253
176253
  }
176254
176254
  let runtimeInfo = getRuntimeInfo();
176255
- if (platform9.length > 0) {
176256
- runtimeInfo = `${runtimeInfo}|${platform9}`;
176255
+ if (platform10.length > 0) {
176256
+ runtimeInfo = `${runtimeInfo}|${platform10}`;
176257
176257
  }
176258
176258
  if (!metadataDocument.ifItFitsItSits("platform", runtimeInfo)) {
176259
176259
  throw new error_1.MongoInvalidArgumentError("Unable to include driverInfo platform, metadata cannot exceed 512 bytes");
@@ -194903,14 +194903,14 @@ var require_axios = __commonJS({
194903
194903
  navigator: _navigator2,
194904
194904
  origin: origin2
194905
194905
  });
194906
- var platform9 = {
194906
+ var platform10 = {
194907
194907
  ...utils,
194908
194908
  ...platform$1
194909
194909
  };
194910
194910
  function toURLEncodedForm2(data2, options) {
194911
- return toFormData3(data2, new platform9.classes.URLSearchParams(), {
194911
+ return toFormData3(data2, new platform10.classes.URLSearchParams(), {
194912
194912
  visitor: function(value2, key, path9, helpers) {
194913
- if (platform9.isNode && utils$1.isBuffer(value2)) {
194913
+ if (platform10.isNode && utils$1.isBuffer(value2)) {
194914
194914
  this.append(key, value2.toString("base64"));
194915
194915
  return false;
194916
194916
  }
@@ -195059,8 +195059,8 @@ var require_axios = __commonJS({
195059
195059
  maxContentLength: -1,
195060
195060
  maxBodyLength: -1,
195061
195061
  env: {
195062
- FormData: platform9.classes.FormData,
195063
- Blob: platform9.classes.Blob
195062
+ FormData: platform10.classes.FormData,
195063
+ Blob: platform10.classes.Blob
195064
195064
  },
195065
195065
  validateStatus: function validateStatus2(status) {
195066
195066
  return status >= 200 && status < 300;
@@ -195401,7 +195401,7 @@ var require_axios = __commonJS({
195401
195401
  }
195402
195402
  var DATA_URL_PATTERN2 = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/;
195403
195403
  function fromDataURI2(uri, asBlob, options) {
195404
- const _Blob = options && options.Blob || platform9.classes.Blob;
195404
+ const _Blob = options && options.Blob || platform10.classes.Blob;
195405
195405
  const protocol = parseProtocol2(uri);
195406
195406
  if (asBlob === void 0 && _Blob) {
195407
195407
  asBlob = true;
@@ -195551,7 +195551,7 @@ var require_axios = __commonJS({
195551
195551
  }
195552
195552
  };
195553
195553
  var readBlob$1 = readBlob2;
195554
- var BOUNDARY_ALPHABET2 = platform9.ALPHABET.ALPHA_DIGIT + "-_";
195554
+ var BOUNDARY_ALPHABET2 = platform10.ALPHABET.ALPHA_DIGIT + "-_";
195555
195555
  var textEncoder2 = typeof TextEncoder === "function" ? new TextEncoder() : new util__default["default"].TextEncoder();
195556
195556
  var CRLF2 = "\r\n";
195557
195557
  var CRLF_BYTES2 = textEncoder2.encode(CRLF2);
@@ -195594,7 +195594,7 @@ var require_axios = __commonJS({
195594
195594
  const {
195595
195595
  tag = "form-data-boundary",
195596
195596
  size = 25,
195597
- boundary = tag + "-" + platform9.generateString(size, BOUNDARY_ALPHABET2)
195597
+ boundary = tag + "-" + platform10.generateString(size, BOUNDARY_ALPHABET2)
195598
195598
  } = options || {};
195599
195599
  if (!utils$1.isFormData(form)) {
195600
195600
  throw TypeError("FormData instance required");
@@ -195818,7 +195818,7 @@ var require_axios = __commonJS({
195818
195818
  var isBrotliSupported2 = utils$1.isFunction(zlib__default["default"].createBrotliDecompress);
195819
195819
  var { http: httpFollow2, https: httpsFollow2 } = followRedirects__default["default"];
195820
195820
  var isHttps2 = /https:?/;
195821
- var supportedProtocols2 = platform9.protocols.map((protocol) => {
195821
+ var supportedProtocols2 = platform10.protocols.map((protocol) => {
195822
195822
  return protocol + ":";
195823
195823
  });
195824
195824
  var flushOnFinish2 = (stream6, [throttled, flush]) => {
@@ -195945,7 +195945,7 @@ var require_axios = __commonJS({
195945
195945
  }
195946
195946
  }
195947
195947
  const fullPath = buildFullPath2(config3.baseURL, config3.url, config3.allowAbsoluteUrls);
195948
- const parsed = new URL(fullPath, platform9.hasBrowserEnv ? platform9.origin : void 0);
195948
+ const parsed = new URL(fullPath, platform10.hasBrowserEnv ? platform10.origin : void 0);
195949
195949
  const protocol = parsed.protocol || supportedProtocols2[0];
195950
195950
  if (protocol === "data:") {
195951
195951
  if (config3.maxContentLength > -1) {
@@ -196317,14 +196317,14 @@ var require_axios = __commonJS({
196317
196317
  }
196318
196318
  });
196319
196319
  };
196320
- var isURLSameOrigin = platform9.hasStandardBrowserEnv ? /* @__PURE__ */ ((origin3, isMSIE) => (url3) => {
196321
- url3 = new URL(url3, platform9.origin);
196320
+ var isURLSameOrigin = platform10.hasStandardBrowserEnv ? /* @__PURE__ */ ((origin3, isMSIE) => (url3) => {
196321
+ url3 = new URL(url3, platform10.origin);
196322
196322
  return origin3.protocol === url3.protocol && origin3.host === url3.host && (isMSIE || origin3.port === url3.port);
196323
196323
  })(
196324
- new URL(platform9.origin),
196325
- platform9.navigator && /(msie|trident)/i.test(platform9.navigator.userAgent)
196324
+ new URL(platform10.origin),
196325
+ platform10.navigator && /(msie|trident)/i.test(platform10.navigator.userAgent)
196326
196326
  ) : () => true;
196327
- var cookies = platform9.hasStandardBrowserEnv ? (
196327
+ var cookies = platform10.hasStandardBrowserEnv ? (
196328
196328
  // Standard browser envs support document.cookie
196329
196329
  {
196330
196330
  write(name2, value2, expires, path9, domain, secure) {
@@ -196445,7 +196445,7 @@ var require_axios = __commonJS({
196445
196445
  );
196446
196446
  }
196447
196447
  if (utils$1.isFormData(data2)) {
196448
- if (platform9.hasStandardBrowserEnv || platform9.hasStandardBrowserWebWorkerEnv) {
196448
+ if (platform10.hasStandardBrowserEnv || platform10.hasStandardBrowserWebWorkerEnv) {
196449
196449
  headers.setContentType(void 0);
196450
196450
  } else if (utils$1.isFunction(data2.getHeaders)) {
196451
196451
  const formHeaders = data2.getHeaders();
@@ -196457,7 +196457,7 @@ var require_axios = __commonJS({
196457
196457
  });
196458
196458
  }
196459
196459
  }
196460
- if (platform9.hasStandardBrowserEnv) {
196460
+ if (platform10.hasStandardBrowserEnv) {
196461
196461
  withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));
196462
196462
  if (withXSRFToken || withXSRFToken !== false && isURLSameOrigin(newConfig.url)) {
196463
196463
  const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);
@@ -196589,7 +196589,7 @@ var require_axios = __commonJS({
196589
196589
  }
196590
196590
  }
196591
196591
  const protocol = parseProtocol2(_config.url);
196592
- if (protocol && platform9.protocols.indexOf(protocol) === -1) {
196592
+ if (protocol && platform10.protocols.indexOf(protocol) === -1) {
196593
196593
  reject(new AxiosError3("Unsupported protocol " + protocol + ":", AxiosError3.ERR_BAD_REQUEST, config3));
196594
196594
  return;
196595
196595
  }
@@ -196735,7 +196735,7 @@ var require_axios = __commonJS({
196735
196735
  const encodeText = isFetchSupported && (typeof TextEncoder$1 === "function" ? /* @__PURE__ */ ((encoder) => (str) => encoder.encode(str))(new TextEncoder$1()) : async (str) => new Uint8Array(await new Request(str).arrayBuffer()));
196736
196736
  const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test2(() => {
196737
196737
  let duplexAccessed = false;
196738
- const hasContentType = new Request(platform9.origin, {
196738
+ const hasContentType = new Request(platform10.origin, {
196739
196739
  body: new ReadableStream$1(),
196740
196740
  method: "POST",
196741
196741
  get duplex() {
@@ -196768,7 +196768,7 @@ var require_axios = __commonJS({
196768
196768
  return body.size;
196769
196769
  }
196770
196770
  if (utils$1.isSpecCompliantForm(body)) {
196771
- const _request = new Request(platform9.origin, {
196771
+ const _request = new Request(platform10.origin, {
196772
196772
  method: "POST",
196773
196773
  body
196774
196774
  });
@@ -199895,7 +199895,7 @@ var {
199895
199895
  } = import_index.default;
199896
199896
 
199897
199897
  // dist/index.js
199898
- import { mkdir as mkdir7, mkdtemp as mkdtemp2, readFile as readFile37, rm as rm3, writeFile as writeFile17 } from "fs/promises";
199898
+ import { mkdir as mkdir7, mkdtemp as mkdtemp2, readFile as readFile38, rm as rm3, writeFile as writeFile17 } from "fs/promises";
199899
199899
  import { tmpdir as tmpdir5 } from "os";
199900
199900
  import { dirname as dirname26, join as join35, resolve as resolve44 } from "path";
199901
199901
 
@@ -205222,6 +205222,7 @@ var Spinner = class _Spinner {
205222
205222
  // ../utils/src/telemetry/telemetry-collector.ts
205223
205223
  import { execFile } from "child_process";
205224
205224
  import { readFile as readFile3 } from "fs/promises";
205225
+ import { freemem } from "os";
205225
205226
  import { platform } from "process";
205226
205227
  import { promisify } from "util";
205227
205228
  var execFileAsync = promisify(execFile);
@@ -205280,7 +205281,8 @@ var TelemetryCollector = class _TelemetryCollector {
205280
205281
  rss: rssKb * 1024,
205281
205282
  // Convert KB to bytes
205282
205283
  // Note: cpuPercent can exceed 100% on multi-core systems (e.g., 250% = 2.5 cores used)
205283
- cpuPercent
205284
+ cpuPercent,
205285
+ freeOSMemory: freemem()
205284
205286
  };
205285
205287
  } catch {
205286
205288
  return void 0;
@@ -205307,7 +205309,8 @@ var TelemetryCollector = class _TelemetryCollector {
205307
205309
  const cpuPercent = await this.calculateCpuPercent(statContent);
205308
205310
  return {
205309
205311
  rss: rssBytes,
205310
- cpuPercent
205312
+ cpuPercent,
205313
+ freeOSMemory: freemem()
205311
205314
  };
205312
205315
  } catch {
205313
205316
  return void 0;
@@ -205348,7 +205351,8 @@ var TelemetryCollector = class _TelemetryCollector {
205348
205351
  this.previousCpuState = currentState;
205349
205352
  return {
205350
205353
  rss: rssBytes,
205351
- cpuPercent
205354
+ cpuPercent,
205355
+ freeOSMemory: freemem()
205352
205356
  };
205353
205357
  } catch {
205354
205358
  return void 0;
@@ -205427,7 +205431,7 @@ var TelemetryCollector = class _TelemetryCollector {
205427
205431
  // ../utils/src/telemetry/analyzer-telemetry-server.ts
205428
205432
  import { existsSync, readFileSync, watchFile, unwatchFile } from "fs";
205429
205433
  import { unlink, writeFile } from "fs/promises";
205430
- import { freemem, tmpdir } from "os";
205434
+ import { tmpdir } from "os";
205431
205435
  import { join as join2 } from "path";
205432
205436
  import { randomBytes } from "crypto";
205433
205437
  var AnalyzerTelemetryServer = class {
@@ -205463,7 +205467,6 @@ var AnalyzerTelemetryServer = class {
205463
205467
  try {
205464
205468
  const parsed = JSON.parse(line);
205465
205469
  const event = "data" in parsed && Object.keys(parsed).length === 1 ? parsed : { data: parsed };
205466
- event.data.freeMemoryMB = freemem();
205467
205470
  this.handler.onAnalyzerEvent(event);
205468
205471
  } catch {
205469
205472
  }
@@ -211814,13 +211817,13 @@ async function getNodeExecutable(overridePath) {
211814
211817
  logger.debug("Extracting Node.js binary for spawned processes...");
211815
211818
  extractedNodePath = (async () => {
211816
211819
  const extractedPath = await extractTool("nodejs-binaries", "nodejs-binaries");
211817
- const { platform: platform9, arch } = process;
211820
+ const { platform: platform10, arch } = process;
211818
211821
  const nodeArch = arch === "arm" ? "arm64" : arch;
211819
- const isWindows4 = platform9 === "win32";
211820
- const binaryName = isWindows4 ? `node-${platform9}-${nodeArch}.exe.gz` : `node-${platform9}-${nodeArch}.gz`;
211822
+ const isWindows4 = platform10 === "win32";
211823
+ const binaryName = isWindows4 ? `node-${platform10}-${nodeArch}.exe.gz` : `node-${platform10}-${nodeArch}.gz`;
211821
211824
  const compressedBinaryPath = join5(extractedPath, binaryName);
211822
211825
  if (!await exists(compressedBinaryPath)) {
211823
- throw new Error(`Node.js binary not found: ${compressedBinaryPath}. Platform: ${platform9}-${nodeArch}`);
211826
+ throw new Error(`Node.js binary not found: ${compressedBinaryPath}. Platform: ${platform10}-${nodeArch}`);
211824
211827
  }
211825
211828
  const tmpDir = join5(getExtractionBaseDir(), "node-runtime");
211826
211829
  await mkdir4(tmpDir, { recursive: true });
@@ -212043,13 +212046,13 @@ async function getUvExecutable() {
212043
212046
  logger.debug("uv not found on system, extracting embedded uv...");
212044
212047
  extractedUvPath = (async () => {
212045
212048
  const extractedPath = await extractTool("uv-binaries", "uv-binaries");
212046
- const { platform: platform9, arch } = process;
212049
+ const { platform: platform10, arch } = process;
212047
212050
  const nodeArch = arch === "arm" ? "arm64" : arch;
212048
- const isWindows4 = platform9 === "win32";
212049
- const binaryName = isWindows4 ? `uv-${platform9}-${nodeArch}.exe.gz` : `uv-${platform9}-${nodeArch}.gz`;
212051
+ const isWindows4 = platform10 === "win32";
212052
+ const binaryName = isWindows4 ? `uv-${platform10}-${nodeArch}.exe.gz` : `uv-${platform10}-${nodeArch}.gz`;
212050
212053
  const compressedBinaryPath = join5(extractedPath, binaryName);
212051
212054
  if (!await exists(compressedBinaryPath)) {
212052
- throw new Error(`uv binary not found: ${compressedBinaryPath}. Platform: ${platform9}-${nodeArch}`);
212055
+ throw new Error(`uv binary not found: ${compressedBinaryPath}. Platform: ${platform10}-${nodeArch}`);
212053
212056
  }
212054
212057
  const tmpDir = join5(getExtractionBaseDir(), "uv-runtime");
212055
212058
  await mkdir4(tmpDir, { recursive: true });
@@ -223333,7 +223336,7 @@ var Pattern = class _Pattern {
223333
223336
  #isUNC;
223334
223337
  #isAbsolute;
223335
223338
  #followGlobstar = true;
223336
- constructor(patternList, globList, index2, platform9) {
223339
+ constructor(patternList, globList, index2, platform10) {
223337
223340
  if (!isPatternList(patternList)) {
223338
223341
  throw new TypeError("empty pattern list");
223339
223342
  }
@@ -223350,7 +223353,7 @@ var Pattern = class _Pattern {
223350
223353
  this.#patternList = patternList;
223351
223354
  this.#globList = globList;
223352
223355
  this.#index = index2;
223353
- this.#platform = platform9;
223356
+ this.#platform = platform10;
223354
223357
  if (this.#index === 0) {
223355
223358
  if (this.isUNC()) {
223356
223359
  const [p0, p1, p22, p3, ...prest] = this.#patternList;
@@ -223492,12 +223495,12 @@ var Ignore = class {
223492
223495
  absoluteChildren;
223493
223496
  platform;
223494
223497
  mmopts;
223495
- constructor(ignored, { nobrace, nocase, noext, noglobstar, platform: platform9 = defaultPlatform2 }) {
223498
+ constructor(ignored, { nobrace, nocase, noext, noglobstar, platform: platform10 = defaultPlatform2 }) {
223496
223499
  this.relative = [];
223497
223500
  this.absolute = [];
223498
223501
  this.relativeChildren = [];
223499
223502
  this.absoluteChildren = [];
223500
- this.platform = platform9;
223503
+ this.platform = platform10;
223501
223504
  this.mmopts = {
223502
223505
  dot: true,
223503
223506
  nobrace,
@@ -223505,7 +223508,7 @@ var Ignore = class {
223505
223508
  noext,
223506
223509
  noglobstar,
223507
223510
  optimizationLevel: 2,
223508
- platform: platform9,
223511
+ platform: platform10,
223509
223512
  nocomment: true,
223510
223513
  nonegate: true
223511
223514
  };
@@ -224522,6 +224525,7 @@ var Spinner2 = class _Spinner {
224522
224525
  // ../utils/dist/telemetry/telemetry-collector.js
224523
224526
  import { execFile as execFile3 } from "child_process";
224524
224527
  import { readFile as readFile15 } from "fs/promises";
224528
+ import { freemem as freemem2 } from "os";
224525
224529
  import { platform as platform7 } from "process";
224526
224530
  import { promisify as promisify2 } from "util";
224527
224531
  var execFileAsync2 = promisify2(execFile3);
@@ -224584,7 +224588,8 @@ var TelemetryCollector2 = class _TelemetryCollector {
224584
224588
  rss: rssKb * 1024,
224585
224589
  // Convert KB to bytes
224586
224590
  // Note: cpuPercent can exceed 100% on multi-core systems (e.g., 250% = 2.5 cores used)
224587
- cpuPercent
224591
+ cpuPercent,
224592
+ freeOSMemory: freemem2()
224588
224593
  };
224589
224594
  } catch {
224590
224595
  return void 0;
@@ -224611,7 +224616,8 @@ var TelemetryCollector2 = class _TelemetryCollector {
224611
224616
  const cpuPercent = await this.calculateCpuPercent(statContent);
224612
224617
  return {
224613
224618
  rss: rssBytes,
224614
- cpuPercent
224619
+ cpuPercent,
224620
+ freeOSMemory: freemem2()
224615
224621
  };
224616
224622
  } catch {
224617
224623
  return void 0;
@@ -224648,7 +224654,8 @@ var TelemetryCollector2 = class _TelemetryCollector {
224648
224654
  this.previousCpuState = currentState;
224649
224655
  return {
224650
224656
  rss: rssBytes,
224651
- cpuPercent
224657
+ cpuPercent,
224658
+ freeOSMemory: freemem2()
224652
224659
  };
224653
224660
  } catch {
224654
224661
  return void 0;
@@ -224727,7 +224734,7 @@ var TelemetryCollector2 = class _TelemetryCollector {
224727
224734
  // ../utils/dist/telemetry/analyzer-telemetry-server.js
224728
224735
  import { existsSync as existsSync10, readFileSync as readFileSync3, watchFile as watchFile2, unwatchFile as unwatchFile2 } from "fs";
224729
224736
  import { unlink as unlink2, writeFile as writeFile5 } from "fs/promises";
224730
- import { freemem as freemem2, tmpdir as tmpdir3 } from "os";
224737
+ import { tmpdir as tmpdir3 } from "os";
224731
224738
  import { join as join10 } from "path";
224732
224739
  import { randomBytes as randomBytes3 } from "crypto";
224733
224740
  var AnalyzerTelemetryServer2 = class {
@@ -224766,7 +224773,6 @@ var AnalyzerTelemetryServer2 = class {
224766
224773
  try {
224767
224774
  const parsed = JSON.parse(line);
224768
224775
  const event = "data" in parsed && Object.keys(parsed).length === 1 ? parsed : { data: parsed };
224769
- event.data.freeMemoryMB = freemem2();
224770
224776
  this.handler.onAnalyzerEvent(event);
224771
224777
  } catch {
224772
224778
  }
@@ -235269,12 +235275,63 @@ var bgMagentaBright = format5(105, 49);
235269
235275
  var bgCyanBright = format5(106, 49);
235270
235276
  var bgWhiteBright = format5(107, 49);
235271
235277
 
235278
+ // dist/internal/check-system-requirements.js
235279
+ import { readFile as readFile34 } from "fs/promises";
235280
+ import { platform as platform9 } from "process";
235281
+ var VM_MAX_MAP_COUNT_PATH = "/proc/sys/vm/max_map_count";
235282
+ async function checkSystemRequirements(memoryLimitInMb, socketMode) {
235283
+ if (platform9 !== "linux" || !socketMode) {
235284
+ return;
235285
+ }
235286
+ await checkVmMaxMapCount(memoryLimitInMb);
235287
+ }
235288
+ async function checkVmMaxMapCount(memoryLimitInMb) {
235289
+ if (!memoryLimitInMb || memoryLimitInMb <= 0 || !isFinite(memoryLimitInMb)) {
235290
+ logger.warn(`Invalid memory limit: ${memoryLimitInMb}. Skipping vm.max_map_count check.`);
235291
+ return;
235292
+ }
235293
+ let vmMaxMapCountStr;
235294
+ try {
235295
+ vmMaxMapCountStr = await readFile34(VM_MAX_MAP_COUNT_PATH, "utf-8");
235296
+ } catch (error) {
235297
+ const requiredValue = memoryLimitInMb * 4;
235298
+ logger.warn(`Unable to read ${VM_MAX_MAP_COUNT_PATH} (${error}). Skipping vm.max_map_count check. If you encounter memory-related issues, ensure vm.max_map_count is at least ${requiredValue}.`);
235299
+ return;
235300
+ }
235301
+ const vmMaxMapCount = parseInt(vmMaxMapCountStr.trim(), 10);
235302
+ if (isNaN(vmMaxMapCount)) {
235303
+ logger.warn(`Unable to parse vm.max_map_count. Value was: "${vmMaxMapCountStr.trim()}". Skipping check.`);
235304
+ return;
235305
+ }
235306
+ const requiredVmMaxMapCount = memoryLimitInMb * 4;
235307
+ if (vmMaxMapCount < requiredVmMaxMapCount) {
235308
+ throw new Error(`System requirement not met: vm.max_map_count is too low.
235309
+
235310
+ Current value: ${vmMaxMapCount}
235311
+ Required value: at least ${requiredVmMaxMapCount} (for --memory-limit ${memoryLimitInMb} MB)
235312
+
235313
+ The reachability analysis may create many memory mappings, and the current
235314
+ vm.max_map_count limit will cause the analysis to fail.
235315
+
235316
+ To fix this, run one of the following commands:
235317
+
235318
+ Temporary (until reboot):
235319
+ sudo sysctl -w vm.max_map_count=${requiredVmMaxMapCount}
235320
+
235321
+ Permanent (survives reboot):
235322
+ echo 'vm.max_map_count=${requiredVmMaxMapCount}' | sudo tee -a /etc/sysctl.conf
235323
+ sudo sysctl -p
235324
+
235325
+ Alternatively, you can reduce the --memory-limit option to require fewer mappings.`);
235326
+ }
235327
+ }
235328
+
235272
235329
  // dist/internal/constants.js
235273
235330
  var DEFAULT_REPORT_FILENAME_BASE = "coana-report";
235274
235331
 
235275
235332
  // dist/internal/exclude-dirs-from-configuration-files.js
235276
235333
  import { existsSync as existsSync25 } from "fs";
235277
- import { readFile as readFile34 } from "fs/promises";
235334
+ import { readFile as readFile35 } from "fs/promises";
235278
235335
  import { basename as basename10, resolve as resolve41 } from "path";
235279
235336
  var import_yaml2 = __toESM(require_dist11(), 1);
235280
235337
  async function inferExcludeDirsFromConfigurationFiles(rootWorkingDir) {
@@ -235288,7 +235345,7 @@ async function inferExcludeDirsFromConfigurationFiles(rootWorkingDir) {
235288
235345
  }
235289
235346
  async function inferExcludeDirsFromSocketConfig(socketConfigFile) {
235290
235347
  try {
235291
- const config3 = (0, import_yaml2.parse)(await readFile34(socketConfigFile, "utf8"));
235348
+ const config3 = (0, import_yaml2.parse)(await readFile35(socketConfigFile, "utf8"));
235292
235349
  const version4 = config3.version;
235293
235350
  const ignorePaths = config3[version4 === 1 ? "ignore" : "projectIgnorePaths"];
235294
235351
  if (!ignorePaths)
@@ -235305,7 +235362,7 @@ async function inferExcludeDirsFromSocketConfig(socketConfigFile) {
235305
235362
  // dist/internal/manifest-upload.js
235306
235363
  var import_fast_glob = __toESM(require_out4(), 1);
235307
235364
  var import_ignore3 = __toESM(require_ignore(), 1);
235308
- import { readFile as readFile35 } from "fs/promises";
235365
+ import { readFile as readFile36 } from "fs/promises";
235309
235366
  import { join as join31 } from "path";
235310
235367
  var DEFAULT_IGNORE_PATTERNS = [
235311
235368
  "**/node_modules/**",
@@ -235321,7 +235378,7 @@ var DEFAULT_IGNORE_PATTERNS = [
235321
235378
  async function loadGitignore(rootDir) {
235322
235379
  try {
235323
235380
  const gitignorePath = join31(rootDir, ".gitignore");
235324
- const content = await readFile35(gitignorePath, "utf-8");
235381
+ const content = await readFile36(gitignorePath, "utf-8");
235325
235382
  return (0, import_ignore3.default)().add(content);
235326
235383
  } catch {
235327
235384
  return void 0;
@@ -236448,7 +236505,7 @@ function toSocketFactsSocketDependencyTree(artifacts, vulnerabilities, tier1Reac
236448
236505
  }
236449
236506
 
236450
236507
  // dist/internal/vulnerability-scanning.js
236451
- import { readFile as readFile36 } from "fs/promises";
236508
+ import { readFile as readFile37 } from "fs/promises";
236452
236509
 
236453
236510
  // ../security-auditor/security-auditor-builder/src/mongo-connection.ts
236454
236511
  var import_mongodb = __toESM(require_lib31(), 1);
@@ -251317,7 +251374,7 @@ async function scanForVulnerabilities(dependencyTree, offlineVulnerabilityScanne
251317
251374
  }
251318
251375
  async function offlineScan(dependencyTree, offlineVulnerabilityScannerDBPath) {
251319
251376
  logger.info("using offline vulnerability scanner db");
251320
- const offlineVulnerabilityScannerDB = JSON.parse(await readFile36(offlineVulnerabilityScannerDBPath, "utf-8"));
251377
+ const offlineVulnerabilityScannerDB = JSON.parse(await readFile37(offlineVulnerabilityScannerDBPath, "utf-8"));
251321
251378
  const { ecosystemToUrlToVulnerabilityDetails, vulnerabilityDatabase } = offlineVulnerabilityScannerDB;
251322
251379
  const coanaSupportedVulnerabilitiesLoader = CoanaSupportedVulnerabilitiesLoader.create(ecosystemToUrlToVulnerabilityDetails);
251323
251380
  const vulnerabilityAccessPathLoader = CoanaSupportedVulnerabilitiesLoader.create(ecosystemToUrlToVulnerabilityDetails);
@@ -251335,7 +251392,7 @@ async function onlineScan(dependencyTree, apiKey, timeout) {
251335
251392
  }
251336
251393
 
251337
251394
  // dist/version.js
251338
- var version3 = "14.12.170";
251395
+ var version3 = "14.12.172";
251339
251396
 
251340
251397
  // dist/cli-core.js
251341
251398
  var { mapValues, omit, partition, pickBy: pickBy2 } = import_lodash15.default;
@@ -251782,6 +251839,7 @@ Subproject: ${subproject}`);
251782
251839
  logger.info(`Coana CLI version ${version3} scan initiated on ${this.rootWorkingDirectory}`);
251783
251840
  logger.info("Complete logs (including debug info) written to: ", this.coanaLogPath);
251784
251841
  this.verifyOptions();
251842
+ await checkSystemRequirements(this.analysisMemoryLimitInMb, Boolean(this.options.socketMode));
251785
251843
  if (!this.options.excludeDirs)
251786
251844
  this.options.excludeDirs = await inferExcludeDirsFromConfigurationFiles(this.rootWorkingDirectory);
251787
251845
  logger.info("using options", JSON.stringify(pickBy2(this.options, (value2, key) => {
@@ -252411,7 +252469,7 @@ async function initializeComputeFixesAndUpgradePurls(path9, options) {
252411
252469
  var compareReportsCommand = new Command();
252412
252470
  compareReportsCommand.name("compare-reports").argument("<baselineReportPath>", "Path to the baseline report").argument("<newReportPath>", "Path to the new report").option("--api-key <key>", "Set the Coana dashboard API key.").option("-d, --debug", "Enable debug logging", false).option("--no-pr-comment", "Disable pull request comments (only relevant when run from a PR)", true).option("--no-block", "Do not fail with a non-zero exit code when new reachable vulnerabilities are detected", true).option("--ignore-undeterminable-reachability", "Ignore vulnerabilities with undeterminable reachability", false).action(async (baselineReportPath, newReportPath, options) => {
252413
252471
  async function readReport(reportPath) {
252414
- return JSON.parse(await readFile37(reportPath, "utf-8"));
252472
+ return JSON.parse(await readFile38(reportPath, "utf-8"));
252415
252473
  }
252416
252474
  const baselineReport = await readReport(baselineReportPath);
252417
252475
  const newReport = await readReport(newReportPath);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coana-tech/cli",
3
- "version": "14.12.170",
3
+ "version": "14.12.172",
4
4
  "description": "Coana CLI",
5
5
  "type": "module",
6
6
  "bin": {
@@ -80902,6 +80902,7 @@ import { createWriteStream as createWriteStream2 } from "fs";
80902
80902
  // ../utils/src/telemetry/telemetry-collector.ts
80903
80903
  import { execFile } from "child_process";
80904
80904
  import { readFile as readFile3 } from "fs/promises";
80905
+ import { freemem } from "os";
80905
80906
  import { platform } from "process";
80906
80907
  import { promisify } from "util";
80907
80908
  var execFileAsync = promisify(execFile);
@@ -80960,7 +80961,8 @@ var TelemetryCollector = class _TelemetryCollector {
80960
80961
  rss: rssKb * 1024,
80961
80962
  // Convert KB to bytes
80962
80963
  // Note: cpuPercent can exceed 100% on multi-core systems (e.g., 250% = 2.5 cores used)
80963
- cpuPercent
80964
+ cpuPercent,
80965
+ freeOSMemory: freemem()
80964
80966
  };
80965
80967
  } catch {
80966
80968
  return void 0;
@@ -80987,7 +80989,8 @@ var TelemetryCollector = class _TelemetryCollector {
80987
80989
  const cpuPercent = await this.calculateCpuPercent(statContent);
80988
80990
  return {
80989
80991
  rss: rssBytes,
80990
- cpuPercent
80992
+ cpuPercent,
80993
+ freeOSMemory: freemem()
80991
80994
  };
80992
80995
  } catch {
80993
80996
  return void 0;
@@ -81028,7 +81031,8 @@ var TelemetryCollector = class _TelemetryCollector {
81028
81031
  this.previousCpuState = currentState;
81029
81032
  return {
81030
81033
  rss: rssBytes,
81031
- cpuPercent
81034
+ cpuPercent,
81035
+ freeOSMemory: freemem()
81032
81036
  };
81033
81037
  } catch {
81034
81038
  return void 0;
@@ -81107,7 +81111,7 @@ var TelemetryCollector = class _TelemetryCollector {
81107
81111
  // ../utils/src/telemetry/analyzer-telemetry-server.ts
81108
81112
  import { existsSync, readFileSync, watchFile, unwatchFile } from "fs";
81109
81113
  import { unlink, writeFile as writeFile2 } from "fs/promises";
81110
- import { freemem, tmpdir } from "os";
81114
+ import { tmpdir } from "os";
81111
81115
  import { join as join2 } from "path";
81112
81116
  import { randomBytes } from "crypto";
81113
81117
  var AnalyzerTelemetryServer = class {
@@ -81143,7 +81147,6 @@ var AnalyzerTelemetryServer = class {
81143
81147
  try {
81144
81148
  const parsed = JSON.parse(line);
81145
81149
  const event = "data" in parsed && Object.keys(parsed).length === 1 ? parsed : { data: parsed };
81146
- event.data.freeMemoryMB = freemem();
81147
81150
  this.handler.onAnalyzerEvent(event);
81148
81151
  } catch {
81149
81152
  }