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 +2 -2
- package/dist/index.js +50 -20
- package/package.json +1 -1
package/cli-manifest.json
CHANGED
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.
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
67516
|
-
|
|
67524
|
+
}
|
|
67525
|
+
const normalizedCommand = normalizeCommand(command);
|
|
67526
|
+
if (!existingCommands.has(normalizedCommand)) {
|
|
67527
|
+
missingCommands.add(normalizedCommand);
|
|
67517
67528
|
}
|
|
67518
67529
|
}
|
|
67519
|
-
return
|
|
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
|
-
|
|
104181
|
-
|
|
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 {
|