MCPcopy Create free account
hub / github.com/SethGammon/Citadel / removeCitadelHooks

Function removeCitadelHooks

scripts/unharness.js:58–107  ·  view source on GitHub ↗
(settingsPath, citadelRoot)

Source from the content-addressed store, hash-verified

56 .map(f => `## ${f.name.replace(/\.md$/, '')}\n\n${f.content}`)
57 .join('\n\n---\n\n');
58 return `${frontmatter}\n\n${body}\n`;
59}
60
61function removeCitadelHooks(settingsPath, citadelRoot) {
62 if (!fs.existsSync(settingsPath)) return { removed: 0, preserved: 0 };
63
64 let settings;
65 try {
66 settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
67 } catch {
68 return { removed: 0, preserved: 0, error: 'could not parse settings.json' };
69 }
70
71 if (!settings.hooks || typeof settings.hooks !== 'object') {
72 return { removed: 0, preserved: 0 };
73 }
74
75 const citadelRootNorm = citadelRoot.replace(/\\/g, '/');
76 let removed = 0;
77 let preserved = 0;
78
79 for (const event of Object.keys(settings.hooks)) {
80 const hooks = settings.hooks[event];
81 if (!Array.isArray(hooks)) continue;
82 const filtered = hooks.filter(hook => {
83 const cmd = (hook.command || '').replace(/\\/g, '/');
84 const isCitadel = cmd.includes(citadelRootNorm) ||
85 cmd.includes('/hooks_src/') ||
86 cmd.includes('/.citadel/scripts/');
87 if (isCitadel) { removed++; return false; }
88 preserved++;
89 return true;
90 });
91 if (filtered.length === 0) {
92 delete settings.hooks[event];
93 } else {
94 settings.hooks[event] = filtered;
95 }
96 }
97
98 if (Object.keys(settings.hooks).length === 0) {
99 delete settings.hooks;
100 }
101
102 // Remove the env var Citadel injects
103 if (settings.env && settings.env.CLAUDE_CODE_SUBPROCESS_ENV_SCRUB) {
104 delete settings.env.CLAUDE_CODE_SUBPROCESS_ENV_SCRUB;
105 if (Object.keys(settings.env).length === 0) delete settings.env;
106 }
107
108 fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
109 return { removed, preserved };
110}

Callers 1

mainFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected