claudekit-cli 4.4.0-dev.4 → 4.4.0-dev.6

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.4.0-dev.4",
3
- "generatedAt": "2026-06-03T00:29:17.319Z",
2
+ "version": "4.4.0-dev.6",
3
+ "generatedAt": "2026-06-06T16:32:28.234Z",
4
4
  "commands": {
5
5
  "agents": {
6
6
  "name": "agents",
package/dist/index.js CHANGED
@@ -63853,7 +63853,7 @@ var package_default;
63853
63853
  var init_package = __esm(() => {
63854
63854
  package_default = {
63855
63855
  name: "claudekit-cli",
63856
- version: "4.4.0-dev.4",
63856
+ version: "4.4.0-dev.6",
63857
63857
  description: "CLI tool for bootstrapping and updating ClaudeKit projects",
63858
63858
  type: "module",
63859
63859
  repository: {
@@ -67464,8 +67464,6 @@ async function readMetadataFile(claudeDir3) {
67464
67464
  }
67465
67465
  }
67466
67466
  function extractCkHookName(command) {
67467
- if (!command.trim().startsWith("node "))
67468
- return null;
67469
67467
  const normalized = command.replace(/\\/g, "/");
67470
67468
  const match = normalized.match(/\/hooks\/([^/"'\s]+)\.(?:cjs|mjs|js)(?:["'\s]|$)/);
67471
67469
  return match?.[1] ?? null;
@@ -67506,17 +67504,30 @@ async function countMissingCkHookRegistrations(claudeDir3, kit) {
67506
67504
  const settings = parseJsonContent(await import_fs_extra8.readFile(settingsPath, "utf-8"));
67507
67505
  const config = parseJsonContent(await import_fs_extra8.readFile(configPath, "utf-8"));
67508
67506
  const existingCommands = collectSettingsHookCommands(settings);
67507
+ const existingHookNames = new Set;
67508
+ for (const command of existingCommands) {
67509
+ const hookName = extractCkHookName(command);
67510
+ if (hookName)
67511
+ existingHookNames.add(hookName);
67512
+ }
67509
67513
  const disabledHooks = new Set(Object.entries(config.hooks ?? {}).filter(([, enabled]) => enabled === false).map(([name]) => name));
67510
- let missing = 0;
67514
+ const missingHookNames = new Set;
67515
+ const missingCommands = new Set;
67511
67516
  for (const command of getInstalledHookCommands(config, kit)) {
67512
67517
  const hookName = extractCkHookName(command);
67513
- if (hookName && disabledHooks.has(hookName))
67518
+ if (hookName) {
67519
+ if (disabledHooks.has(hookName) || DYNAMIC_INJECTED_HOOKS.has(hookName))
67520
+ continue;
67521
+ if (!existingHookNames.has(hookName))
67522
+ missingHookNames.add(hookName);
67514
67523
  continue;
67515
- if (!existingCommands.has(normalizeCommand(command))) {
67516
- missing++;
67524
+ }
67525
+ const normalizedCommand = normalizeCommand(command);
67526
+ if (!existingCommands.has(normalizedCommand)) {
67527
+ missingCommands.add(normalizedCommand);
67517
67528
  }
67518
67529
  }
67519
- return missing;
67530
+ return missingHookNames.size + missingCommands.size;
67520
67531
  }
67521
67532
  function buildInitCommand(isGlobal, kit, beta, yes, restoreCkHooks) {
67522
67533
  const parts = ["ck init"];
@@ -67922,7 +67933,7 @@ async function promptMigrateUpdate(deps) {
67922
67933
  logger.verbose(`Migrate step skipped: ${error instanceof Error ? error.message : "unknown"}`);
67923
67934
  }
67924
67935
  }
67925
- var import_fs_extra8, execAsync2, SAFE_PROVIDER_NAME, HOOK_DEPENDENCY_EXTENSIONS;
67936
+ var import_fs_extra8, execAsync2, SAFE_PROVIDER_NAME, HOOK_DEPENDENCY_EXTENSIONS, DYNAMIC_INJECTED_HOOKS;
67926
67937
  var init_post_update_handler = __esm(() => {
67927
67938
  init_ck_config_manager();
67928
67939
  init_hook_health_checker();
@@ -67938,6 +67949,7 @@ var init_post_update_handler = __esm(() => {
67938
67949
  execAsync2 = promisify9(exec2);
67939
67950
  SAFE_PROVIDER_NAME = /^[a-z0-9-]+$/;
67940
67951
  HOOK_DEPENDENCY_EXTENSIONS = [".js", ".cjs", ".mjs", ".json"];
67952
+ DYNAMIC_INJECTED_HOOKS = new Set(["task-completed-handler", "teammate-idle-handler"]);
67941
67953
  });
67942
67954
 
67943
67955
  // src/commands/update-cli.ts
@@ -103758,6 +103770,7 @@ init_logger();
103758
103770
  init_path_resolver();
103759
103771
  var import_fs_extra15 = __toESM(require_lib(), 1);
103760
103772
  var import_semver4 = __toESM(require_semver2(), 1);
103773
+ var DYNAMIC_INJECTED_HOOKS2 = new Set(["task-completed-handler", "teammate-idle-handler"]);
103761
103774
 
103762
103775
  class SettingsProcessor {
103763
103776
  static MIN_TEAM_HOOKS_VERSION = "2.1.33";
@@ -103900,15 +103913,6 @@ class SettingsProcessor {
103900
103913
  if (mergeResult.conflictsDetected.length > 0) {
103901
103914
  logger.warning(`Duplicate hooks skipped: ${mergeResult.conflictsDetected.length}`);
103902
103915
  }
103903
- if (this.tracker && (mergeResult.newlyInstalledHooks.length > 0 || mergeResult.newlyInstalledServers.length > 0)) {
103904
- for (const hook of mergeResult.newlyInstalledHooks) {
103905
- this.tracker.trackHook(hook, installedSettings);
103906
- }
103907
- for (const server of mergeResult.newlyInstalledServers) {
103908
- this.tracker.trackMcpServer(server, installedSettings);
103909
- }
103910
- await this.tracker.saveInstalledSettings(installedSettings);
103911
- }
103912
103916
  if (this.migrateLegacyStatusLineRunner(mergeResult.merged, sourceSettings)) {
103913
103917
  logger.info("Migrated legacy statusLine runner command to current ClaudeKit statusline");
103914
103918
  }
@@ -103926,6 +103930,7 @@ class SettingsProcessor {
103926
103930
  }
103927
103931
  await SettingsMerger.writeSettingsFile(destFile, mergeResult.merged);
103928
103932
  logger.success("Merged settings.json (user customizations preserved)");
103933
+ await this.refreshInstalledSettingsTracking(sourceSettings, installedSettings);
103929
103934
  await this.injectTeamHooksIfSupported(destFile, mergeResult.merged);
103930
103935
  }
103931
103936
  async getDisabledHookNames() {
@@ -104155,7 +104160,13 @@ class SettingsProcessor {
104155
104160
  async trackInstalledSettings(settings) {
104156
104161
  if (!this.tracker)
104157
104162
  return;
104163
+ await this.tracker.saveInstalledSettings(this.collectInstalledSettings(settings));
104164
+ logger.debug("Tracked installed settings for fresh install");
104165
+ }
104166
+ collectInstalledSettings(settings) {
104158
104167
  const installedSettings = { hooks: [], mcpServers: [] };
104168
+ if (!this.tracker)
104169
+ return installedSettings;
104159
104170
  if (settings.hooks) {
104160
104171
  for (const entries of Object.values(settings.hooks)) {
104161
104172
  for (const entry of entries) {
@@ -104177,8 +104188,27 @@ class SettingsProcessor {
104177
104188
  this.tracker.trackMcpServer(serverName, installedSettings);
104178
104189
  }
104179
104190
  }
104180
- await this.tracker.saveInstalledSettings(installedSettings);
104181
- logger.debug("Tracked installed settings for fresh install");
104191
+ return installedSettings;
104192
+ }
104193
+ async refreshInstalledSettingsTracking(sourceSettings, previousInstalledSettings) {
104194
+ if (!this.tracker)
104195
+ return;
104196
+ const trackingSource = structuredClone(sourceSettings);
104197
+ this.fixHookCommandPaths(trackingSource);
104198
+ const refreshedSettings = this.collectInstalledSettings(trackingSource);
104199
+ this.preserveDynamicInjectedHookTracking(previousInstalledSettings, refreshedSettings);
104200
+ await this.tracker.saveInstalledSettings(refreshedSettings);
104201
+ logger.debug("Refreshed installed settings tracking baseline");
104202
+ }
104203
+ preserveDynamicInjectedHookTracking(previousInstalledSettings, refreshedSettings) {
104204
+ if (!previousInstalledSettings.hooks || !this.tracker)
104205
+ return;
104206
+ for (const command of previousInstalledSettings.hooks) {
104207
+ const hookName = this.extractCkHookName(command);
104208
+ if (!hookName || !DYNAMIC_INJECTED_HOOKS2.has(hookName))
104209
+ continue;
104210
+ this.tracker.trackHook(command, refreshedSettings);
104211
+ }
104182
104212
  }
104183
104213
  formatJsonContent(content) {
104184
104214
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudekit-cli",
3
- "version": "4.4.0-dev.4",
3
+ "version": "4.4.0-dev.6",
4
4
  "description": "CLI tool for bootstrapping and updating ClaudeKit projects",
5
5
  "type": "module",
6
6
  "repository": {