sickbay 1.13.0 → 1.14.1
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/dist/{DiffApp-RFUMM4XU.js → DiffApp-HDNZSDXP.js} +2 -2
- package/dist/{DoctorApp-7MSN36GO.js → DoctorApp-MDXB7HQB.js} +3 -3
- package/dist/{FixApp-47DDF2OF.js → FixApp-ID5DCJLQ.js} +3 -3
- package/dist/{StatsApp-F3CQ6W26.js → StatsApp-HHPAIDT2.js} +3 -3
- package/dist/{TrendApp-J2GF5A2Y.js → TrendApp-WMP6VYBR.js} +3 -3
- package/dist/{TuiApp-PD3L2N5U.js → TuiApp-3U5M5ZBR.js} +4 -4
- package/dist/{chunk-KMO5PHVP.js → chunk-64QSLY6P.js} +1 -1
- package/dist/{chunk-S5UHV6SX.js → chunk-MFINHA55.js} +1 -1
- package/dist/{chunk-QZHCVNMM.js → chunk-X3OVB6OA.js} +11 -5
- package/dist/config.js +1 -1
- package/dist/{dist-6ZVGDRA5.js → dist-CC44WX2U.js} +1 -1
- package/dist/index.js +25 -25
- package/dist/{init-WZUCGPVX.js → init-IDUYC5ZY.js} +1 -1
- package/dist/{resolve-package-D6EHBJ5J.js → resolve-package-W7BS3CDL.js} +2 -2
- package/dist/{web-MOY3FJJU.js → web-7OLVXHBT.js} +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Header
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-64QSLY6P.js";
|
|
4
4
|
import "./chunk-JSBRDJBE.js";
|
|
5
5
|
|
|
6
6
|
// src/components/DiffApp.tsx
|
|
@@ -120,7 +120,7 @@ function DiffApp({ projectPath, branch, jsonOutput, checks, verbose }) {
|
|
|
120
120
|
useEffect(() => {
|
|
121
121
|
(async () => {
|
|
122
122
|
try {
|
|
123
|
-
const { runSickbay } = await import("./dist-
|
|
123
|
+
const { runSickbay } = await import("./dist-CC44WX2U.js");
|
|
124
124
|
const currentReport = await runSickbay({
|
|
125
125
|
projectPath,
|
|
126
126
|
checks,
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
shortName
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-MFINHA55.js";
|
|
4
4
|
import {
|
|
5
5
|
Header
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-64QSLY6P.js";
|
|
7
7
|
import {
|
|
8
8
|
detectPackageManager,
|
|
9
9
|
detectProject
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-X3OVB6OA.js";
|
|
11
11
|
import "./chunk-JSBRDJBE.js";
|
|
12
12
|
|
|
13
13
|
// src/components/DoctorApp.tsx
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
shortName
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-MFINHA55.js";
|
|
4
4
|
import {
|
|
5
5
|
ProgressList
|
|
6
6
|
} from "./chunk-MBVA75EM.js";
|
|
7
7
|
import {
|
|
8
8
|
Header
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-64QSLY6P.js";
|
|
10
10
|
import {
|
|
11
11
|
runSickbay
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-X3OVB6OA.js";
|
|
13
13
|
import "./chunk-JSBRDJBE.js";
|
|
14
14
|
|
|
15
15
|
// src/components/FixApp.tsx
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
shortName
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-MFINHA55.js";
|
|
4
4
|
import {
|
|
5
5
|
Header
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-64QSLY6P.js";
|
|
7
7
|
import {
|
|
8
8
|
detectProject
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-X3OVB6OA.js";
|
|
10
10
|
import "./chunk-JSBRDJBE.js";
|
|
11
11
|
|
|
12
12
|
// src/components/StatsApp.tsx
|
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
} from "./chunk-SHO3ZXTH.js";
|
|
5
5
|
import {
|
|
6
6
|
shortName
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-MFINHA55.js";
|
|
8
8
|
import {
|
|
9
9
|
Header
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-64QSLY6P.js";
|
|
11
|
+
import "./chunk-X3OVB6OA.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-
|
|
17
|
+
} from "./chunk-X3OVB6OA.js";
|
|
18
18
|
import {
|
|
19
19
|
loadHistory
|
|
20
20
|
} from "./chunk-3OR2GFVE.js";
|
|
@@ -690,7 +690,7 @@ function TuiApp({
|
|
|
690
690
|
return () => timers.forEach(clearTimeout);
|
|
691
691
|
}, []);
|
|
692
692
|
useEffect7(() => {
|
|
693
|
-
checkForUpdate("1.
|
|
693
|
+
checkForUpdate("1.14.0").then((info) => {
|
|
694
694
|
if (info) setUpdateInfo(info);
|
|
695
695
|
});
|
|
696
696
|
}, []);
|
|
@@ -716,7 +716,7 @@ function TuiApp({
|
|
|
716
716
|
} catch {
|
|
717
717
|
}
|
|
718
718
|
try {
|
|
719
|
-
const { getDependencyTree } = await import("./dist-
|
|
719
|
+
const { getDependencyTree } = await import("./dist-CC44WX2U.js");
|
|
720
720
|
const { saveDepTree } = await import("./history-KXLC45VS.js");
|
|
721
721
|
const tree = await getDependencyTree(projectPath, result.projectInfo.packageManager);
|
|
722
722
|
saveDepTree(projectPath, tree);
|
|
@@ -820,7 +820,7 @@ function TuiApp({
|
|
|
820
820
|
const webReport = monorepoReportRef.current ?? reportRef.current;
|
|
821
821
|
if (!webReport) return;
|
|
822
822
|
try {
|
|
823
|
-
const { serveWeb } = await import("./web-
|
|
823
|
+
const { serveWeb } = await import("./web-7OLVXHBT.js");
|
|
824
824
|
const { default: openBrowser } = await import("open");
|
|
825
825
|
let aiService;
|
|
826
826
|
if (withAI && process.env.ANTHROPIC_API_KEY && !monorepoReportRef.current) {
|
|
@@ -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.
|
|
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.14.0")), 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 {
|
|
@@ -2710,7 +2710,8 @@ var AngularBuildConfigRunner = class extends BaseRunner {
|
|
|
2710
2710
|
severity: "warning",
|
|
2711
2711
|
message: "Production build has sourceMap enabled \u2014 ships source code to end users",
|
|
2712
2712
|
fix: {
|
|
2713
|
-
description: 'Set "sourceMap": false in the production build configuration.'
|
|
2713
|
+
description: 'Set "sourceMap": false in the production build configuration.',
|
|
2714
|
+
command: `ng config projects.${projectName}.architect.build.configurations.production.sourceMap false`
|
|
2714
2715
|
},
|
|
2715
2716
|
reportedBy: ["angular-build-config"]
|
|
2716
2717
|
});
|
|
@@ -2720,7 +2721,8 @@ var AngularBuildConfigRunner = class extends BaseRunner {
|
|
|
2720
2721
|
severity: "warning",
|
|
2721
2722
|
message: "Production build has optimization disabled \u2014 no minification or tree-shaking",
|
|
2722
2723
|
fix: {
|
|
2723
|
-
description: 'Set "optimization": true in the production build configuration.'
|
|
2724
|
+
description: 'Set "optimization": true in the production build configuration.',
|
|
2725
|
+
command: `ng config projects.${projectName}.architect.build.configurations.production.optimization true`
|
|
2724
2726
|
},
|
|
2725
2727
|
reportedBy: ["angular-build-config"]
|
|
2726
2728
|
});
|
|
@@ -2740,7 +2742,8 @@ var AngularBuildConfigRunner = class extends BaseRunner {
|
|
|
2740
2742
|
severity: "warning",
|
|
2741
2743
|
message: "Production build has AOT compilation disabled \u2014 JIT compilation is slower and less secure",
|
|
2742
2744
|
fix: {
|
|
2743
|
-
description: 'Remove "aot": false from the production build configuration. AOT is the default since Angular 9.'
|
|
2745
|
+
description: 'Remove "aot": false from the production build configuration. AOT is the default since Angular 9.',
|
|
2746
|
+
command: `ng config projects.${projectName}.architect.build.configurations.production.aot true`
|
|
2744
2747
|
},
|
|
2745
2748
|
reportedBy: ["angular-build-config"]
|
|
2746
2749
|
});
|
|
@@ -4152,6 +4155,7 @@ var DepcheckRunner = class extends BaseRunner {
|
|
|
4152
4155
|
localDir: coreLocalDir
|
|
4153
4156
|
});
|
|
4154
4157
|
const data = parseJsonOutput(stdout, "{}");
|
|
4158
|
+
const pm = detectPackageManager(projectPath);
|
|
4155
4159
|
const issues = [];
|
|
4156
4160
|
for (const [dep, files] of Object.entries(data.missing ?? {})) {
|
|
4157
4161
|
if (dep.startsWith("virtual:") || dep.startsWith("node:")) {
|
|
@@ -4161,7 +4165,7 @@ var DepcheckRunner = class extends BaseRunner {
|
|
|
4161
4165
|
severity: "critical",
|
|
4162
4166
|
message: `Missing dependency: ${dep} (used in ${files.length} file${files.length > 1 ? "s" : ""})`,
|
|
4163
4167
|
suppressMatch: dep,
|
|
4164
|
-
fix: { description: `Install ${dep}` },
|
|
4168
|
+
fix: { description: `Install ${dep}`, command: `${pm} install ${dep}` },
|
|
4165
4169
|
reportedBy: ["depcheck"]
|
|
4166
4170
|
});
|
|
4167
4171
|
}
|
|
@@ -5506,6 +5510,7 @@ var NodeAsyncErrorsRunner = class extends BaseRunner {
|
|
|
5506
5510
|
} catch {
|
|
5507
5511
|
}
|
|
5508
5512
|
}
|
|
5513
|
+
const pm = detectPackageManager(projectPath);
|
|
5509
5514
|
const issues = [];
|
|
5510
5515
|
if (routeFiles === 0) {
|
|
5511
5516
|
return {
|
|
@@ -5526,7 +5531,8 @@ var NodeAsyncErrorsRunner = class extends BaseRunner {
|
|
|
5526
5531
|
severity: unprotectedFiles === routeFiles ? "critical" : "warning",
|
|
5527
5532
|
message: `${unprotectedFiles} of ${routeFiles} route file(s) contain async handlers without try/catch. Unhandled promise rejections will crash the process in Node.js <15 or produce silent failures.`,
|
|
5528
5533
|
fix: {
|
|
5529
|
-
description: "Wrap async route handlers in try/catch or use express-async-errors to auto-wrap all handlers"
|
|
5534
|
+
description: "Wrap async route handlers in try/catch or use express-async-errors to auto-wrap all handlers",
|
|
5535
|
+
command: `${pm} install express-async-errors`
|
|
5530
5536
|
},
|
|
5531
5537
|
reportedBy: ["node-async-errors"]
|
|
5532
5538
|
});
|
package/dist/config.js
CHANGED
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-
|
|
11
|
+
} from "./chunk-64QSLY6P.js";
|
|
12
12
|
import {
|
|
13
13
|
getScoreEmoji,
|
|
14
14
|
runSickbay,
|
|
15
15
|
runSickbayMonorepo
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-X3OVB6OA.js";
|
|
17
17
|
import "./chunk-JSBRDJBE.js";
|
|
18
18
|
|
|
19
19
|
// src/index.ts
|
|
@@ -177,7 +177,7 @@ function App({
|
|
|
177
177
|
setMonorepoReport(r);
|
|
178
178
|
setProjectName(`monorepo (${r.packages.length} packages)`);
|
|
179
179
|
try {
|
|
180
|
-
const { getDependencyTree } = await import("./dist-
|
|
180
|
+
const { getDependencyTree } = await import("./dist-CC44WX2U.js");
|
|
181
181
|
const { saveDepTree } = await import("./history-KXLC45VS.js");
|
|
182
182
|
const packages = {};
|
|
183
183
|
for (const pkg of r.packages) {
|
|
@@ -189,7 +189,7 @@ function App({
|
|
|
189
189
|
if (openWeb) {
|
|
190
190
|
setPhase("opening-web");
|
|
191
191
|
try {
|
|
192
|
-
const { serveWeb } = await import("./web-
|
|
192
|
+
const { serveWeb } = await import("./web-7OLVXHBT.js");
|
|
193
193
|
const { default: openBrowser } = await import("open");
|
|
194
194
|
let aiService;
|
|
195
195
|
if (enableAI && process.env.ANTHROPIC_API_KEY) {
|
|
@@ -246,7 +246,7 @@ function App({
|
|
|
246
246
|
} catch {
|
|
247
247
|
}
|
|
248
248
|
try {
|
|
249
|
-
const { getDependencyTree } = await import("./dist-
|
|
249
|
+
const { getDependencyTree } = await import("./dist-CC44WX2U.js");
|
|
250
250
|
const { saveDepTree } = await import("./history-KXLC45VS.js");
|
|
251
251
|
const tree = await getDependencyTree(projectPath, r.projectInfo.packageManager);
|
|
252
252
|
saveDepTree(projectPath, tree);
|
|
@@ -255,7 +255,7 @@ function App({
|
|
|
255
255
|
if (openWeb) {
|
|
256
256
|
setPhase("opening-web");
|
|
257
257
|
try {
|
|
258
|
-
const { serveWeb } = await import("./web-
|
|
258
|
+
const { serveWeb } = await import("./web-7OLVXHBT.js");
|
|
259
259
|
const { default: openBrowser } = await import("open");
|
|
260
260
|
let aiService;
|
|
261
261
|
if (enableAI && process.env.ANTHROPIC_API_KEY) {
|
|
@@ -304,7 +304,7 @@ if (existsSync(globalConfigPath)) {
|
|
|
304
304
|
}
|
|
305
305
|
config({ debug: false, quiet: true });
|
|
306
306
|
var program = new Command();
|
|
307
|
-
program.name("sickbay").description("React project health check CLI").version("1.
|
|
307
|
+
program.name("sickbay").description("React project health check CLI").version("1.14.0", "-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) => {
|
|
308
308
|
if (options.path && options.path !== process.cwd()) {
|
|
309
309
|
const projectEnvPath = join(options.path, ".env");
|
|
310
310
|
if (existsSync(projectEnvPath)) {
|
|
@@ -314,13 +314,13 @@ program.name("sickbay").description("React project health check CLI").version("1
|
|
|
314
314
|
const updatePromise = (async () => {
|
|
315
315
|
try {
|
|
316
316
|
const { checkForUpdate } = await import("./update-check-QLG6GA4Z.js");
|
|
317
|
-
return await checkForUpdate("1.
|
|
317
|
+
return await checkForUpdate("1.14.0");
|
|
318
318
|
} catch {
|
|
319
319
|
return null;
|
|
320
320
|
}
|
|
321
321
|
})();
|
|
322
322
|
const checks = options.checks ? options.checks.split(",").map((s) => s.trim()) : void 0;
|
|
323
|
-
const { detectMonorepo, runSickbay: runSickbay2, runSickbayMonorepo: runSickbayMonorepo2 } = await import("./dist-
|
|
323
|
+
const { detectMonorepo, runSickbay: runSickbay2, runSickbayMonorepo: runSickbayMonorepo2 } = await import("./dist-CC44WX2U.js");
|
|
324
324
|
const monorepoInfo = await detectMonorepo(options.path);
|
|
325
325
|
if (options.package && monorepoInfo.isMonorepo) {
|
|
326
326
|
const { readFileSync } = await import("fs");
|
|
@@ -384,7 +384,7 @@ program.name("sickbay").description("React project health check CLI").version("1
|
|
|
384
384
|
} catch {
|
|
385
385
|
}
|
|
386
386
|
try {
|
|
387
|
-
const { getDependencyTree } = await import("./dist-
|
|
387
|
+
const { getDependencyTree } = await import("./dist-CC44WX2U.js");
|
|
388
388
|
const { saveDepTree } = await import("./history-KXLC45VS.js");
|
|
389
389
|
const tree = await getDependencyTree(options.path, report.projectInfo.packageManager);
|
|
390
390
|
saveDepTree(options.path, tree);
|
|
@@ -411,16 +411,16 @@ program.command("init").description("Initialize .sickbay/ folder and run an init
|
|
|
411
411
|
"add newly available checks to existing config without touching existing entries"
|
|
412
412
|
).option("--reset-config", "regenerate config from scratch (overwrites existing)").action(async (options) => {
|
|
413
413
|
if (options.resetConfig) {
|
|
414
|
-
const { generateConfigFile } = await import("./init-
|
|
414
|
+
const { generateConfigFile } = await import("./init-IDUYC5ZY.js");
|
|
415
415
|
await generateConfigFile(options.path, { force: true });
|
|
416
416
|
return;
|
|
417
417
|
}
|
|
418
418
|
if (options.sync) {
|
|
419
|
-
const { syncConfigFile } = await import("./init-
|
|
419
|
+
const { syncConfigFile } = await import("./init-IDUYC5ZY.js");
|
|
420
420
|
await syncConfigFile(options.path);
|
|
421
421
|
return;
|
|
422
422
|
}
|
|
423
|
-
const { initSickbay } = await import("./init-
|
|
423
|
+
const { initSickbay } = await import("./init-IDUYC5ZY.js");
|
|
424
424
|
await initSickbay(options.path);
|
|
425
425
|
});
|
|
426
426
|
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) => {
|
|
@@ -430,9 +430,9 @@ program.command("fix").description("Interactively fix issues found by sickbay sc
|
|
|
430
430
|
config({ path: projectEnvPath, override: true });
|
|
431
431
|
}
|
|
432
432
|
}
|
|
433
|
-
const { resolveProject } = await import("./resolve-package-
|
|
433
|
+
const { resolveProject } = await import("./resolve-package-W7BS3CDL.js");
|
|
434
434
|
const resolution = await resolveProject(options.path, options.package);
|
|
435
|
-
const { FixApp } = await import("./FixApp-
|
|
435
|
+
const { FixApp } = await import("./FixApp-ID5DCJLQ.js");
|
|
436
436
|
const checks = options.checks ? options.checks.split(",").map((s) => s.trim()) : void 0;
|
|
437
437
|
const projectPath = resolution.isMonorepo ? resolution.targetPath ?? options.path : resolution.targetPath;
|
|
438
438
|
render(
|
|
@@ -455,10 +455,10 @@ program.command("trend").description("Show score history and trends over time").
|
|
|
455
455
|
config({ path: projectEnvPath, override: true });
|
|
456
456
|
}
|
|
457
457
|
}
|
|
458
|
-
const { resolveProject } = await import("./resolve-package-
|
|
458
|
+
const { resolveProject } = await import("./resolve-package-W7BS3CDL.js");
|
|
459
459
|
const resolution = await resolveProject(options.path, options.package);
|
|
460
460
|
const projectPath = resolution.isMonorepo ? resolution.targetPath ?? options.path : resolution.targetPath;
|
|
461
|
-
const { TrendApp } = await import("./TrendApp-
|
|
461
|
+
const { TrendApp } = await import("./TrendApp-WMP6VYBR.js");
|
|
462
462
|
render(
|
|
463
463
|
React6.createElement(TrendApp, {
|
|
464
464
|
projectPath,
|
|
@@ -477,10 +477,10 @@ program.command("stats").description("Show a quick codebase overview and project
|
|
|
477
477
|
config({ path: projectEnvPath, override: true });
|
|
478
478
|
}
|
|
479
479
|
}
|
|
480
|
-
const { resolveProject } = await import("./resolve-package-
|
|
480
|
+
const { resolveProject } = await import("./resolve-package-W7BS3CDL.js");
|
|
481
481
|
const resolution = await resolveProject(options.path, options.package);
|
|
482
482
|
const projectPath = resolution.isMonorepo ? resolution.targetPath ?? options.path : resolution.targetPath;
|
|
483
|
-
const { StatsApp } = await import("./StatsApp-
|
|
483
|
+
const { StatsApp } = await import("./StatsApp-HHPAIDT2.js");
|
|
484
484
|
render(
|
|
485
485
|
React6.createElement(StatsApp, {
|
|
486
486
|
projectPath,
|
|
@@ -492,7 +492,7 @@ program.command("stats").description("Show a quick codebase overview and project
|
|
|
492
492
|
);
|
|
493
493
|
});
|
|
494
494
|
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) => {
|
|
495
|
-
const { TuiApp } = await import("./TuiApp-
|
|
495
|
+
const { TuiApp } = await import("./TuiApp-3U5M5ZBR.js");
|
|
496
496
|
const checks = options.checks ? options.checks.split(",").map((s) => s.trim()) : void 0;
|
|
497
497
|
render(
|
|
498
498
|
React6.createElement(TuiApp, {
|
|
@@ -512,10 +512,10 @@ program.command("doctor").description("Diagnose project setup and configuration
|
|
|
512
512
|
config({ path: projectEnvPath, override: true });
|
|
513
513
|
}
|
|
514
514
|
}
|
|
515
|
-
const { resolveProject } = await import("./resolve-package-
|
|
515
|
+
const { resolveProject } = await import("./resolve-package-W7BS3CDL.js");
|
|
516
516
|
const resolution = await resolveProject(options.path, options.package);
|
|
517
517
|
const projectPath = resolution.isMonorepo ? resolution.targetPath ?? options.path : resolution.targetPath;
|
|
518
|
-
const { DoctorApp } = await import("./DoctorApp-
|
|
518
|
+
const { DoctorApp } = await import("./DoctorApp-MDXB7HQB.js");
|
|
519
519
|
render(
|
|
520
520
|
React6.createElement(DoctorApp, {
|
|
521
521
|
projectPath,
|
|
@@ -528,13 +528,13 @@ program.command("doctor").description("Diagnose project setup and configuration
|
|
|
528
528
|
);
|
|
529
529
|
});
|
|
530
530
|
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) => {
|
|
531
|
-
const { resolveProject } = await import("./resolve-package-
|
|
531
|
+
const { resolveProject } = await import("./resolve-package-W7BS3CDL.js");
|
|
532
532
|
const resolution = await resolveProject(options.path, options.package);
|
|
533
533
|
const projectPath = resolution.isMonorepo ? resolution.targetPath ?? options.path : resolution.targetPath;
|
|
534
534
|
const { loadScoreFromLastReport, badgeUrl, badgeMarkdown, badgeHtml } = await import("./badge-AO2FZVHJ.js");
|
|
535
535
|
let score = options.scan ? null : loadScoreFromLastReport(projectPath);
|
|
536
536
|
if (score === null) {
|
|
537
|
-
const { runSickbay: runSickbay2 } = await import("./dist-
|
|
537
|
+
const { runSickbay: runSickbay2 } = await import("./dist-CC44WX2U.js");
|
|
538
538
|
const report = await runSickbay2({ projectPath, quotes: false });
|
|
539
539
|
try {
|
|
540
540
|
const { saveEntry, saveLastReport } = await import("./history-KXLC45VS.js");
|
|
@@ -563,7 +563,7 @@ program.command("diff <branch>").description("Compare health score against anoth
|
|
|
563
563
|
}
|
|
564
564
|
}
|
|
565
565
|
const checks = options.checks ? options.checks.split(",").map((s) => s.trim()) : void 0;
|
|
566
|
-
const { DiffApp } = await import("./DiffApp-
|
|
566
|
+
const { DiffApp } = await import("./DiffApp-HDNZSDXP.js");
|
|
567
567
|
render(
|
|
568
568
|
React6.createElement(DiffApp, {
|
|
569
569
|
projectPath: options.path,
|
|
@@ -108,7 +108,7 @@ async function serveWeb(report, preferredPort = 3030, aiService) {
|
|
|
108
108
|
if (url === "/sickbay-config.json") {
|
|
109
109
|
const basePath = "isMonorepo" in report ? report.rootPath : report.projectPath;
|
|
110
110
|
try {
|
|
111
|
-
const { loadConfig } = await import("./dist-
|
|
111
|
+
const { loadConfig } = await import("./dist-CC44WX2U.js");
|
|
112
112
|
const config = await loadConfig(basePath);
|
|
113
113
|
if (config) {
|
|
114
114
|
res.writeHead(200, { "Content-Type": "application/json" });
|