claudekit-cli 3.3.1 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +96 -8
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -13078,7 +13078,7 @@ var cac = (name = "") => new CAC(name);
13078
13078
  // package.json
13079
13079
  var package_default = {
13080
13080
  name: "claudekit-cli",
13081
- version: "3.3.1",
13081
+ version: "3.4.0",
13082
13082
  description: "CLI tool for bootstrapping and updating ClaudeKit projects",
13083
13083
  type: "module",
13084
13084
  repository: {
@@ -13219,11 +13219,14 @@ var HealingSummarySchema = exports_external.object({
13219
13219
  fixes: exports_external.array(FixAttemptSchema)
13220
13220
  });
13221
13221
  // src/lib/health-checks/check-runner.ts
13222
+ init_logger();
13223
+
13222
13224
  class CheckRunner {
13223
13225
  checkers = [];
13224
13226
  options;
13225
13227
  constructor(options = {}) {
13226
13228
  this.options = options;
13229
+ logger.verbose("CheckRunner initialized", { options });
13227
13230
  }
13228
13231
  registerChecker(checker) {
13229
13232
  this.checkers.push(checker);
@@ -13234,8 +13237,13 @@ class CheckRunner {
13234
13237
  }
13235
13238
  }
13236
13239
  async run() {
13240
+ logger.verbose("Starting health check run");
13237
13241
  const filteredCheckers = this.filterCheckersByGroup();
13242
+ logger.verbose(`Running ${filteredCheckers.length} checker(s)`, {
13243
+ groups: filteredCheckers.map((c2) => c2.group)
13244
+ });
13238
13245
  const allResults = await this.executeCheckersInParallel(filteredCheckers);
13246
+ logger.verbose("All checks completed, building summary");
13239
13247
  return this.buildSummary(allResults);
13240
13248
  }
13241
13249
  filterCheckersByGroup() {
@@ -13246,7 +13254,14 @@ class CheckRunner {
13246
13254
  return this.checkers.filter((checker) => allowedGroups.has(checker.group));
13247
13255
  }
13248
13256
  async executeCheckersInParallel(checkers) {
13249
- const resultsArrays = await Promise.all(checkers.map((checker) => checker.run()));
13257
+ const resultsArrays = await Promise.all(checkers.map(async (checker) => {
13258
+ logger.verbose(`Starting checker: ${checker.group}`);
13259
+ const results = await checker.run();
13260
+ logger.verbose(`Completed checker: ${checker.group}`, {
13261
+ checkCount: results.length
13262
+ });
13263
+ return results;
13264
+ }));
13250
13265
  return resultsArrays.flat();
13251
13266
  }
13252
13267
  buildSummary(checks) {
@@ -13374,9 +13389,12 @@ async function commandExists(command) {
13374
13389
  }
13375
13390
  try {
13376
13391
  const whichCmd = process.platform === "win32" ? "where" : "which";
13392
+ logger.verbose(`Checking if command exists: ${command}`);
13377
13393
  await execAsync(`${whichCmd} ${command}`);
13394
+ logger.verbose(`Command found: ${command}`);
13378
13395
  return true;
13379
13396
  } catch {
13397
+ logger.verbose(`Command not found: ${command}`);
13380
13398
  return false;
13381
13399
  }
13382
13400
  }
@@ -13388,10 +13406,14 @@ async function getCommandPath(command) {
13388
13406
  }
13389
13407
  try {
13390
13408
  const whichCmd = process.platform === "win32" ? "where" : "which";
13409
+ logger.verbose(`Getting path for command: ${command}`);
13391
13410
  const { stdout } = await execAsync(`${whichCmd} ${command}`);
13392
- return stdout.trim().split(`
13411
+ const path = stdout.trim().split(`
13393
13412
  `)[0] || null;
13413
+ logger.verbose(`Command path resolved: ${command} -> ${path}`);
13414
+ return path;
13394
13415
  } catch {
13416
+ logger.verbose(`Failed to get path for command: ${command}`);
13395
13417
  return null;
13396
13418
  }
13397
13419
  }
@@ -13409,11 +13431,15 @@ async function getCommandVersion(command, versionFlag, versionRegex) {
13409
13431
  return mockVersions[command] || null;
13410
13432
  }
13411
13433
  try {
13434
+ logger.verbose(`Getting version for: ${command} ${versionFlag}`);
13412
13435
  const { stdout, stderr } = await execAsync(`${command} ${versionFlag}`);
13413
13436
  const output = stdout || stderr;
13414
13437
  const match = output.match(versionRegex);
13415
- return match?.[1] || null;
13438
+ const version = match?.[1] || null;
13439
+ logger.verbose(`Version detected: ${command} -> ${version}`);
13440
+ return version;
13416
13441
  } catch (error) {
13442
+ logger.verbose(`Failed to get version for ${command}: ${error}`);
13417
13443
  logger.debug(`Failed to get version for ${command}: ${error}`);
13418
13444
  return null;
13419
13445
  }
@@ -13432,9 +13458,11 @@ function compareVersions(current, required) {
13432
13458
  return true;
13433
13459
  }
13434
13460
  async function checkDependency(config) {
13461
+ logger.verbose(`Checking dependency: ${config.name}`);
13435
13462
  for (const command of config.commands) {
13436
13463
  const exists = await commandExists(command);
13437
13464
  if (exists) {
13465
+ logger.verbose(`Found ${config.name} via command: ${command}`);
13438
13466
  const path = await getCommandPath(command);
13439
13467
  const version = await getCommandVersion(command, config.versionFlag, config.versionRegex);
13440
13468
  let meetsRequirements = true;
@@ -13465,8 +13493,13 @@ async function checkDependency(config) {
13465
13493
  };
13466
13494
  }
13467
13495
  async function checkAllDependencies() {
13496
+ logger.verbose("Checking all dependencies in parallel");
13468
13497
  const checks = Object.values(DEPENDENCIES).map((config) => checkDependency(config));
13469
- return Promise.all(checks);
13498
+ const results = await Promise.all(checks);
13499
+ logger.verbose("All dependency checks complete", {
13500
+ count: results.length
13501
+ });
13502
+ return results;
13470
13503
  }
13471
13504
 
13472
13505
  // src/utils/dependency-installer.ts
@@ -13700,18 +13733,27 @@ async function installDependency(dependency, method) {
13700
13733
  }
13701
13734
 
13702
13735
  // src/lib/health-checks/system-checker.ts
13736
+ init_logger();
13703
13737
  var execAsync3 = promisify3(exec3);
13704
13738
 
13705
13739
  class SystemChecker {
13706
13740
  group = "system";
13707
13741
  async run() {
13742
+ logger.verbose("SystemChecker: Starting dependency checks");
13708
13743
  const deps = await checkAllDependencies();
13744
+ logger.verbose("SystemChecker: Dependency scan complete", {
13745
+ count: deps.length
13746
+ });
13709
13747
  const results = [];
13710
13748
  for (const dep of deps) {
13749
+ logger.verbose(`SystemChecker: Processing ${dep.name}`);
13711
13750
  results.push(await this.mapDependencyToCheck(dep));
13712
13751
  }
13752
+ logger.verbose("SystemChecker: Checking git");
13713
13753
  results.push(await this.checkGit());
13754
+ logger.verbose("SystemChecker: Checking GitHub CLI");
13714
13755
  results.push(await this.checkGitHubCli());
13756
+ logger.verbose("SystemChecker: All system checks complete");
13715
13757
  return results;
13716
13758
  }
13717
13759
  async mapDependencyToCheck(dep) {
@@ -14064,6 +14106,9 @@ async function getClaudeKitSetup(projectDir = process.cwd()) {
14064
14106
  return setup;
14065
14107
  }
14066
14108
 
14109
+ // src/lib/health-checks/claudekit-checker.ts
14110
+ init_logger();
14111
+
14067
14112
  // src/lib/package-manager-detector.ts
14068
14113
  init_logger();
14069
14114
  import { exec as exec4 } from "node:child_process";
@@ -14079,20 +14124,27 @@ class PackageManagerDetector {
14079
14124
  static CACHE_TTL = 30 * 24 * 60 * 60 * 1000;
14080
14125
  static QUERY_TIMEOUT = 5000;
14081
14126
  static async detect() {
14127
+ logger.verbose("PackageManagerDetector: Starting detection");
14082
14128
  const envPm = PackageManagerDetector.detectFromEnv();
14083
14129
  if (envPm !== "unknown") {
14130
+ logger.verbose(`PackageManagerDetector: Detected from env: ${envPm}`);
14084
14131
  return envPm;
14085
14132
  }
14133
+ logger.verbose("PackageManagerDetector: Checking cache");
14086
14134
  const cachedPm = await PackageManagerDetector.readCachedPm();
14087
14135
  if (cachedPm) {
14136
+ logger.verbose(`PackageManagerDetector: Using cached: ${cachedPm}`);
14088
14137
  logger.debug(`Using cached package manager: ${cachedPm}`);
14089
14138
  return cachedPm;
14090
14139
  }
14140
+ logger.verbose("PackageManagerDetector: Querying package managers");
14091
14141
  const owningPm = await PackageManagerDetector.findOwningPm();
14092
14142
  if (owningPm) {
14143
+ logger.verbose(`PackageManagerDetector: Found owning PM: ${owningPm}`);
14093
14144
  await PackageManagerDetector.saveCachedPm(owningPm);
14094
14145
  return owningPm;
14095
14146
  }
14147
+ logger.verbose("PackageManagerDetector: Defaulting to npm");
14096
14148
  logger.warning("Could not detect package manager that installed claudekit-cli, defaulting to npm");
14097
14149
  return "npm";
14098
14150
  }
@@ -14209,19 +14261,26 @@ class PackageManagerDetector {
14209
14261
  checkFn: (stdout) => stdout.includes("claudekit-cli")
14210
14262
  }
14211
14263
  ];
14264
+ logger.verbose("PackageManagerDetector: Querying all PMs in parallel");
14212
14265
  logger.debug("Querying package managers for claudekit-cli ownership...");
14213
14266
  const results = await Promise.allSettled(queries.map(async ({ pm, cmd, checkFn }) => {
14214
14267
  try {
14268
+ logger.verbose(`PackageManagerDetector: Querying ${pm}`);
14215
14269
  const { stdout } = await execAsync4(cmd, {
14216
14270
  timeout: PackageManagerDetector.QUERY_TIMEOUT
14217
14271
  });
14218
14272
  if (checkFn(stdout)) {
14273
+ logger.verbose(`PackageManagerDetector: Found via ${pm}`);
14219
14274
  logger.debug(`Found claudekit-cli installed via ${pm}`);
14220
14275
  return pm;
14221
14276
  }
14222
- } catch {}
14277
+ logger.verbose(`PackageManagerDetector: Not found via ${pm}`);
14278
+ } catch {
14279
+ logger.verbose(`PackageManagerDetector: ${pm} query failed or not available`);
14280
+ }
14223
14281
  return null;
14224
14282
  }));
14283
+ logger.verbose("PackageManagerDetector: All PM queries complete");
14225
14284
  for (const result of results) {
14226
14285
  if (result.status === "fulfilled" && result.value) {
14227
14286
  return result.value;
@@ -14304,9 +14363,13 @@ class PackageManagerDetector {
14304
14363
  return null;
14305
14364
  const command = PackageManagerDetector.getVersionCommand(pm);
14306
14365
  try {
14366
+ logger.verbose(`PackageManagerDetector: Getting version for ${pm}`);
14307
14367
  const { stdout } = await execAsync4(command, { timeout: 3000 });
14308
- return stdout.trim();
14368
+ const version = stdout.trim();
14369
+ logger.verbose(`PackageManagerDetector: ${pm} version: ${version}`);
14370
+ return version;
14309
14371
  } catch {
14372
+ logger.verbose(`PackageManagerDetector: Failed to get ${pm} version`);
14310
14373
  return null;
14311
14374
  }
14312
14375
  }
@@ -14332,15 +14395,27 @@ class ClaudekitChecker {
14332
14395
  this.projectDir = projectDir;
14333
14396
  }
14334
14397
  async run() {
14398
+ logger.verbose("ClaudekitChecker: Scanning ClaudeKit setup", {
14399
+ projectDir: this.projectDir
14400
+ });
14335
14401
  const setup = await getClaudeKitSetup(this.projectDir);
14402
+ logger.verbose("ClaudekitChecker: Setup scan complete");
14336
14403
  const results = [];
14404
+ logger.verbose("ClaudekitChecker: Checking CLI install method");
14337
14405
  results.push(await this.checkCliInstallMethod());
14406
+ logger.verbose("ClaudekitChecker: Checking global install");
14338
14407
  results.push(this.checkGlobalInstall(setup));
14408
+ logger.verbose("ClaudekitChecker: Checking project install");
14339
14409
  results.push(this.checkProjectInstall(setup));
14410
+ logger.verbose("ClaudekitChecker: Checking CLAUDE.md files");
14340
14411
  results.push(...this.checkClaudeMd(setup));
14412
+ logger.verbose("ClaudekitChecker: Checking active plan");
14341
14413
  results.push(this.checkActivePlan());
14414
+ logger.verbose("ClaudekitChecker: Checking skills scripts");
14342
14415
  results.push(...this.checkSkillsScripts(setup));
14416
+ logger.verbose("ClaudekitChecker: Checking component counts");
14343
14417
  results.push(this.checkComponentCounts(setup));
14418
+ logger.verbose("ClaudekitChecker: All checks complete");
14344
14419
  return results;
14345
14420
  }
14346
14421
  async checkCliInstallMethod() {
@@ -14555,6 +14630,7 @@ class ClaudekitChecker {
14555
14630
  }
14556
14631
  // src/lib/health-checks/auth-checker.ts
14557
14632
  init_types2();
14633
+ init_logger();
14558
14634
  import { execSync as execSync2 } from "node:child_process";
14559
14635
 
14560
14636
  // src/lib/auth.ts
@@ -15276,21 +15352,28 @@ class AuthChecker {
15276
15352
  this.kits = kits;
15277
15353
  }
15278
15354
  async run() {
15355
+ logger.verbose("AuthChecker: Starting authentication checks");
15279
15356
  const results = [];
15357
+ logger.verbose("AuthChecker: Checking GitHub CLI auth status");
15280
15358
  results.push(await this.checkGhAuth());
15359
+ logger.verbose("AuthChecker: Checking GitHub token");
15281
15360
  results.push(await this.checkGhToken());
15282
15361
  for (const kit of this.kits) {
15362
+ logger.verbose(`AuthChecker: Checking repo access for kit: ${kit}`);
15283
15363
  results.push(await this.checkRepoAccess(kit));
15284
15364
  }
15365
+ logger.verbose("AuthChecker: All auth checks complete");
15285
15366
  return results;
15286
15367
  }
15287
15368
  async checkGhAuth() {
15288
15369
  if (false) {}
15289
15370
  try {
15371
+ logger.verbose("AuthChecker: Running 'gh auth status' command");
15290
15372
  execSync2("gh auth status", {
15291
15373
  stdio: ["pipe", "pipe", "pipe"],
15292
15374
  timeout: 5000
15293
15375
  });
15376
+ logger.verbose("AuthChecker: gh auth status succeeded");
15294
15377
  return {
15295
15378
  id: "gh-auth-status",
15296
15379
  name: "GitHub CLI Auth",
@@ -15314,7 +15397,9 @@ class AuthChecker {
15314
15397
  }
15315
15398
  async checkGhToken() {
15316
15399
  try {
15400
+ logger.verbose("AuthChecker: Getting GitHub token via AuthManager");
15317
15401
  const { token } = await AuthManager.getToken();
15402
+ logger.verbose("AuthChecker: Token retrieved successfully");
15318
15403
  const maskedToken = `${token.substring(0, 8)}...`;
15319
15404
  return {
15320
15405
  id: "gh-token",
@@ -15342,6 +15427,7 @@ class AuthChecker {
15342
15427
  async checkRepoAccess(kit) {
15343
15428
  const kitConfig = AVAILABLE_KITS[kit];
15344
15429
  if (isCIEnvironment2) {
15430
+ logger.verbose(`AuthChecker: Skipping repo access check for ${kit} in CI`);
15345
15431
  return {
15346
15432
  id: `repo-access-${kit}`,
15347
15433
  name: `Repository Access (${kit})`,
@@ -15352,8 +15438,10 @@ class AuthChecker {
15352
15438
  };
15353
15439
  }
15354
15440
  try {
15441
+ logger.verbose(`AuthChecker: Checking access to ${kitConfig.owner}/${kitConfig.repo}`);
15355
15442
  const client = new GitHubClient;
15356
15443
  const hasAccess = await client.checkAccess(kitConfig);
15444
+ logger.verbose(`AuthChecker: Repo access check complete for ${kit}`, { hasAccess });
15357
15445
  if (hasAccess) {
15358
15446
  return {
15359
15447
  id: `repo-access-${kit}`,
@@ -32171,7 +32259,7 @@ import { promisify as promisify6 } from "node:util";
32171
32259
  // package.json
32172
32260
  var package_default2 = {
32173
32261
  name: "claudekit-cli",
32174
- version: "3.3.1",
32262
+ version: "3.4.0",
32175
32263
  description: "CLI tool for bootstrapping and updating ClaudeKit projects",
32176
32264
  type: "module",
32177
32265
  repository: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudekit-cli",
3
- "version": "3.3.1",
3
+ "version": "3.4.0",
4
4
  "description": "CLI tool for bootstrapping and updating ClaudeKit projects",
5
5
  "type": "module",
6
6
  "repository": {