docs: Clean up README formatting and remove deprecated CLI hook commands

Removes crystal ball emoji and bullet formatting inconsistencies from README headers. Eliminates mark-dirty and sync-if-dirty CLI commands and related hook configuration code, simplifying the codebase after transitioning to file watcher-based auto-sync.
This commit is contained in:
Colby McHenry
2026-04-07 16:14:58 -05:00
parent a0a18b1913
commit 32f9cd460e
5 changed files with 121 additions and 661 deletions
-88
View File
@@ -192,94 +192,6 @@ export function hasPermissions(location: InstallLocation): boolean {
return permissions.some((p: string) => p.startsWith('mcp__codegraph__'));
}
// =============================================================================
// Hooks Configuration
// =============================================================================
/**
* Get the hooks configuration for Claude Code auto-sync.
*
* PostToolUse(Edit|Write) → mark-dirty (async, non-blocking)
* Stop → sync-if-dirty (sync, ensures fresh index before next user turn)
*/
function getHooksConfig(): Record<string, any> {
const command = 'codegraph';
return {
PostToolUse: [
{
matcher: 'Edit|Write',
hooks: [
{
type: 'command',
command: `${command} mark-dirty`,
async: true,
},
],
},
],
Stop: [
{
matcher: '.*',
hooks: [
{
type: 'command',
command: `${command} sync-if-dirty`,
},
],
},
],
};
}
/**
* Check if Claude Code hooks already exist for CodeGraph
*/
export function hasHooks(location: InstallLocation): boolean {
const settingsPath = getSettingsJsonPath(location);
const settings = readJsonFile(settingsPath);
const hooks = settings.hooks;
if (!hooks) return false;
// Check if any hook command references codegraph
const json = JSON.stringify(hooks);
return json.includes('codegraph mark-dirty') || json.includes('codegraph sync-if-dirty');
}
/**
* Write Claude Code hooks to settings.json for auto-sync.
* Merges with existing hooks, deduplicating any previous codegraph entries.
*/
export function writeHooks(location: InstallLocation): void {
const settingsPath = getSettingsJsonPath(location);
const settings = readJsonFile(settingsPath);
if (!settings.hooks) {
settings.hooks = {};
}
const newHooks = getHooksConfig();
// For each hook event (PostToolUse, Stop), merge with existing entries
for (const [event, newEntries] of Object.entries(newHooks)) {
if (!Array.isArray(settings.hooks[event])) {
settings.hooks[event] = [];
}
// Remove any existing codegraph entries for this event
settings.hooks[event] = (settings.hooks[event] as any[]).filter((entry: any) => {
// Keep entries that don't reference codegraph
const entryJson = JSON.stringify(entry);
return !entryJson.includes('codegraph mark-dirty') && !entryJson.includes('codegraph sync-if-dirty');
});
// Add new codegraph entries
settings.hooks[event].push(...(newEntries as any[]));
}
writeJsonFile(settingsPath, settings);
}
/**
* Get the path to CLAUDE.md
* - Global: ~/.claude/CLAUDE.md
+4 -9
View File
@@ -8,8 +8,8 @@ import { execSync } from 'child_process';
import * as path from 'path';
import * as fs from 'fs';
import {
writeMcpConfig, writePermissions, writeClaudeMd, writeHooks,
hasMcpConfig, hasPermissions, hasHooks,
writeMcpConfig, writePermissions, writeClaudeMd,
hasMcpConfig, hasPermissions,
} from './config-writer';
import type { InstallLocation } from './config-writer';
@@ -50,7 +50,7 @@ export async function runInstaller(): Promise<void> {
// Step 1: Install globally
const shouldInstallGlobally = await clack.confirm({
message: 'Install codegraph globally? (Required for hooks & MCP server)',
message: 'Install codegraph globally? (Required for MCP server)',
initialValue: true,
});
@@ -70,7 +70,7 @@ export async function runInstaller(): Promise<void> {
clack.log.warn('Try: sudo npm install -g @colbymchenry/codegraph');
}
} else {
clack.log.info('Skipped global install — hooks and MCP server may not work without it');
clack.log.info('Skipped global install — MCP server may not work without it');
}
// Step 2: Installation location
@@ -140,11 +140,6 @@ function writeConfigs(
clack.log.success(`${permAction} permissions in ${locationLabel}/settings.json`);
}
// Hooks
const hookAction = hasHooks(location) ? 'Updated' : 'Added';
writeHooks(location);
clack.log.success(`${hookAction} auto-sync hooks in ${locationLabel}/settings.json`);
// CLAUDE.md
const claudeMdResult = writeClaudeMd(location);
const claudeMdPath = `${locationLabel}/CLAUDE.md`;