@infinitedusky/indusk-mcp 1.11.1 → 1.11.2
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.
|
@@ -23,7 +23,10 @@ const GITIGNORE_ENTRIES = [
|
|
|
23
23
|
{ comment: "# Session-specific handoff (not project knowledge)", pattern: ".claude/handoff.md" },
|
|
24
24
|
{ comment: "# Semantic graph event log (large, local-only)", pattern: ".indusk/graph/" },
|
|
25
25
|
{ comment: "# Eval results (local-only)", pattern: ".indusk/eval/" },
|
|
26
|
-
{
|
|
26
|
+
{
|
|
27
|
+
comment: "# Extension manifests are package-owned; env files contain secrets",
|
|
28
|
+
pattern: ".indusk/extensions/",
|
|
29
|
+
},
|
|
27
30
|
];
|
|
28
31
|
const GITIGNORE_MARKER = "# InDusk managed";
|
|
29
32
|
export function ensureGitignore(projectRoot) {
|
|
@@ -36,12 +39,7 @@ export function ensureGitignore(projectRoot) {
|
|
|
36
39
|
return;
|
|
37
40
|
}
|
|
38
41
|
// Build the block to append
|
|
39
|
-
const block = [
|
|
40
|
-
"",
|
|
41
|
-
GITIGNORE_MARKER,
|
|
42
|
-
...missing.flatMap((e) => [e.comment, e.pattern]),
|
|
43
|
-
"",
|
|
44
|
-
].join("\n");
|
|
42
|
+
const block = ["", GITIGNORE_MARKER, ...missing.flatMap((e) => [e.comment, e.pattern]), ""].join("\n");
|
|
45
43
|
writeFileSync(gitignorePath, `${content.trimEnd()}${block}`);
|
|
46
44
|
const verb = content.length > 0 ? "updated" : "created";
|
|
47
45
|
console.info(` ${verb}: .gitignore (added ${missing.map((e) => e.pattern).join(", ")})`);
|
|
@@ -634,6 +632,10 @@ export async function init(projectRoot, options = {}) {
|
|
|
634
632
|
matcher: "Edit|Write",
|
|
635
633
|
hooks: [{ type: "command", command: "node .claude/hooks/gate-reminder.js" }],
|
|
636
634
|
},
|
|
635
|
+
{
|
|
636
|
+
matcher: "Bash",
|
|
637
|
+
hooks: [{ type: "command", command: "node .claude/hooks/eval-trigger.js" }],
|
|
638
|
+
},
|
|
637
639
|
],
|
|
638
640
|
};
|
|
639
641
|
if (existsSync(claudeSettingsPath)) {
|
|
@@ -191,6 +191,7 @@ export async function update(projectRoot) {
|
|
|
191
191
|
"gate-reminder.js",
|
|
192
192
|
"validate-impl-structure.js",
|
|
193
193
|
"check-catchup.js",
|
|
194
|
+
"eval-trigger.js",
|
|
194
195
|
];
|
|
195
196
|
for (const file of hookFiles) {
|
|
196
197
|
const sourceFile = join(hooksSource, file);
|
|
@@ -210,6 +211,32 @@ export async function update(projectRoot) {
|
|
|
210
211
|
}
|
|
211
212
|
}
|
|
212
213
|
console.info(`\n ${hooksUpdated} updated, ${hooksCurrent} current.`);
|
|
214
|
+
// Ensure eval hook is registered in settings.json
|
|
215
|
+
const settingsPath = join(projectRoot, ".claude/settings.json");
|
|
216
|
+
if (existsSync(settingsPath)) {
|
|
217
|
+
try {
|
|
218
|
+
const settings = JSON.parse(readFileSync(settingsPath, "utf-8"));
|
|
219
|
+
const postHooks = settings.hooks?.PostToolUse ?? [];
|
|
220
|
+
const hasBashEvalHook = postHooks.some((entry) => entry.matcher === "Bash" &&
|
|
221
|
+
entry.hooks?.some((h) => h.command?.includes("eval-trigger")));
|
|
222
|
+
if (!hasBashEvalHook) {
|
|
223
|
+
if (!settings.hooks)
|
|
224
|
+
settings.hooks = {};
|
|
225
|
+
if (!settings.hooks.PostToolUse)
|
|
226
|
+
settings.hooks.PostToolUse = [];
|
|
227
|
+
settings.hooks.PostToolUse.push({
|
|
228
|
+
matcher: "Bash",
|
|
229
|
+
hooks: [{ type: "command", command: "node .claude/hooks/eval-trigger.js" }],
|
|
230
|
+
});
|
|
231
|
+
const { writeFileSync } = await import("node:fs");
|
|
232
|
+
writeFileSync(settingsPath, `${JSON.stringify(settings, null, 2)}\n`);
|
|
233
|
+
console.info(" registered eval-trigger hook in settings.json");
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
console.info(" could not register eval hook in settings.json");
|
|
238
|
+
}
|
|
239
|
+
}
|
|
213
240
|
}
|
|
214
241
|
else {
|
|
215
242
|
console.info(" not installed (run init to install)");
|