claudekit-cli 4.2.0 → 4.2.1-dev.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/cli-manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "4.2.0",
3
- "generatedAt": "2026-05-12T15:41:30.136Z",
2
+ "version": "4.2.1-dev.1",
3
+ "generatedAt": "2026-05-12T16:42:41.480Z",
4
4
  "commands": {
5
5
  "agents": {
6
6
  "name": "agents",
package/dist/index.js CHANGED
@@ -62890,7 +62890,7 @@ var package_default;
62890
62890
  var init_package = __esm(() => {
62891
62891
  package_default = {
62892
62892
  name: "claudekit-cli",
62893
- version: "4.2.0",
62893
+ version: "4.2.1-dev.1",
62894
62894
  description: "CLI tool for bootstrapping and updating ClaudeKit projects",
62895
62895
  type: "module",
62896
62896
  repository: {
@@ -74006,76 +74006,6 @@ var init_ownership_display = __esm(() => {
74006
74006
  import_picocolors25 = __toESM(require_picocolors(), 1);
74007
74007
  });
74008
74008
 
74009
- // src/ui/node_modules/picocolors/picocolors.js
74010
- var require_picocolors2 = __commonJS((exports, module) => {
74011
- var p = process || {};
74012
- var argv = p.argv || [];
74013
- var env2 = p.env || {};
74014
- var isColorSupported = !(!!env2.NO_COLOR || argv.includes("--no-color")) && (!!env2.FORCE_COLOR || argv.includes("--color") || p.platform === "win32" || (p.stdout || {}).isTTY && env2.TERM !== "dumb" || !!env2.CI);
74015
- var formatter = (open6, close, replace3 = open6) => (input) => {
74016
- let string = "" + input, index = string.indexOf(close, open6.length);
74017
- return ~index ? open6 + replaceClose(string, close, replace3, index) + close : open6 + string + close;
74018
- };
74019
- var replaceClose = (string, close, replace3, index) => {
74020
- let result = "", cursor = 0;
74021
- do {
74022
- result += string.substring(cursor, index) + replace3;
74023
- cursor = index + close.length;
74024
- index = string.indexOf(close, cursor);
74025
- } while (~index);
74026
- return result + string.substring(cursor);
74027
- };
74028
- var createColors = (enabled = isColorSupported) => {
74029
- let f3 = enabled ? formatter : () => String;
74030
- return {
74031
- isColorSupported: enabled,
74032
- reset: f3("\x1B[0m", "\x1B[0m"),
74033
- bold: f3("\x1B[1m", "\x1B[22m", "\x1B[22m\x1B[1m"),
74034
- dim: f3("\x1B[2m", "\x1B[22m", "\x1B[22m\x1B[2m"),
74035
- italic: f3("\x1B[3m", "\x1B[23m"),
74036
- underline: f3("\x1B[4m", "\x1B[24m"),
74037
- inverse: f3("\x1B[7m", "\x1B[27m"),
74038
- hidden: f3("\x1B[8m", "\x1B[28m"),
74039
- strikethrough: f3("\x1B[9m", "\x1B[29m"),
74040
- black: f3("\x1B[30m", "\x1B[39m"),
74041
- red: f3("\x1B[31m", "\x1B[39m"),
74042
- green: f3("\x1B[32m", "\x1B[39m"),
74043
- yellow: f3("\x1B[33m", "\x1B[39m"),
74044
- blue: f3("\x1B[34m", "\x1B[39m"),
74045
- magenta: f3("\x1B[35m", "\x1B[39m"),
74046
- cyan: f3("\x1B[36m", "\x1B[39m"),
74047
- white: f3("\x1B[37m", "\x1B[39m"),
74048
- gray: f3("\x1B[90m", "\x1B[39m"),
74049
- bgBlack: f3("\x1B[40m", "\x1B[49m"),
74050
- bgRed: f3("\x1B[41m", "\x1B[49m"),
74051
- bgGreen: f3("\x1B[42m", "\x1B[49m"),
74052
- bgYellow: f3("\x1B[43m", "\x1B[49m"),
74053
- bgBlue: f3("\x1B[44m", "\x1B[49m"),
74054
- bgMagenta: f3("\x1B[45m", "\x1B[49m"),
74055
- bgCyan: f3("\x1B[46m", "\x1B[49m"),
74056
- bgWhite: f3("\x1B[47m", "\x1B[49m"),
74057
- blackBright: f3("\x1B[90m", "\x1B[39m"),
74058
- redBright: f3("\x1B[91m", "\x1B[39m"),
74059
- greenBright: f3("\x1B[92m", "\x1B[39m"),
74060
- yellowBright: f3("\x1B[93m", "\x1B[39m"),
74061
- blueBright: f3("\x1B[94m", "\x1B[39m"),
74062
- magentaBright: f3("\x1B[95m", "\x1B[39m"),
74063
- cyanBright: f3("\x1B[96m", "\x1B[39m"),
74064
- whiteBright: f3("\x1B[97m", "\x1B[39m"),
74065
- bgBlackBright: f3("\x1B[100m", "\x1B[49m"),
74066
- bgRedBright: f3("\x1B[101m", "\x1B[49m"),
74067
- bgGreenBright: f3("\x1B[102m", "\x1B[49m"),
74068
- bgYellowBright: f3("\x1B[103m", "\x1B[49m"),
74069
- bgBlueBright: f3("\x1B[104m", "\x1B[49m"),
74070
- bgMagentaBright: f3("\x1B[105m", "\x1B[49m"),
74071
- bgCyanBright: f3("\x1B[106m", "\x1B[49m"),
74072
- bgWhiteBright: f3("\x1B[107m", "\x1B[49m")
74073
- };
74074
- };
74075
- module.exports = createColors();
74076
- module.exports.createColors = createColors;
74077
- });
74078
-
74079
74009
  // src/commands/watch/phases/implementation-git-helpers.ts
74080
74010
  import { spawn as spawn5 } from "node:child_process";
74081
74011
  async function getCurrentBranch2(cwd2) {
@@ -74184,9 +74114,9 @@ __export(exports_worktree_manager, {
74184
74114
  });
74185
74115
  import { existsSync as existsSync70 } from "node:fs";
74186
74116
  import { readFile as readFile66, writeFile as writeFile37 } from "node:fs/promises";
74187
- import { join as join151 } from "node:path";
74117
+ import { join as join152 } from "node:path";
74188
74118
  async function createWorktree(projectDir, issueNumber, baseBranch) {
74189
- const worktreePath = join151(projectDir, WORKTREE_DIR, `issue-${issueNumber}`);
74119
+ const worktreePath = join152(projectDir, WORKTREE_DIR, `issue-${issueNumber}`);
74190
74120
  const branchName = `ck-watch/issue-${issueNumber}`;
74191
74121
  await spawnAndCollect("git", ["fetch", "origin", baseBranch], projectDir).catch(() => {
74192
74122
  logger.warning(`[worktree] Could not fetch origin/${baseBranch}, using local`);
@@ -74204,7 +74134,7 @@ async function createWorktree(projectDir, issueNumber, baseBranch) {
74204
74134
  return worktreePath;
74205
74135
  }
74206
74136
  async function removeWorktree(projectDir, issueNumber) {
74207
- const worktreePath = join151(projectDir, WORKTREE_DIR, `issue-${issueNumber}`);
74137
+ const worktreePath = join152(projectDir, WORKTREE_DIR, `issue-${issueNumber}`);
74208
74138
  const branchName = `ck-watch/issue-${issueNumber}`;
74209
74139
  try {
74210
74140
  await spawnAndCollect("git", ["worktree", "remove", worktreePath, "--force"], projectDir);
@@ -74218,7 +74148,7 @@ async function listActiveWorktrees(projectDir) {
74218
74148
  try {
74219
74149
  const output2 = await spawnAndCollect("git", ["worktree", "list", "--porcelain"], projectDir);
74220
74150
  const issueNumbers = [];
74221
- const worktreePrefix = join151(projectDir, WORKTREE_DIR, "issue-").replace(/\\/g, "/");
74151
+ const worktreePrefix = join152(projectDir, WORKTREE_DIR, "issue-").replace(/\\/g, "/");
74222
74152
  for (const line of output2.split(`
74223
74153
  `)) {
74224
74154
  if (line.startsWith("worktree ")) {
@@ -74246,7 +74176,7 @@ async function cleanupAllWorktrees(projectDir) {
74246
74176
  await spawnAndCollect("git", ["worktree", "prune"], projectDir).catch(() => {});
74247
74177
  }
74248
74178
  async function ensureGitignore(projectDir) {
74249
- const gitignorePath = join151(projectDir, ".gitignore");
74179
+ const gitignorePath = join152(projectDir, ".gitignore");
74250
74180
  try {
74251
74181
  const content = existsSync70(gitignorePath) ? await readFile66(gitignorePath, "utf-8") : "";
74252
74182
  if (!content.includes(".worktrees")) {
@@ -74353,7 +74283,7 @@ import { createHash as createHash9 } from "node:crypto";
74353
74283
  import { existsSync as existsSync76, mkdirSync as mkdirSync5, readFileSync as readFileSync18, readdirSync as readdirSync11, statSync as statSync14 } from "node:fs";
74354
74284
  import { rename as rename14, writeFile as writeFile39 } from "node:fs/promises";
74355
74285
  import { homedir as homedir53 } from "node:os";
74356
- import { basename as basename31, join as join158 } from "node:path";
74286
+ import { basename as basename31, join as join159 } from "node:path";
74357
74287
  function getCachedContext(repoPath) {
74358
74288
  const cachePath = getCacheFilePath(repoPath);
74359
74289
  if (!existsSync76(cachePath))
@@ -74396,25 +74326,25 @@ function computeSourceHash(repoPath) {
74396
74326
  }
74397
74327
  function getDocSourcePaths(repoPath) {
74398
74328
  const paths = [];
74399
- const docsDir = join158(repoPath, "docs");
74329
+ const docsDir = join159(repoPath, "docs");
74400
74330
  if (existsSync76(docsDir)) {
74401
74331
  try {
74402
74332
  const files = readdirSync11(docsDir);
74403
74333
  for (const f3 of files) {
74404
74334
  if (f3.endsWith(".md"))
74405
- paths.push(join158(docsDir, f3));
74335
+ paths.push(join159(docsDir, f3));
74406
74336
  }
74407
74337
  } catch {}
74408
74338
  }
74409
- const readme = join158(repoPath, "README.md");
74339
+ const readme = join159(repoPath, "README.md");
74410
74340
  if (existsSync76(readme))
74411
74341
  paths.push(readme);
74412
- const stylesDir = join158(repoPath, "assets", "writing-styles");
74342
+ const stylesDir = join159(repoPath, "assets", "writing-styles");
74413
74343
  if (existsSync76(stylesDir)) {
74414
74344
  try {
74415
74345
  const files = readdirSync11(stylesDir);
74416
74346
  for (const f3 of files) {
74417
- paths.push(join158(stylesDir, f3));
74347
+ paths.push(join159(stylesDir, f3));
74418
74348
  }
74419
74349
  } catch {}
74420
74350
  }
@@ -74423,11 +74353,11 @@ function getDocSourcePaths(repoPath) {
74423
74353
  function getCacheFilePath(repoPath) {
74424
74354
  const repoName = basename31(repoPath).replace(/[^a-zA-Z0-9_-]/g, "_");
74425
74355
  const pathHash = createHash9("sha256").update(repoPath).digest("hex").slice(0, 8);
74426
- return join158(CACHE_DIR, `${repoName}-${pathHash}-context-cache.json`);
74356
+ return join159(CACHE_DIR, `${repoName}-${pathHash}-context-cache.json`);
74427
74357
  }
74428
74358
  var CACHE_DIR, CACHE_TTL_MS5;
74429
74359
  var init_context_cache_manager = __esm(() => {
74430
- CACHE_DIR = join158(homedir53(), ".claudekit", "cache");
74360
+ CACHE_DIR = join159(homedir53(), ".claudekit", "cache");
74431
74361
  CACHE_TTL_MS5 = 24 * 60 * 60 * 1000;
74432
74362
  });
74433
74363
 
@@ -74608,7 +74538,7 @@ function extractContentFromResponse(response) {
74608
74538
  // src/commands/content/phases/docs-summarizer.ts
74609
74539
  import { execSync as execSync7 } from "node:child_process";
74610
74540
  import { existsSync as existsSync77, readFileSync as readFileSync19, readdirSync as readdirSync12 } from "node:fs";
74611
- import { join as join159 } from "node:path";
74541
+ import { join as join160 } from "node:path";
74612
74542
  async function summarizeProjectDocs(repoPath, contentLogger) {
74613
74543
  const rawContent = collectRawDocs(repoPath);
74614
74544
  if (rawContent.total.length < 200) {
@@ -74662,12 +74592,12 @@ function collectRawDocs(repoPath) {
74662
74592
  return capped;
74663
74593
  };
74664
74594
  const docsContent = [];
74665
- const docsDir = join159(repoPath, "docs");
74595
+ const docsDir = join160(repoPath, "docs");
74666
74596
  if (existsSync77(docsDir)) {
74667
74597
  try {
74668
74598
  const files = readdirSync12(docsDir).filter((f3) => f3.endsWith(".md")).sort();
74669
74599
  for (const f3 of files) {
74670
- const content = readCapped(join159(docsDir, f3), 5000);
74600
+ const content = readCapped(join160(docsDir, f3), 5000);
74671
74601
  if (content) {
74672
74602
  docsContent.push(`### ${f3}
74673
74603
  ${content}`);
@@ -74681,21 +74611,21 @@ ${content}`);
74681
74611
  let brand = "";
74682
74612
  const brandCandidates = ["docs/brand-guidelines.md", "docs/design-guidelines.md"];
74683
74613
  for (const p of brandCandidates) {
74684
- brand = readCapped(join159(repoPath, p), 3000);
74614
+ brand = readCapped(join160(repoPath, p), 3000);
74685
74615
  if (brand)
74686
74616
  break;
74687
74617
  }
74688
74618
  let styles3 = "";
74689
- const stylesDir = join159(repoPath, "assets", "writing-styles");
74619
+ const stylesDir = join160(repoPath, "assets", "writing-styles");
74690
74620
  if (existsSync77(stylesDir)) {
74691
74621
  try {
74692
74622
  const files = readdirSync12(stylesDir).slice(0, 3);
74693
- styles3 = files.map((f3) => readCapped(join159(stylesDir, f3), 1000)).filter(Boolean).join(`
74623
+ styles3 = files.map((f3) => readCapped(join160(stylesDir, f3), 1000)).filter(Boolean).join(`
74694
74624
 
74695
74625
  `);
74696
74626
  } catch {}
74697
74627
  }
74698
- const readme = readCapped(join159(repoPath, "README.md"), 3000);
74628
+ const readme = readCapped(join160(repoPath, "README.md"), 3000);
74699
74629
  const total = [docs, brand, styles3, readme].join(`
74700
74630
  `);
74701
74631
  return { docs, brand, styles: styles3, readme, total };
@@ -74882,9 +74812,9 @@ IMPORTANT: Generate the image and output the path as JSON: {"imagePath": "/path/
74882
74812
  import { execSync as execSync8 } from "node:child_process";
74883
74813
  import { existsSync as existsSync78, mkdirSync as mkdirSync6, readdirSync as readdirSync13 } from "node:fs";
74884
74814
  import { homedir as homedir54 } from "node:os";
74885
- import { join as join160 } from "node:path";
74815
+ import { join as join161 } from "node:path";
74886
74816
  async function generatePhoto(_content, context, config, platform18, contentId, contentLogger) {
74887
- const mediaDir = join160(config.contentDir.replace(/^~/, homedir54()), "media", String(contentId));
74817
+ const mediaDir = join161(config.contentDir.replace(/^~/, homedir54()), "media", String(contentId));
74888
74818
  if (!existsSync78(mediaDir)) {
74889
74819
  mkdirSync6(mediaDir, { recursive: true });
74890
74820
  }
@@ -74909,7 +74839,7 @@ async function generatePhoto(_content, context, config, platform18, contentId, c
74909
74839
  const imageFile = files.find((f3) => /\.(png|jpg|jpeg|webp)$/i.test(f3));
74910
74840
  if (imageFile) {
74911
74841
  const ext2 = imageFile.split(".").pop() ?? "png";
74912
- return { path: join160(mediaDir, imageFile), ...dimensions, format: ext2 };
74842
+ return { path: join161(mediaDir, imageFile), ...dimensions, format: ext2 };
74913
74843
  }
74914
74844
  contentLogger.warn(`Photo generation produced no image for content ${contentId}`);
74915
74845
  return null;
@@ -74999,7 +74929,7 @@ var init_content_creator = __esm(() => {
74999
74929
  // src/commands/content/phases/content-logger.ts
75000
74930
  import { createWriteStream as createWriteStream4, existsSync as existsSync79, mkdirSync as mkdirSync7, statSync as statSync15 } from "node:fs";
75001
74931
  import { homedir as homedir55 } from "node:os";
75002
- import { join as join161 } from "node:path";
74932
+ import { join as join162 } from "node:path";
75003
74933
 
75004
74934
  class ContentLogger {
75005
74935
  stream = null;
@@ -75007,7 +74937,7 @@ class ContentLogger {
75007
74937
  logDir;
75008
74938
  maxBytes;
75009
74939
  constructor(maxBytes = 0) {
75010
- this.logDir = join161(homedir55(), ".claudekit", "logs");
74940
+ this.logDir = join162(homedir55(), ".claudekit", "logs");
75011
74941
  this.maxBytes = maxBytes;
75012
74942
  }
75013
74943
  init() {
@@ -75039,7 +74969,7 @@ class ContentLogger {
75039
74969
  }
75040
74970
  }
75041
74971
  getLogPath() {
75042
- return join161(this.logDir, `content-${this.getDateStr()}.log`);
74972
+ return join162(this.logDir, `content-${this.getDateStr()}.log`);
75043
74973
  }
75044
74974
  write(level, message) {
75045
74975
  this.rotateIfNeeded();
@@ -75056,18 +74986,18 @@ class ContentLogger {
75056
74986
  if (dateStr !== this.currentDate) {
75057
74987
  this.close();
75058
74988
  this.currentDate = dateStr;
75059
- const logPath = join161(this.logDir, `content-${dateStr}.log`);
74989
+ const logPath = join162(this.logDir, `content-${dateStr}.log`);
75060
74990
  this.stream = createWriteStream4(logPath, { flags: "a", mode: 384 });
75061
74991
  return;
75062
74992
  }
75063
74993
  if (this.maxBytes > 0 && this.stream) {
75064
- const logPath = join161(this.logDir, `content-${this.currentDate}.log`);
74994
+ const logPath = join162(this.logDir, `content-${this.currentDate}.log`);
75065
74995
  try {
75066
74996
  const stat25 = statSync15(logPath);
75067
74997
  if (stat25.size >= this.maxBytes) {
75068
74998
  this.close();
75069
74999
  const suffix = Date.now();
75070
- const rotatedPath = join161(this.logDir, `content-${this.currentDate}-${suffix}.log`);
75000
+ const rotatedPath = join162(this.logDir, `content-${this.currentDate}-${suffix}.log`);
75071
75001
  import("node:fs/promises").then(({ rename: rename15 }) => rename15(logPath, rotatedPath).catch(() => {}));
75072
75002
  this.stream = createWriteStream4(logPath, { flags: "w", mode: 384 });
75073
75003
  }
@@ -75293,7 +75223,7 @@ function isNoiseCommit(title, author) {
75293
75223
  // src/commands/content/phases/change-detector.ts
75294
75224
  import { execSync as execSync10, spawnSync as spawnSync9 } from "node:child_process";
75295
75225
  import { existsSync as existsSync81, readFileSync as readFileSync20, readdirSync as readdirSync14, statSync as statSync16 } from "node:fs";
75296
- import { join as join162 } from "node:path";
75226
+ import { join as join163 } from "node:path";
75297
75227
  function detectCommits(repo, since) {
75298
75228
  try {
75299
75229
  const fetchUrl = sshToHttps(repo.remoteUrl);
@@ -75402,7 +75332,7 @@ function detectTags(repo, since) {
75402
75332
  }
75403
75333
  }
75404
75334
  function detectCompletedPlans(repo, since) {
75405
- const plansDir = join162(repo.path, "plans");
75335
+ const plansDir = join163(repo.path, "plans");
75406
75336
  if (!existsSync81(plansDir))
75407
75337
  return [];
75408
75338
  const sinceMs = new Date(since).getTime();
@@ -75412,7 +75342,7 @@ function detectCompletedPlans(repo, since) {
75412
75342
  for (const entry of entries) {
75413
75343
  if (!entry.isDirectory())
75414
75344
  continue;
75415
- const planFile = join162(plansDir, entry.name, "plan.md");
75345
+ const planFile = join163(plansDir, entry.name, "plan.md");
75416
75346
  if (!existsSync81(planFile))
75417
75347
  continue;
75418
75348
  try {
@@ -75490,7 +75420,7 @@ function classifyCommit(event) {
75490
75420
  // src/commands/content/phases/repo-discoverer.ts
75491
75421
  import { execSync as execSync11 } from "node:child_process";
75492
75422
  import { readdirSync as readdirSync15 } from "node:fs";
75493
- import { join as join163 } from "node:path";
75423
+ import { join as join164 } from "node:path";
75494
75424
  function discoverRepos2(cwd2) {
75495
75425
  const repos = [];
75496
75426
  if (isGitRepoRoot(cwd2)) {
@@ -75503,7 +75433,7 @@ function discoverRepos2(cwd2) {
75503
75433
  for (const entry of entries) {
75504
75434
  if (!entry.isDirectory() || entry.name.startsWith("."))
75505
75435
  continue;
75506
- const dirPath = join163(cwd2, entry.name);
75436
+ const dirPath = join164(cwd2, entry.name);
75507
75437
  if (isGitRepoRoot(dirPath)) {
75508
75438
  const info = getRepoInfo(dirPath);
75509
75439
  if (info)
@@ -76171,9 +76101,9 @@ var init_types6 = __esm(() => {
76171
76101
 
76172
76102
  // src/commands/content/phases/state-manager.ts
76173
76103
  import { readFile as readFile68, rename as rename15, writeFile as writeFile40 } from "node:fs/promises";
76174
- import { join as join164 } from "node:path";
76104
+ import { join as join165 } from "node:path";
76175
76105
  async function loadContentConfig(projectDir) {
76176
- const configPath = join164(projectDir, CK_CONFIG_FILE2);
76106
+ const configPath = join165(projectDir, CK_CONFIG_FILE2);
76177
76107
  try {
76178
76108
  const raw2 = await readFile68(configPath, "utf-8");
76179
76109
  const json = JSON.parse(raw2);
@@ -76183,13 +76113,13 @@ async function loadContentConfig(projectDir) {
76183
76113
  }
76184
76114
  }
76185
76115
  async function saveContentConfig(projectDir, config) {
76186
- const configPath = join164(projectDir, CK_CONFIG_FILE2);
76116
+ const configPath = join165(projectDir, CK_CONFIG_FILE2);
76187
76117
  const json = await readJsonSafe(configPath);
76188
76118
  json.content = { ...json.content, ...config };
76189
76119
  await atomicWrite2(configPath, json);
76190
76120
  }
76191
76121
  async function loadContentState(projectDir) {
76192
- const configPath = join164(projectDir, CK_CONFIG_FILE2);
76122
+ const configPath = join165(projectDir, CK_CONFIG_FILE2);
76193
76123
  try {
76194
76124
  const raw2 = await readFile68(configPath, "utf-8");
76195
76125
  const json = JSON.parse(raw2);
@@ -76200,7 +76130,7 @@ async function loadContentState(projectDir) {
76200
76130
  }
76201
76131
  }
76202
76132
  async function saveContentState(projectDir, state) {
76203
- const configPath = join164(projectDir, CK_CONFIG_FILE2);
76133
+ const configPath = join165(projectDir, CK_CONFIG_FILE2);
76204
76134
  const sevenDaysAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString().slice(0, 10);
76205
76135
  for (const key of Object.keys(state.dailyPostCounts)) {
76206
76136
  const dateStr = key.slice(-10);
@@ -76482,7 +76412,7 @@ var init_platform_setup_x = __esm(() => {
76482
76412
 
76483
76413
  // src/commands/content/phases/setup-wizard.ts
76484
76414
  import { existsSync as existsSync82 } from "node:fs";
76485
- import { join as join165 } from "node:path";
76415
+ import { join as join166 } from "node:path";
76486
76416
  async function runSetupWizard2(cwd2, contentLogger) {
76487
76417
  console.log();
76488
76418
  oe(import_picocolors43.default.bgCyan(import_picocolors43.default.white(" CK Content — Multi-Channel Content Engine ")));
@@ -76550,8 +76480,8 @@ async function showRepoSummary(cwd2) {
76550
76480
  function detectBrandAssets(cwd2, contentLogger) {
76551
76481
  const repos = discoverRepos2(cwd2);
76552
76482
  for (const repo of repos) {
76553
- const hasGuidelines = existsSync82(join165(repo.path, "docs", "brand-guidelines.md"));
76554
- const hasStyles = existsSync82(join165(repo.path, "assets", "writing-styles"));
76483
+ const hasGuidelines = existsSync82(join166(repo.path, "docs", "brand-guidelines.md"));
76484
+ const hasStyles = existsSync82(join166(repo.path, "assets", "writing-styles"));
76555
76485
  if (!hasGuidelines) {
76556
76486
  f2.warning(`${repo.name}: No docs/brand-guidelines.md — content will use generic tone.`);
76557
76487
  contentLogger.warn(`${repo.name}: missing docs/brand-guidelines.md`);
@@ -76693,9 +76623,9 @@ __export(exports_content_subcommands, {
76693
76623
  });
76694
76624
  import { existsSync as existsSync84, readFileSync as readFileSync21, unlinkSync as unlinkSync6 } from "node:fs";
76695
76625
  import { homedir as homedir57 } from "node:os";
76696
- import { join as join166 } from "node:path";
76626
+ import { join as join167 } from "node:path";
76697
76627
  function isDaemonRunning() {
76698
- const lockFile = join166(LOCK_DIR, `${LOCK_NAME2}.lock`);
76628
+ const lockFile = join167(LOCK_DIR, `${LOCK_NAME2}.lock`);
76699
76629
  if (!existsSync84(lockFile))
76700
76630
  return { running: false, pid: null };
76701
76631
  try {
@@ -76727,7 +76657,7 @@ async function startContent(options2) {
76727
76657
  await contentCommand(options2);
76728
76658
  }
76729
76659
  async function stopContent() {
76730
- const lockFile = join166(LOCK_DIR, `${LOCK_NAME2}.lock`);
76660
+ const lockFile = join167(LOCK_DIR, `${LOCK_NAME2}.lock`);
76731
76661
  if (!existsSync84(lockFile)) {
76732
76662
  logger.info("Content daemon is not running.");
76733
76663
  return;
@@ -76766,9 +76696,9 @@ async function statusContent() {
76766
76696
  } catch {}
76767
76697
  }
76768
76698
  async function logsContent(options2) {
76769
- const logDir = join166(homedir57(), ".claudekit", "logs");
76699
+ const logDir = join167(homedir57(), ".claudekit", "logs");
76770
76700
  const dateStr = new Date().toISOString().slice(0, 10).replace(/-/g, "");
76771
- const logPath = join166(logDir, `content-${dateStr}.log`);
76701
+ const logPath = join167(logDir, `content-${dateStr}.log`);
76772
76702
  if (!existsSync84(logPath)) {
76773
76703
  logger.info("No content logs found for today.");
76774
76704
  return;
@@ -76800,13 +76730,13 @@ var init_content_subcommands = __esm(() => {
76800
76730
  init_setup_wizard();
76801
76731
  init_state_manager();
76802
76732
  init_content_review_commands();
76803
- LOCK_DIR = join166(homedir57(), ".claudekit", "locks");
76733
+ LOCK_DIR = join167(homedir57(), ".claudekit", "locks");
76804
76734
  });
76805
76735
 
76806
76736
  // src/commands/content/content-command.ts
76807
76737
  import { existsSync as existsSync85, mkdirSync as mkdirSync9, unlinkSync as unlinkSync7, writeFileSync as writeFileSync7 } from "node:fs";
76808
76738
  import { homedir as homedir58 } from "node:os";
76809
- import { join as join167 } from "node:path";
76739
+ import { join as join168 } from "node:path";
76810
76740
  async function contentCommand(options2) {
76811
76741
  const cwd2 = process.cwd();
76812
76742
  const contentLogger = new ContentLogger;
@@ -76984,8 +76914,8 @@ var init_content_command = __esm(() => {
76984
76914
  init_publisher();
76985
76915
  init_review_manager();
76986
76916
  init_state_manager();
76987
- LOCK_DIR2 = join167(homedir58(), ".claudekit", "locks");
76988
- LOCK_FILE = join167(LOCK_DIR2, "ck-content.lock");
76917
+ LOCK_DIR2 = join168(homedir58(), ".claudekit", "locks");
76918
+ LOCK_FILE = join168(LOCK_DIR2, "ck-content.lock");
76989
76919
  });
76990
76920
 
76991
76921
  // src/commands/content/index.ts
@@ -85283,7 +85213,7 @@ function buildDuplicateInventoryCheck(projectSkills, globalSkills) {
85283
85213
  if (duplicates.length === 0) {
85284
85214
  return pass("ck-skill-inventory", "Skill Inventory", "No duplicate project/global skills");
85285
85215
  }
85286
- return warn("ck-skill-inventory", "Skill Inventory", `${duplicates.length} duplicate project/global skill(s)`, duplicates, "Keep one installation scope per skill; inspect with: ck skills list --installed");
85216
+ return warn("ck-skill-inventory", "Skill Inventory", `${duplicates.length} duplicate project/global skill(s)`, duplicates, "Keep one installation scope per skill; inspect with: ck skills --list --installed");
85287
85217
  }
85288
85218
  function buildSkillOverridesCheck(settingsPath, read) {
85289
85219
  if (!read.settings || !Object.prototype.hasOwnProperty.call(read.settings, "skillOverrides")) {
@@ -107512,7 +107442,7 @@ import { basename as basename27, join as join142, resolve as resolve46 } from "n
107512
107442
  init_logger();
107513
107443
 
107514
107444
  // src/ui/ck-cli-design/tokens.ts
107515
- var import_picocolors27 = __toESM(require_picocolors2(), 1);
107445
+ var import_picocolors27 = __toESM(require_picocolors(), 1);
107516
107446
  import { homedir as homedir47, platform as platform16 } from "node:os";
107517
107447
  import { resolve as resolve45, win32 as win322 } from "node:path";
107518
107448
  var PANEL_MIN_WIDTH = 60;
@@ -111460,14 +111390,48 @@ init_skill_catalog_generator();
111460
111390
  init_skill_search_index();
111461
111391
  init_logger();
111462
111392
  init_agents();
111463
- init_skills_discovery();
111464
- init_skills_installer();
111465
- init_skills_registry();
111466
- init_skills_uninstaller();
111467
111393
  var import_gray_matter12 = __toESM(require_gray_matter(), 1);
111468
111394
  var import_picocolors37 = __toESM(require_picocolors(), 1);
111469
111395
  import { readFile as readFile65 } from "node:fs/promises";
111396
+ import { join as join149 } from "node:path";
111397
+
111398
+ // src/commands/skills/installed-skills-inventory.ts
111470
111399
  import { join as join148 } from "node:path";
111400
+ init_path_resolver();
111401
+ var SCOPE_SORT_ORDER = {
111402
+ project: 0,
111403
+ global: 1
111404
+ };
111405
+ async function getActiveClaudeSkillInstallations(options2 = {}) {
111406
+ const projectDir = options2.projectDir ?? process.cwd();
111407
+ const globalDir = options2.globalDir ?? PathResolver.getGlobalKitDir();
111408
+ const [projectSkills, globalSkills] = await Promise.all([
111409
+ scanSkills2(join148(projectDir, ".claude", "skills")),
111410
+ scanSkills2(join148(globalDir, "skills"))
111411
+ ]);
111412
+ const projectIds = new Set(projectSkills.map((skill) => skill.id));
111413
+ const globalIds = new Set(globalSkills.map((skill) => skill.id));
111414
+ return [
111415
+ ...projectSkills.map((skill) => ({
111416
+ skill: skill.id,
111417
+ scope: "project",
111418
+ path: skill.file,
111419
+ duplicateAcrossScopes: globalIds.has(skill.id)
111420
+ })),
111421
+ ...globalSkills.map((skill) => ({
111422
+ skill: skill.id,
111423
+ scope: "global",
111424
+ path: skill.file,
111425
+ duplicateAcrossScopes: projectIds.has(skill.id)
111426
+ }))
111427
+ ].sort((a3, b3) => a3.skill.localeCompare(b3.skill) || SCOPE_SORT_ORDER[a3.scope] - SCOPE_SORT_ORDER[b3.scope]);
111428
+ }
111429
+
111430
+ // src/commands/skills/skills-command.ts
111431
+ init_skills_discovery();
111432
+ init_skills_installer();
111433
+ init_skills_registry();
111434
+ init_skills_uninstaller();
111471
111435
 
111472
111436
  // src/commands/skills/types.ts
111473
111437
  init_zod();
@@ -111603,7 +111567,7 @@ async function handleValidate2(sourcePath) {
111603
111567
  spinner.stop(`Checked ${skills.length} skill(s)`);
111604
111568
  let hasIssues = false;
111605
111569
  for (const skill of skills) {
111606
- const skillMdPath = join148(skill.path, "SKILL.md");
111570
+ const skillMdPath = join149(skill.path, "SKILL.md");
111607
111571
  try {
111608
111572
  const content = await readFile65(skillMdPath, "utf-8");
111609
111573
  const { data } = import_gray_matter12.default(content, {
@@ -111639,30 +111603,55 @@ async function detectInstalledAgents2() {
111639
111603
  }
111640
111604
  async function listSkills2(showInstalled) {
111641
111605
  if (showInstalled) {
111642
- const installations = await getInstalledSkills();
111643
- if (installations.length === 0) {
111644
- f2.warn("No skills installed via ck skills.");
111606
+ const [installations, activeClaudeSkills] = await Promise.all([
111607
+ getInstalledSkills(),
111608
+ getActiveClaudeSkillInstallations()
111609
+ ]);
111610
+ if (installations.length === 0 && activeClaudeSkills.length === 0) {
111611
+ f2.warn("No installed skills found.");
111645
111612
  return;
111646
111613
  }
111647
111614
  console.log();
111648
- f2.step(import_picocolors37.default.bold("Installed Skills"));
111649
- console.log();
111650
- const bySkill = new Map;
111651
- for (const inst of installations) {
111652
- const list3 = bySkill.get(inst.skill) || [];
111653
- list3.push(inst);
111654
- bySkill.set(inst.skill, list3);
111615
+ if (activeClaudeSkills.length > 0) {
111616
+ f2.step(import_picocolors37.default.bold("Active Claude Code Skills"));
111617
+ console.log();
111618
+ const bySkill = new Map;
111619
+ for (const inst of activeClaudeSkills) {
111620
+ const list3 = bySkill.get(inst.skill) || [];
111621
+ list3.push(inst);
111622
+ bySkill.set(inst.skill, list3);
111623
+ }
111624
+ for (const [skill, installs] of bySkill) {
111625
+ const duplicate = installs.some((inst) => inst.duplicateAcrossScopes) ? ` ${import_picocolors37.default.yellow("(project/global duplicate)")}` : "";
111626
+ console.log(` ${import_picocolors37.default.cyan(skill)}${duplicate}`);
111627
+ for (const inst of installs) {
111628
+ console.log(` ${import_picocolors37.default.dim("→")} ${inst.scope}: ${import_picocolors37.default.dim(inst.path)}`);
111629
+ }
111630
+ }
111631
+ console.log();
111632
+ console.log(import_picocolors37.default.dim(` ${activeClaudeSkills.length} active Claude Code skill installation(s)`));
111633
+ console.log();
111655
111634
  }
111656
- for (const [skill, installs] of bySkill) {
111657
- console.log(` ${import_picocolors37.default.cyan(skill)}`);
111658
- for (const inst of installs) {
111659
- const scope = inst.global ? "global" : "project";
111660
- console.log(` ${import_picocolors37.default.dim("→")} ${inst.agent} (${scope}): ${import_picocolors37.default.dim(inst.path)}`);
111635
+ if (installations.length > 0) {
111636
+ f2.step(import_picocolors37.default.bold("Registry-managed Agent Skills"));
111637
+ console.log();
111638
+ const bySkill = new Map;
111639
+ for (const inst of installations) {
111640
+ const list3 = bySkill.get(inst.skill) || [];
111641
+ list3.push(inst);
111642
+ bySkill.set(inst.skill, list3);
111643
+ }
111644
+ for (const [skill, installs] of bySkill) {
111645
+ console.log(` ${import_picocolors37.default.cyan(skill)}`);
111646
+ for (const inst of installs) {
111647
+ const scope = inst.global ? "global" : "project";
111648
+ console.log(` ${import_picocolors37.default.dim("→")} ${inst.agent} (${scope}): ${import_picocolors37.default.dim(inst.path)}`);
111649
+ }
111661
111650
  }
111651
+ console.log();
111652
+ console.log(import_picocolors37.default.dim(` ${installations.length} registry-managed installation(s) across ${bySkill.size} skill(s)`));
111662
111653
  }
111663
111654
  console.log();
111664
- console.log(import_picocolors37.default.dim(` ${installations.length} installation(s) across ${bySkill.size} skill(s)`));
111665
- console.log();
111666
111655
  return;
111667
111656
  }
111668
111657
  const sourcePath = getSkillSourcePath();
@@ -112161,7 +112150,7 @@ async function detectInstallations() {
112161
112150
 
112162
112151
  // src/commands/uninstall/removal-handler.ts
112163
112152
  import { readdirSync as readdirSync10, rmSync as rmSync5 } from "node:fs";
112164
- import { basename as basename30, join as join150, resolve as resolve53, sep as sep13 } from "node:path";
112153
+ import { basename as basename30, join as join151, resolve as resolve53, sep as sep13 } from "node:path";
112165
112154
  init_logger();
112166
112155
  init_safe_prompts();
112167
112156
  init_safe_spinner();
@@ -112170,7 +112159,7 @@ var import_fs_extra41 = __toESM(require_lib(), 1);
112170
112159
  // src/commands/uninstall/analysis-handler.ts
112171
112160
  init_metadata_migration();
112172
112161
  import { readdirSync as readdirSync9, rmSync as rmSync4 } from "node:fs";
112173
- import { dirname as dirname45, join as join149 } from "node:path";
112162
+ import { dirname as dirname45, join as join150 } from "node:path";
112174
112163
  init_logger();
112175
112164
  init_safe_prompts();
112176
112165
  var import_fs_extra40 = __toESM(require_lib(), 1);
@@ -112230,7 +112219,7 @@ async function analyzeInstallation(installation, forceOverwrite, kit) {
112230
112219
  const remainingFiles = metadata.kits?.[remainingKit]?.files || [];
112231
112220
  for (const file of remainingFiles) {
112232
112221
  const relativePath = normalizeTrackedPath(file.path);
112233
- if (await import_fs_extra40.pathExists(join149(installation.path, relativePath))) {
112222
+ if (await import_fs_extra40.pathExists(join150(installation.path, relativePath))) {
112234
112223
  result.retainedManifestPaths.push(relativePath);
112235
112224
  }
112236
112225
  }
@@ -112238,7 +112227,7 @@ async function analyzeInstallation(installation, forceOverwrite, kit) {
112238
112227
  const kitFiles = metadata.kits[kit].files || [];
112239
112228
  for (const trackedFile of kitFiles) {
112240
112229
  const relativePath = normalizeTrackedPath(trackedFile.path);
112241
- const filePath = join149(installation.path, relativePath);
112230
+ const filePath = join150(installation.path, relativePath);
112242
112231
  if (preservedPaths.has(relativePath)) {
112243
112232
  result.toPreserve.push({ path: relativePath, reason: "shared with other kit" });
112244
112233
  continue;
@@ -112271,7 +112260,7 @@ async function analyzeInstallation(installation, forceOverwrite, kit) {
112271
112260
  }
112272
112261
  for (const trackedFile of allTrackedFiles) {
112273
112262
  const relativePath = normalizeTrackedPath(trackedFile.path);
112274
- const filePath = join149(installation.path, relativePath);
112263
+ const filePath = join150(installation.path, relativePath);
112275
112264
  const ownershipResult = await OwnershipChecker.checkOwnership(filePath, metadata, installation.path);
112276
112265
  if (!ownershipResult.exists)
112277
112266
  continue;
@@ -112414,7 +112403,7 @@ async function removeInstallations(installations, options2) {
112414
112403
  let removedCount = 0;
112415
112404
  let cleanedDirs = 0;
112416
112405
  for (const item of analysis.toDelete) {
112417
- const filePath = join150(installation.path, item.path);
112406
+ const filePath = join151(installation.path, item.path);
112418
112407
  if (!await import_fs_extra41.pathExists(filePath))
112419
112408
  continue;
112420
112409
  if (!await isPathSafeToRemove(filePath, installation.path)) {
@@ -112823,7 +112812,7 @@ ${import_picocolors40.default.bold(import_picocolors40.default.cyan(result.kitCo
112823
112812
  init_logger();
112824
112813
  import { existsSync as existsSync75 } from "node:fs";
112825
112814
  import { rm as rm17 } from "node:fs/promises";
112826
- import { join as join157 } from "node:path";
112815
+ import { join as join158 } from "node:path";
112827
112816
  var import_picocolors41 = __toESM(require_picocolors(), 1);
112828
112817
 
112829
112818
  // src/commands/watch/phases/implementation-runner.ts
@@ -113342,7 +113331,7 @@ function spawnAndCollect3(command, args) {
113342
113331
 
113343
113332
  // src/commands/watch/phases/issue-processor.ts
113344
113333
  import { mkdir as mkdir39, writeFile as writeFile38 } from "node:fs/promises";
113345
- import { join as join153 } from "node:path";
113334
+ import { join as join154 } from "node:path";
113346
113335
 
113347
113336
  // src/commands/watch/phases/approval-detector.ts
113348
113337
  init_logger();
@@ -113720,9 +113709,9 @@ async function checkAwaitingApproval(state, setup, options2, watchLog, projectDi
113720
113709
 
113721
113710
  // src/commands/watch/phases/plan-dir-finder.ts
113722
113711
  import { readdir as readdir44, stat as stat23 } from "node:fs/promises";
113723
- import { join as join152 } from "node:path";
113712
+ import { join as join153 } from "node:path";
113724
113713
  async function findRecentPlanDir(cwd2, issueNumber, watchLog) {
113725
- const plansRoot = join152(cwd2, "plans");
113714
+ const plansRoot = join153(cwd2, "plans");
113726
113715
  try {
113727
113716
  const entries = await readdir44(plansRoot);
113728
113717
  const tenMinAgo = Date.now() - 10 * 60 * 1000;
@@ -113731,14 +113720,14 @@ async function findRecentPlanDir(cwd2, issueNumber, watchLog) {
113731
113720
  for (const entry of entries) {
113732
113721
  if (entry === "watch" || entry === "reports" || entry === "visuals")
113733
113722
  continue;
113734
- const dirPath = join152(plansRoot, entry);
113723
+ const dirPath = join153(plansRoot, entry);
113735
113724
  const dirStat = await stat23(dirPath);
113736
113725
  if (!dirStat.isDirectory())
113737
113726
  continue;
113738
113727
  if (dirStat.mtimeMs < tenMinAgo)
113739
113728
  continue;
113740
113729
  try {
113741
- await stat23(join152(dirPath, "plan.md"));
113730
+ await stat23(join153(dirPath, "plan.md"));
113742
113731
  } catch {
113743
113732
  continue;
113744
113733
  }
@@ -113969,13 +113958,13 @@ async function handlePlanGeneration(issue, state, config, setup, options2, watch
113969
113958
  stats.plansCreated++;
113970
113959
  const detectedPlanDir = await findRecentPlanDir(projectDir, issue.number, watchLog);
113971
113960
  if (detectedPlanDir) {
113972
- state.activeIssues[numStr].planPath = join153(detectedPlanDir, "plan.md");
113961
+ state.activeIssues[numStr].planPath = join154(detectedPlanDir, "plan.md");
113973
113962
  watchLog.info(`Plan directory detected: ${detectedPlanDir}`);
113974
113963
  } else {
113975
113964
  try {
113976
- const planDir = join153(projectDir, "plans", "watch");
113965
+ const planDir = join154(projectDir, "plans", "watch");
113977
113966
  await mkdir39(planDir, { recursive: true });
113978
- const planFilePath = join153(planDir, `issue-${issue.number}-plan.md`);
113967
+ const planFilePath = join154(planDir, `issue-${issue.number}-plan.md`);
113979
113968
  await writeFile38(planFilePath, planResult.planText, "utf-8");
113980
113969
  state.activeIssues[numStr].planPath = planFilePath;
113981
113970
  watchLog.info(`Plan saved (fallback) to ${planFilePath}`);
@@ -114282,18 +114271,18 @@ init_logger();
114282
114271
  import { spawnSync as spawnSync7 } from "node:child_process";
114283
114272
  import { existsSync as existsSync72 } from "node:fs";
114284
114273
  import { readdir as readdir45, stat as stat24 } from "node:fs/promises";
114285
- import { join as join154 } from "node:path";
114274
+ import { join as join155 } from "node:path";
114286
114275
  async function scanForRepos(parentDir) {
114287
114276
  const repos = [];
114288
114277
  const entries = await readdir45(parentDir);
114289
114278
  for (const entry of entries) {
114290
114279
  if (entry.startsWith("."))
114291
114280
  continue;
114292
- const fullPath = join154(parentDir, entry);
114281
+ const fullPath = join155(parentDir, entry);
114293
114282
  const entryStat = await stat24(fullPath);
114294
114283
  if (!entryStat.isDirectory())
114295
114284
  continue;
114296
- const gitDir = join154(fullPath, ".git");
114285
+ const gitDir = join155(fullPath, ".git");
114297
114286
  if (!existsSync72(gitDir))
114298
114287
  continue;
114299
114288
  const result = spawnSync7("gh", ["repo", "view", "--json", "owner,name"], {
@@ -114320,7 +114309,7 @@ init_logger();
114320
114309
  import { spawnSync as spawnSync8 } from "node:child_process";
114321
114310
  import { existsSync as existsSync73 } from "node:fs";
114322
114311
  import { homedir as homedir52 } from "node:os";
114323
- import { join as join155 } from "node:path";
114312
+ import { join as join156 } from "node:path";
114324
114313
  async function validateSetup(cwd2) {
114325
114314
  const workDir = cwd2 ?? process.cwd();
114326
114315
  const ghVersion = spawnSync8("gh", ["--version"], { encoding: "utf-8", timeout: 1e4 });
@@ -114351,7 +114340,7 @@ Run this command from a directory with a GitHub remote.`);
114351
114340
  } catch {
114352
114341
  throw new Error(`Failed to parse repository info: ${ghRepo.stdout}`);
114353
114342
  }
114354
- const skillsPath = join155(homedir52(), ".claude", "skills");
114343
+ const skillsPath = join156(homedir52(), ".claude", "skills");
114355
114344
  const skillsAvailable = existsSync73(skillsPath);
114356
114345
  if (!skillsAvailable) {
114357
114346
  logger.warning(`ClaudeKit Engineer skills not found at ${skillsPath}`);
@@ -114370,7 +114359,7 @@ init_path_resolver();
114370
114359
  import { createWriteStream as createWriteStream3, statSync as statSync13 } from "node:fs";
114371
114360
  import { existsSync as existsSync74 } from "node:fs";
114372
114361
  import { mkdir as mkdir41, rename as rename13 } from "node:fs/promises";
114373
- import { join as join156 } from "node:path";
114362
+ import { join as join157 } from "node:path";
114374
114363
 
114375
114364
  class WatchLogger {
114376
114365
  logStream = null;
@@ -114378,7 +114367,7 @@ class WatchLogger {
114378
114367
  logPath = null;
114379
114368
  maxBytes;
114380
114369
  constructor(logDir, maxBytes = 0) {
114381
- this.logDir = logDir ?? join156(PathResolver.getClaudeKitDir(), "logs");
114370
+ this.logDir = logDir ?? join157(PathResolver.getClaudeKitDir(), "logs");
114382
114371
  this.maxBytes = maxBytes;
114383
114372
  }
114384
114373
  async init() {
@@ -114387,7 +114376,7 @@ class WatchLogger {
114387
114376
  await mkdir41(this.logDir, { recursive: true });
114388
114377
  }
114389
114378
  const dateStr = formatDate(new Date);
114390
- this.logPath = join156(this.logDir, `watch-${dateStr}.log`);
114379
+ this.logPath = join157(this.logDir, `watch-${dateStr}.log`);
114391
114380
  this.logStream = createWriteStream3(this.logPath, { flags: "a", mode: 384 });
114392
114381
  } catch (error) {
114393
114382
  logger.warning(`Cannot create watch log file: ${error instanceof Error ? error.message : "Unknown"}`);
@@ -114569,7 +114558,7 @@ async function watchCommand(options2) {
114569
114558
  }
114570
114559
  async function discoverRepos(options2, watchLog) {
114571
114560
  const cwd2 = process.cwd();
114572
- const isGitRepo = existsSync75(join157(cwd2, ".git"));
114561
+ const isGitRepo = existsSync75(join158(cwd2, ".git"));
114573
114562
  if (options2.force) {
114574
114563
  await forceRemoveLock(watchLog);
114575
114564
  }
@@ -114827,7 +114816,7 @@ function registerCommands(cli) {
114827
114816
  init_package();
114828
114817
  init_config_version_checker();
114829
114818
  import { existsSync as existsSync87, readFileSync as readFileSync22 } from "node:fs";
114830
- import { join as join169 } from "node:path";
114819
+ import { join as join170 } from "node:path";
114831
114820
 
114832
114821
  // src/domains/versioning/version-checker.ts
114833
114822
  init_version_utils();
@@ -114842,14 +114831,14 @@ init_logger();
114842
114831
  init_path_resolver();
114843
114832
  import { existsSync as existsSync86 } from "node:fs";
114844
114833
  import { mkdir as mkdir42, readFile as readFile69, writeFile as writeFile41 } from "node:fs/promises";
114845
- import { join as join168 } from "node:path";
114834
+ import { join as join169 } from "node:path";
114846
114835
 
114847
114836
  class VersionCacheManager {
114848
114837
  static CACHE_FILENAME = "version-check.json";
114849
114838
  static CACHE_TTL_MS = 7 * 24 * 60 * 60 * 1000;
114850
114839
  static getCacheFile() {
114851
114840
  const cacheDir = PathResolver.getCacheDir(false);
114852
- return join168(cacheDir, VersionCacheManager.CACHE_FILENAME);
114841
+ return join169(cacheDir, VersionCacheManager.CACHE_FILENAME);
114853
114842
  }
114854
114843
  static async load() {
114855
114844
  const cacheFile = VersionCacheManager.getCacheFile();
@@ -115160,9 +115149,9 @@ async function displayVersion() {
115160
115149
  let localInstalledKits = [];
115161
115150
  let globalInstalledKits = [];
115162
115151
  const globalKitDir = PathResolver.getGlobalKitDir();
115163
- const globalMetadataPath = join169(globalKitDir, "metadata.json");
115152
+ const globalMetadataPath = join170(globalKitDir, "metadata.json");
115164
115153
  const prefix = PathResolver.getPathPrefix(false);
115165
- const localMetadataPath = prefix ? join169(process.cwd(), prefix, "metadata.json") : join169(process.cwd(), "metadata.json");
115154
+ const localMetadataPath = prefix ? join170(process.cwd(), prefix, "metadata.json") : join170(process.cwd(), "metadata.json");
115166
115155
  const isLocalSameAsGlobal = localMetadataPath === globalMetadataPath;
115167
115156
  if (!isLocalSameAsGlobal && existsSync87(localMetadataPath)) {
115168
115157
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudekit-cli",
3
- "version": "4.2.0",
3
+ "version": "4.2.1-dev.1",
4
4
  "description": "CLI tool for bootstrapping and updating ClaudeKit projects",
5
5
  "type": "module",
6
6
  "repository": {