sickbay 1.7.2 → 1.7.3

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.
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Header
3
- } from "./chunk-J2EJZWTP.js";
3
+ } from "./chunk-62Y4OWZR.js";
4
4
 
5
5
  // src/components/DiffApp.tsx
6
6
  import React, { useState, useEffect } from "react";
@@ -119,7 +119,7 @@ function DiffApp({ projectPath, branch, jsonOutput, checks, verbose }) {
119
119
  useEffect(() => {
120
120
  (async () => {
121
121
  try {
122
- const { runSickbay } = await import("./dist-COP53OQ4.js");
122
+ const { runSickbay } = await import("./dist-DMTJ2B5B.js");
123
123
  const currentReport = await runSickbay({
124
124
  projectPath,
125
125
  checks,
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  shortName
3
- } from "./chunk-GTNHWGY5.js";
3
+ } from "./chunk-BJB73W54.js";
4
4
  import {
5
5
  Header
6
- } from "./chunk-J2EJZWTP.js";
6
+ } from "./chunk-62Y4OWZR.js";
7
7
  import {
8
8
  detectPackageManager,
9
9
  detectProject
10
- } from "./chunk-O26ERRN2.js";
10
+ } from "./chunk-NNX7USXK.js";
11
11
 
12
12
  // src/components/DoctorApp.tsx
13
13
  import React, { useState, useEffect } from "react";
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  shortName
3
- } from "./chunk-GTNHWGY5.js";
3
+ } from "./chunk-BJB73W54.js";
4
4
  import {
5
5
  ProgressList
6
6
  } from "./chunk-MBVA75EM.js";
7
7
  import {
8
8
  Header
9
- } from "./chunk-J2EJZWTP.js";
9
+ } from "./chunk-62Y4OWZR.js";
10
10
  import {
11
11
  runSickbay
12
- } from "./chunk-O26ERRN2.js";
12
+ } from "./chunk-NNX7USXK.js";
13
13
 
14
14
  // src/components/FixApp.tsx
15
15
  import React, { useState, useEffect, useCallback } from "react";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  shortName
3
- } from "./chunk-GTNHWGY5.js";
3
+ } from "./chunk-BJB73W54.js";
4
4
  import {
5
5
  Header
6
- } from "./chunk-J2EJZWTP.js";
6
+ } from "./chunk-62Y4OWZR.js";
7
7
  import {
8
8
  detectProject
9
- } from "./chunk-O26ERRN2.js";
9
+ } from "./chunk-NNX7USXK.js";
10
10
 
11
11
  // src/components/StatsApp.tsx
12
12
  import React, { useState, useEffect } from "react";
@@ -4,11 +4,11 @@ import {
4
4
  } from "./chunk-SHO3ZXTH.js";
5
5
  import {
6
6
  shortName
7
- } from "./chunk-GTNHWGY5.js";
7
+ } from "./chunk-BJB73W54.js";
8
8
  import {
9
9
  Header
10
- } from "./chunk-J2EJZWTP.js";
11
- import "./chunk-O26ERRN2.js";
10
+ } from "./chunk-62Y4OWZR.js";
11
+ import "./chunk-NNX7USXK.js";
12
12
  import {
13
13
  detectRegressions,
14
14
  loadHistory
@@ -14,7 +14,7 @@ import {
14
14
  detectMonorepo,
15
15
  runSickbay,
16
16
  runSickbayMonorepo
17
- } from "./chunk-O26ERRN2.js";
17
+ } from "./chunk-NNX7USXK.js";
18
18
  import {
19
19
  loadHistory
20
20
  } from "./chunk-3OR2GFVE.js";
@@ -689,7 +689,7 @@ function TuiApp({
689
689
  return () => timers.forEach(clearTimeout);
690
690
  }, []);
691
691
  useEffect7(() => {
692
- checkForUpdate("1.7.1").then((info) => {
692
+ checkForUpdate("1.7.2").then((info) => {
693
693
  if (info) setUpdateInfo(info);
694
694
  });
695
695
  }, []);
@@ -715,7 +715,7 @@ function TuiApp({
715
715
  } catch {
716
716
  }
717
717
  try {
718
- const { getDependencyTree } = await import("./dist-COP53OQ4.js");
718
+ const { getDependencyTree } = await import("./dist-DMTJ2B5B.js");
719
719
  const { saveDepTree } = await import("./history-XLNVZEDI.js");
720
720
  const tree = await getDependencyTree(projectPath, result.projectInfo.packageManager);
721
721
  saveDepTree(projectPath, tree);
@@ -11,7 +11,7 @@ var ASCII_ART = `
11
11
  A vitals health check for your app
12
12
  `.trim();
13
13
  function Header({ projectName }) {
14
- return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "green" }, ASCII_ART), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, " v", "1.7.1")), projectName && /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, " Analyzing "), /* @__PURE__ */ React.createElement(Text, { bold: true, color: "white" }, projectName)));
14
+ return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "green" }, ASCII_ART), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, " v", "1.7.2")), projectName && /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, " Analyzing "), /* @__PURE__ */ React.createElement(Text, { bold: true, color: "white" }, projectName)));
15
15
  }
16
16
 
17
17
  export {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  detectMonorepo
3
- } from "./chunk-O26ERRN2.js";
3
+ } from "./chunk-NNX7USXK.js";
4
4
 
5
5
  // src/lib/resolve-package.ts
6
6
  import { readFileSync } from "fs";
@@ -2127,6 +2127,7 @@ var KnipRunner = class extends BaseRunner {
2127
2127
  for (const fileIssue of data.issues ?? []) {
2128
2128
  (fileIssue.files ?? []).forEach((f) => {
2129
2129
  const filePath = f.name || fileIssue.file;
2130
+ if (/^sickbay\.config\.[cm]?[jt]s$/.test(filePath)) return;
2130
2131
  unusedFiles.push(filePath);
2131
2132
  issues.push({
2132
2133
  severity: "warning",
package/dist/config.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  defineConfig
3
- } from "./chunk-O26ERRN2.js";
3
+ } from "./chunk-NNX7USXK.js";
4
4
  export {
5
5
  defineConfig
6
6
  };
@@ -21,7 +21,7 @@ import {
21
21
  runSickbay,
22
22
  runSickbayMonorepo,
23
23
  validateConfig
24
- } from "./chunk-O26ERRN2.js";
24
+ } from "./chunk-NNX7USXK.js";
25
25
  export {
26
26
  CRITICAL_LINES,
27
27
  SCORE_EXCELLENT,
package/dist/index.js CHANGED
@@ -8,12 +8,12 @@ import {
8
8
  } from "./chunk-TYG7ZQBP.js";
9
9
  import {
10
10
  Header
11
- } from "./chunk-J2EJZWTP.js";
11
+ } from "./chunk-62Y4OWZR.js";
12
12
  import {
13
13
  getScoreEmoji,
14
14
  runSickbay,
15
15
  runSickbayMonorepo
16
- } from "./chunk-O26ERRN2.js";
16
+ } from "./chunk-NNX7USXK.js";
17
17
 
18
18
  // src/index.ts
19
19
  import { existsSync } from "fs";
@@ -176,7 +176,7 @@ function App({
176
176
  setMonorepoReport(r);
177
177
  setProjectName(`monorepo (${r.packages.length} packages)`);
178
178
  try {
179
- const { getDependencyTree } = await import("./dist-COP53OQ4.js");
179
+ const { getDependencyTree } = await import("./dist-DMTJ2B5B.js");
180
180
  const { saveDepTree } = await import("./history-XLNVZEDI.js");
181
181
  const packages = {};
182
182
  for (const pkg of r.packages) {
@@ -245,7 +245,7 @@ function App({
245
245
  } catch {
246
246
  }
247
247
  try {
248
- const { getDependencyTree } = await import("./dist-COP53OQ4.js");
248
+ const { getDependencyTree } = await import("./dist-DMTJ2B5B.js");
249
249
  const { saveDepTree } = await import("./history-XLNVZEDI.js");
250
250
  const tree = await getDependencyTree(projectPath, r.projectInfo.packageManager);
251
251
  saveDepTree(projectPath, tree);
@@ -303,7 +303,7 @@ if (existsSync(globalConfigPath)) {
303
303
  }
304
304
  config({ debug: false, quiet: true });
305
305
  var program = new Command();
306
- program.name("sickbay").description("React project health check CLI").version("1.7.1", "-v, --version").enablePositionalOptions().passThroughOptions().option("-p, --path <path>", "project path to analyze", process.cwd()).option("-c, --checks <checks>", "comma-separated list of checks to run").option("--package <name>", "scope to a single named package (monorepo only)").option("--json", "output raw JSON report").option("--web", "open web dashboard after scan").option("--no-ai", "disable AI features").option("--no-quotes", "suppress personality quotes in output").option("--verbose", "show verbose output").action(async (options) => {
306
+ program.name("sickbay").description("React project health check CLI").version("1.7.2", "-v, --version").enablePositionalOptions().passThroughOptions().option("-p, --path <path>", "project path to analyze", process.cwd()).option("-c, --checks <checks>", "comma-separated list of checks to run").option("--package <name>", "scope to a single named package (monorepo only)").option("--json", "output raw JSON report").option("--web", "open web dashboard after scan").option("--no-ai", "disable AI features").option("--no-quotes", "suppress personality quotes in output").option("--verbose", "show verbose output").action(async (options) => {
307
307
  if (options.path && options.path !== process.cwd()) {
308
308
  const projectEnvPath = join(options.path, ".env");
309
309
  if (existsSync(projectEnvPath)) {
@@ -313,13 +313,13 @@ program.name("sickbay").description("React project health check CLI").version("1
313
313
  const updatePromise = (async () => {
314
314
  try {
315
315
  const { checkForUpdate } = await import("./update-check-M7IFOMLJ.js");
316
- return await checkForUpdate("1.7.1");
316
+ return await checkForUpdate("1.7.2");
317
317
  } catch {
318
318
  return null;
319
319
  }
320
320
  })();
321
321
  const checks = options.checks ? options.checks.split(",").map((s) => s.trim()) : void 0;
322
- const { detectMonorepo, runSickbay: runSickbay2, runSickbayMonorepo: runSickbayMonorepo2 } = await import("./dist-COP53OQ4.js");
322
+ const { detectMonorepo, runSickbay: runSickbay2, runSickbayMonorepo: runSickbayMonorepo2 } = await import("./dist-DMTJ2B5B.js");
323
323
  const monorepoInfo = await detectMonorepo(options.path);
324
324
  if (options.package && monorepoInfo.isMonorepo) {
325
325
  const { readFileSync } = await import("fs");
@@ -383,7 +383,7 @@ program.name("sickbay").description("React project health check CLI").version("1
383
383
  } catch {
384
384
  }
385
385
  try {
386
- const { getDependencyTree } = await import("./dist-COP53OQ4.js");
386
+ const { getDependencyTree } = await import("./dist-DMTJ2B5B.js");
387
387
  const { saveDepTree } = await import("./history-XLNVZEDI.js");
388
388
  const tree = await getDependencyTree(options.path, report.projectInfo.packageManager);
389
389
  saveDepTree(options.path, tree);
@@ -406,7 +406,7 @@ program.name("sickbay").description("React project health check CLI").version("1
406
406
  );
407
407
  });
408
408
  program.command("init").description("Initialize .sickbay/ folder and run an initial baseline scan").option("-p, --path <path>", "project path to initialize", process.cwd()).action(async (options) => {
409
- const { initSickbay } = await import("./init-NAO4S7IP.js");
409
+ const { initSickbay } = await import("./init-FCS5OK4X.js");
410
410
  await initSickbay(options.path);
411
411
  });
412
412
  program.command("fix").description("Interactively fix issues found by sickbay scan").option("-p, --path <path>", "project path to analyze", process.cwd()).option("-c, --checks <checks>", "comma-separated list of checks to run").option("--package <name>", "scope to a single package (monorepo only)").option("--all", "apply all available fixes without prompting").option("--dry-run", "show what would be fixed without executing").option("--verbose", "show verbose output").action(async (options) => {
@@ -416,9 +416,9 @@ program.command("fix").description("Interactively fix issues found by sickbay sc
416
416
  config({ path: projectEnvPath, override: true });
417
417
  }
418
418
  }
419
- const { resolveProject } = await import("./resolve-package-PF56UGTP.js");
419
+ const { resolveProject } = await import("./resolve-package-7SU5DE36.js");
420
420
  const resolution = await resolveProject(options.path, options.package);
421
- const { FixApp } = await import("./FixApp-DO75A35F.js");
421
+ const { FixApp } = await import("./FixApp-ACKQX74B.js");
422
422
  const checks = options.checks ? options.checks.split(",").map((s) => s.trim()) : void 0;
423
423
  const projectPath = resolution.isMonorepo ? resolution.targetPath ?? options.path : resolution.targetPath;
424
424
  render(
@@ -441,10 +441,10 @@ program.command("trend").description("Show score history and trends over time").
441
441
  config({ path: projectEnvPath, override: true });
442
442
  }
443
443
  }
444
- const { resolveProject } = await import("./resolve-package-PF56UGTP.js");
444
+ const { resolveProject } = await import("./resolve-package-7SU5DE36.js");
445
445
  const resolution = await resolveProject(options.path, options.package);
446
446
  const projectPath = resolution.isMonorepo ? resolution.targetPath ?? options.path : resolution.targetPath;
447
- const { TrendApp } = await import("./TrendApp-RQTELT4G.js");
447
+ const { TrendApp } = await import("./TrendApp-VRS26KIZ.js");
448
448
  render(
449
449
  React6.createElement(TrendApp, {
450
450
  projectPath,
@@ -463,10 +463,10 @@ program.command("stats").description("Show a quick codebase overview and project
463
463
  config({ path: projectEnvPath, override: true });
464
464
  }
465
465
  }
466
- const { resolveProject } = await import("./resolve-package-PF56UGTP.js");
466
+ const { resolveProject } = await import("./resolve-package-7SU5DE36.js");
467
467
  const resolution = await resolveProject(options.path, options.package);
468
468
  const projectPath = resolution.isMonorepo ? resolution.targetPath ?? options.path : resolution.targetPath;
469
- const { StatsApp } = await import("./StatsApp-ZU3M6ZEU.js");
469
+ const { StatsApp } = await import("./StatsApp-LDJCOMRP.js");
470
470
  render(
471
471
  React6.createElement(StatsApp, {
472
472
  projectPath,
@@ -478,7 +478,7 @@ program.command("stats").description("Show a quick codebase overview and project
478
478
  );
479
479
  });
480
480
  program.command("tui").description("Launch the persistent developer dashboard").option("-p, --path <path>", "project path to monitor", process.cwd()).option("--no-watch", "disable file-watching auto-refresh").option("--no-quotes", "suppress personality quotes in output").option("--refresh <seconds>", "auto-refresh interval in seconds", "300").option("-c, --checks <checks>", "comma-separated list of checks to run").action(async (options) => {
481
- const { TuiApp } = await import("./TuiApp-Z5SKIJ6G.js");
481
+ const { TuiApp } = await import("./TuiApp-WFFTJDBN.js");
482
482
  const checks = options.checks ? options.checks.split(",").map((s) => s.trim()) : void 0;
483
483
  render(
484
484
  React6.createElement(TuiApp, {
@@ -498,10 +498,10 @@ program.command("doctor").description("Diagnose project setup and configuration
498
498
  config({ path: projectEnvPath, override: true });
499
499
  }
500
500
  }
501
- const { resolveProject } = await import("./resolve-package-PF56UGTP.js");
501
+ const { resolveProject } = await import("./resolve-package-7SU5DE36.js");
502
502
  const resolution = await resolveProject(options.path, options.package);
503
503
  const projectPath = resolution.isMonorepo ? resolution.targetPath ?? options.path : resolution.targetPath;
504
- const { DoctorApp } = await import("./DoctorApp-VNX6BNDX.js");
504
+ const { DoctorApp } = await import("./DoctorApp-34RJBDQH.js");
505
505
  render(
506
506
  React6.createElement(DoctorApp, {
507
507
  projectPath,
@@ -514,13 +514,13 @@ program.command("doctor").description("Diagnose project setup and configuration
514
514
  );
515
515
  });
516
516
  program.command("badge").description("Generate a health score badge for your README").option("-p, --path <path>", "project path", process.cwd()).option("--package <name>", "scope to a single package (monorepo only)").option("--html", "output HTML <img> tag instead of markdown").option("--url", "output bare badge URL only").option("--label <text>", "custom badge label", "sickbay").option("--scan", "run a fresh scan instead of using last report").action(async (options) => {
517
- const { resolveProject } = await import("./resolve-package-PF56UGTP.js");
517
+ const { resolveProject } = await import("./resolve-package-7SU5DE36.js");
518
518
  const resolution = await resolveProject(options.path, options.package);
519
519
  const projectPath = resolution.isMonorepo ? resolution.targetPath ?? options.path : resolution.targetPath;
520
520
  const { loadScoreFromLastReport, badgeUrl, badgeMarkdown, badgeHtml } = await import("./badge-KQ73KEIN.js");
521
521
  let score = options.scan ? null : loadScoreFromLastReport(projectPath);
522
522
  if (score === null) {
523
- const { runSickbay: runSickbay2 } = await import("./dist-COP53OQ4.js");
523
+ const { runSickbay: runSickbay2 } = await import("./dist-DMTJ2B5B.js");
524
524
  const report = await runSickbay2({ projectPath, quotes: false });
525
525
  try {
526
526
  const { saveEntry, saveLastReport } = await import("./history-XLNVZEDI.js");
@@ -549,7 +549,7 @@ program.command("diff <branch>").description("Compare health score against anoth
549
549
  }
550
550
  }
551
551
  const checks = options.checks ? options.checks.split(",").map((s) => s.trim()) : void 0;
552
- const { DiffApp } = await import("./DiffApp-G6CSKRKY.js");
552
+ const { DiffApp } = await import("./DiffApp-DWCFKL76.js");
553
553
  render(
554
554
  React6.createElement(DiffApp, {
555
555
  projectPath: options.path,
@@ -2,7 +2,7 @@ import {
2
2
  detectContext,
3
3
  getAvailableChecks,
4
4
  runSickbay
5
- } from "./chunk-O26ERRN2.js";
5
+ } from "./chunk-NNX7USXK.js";
6
6
  import {
7
7
  saveEntry
8
8
  } from "./chunk-3OR2GFVE.js";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  resolveProject,
3
3
  shortName
4
- } from "./chunk-GTNHWGY5.js";
5
- import "./chunk-O26ERRN2.js";
4
+ } from "./chunk-BJB73W54.js";
5
+ import "./chunk-NNX7USXK.js";
6
6
  export {
7
7
  resolveProject,
8
8
  shortName
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sickbay",
3
- "version": "1.7.2",
3
+ "version": "1.7.3",
4
4
  "description": "Zero-config health check CLI for JavaScript and TypeScript projects",
5
5
  "license": "MIT",
6
6
  "repository": {