@mnemonik/claude-code-hooks 0.9.7 → 0.9.8
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/dist/install.d.ts +22 -5
- package/dist/install.js +48 -13
- package/dist/install.js.map +1 -1
- package/package.json +1 -1
package/dist/install.d.ts
CHANGED
|
@@ -1,17 +1,34 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* `mnemonik-claude-code-hooks install` — wires the dispatcher into
|
|
4
|
-
*
|
|
4
|
+
* Claude Code settings without clobbering the user's existing config.
|
|
5
5
|
*
|
|
6
6
|
* What it does:
|
|
7
7
|
* 1. Resolves the dispatcher path (this package's dist/hook.js).
|
|
8
|
-
* 2. Reads (or creates)
|
|
8
|
+
* 2. Reads (or creates) ~/.claude/settings.json by default.
|
|
9
|
+
* Use --scope=project to target .claude/settings.json at the cwd.
|
|
9
10
|
* 3. Merges PreToolUse/PostToolUse entries pointing at `node <dispatcher>`,
|
|
10
11
|
* removing any prior mnemonik-managed entries first so re-running the
|
|
11
12
|
* installer is idempotent.
|
|
12
13
|
* 4. Writes the file back, preserving any unrelated user config.
|
|
13
14
|
*
|
|
14
|
-
* No npm dependencies — uses Node 20 builtins only.
|
|
15
|
-
* project root; never touches files outside `.claude/`.
|
|
15
|
+
* No npm dependencies — uses Node 20 builtins only.
|
|
16
16
|
*/
|
|
17
|
-
|
|
17
|
+
type InstallTarget = 'host' | 'project';
|
|
18
|
+
interface SettingsHooksEntry {
|
|
19
|
+
type: 'command';
|
|
20
|
+
command: string;
|
|
21
|
+
timeout?: number;
|
|
22
|
+
}
|
|
23
|
+
interface SettingsHookGroup {
|
|
24
|
+
matcher?: string;
|
|
25
|
+
hooks?: SettingsHooksEntry[];
|
|
26
|
+
}
|
|
27
|
+
declare function buildHookEntry(dispatcher: string): SettingsHooksEntry;
|
|
28
|
+
declare function isMnemonikEntry(entry: SettingsHookGroup): boolean;
|
|
29
|
+
declare function patchHookGroup(groups: SettingsHookGroup[] | undefined, matcher: string | null, entry: SettingsHooksEntry): SettingsHookGroup[];
|
|
30
|
+
declare function parseArgs(argv: string[]): {
|
|
31
|
+
target: InstallTarget;
|
|
32
|
+
};
|
|
33
|
+
declare function resolveTargetPath(target: InstallTarget, cwd: string, env?: Partial<Record<'HOME' | 'USERPROFILE', string | undefined>>): string;
|
|
34
|
+
export { buildHookEntry, isMnemonikEntry, parseArgs, patchHookGroup, resolveTargetPath };
|
package/dist/install.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* `mnemonik-claude-code-hooks install` — wires the dispatcher into
|
|
4
|
-
*
|
|
4
|
+
* Claude Code settings without clobbering the user's existing config.
|
|
5
5
|
*
|
|
6
6
|
* What it does:
|
|
7
7
|
* 1. Resolves the dispatcher path (this package's dist/hook.js).
|
|
8
|
-
* 2. Reads (or creates)
|
|
8
|
+
* 2. Reads (or creates) ~/.claude/settings.json by default.
|
|
9
|
+
* Use --scope=project to target .claude/settings.json at the cwd.
|
|
9
10
|
* 3. Merges PreToolUse/PostToolUse entries pointing at `node <dispatcher>`,
|
|
10
11
|
* removing any prior mnemonik-managed entries first so re-running the
|
|
11
12
|
* installer is idempotent.
|
|
12
13
|
* 4. Writes the file back, preserving any unrelated user config.
|
|
13
14
|
*
|
|
14
|
-
* No npm dependencies — uses Node 20 builtins only.
|
|
15
|
-
* project root; never touches files outside `.claude/`.
|
|
15
|
+
* No npm dependencies — uses Node 20 builtins only.
|
|
16
16
|
*/
|
|
17
|
-
import { existsSync } from 'node:fs';
|
|
17
|
+
import { existsSync, realpathSync } from 'node:fs';
|
|
18
18
|
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
19
19
|
import { dirname, join, resolve } from 'node:path';
|
|
20
20
|
import { fileURLToPath } from 'node:url';
|
|
@@ -68,9 +68,29 @@ async function writeSettings(path, settings) {
|
|
|
68
68
|
// Preserve a trailing newline since prettier-style users rely on it.
|
|
69
69
|
await writeFile(path, JSON.stringify(settings, null, 2) + '\n', 'utf8');
|
|
70
70
|
}
|
|
71
|
-
|
|
71
|
+
function parseArgs(argv) {
|
|
72
|
+
let target = 'host';
|
|
73
|
+
for (const arg of argv) {
|
|
74
|
+
if (arg === '--scope=project')
|
|
75
|
+
target = 'project';
|
|
76
|
+
else if (arg === '--scope=user' || arg === '--scope=host')
|
|
77
|
+
target = 'host';
|
|
78
|
+
}
|
|
79
|
+
return { target };
|
|
80
|
+
}
|
|
81
|
+
function resolveTargetPath(target, cwd, env = process.env) {
|
|
82
|
+
if (target === 'project')
|
|
83
|
+
return join(cwd, '.claude', 'settings.json');
|
|
84
|
+
const home = env.HOME ?? env.USERPROFILE;
|
|
85
|
+
if (!home) {
|
|
86
|
+
throw new Error('Could not determine home directory for Claude Code host install');
|
|
87
|
+
}
|
|
88
|
+
return join(home, '.claude', 'settings.json');
|
|
89
|
+
}
|
|
90
|
+
async function main(argv) {
|
|
91
|
+
const { target } = parseArgs(argv);
|
|
72
92
|
const cwd = process.cwd();
|
|
73
|
-
const settingsPath =
|
|
93
|
+
const settingsPath = resolveTargetPath(target, cwd);
|
|
74
94
|
const dispatcher = resolveDispatcherPath();
|
|
75
95
|
if (!existsSync(dispatcher)) {
|
|
76
96
|
console.error(`mnemonik-claude-code-hooks: dispatcher not found at ${dispatcher}. Did the package install correctly?`);
|
|
@@ -97,6 +117,7 @@ async function main() {
|
|
|
97
117
|
await writeSettings(settingsPath, settings);
|
|
98
118
|
console.log([
|
|
99
119
|
`mnemonik-claude-code-hooks: wired into ${settingsPath}`,
|
|
120
|
+
` target → ${target}`,
|
|
100
121
|
` PreToolUse → Edit|Write|NotebookEdit|Bash|mcp__mnemonik__.*`,
|
|
101
122
|
` PostToolUse → Edit|Write|NotebookEdit`,
|
|
102
123
|
` SessionStart → bootstrap pre-injection`,
|
|
@@ -128,10 +149,24 @@ async function main() {
|
|
|
128
149
|
].join('\n'));
|
|
129
150
|
return 0;
|
|
130
151
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
152
|
+
function isDirectExecution() {
|
|
153
|
+
const invoked = process.argv[1];
|
|
154
|
+
if (!invoked)
|
|
155
|
+
return false;
|
|
156
|
+
try {
|
|
157
|
+
return realpathSync(invoked) === realpathSync(fileURLToPath(import.meta.url));
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return invoked === fileURLToPath(import.meta.url);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (isDirectExecution()) {
|
|
164
|
+
main(process.argv.slice(2))
|
|
165
|
+
.then((code) => process.exit(code))
|
|
166
|
+
.catch((err) => {
|
|
167
|
+
console.error(`mnemonik-claude-code-hooks: ${err instanceof Error ? err.message : String(err)}`);
|
|
168
|
+
process.exit(1);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
export { buildHookEntry, isMnemonikEntry, parseArgs, patchHookGroup, resolveTargetPath };
|
|
137
172
|
//# sourceMappingURL=install.js.map
|
package/dist/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mnemonik/claude-code-hooks",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.8",
|
|
4
4
|
"description": "Claude Code lifecycle contextual hooks for Mnemonik. PreToolUse Edit/Write/NotebookEdit/Bash gates plus SessionStart bootstrap pre-injection, Stop checkpoint gate (advisory), PreCompact context_snapshot pre-injection, SessionEnd save, and UserPromptSubmit context inject. filesToWrite delivery of skill/rules/.mnemonik.json continues to flow for ALL clients including Claude Code — this package adds host-side hook gating only. Versioned independently from the @mnemonik/server release cadence (mirrors @mnemonik/scanner).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|