@mnemonik/cursor-hooks 0.7.5 → 0.7.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/dist/install.js CHANGED
@@ -1,21 +1,22 @@
1
1
  #!/usr/bin/env node
2
2
  import { existsSync, realpathSync } from 'node:fs';
3
- import { mkdir, readFile, writeFile } from 'node:fs/promises';
4
3
  import { dirname, join, resolve } from 'node:path';
5
4
  import { fileURLToPath } from 'node:url';
5
+ import { isRetiredMnemonikManagedRule, migrateRetiredCursorRule, RETIRED_CURSOR_RULE_PATH, } from './lib/retiredCursorRule.js';
6
+ import { atomicWriteTransaction, buildManagedCommand, canonicalizeConfigTargets, installerConfigLockPath, installDurableRuntime, isManagedCommand, parseManagedCommand, readTextIfExists, resolvePackageRoot, resolveRuntimeParent, withFileLocks, } from './lib/installerSupport.js';
6
7
  const HOOK_TAG = 'mnemonik-cursor-hooks';
8
+ const HOOK_OWNER = 'cursor-hooks';
9
+ const PACKAGE_NAME = '@mnemonik/cursor-hooks';
10
+ function isRecord(value) {
11
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
12
+ }
7
13
  function resolveDispatcherPath() {
8
- const here = fileURLToPath(import.meta.url);
9
- return resolve(dirname(here), 'hook.js');
14
+ return resolve(dirname(fileURLToPath(import.meta.url)), 'hook.js');
10
15
  }
11
16
  function buildHookEntry(dispatcher, opts = {}) {
12
17
  const entry = {
13
18
  type: 'command',
14
- command: `node ${JSON.stringify(dispatcher)}`,
15
- // Hook exec timeout is 30s here (Cursor) vs 5s in @mnemonik/codex-hooks
16
- // (install.ts buildHookEntry). Intentional, host-driven asymmetry — Cursor's
17
- // afterMCPExecution can carry larger tool payloads; Codex expects fast
18
- // dispatchers. Do NOT unify — it would force both packages to republish.
19
+ command: buildManagedCommand(dispatcher, HOOK_OWNER),
19
20
  timeout: 30,
20
21
  failClosed: false,
21
22
  };
@@ -25,106 +26,216 @@ function buildHookEntry(dispatcher, opts = {}) {
25
26
  entry.loop_limit = null;
26
27
  return entry;
27
28
  }
28
- function isMnemonikEntry(entry) {
29
+ function isMnemonikEntry(entry, currentDispatcher) {
29
30
  if (entry.matcher === HOOK_TAG)
30
31
  return true;
31
- return typeof entry.command === 'string' && entry.command.includes('cursor-hooks');
32
+ return (typeof entry.command === 'string' &&
33
+ isManagedCommand(entry.command, HOOK_OWNER, PACKAGE_NAME, 'hook.js', currentDispatcher));
32
34
  }
33
35
  function patchEventEntries(existing, entry) {
34
- const filtered = (existing ?? []).filter((e) => !isMnemonikEntry(e));
35
- filtered.push(entry);
36
- return filtered;
36
+ const currentDispatcher = parseManagedCommand(entry.command, HOOK_OWNER) ?? undefined;
37
+ return [
38
+ ...(existing ?? []).filter((candidate) => !isMnemonikEntry(candidate, currentDispatcher)),
39
+ entry,
40
+ ];
41
+ }
42
+ function removeMnemonikEntries(existing, currentDispatcher) {
43
+ return (existing ?? []).filter((entry) => !isMnemonikEntry(entry, currentDispatcher));
44
+ }
45
+ function validateHooksJson(parsed) {
46
+ if (!isRecord(parsed))
47
+ throw new Error('expected a top-level JSON object');
48
+ if (parsed.version !== undefined && typeof parsed.version !== 'number') {
49
+ throw new Error('expected "version" to be a number');
50
+ }
51
+ if (parsed.hooks !== undefined) {
52
+ if (!isRecord(parsed.hooks))
53
+ throw new Error('expected "hooks" to be a JSON object');
54
+ for (const [event, entries] of Object.entries(parsed.hooks)) {
55
+ if (!Array.isArray(entries) || !entries.every(isRecord)) {
56
+ throw new Error(`expected "hooks.${event}" to be an array of hook objects`);
57
+ }
58
+ for (const entry of entries) {
59
+ if (entry.command !== undefined && typeof entry.command !== 'string') {
60
+ throw new Error(`expected "hooks.${event}[].command" to be a string`);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ const hooksJson = parsed;
66
+ if (hooksJson.version === undefined)
67
+ hooksJson.version = 1;
68
+ return hooksJson;
37
69
  }
38
70
  async function readHooksJson(path) {
39
- if (!existsSync(path))
40
- return { version: 1 };
71
+ const raw = await readTextIfExists(path);
72
+ if (raw === null)
73
+ return { hooksJson: { version: 1 }, raw: null };
41
74
  try {
42
- const raw = await readFile(path, 'utf8');
43
- const parsed = JSON.parse(raw);
44
- if (typeof parsed.version !== 'number')
45
- parsed.version = 1;
46
- return parsed;
75
+ return { hooksJson: validateHooksJson(JSON.parse(raw)), raw };
47
76
  }
48
- catch (err) {
49
- throw new Error(`Could not parse ${path}: ${err instanceof Error ? err.message : String(err)}`);
77
+ catch (error) {
78
+ throw new Error(`Could not parse ${path}: ${error instanceof Error ? error.message : String(error)}`);
50
79
  }
51
80
  }
52
- async function writeJson(path, value) {
53
- await mkdir(dirname(path), { recursive: true });
54
- await writeFile(path, JSON.stringify(value, null, 2) + '\n', 'utf8');
55
- }
56
81
  function resolveTargetPath(target, cwd, env = process.env) {
57
- if (target === 'host') {
58
- const home = env.HOME ?? env.USERPROFILE;
59
- if (!home) {
60
- throw new Error('Could not determine home directory for Cursor host install');
61
- }
62
- return join(home, '.cursor', 'hooks.json');
63
- }
64
- return join(cwd, '.cursor', 'hooks.json');
82
+ if (target === 'project')
83
+ return join(cwd, '.cursor', 'hooks.json');
84
+ const home = env.HOME?.trim() || env.USERPROFILE?.trim();
85
+ if (!home)
86
+ throw new Error('Could not determine home directory for Cursor host install');
87
+ return join(home, '.cursor', 'hooks.json');
65
88
  }
66
89
  function parseArgs(argv) {
67
90
  let target = 'host';
91
+ let explicitTarget = null;
92
+ let sawInstall = false;
68
93
  for (const arg of argv) {
94
+ if (arg === 'install' && !sawInstall) {
95
+ sawInstall = true;
96
+ continue;
97
+ }
98
+ let parsedTarget;
69
99
  if (arg === '--scope=project')
70
- target = 'project';
100
+ parsedTarget = 'project';
71
101
  else if (arg === '--scope=user' || arg === '--scope=host')
72
- target = 'host';
102
+ parsedTarget = 'host';
103
+ else
104
+ throw new Error(`Unknown installer argument: ${arg}`);
105
+ if (explicitTarget && explicitTarget !== parsedTarget) {
106
+ throw new Error('Conflicting --scope arguments');
107
+ }
108
+ explicitTarget = parsedTarget;
109
+ target = parsedTarget;
73
110
  }
74
111
  return { target };
75
112
  }
113
+ function removeMnemonikHooks(hooksJson, currentDispatcher) {
114
+ if (!hooksJson.hooks)
115
+ return false;
116
+ let changed = false;
117
+ for (const [event, entries] of Object.entries(hooksJson.hooks)) {
118
+ const remaining = removeMnemonikEntries(entries, currentDispatcher);
119
+ if (remaining.length === entries.length)
120
+ continue;
121
+ changed = true;
122
+ if (remaining.length === 0)
123
+ delete hooksJson.hooks[event];
124
+ else
125
+ hooksJson.hooks[event] = remaining;
126
+ }
127
+ return changed;
128
+ }
76
129
  async function main(argv) {
77
130
  const { target } = parseArgs(argv);
78
131
  const cwd = process.cwd();
79
- const hooksPath = resolveTargetPath(target, cwd);
80
- const dispatcher = resolveDispatcherPath();
81
- if (!existsSync(dispatcher)) {
82
- console.error(`mnemonik-cursor-hooks: dispatcher not found at ${dispatcher}. Did the package install correctly?`);
132
+ const requestedHooksPath = resolveTargetPath(target, cwd);
133
+ const requestedAlternatePath = resolveTargetPath(target === 'host' ? 'project' : 'host', cwd);
134
+ const [hooksPath, alternatePath] = await canonicalizeConfigTargets([
135
+ requestedHooksPath,
136
+ requestedAlternatePath,
137
+ ]);
138
+ const runtimeParent = resolveRuntimeParent();
139
+ const sourceDispatcher = resolveDispatcherPath();
140
+ if (!existsSync(sourceDispatcher)) {
141
+ console.error(`mnemonik-cursor-hooks: dispatcher not found at ${sourceDispatcher}. Did the package install correctly?`);
83
142
  return 1;
84
143
  }
85
- const hooksJson = await readHooksJson(hooksPath);
86
- const hooks = (hooksJson.hooks ?? {});
87
- // The 12 events Mnemonik wires (plan §3.1, §5.2, §8).
88
- //
89
- // - preToolUse uses matcher "Write|StrReplace|EditNotebook|Delete" —
90
- // the four edit-class tool names Cursor actually emits. The earlier
91
- // comment claiming Cursor "collapses all edit-class operations into
92
- // Write" was wrong; verified by observing real PreToolUse payloads
93
- // where StrReplace fires for in-place edits, EditNotebook for .ipynb
94
- // cells, and Delete for file removal — none of which Write covers.
95
- // Without all four in the matcher, the file_context_required directive
96
- // only fires on Write events and silently misses the other three.
97
- // - postToolUse mirrors the same set plus MCP:mnemonik.* so the
98
- // post-edit handler sees every edit-class outcome and Mnemonik MCP
99
- // responses.
100
- // - beforeMCPExecution and afterMCPExecution carry no matcher; the
101
- // dispatcher filters to mnemonik.* tools at runtime.
102
- // - stop and subagentStop keep Cursor's default loop limit; the server-side
103
- // stopHookActive generation guard owns repeat suppression.
104
- hooks.sessionStart = patchEventEntries(hooks.sessionStart, buildHookEntry(dispatcher));
105
- hooks.beforeSubmitPrompt = patchEventEntries(hooks.beforeSubmitPrompt, buildHookEntry(dispatcher));
106
- hooks.preToolUse = patchEventEntries(hooks.preToolUse, buildHookEntry(dispatcher, { matcher: 'Write|StrReplace|EditNotebook|Delete' }));
107
- hooks.postToolUse = patchEventEntries(hooks.postToolUse, buildHookEntry(dispatcher, {
108
- matcher: 'Write|StrReplace|EditNotebook|Delete|MCP:mnemonik.*',
109
- }));
110
- hooks.beforeShellExecution = patchEventEntries(hooks.beforeShellExecution, buildHookEntry(dispatcher));
111
- hooks.beforeMCPExecution = patchEventEntries(hooks.beforeMCPExecution, buildHookEntry(dispatcher));
112
- hooks.afterMCPExecution = patchEventEntries(hooks.afterMCPExecution, buildHookEntry(dispatcher));
113
- hooks.afterFileEdit = patchEventEntries(hooks.afterFileEdit, buildHookEntry(dispatcher));
114
- hooks.stop = patchEventEntries(hooks.stop, buildHookEntry(dispatcher));
115
- hooks.subagentStart = patchEventEntries(hooks.subagentStart, buildHookEntry(dispatcher));
116
- hooks.subagentStop = patchEventEntries(hooks.subagentStop, buildHookEntry(dispatcher));
117
- hooks.preCompact = patchEventEntries(hooks.preCompact, buildHookEntry(dispatcher));
118
- hooksJson.hooks = hooks;
119
- if (typeof hooksJson.version !== 'number')
120
- hooksJson.version = 1;
121
- await writeJson(hooksPath, hooksJson);
144
+ let installedDispatcher = sourceDispatcher;
145
+ let alternateMigrated = false;
146
+ const retiredRulePath = join(cwd, RETIRED_CURSOR_RULE_PATH);
147
+ const retiredRuleMigration = await withFileLocks([
148
+ installerConfigLockPath(hooksPath, runtimeParent),
149
+ installerConfigLockPath(alternatePath, runtimeParent),
150
+ ], async () => {
151
+ const { hooksJson, raw } = await readHooksJson(hooksPath);
152
+ const alternate = alternatePath === hooksPath ? null : await readHooksJson(alternatePath);
153
+ let retiredRuleRaw;
154
+ try {
155
+ retiredRuleRaw = await readTextIfExists(retiredRulePath);
156
+ }
157
+ catch {
158
+ throw new Error(`Could not inspect retired Cursor rule ${RETIRED_CURSOR_RULE_PATH}`);
159
+ }
160
+ const removeRetiredRule = retiredRuleRaw !== null && isRetiredMnemonikManagedRule(retiredRuleRaw);
161
+ // Validate both scopes before installing the runtime or changing either
162
+ // hooks file. Malformed alternate configuration is never ignored.
163
+ const runtime = await installDurableRuntime({
164
+ sourcePackageRoot: resolvePackageRoot(import.meta.url),
165
+ runtimeParent,
166
+ runtimeName: HOOK_OWNER,
167
+ entrypoints: ['hook.js'],
168
+ });
169
+ installedDispatcher = runtime.entrypoints['hook.js'];
170
+ const hooks = (hooksJson.hooks ?? {});
171
+ const entry = () => buildHookEntry(installedDispatcher);
172
+ hooks.sessionStart = patchEventEntries(hooks.sessionStart, entry());
173
+ hooks.beforeSubmitPrompt = patchEventEntries(hooks.beforeSubmitPrompt, entry());
174
+ hooks.preToolUse = patchEventEntries(hooks.preToolUse, buildHookEntry(installedDispatcher, { matcher: 'Write|StrReplace|EditNotebook|Delete' }));
175
+ hooks.postToolUse = patchEventEntries(hooks.postToolUse, buildHookEntry(installedDispatcher, {
176
+ matcher: 'Write|StrReplace|EditNotebook|Delete|MCP:.*',
177
+ }));
178
+ hooks.beforeShellExecution = patchEventEntries(hooks.beforeShellExecution, entry());
179
+ hooks.beforeMCPExecution = patchEventEntries(hooks.beforeMCPExecution, entry());
180
+ hooks.afterMCPExecution = patchEventEntries(hooks.afterMCPExecution, entry());
181
+ const afterFileEditEntries = removeMnemonikEntries(hooks.afterFileEdit, sourceDispatcher);
182
+ if (afterFileEditEntries.length > 0)
183
+ hooks.afterFileEdit = afterFileEditEntries;
184
+ else
185
+ delete hooks.afterFileEdit;
186
+ hooks.stop = patchEventEntries(hooks.stop, entry());
187
+ hooks.subagentStart = patchEventEntries(hooks.subagentStart, entry());
188
+ hooks.subagentStop = patchEventEntries(hooks.subagentStop, entry());
189
+ hooks.preCompact = patchEventEntries(hooks.preCompact, entry());
190
+ hooksJson.hooks = hooks;
191
+ const changes = [
192
+ {
193
+ path: hooksPath,
194
+ expected: raw,
195
+ next: `${JSON.stringify(hooksJson, null, 2)}\n`,
196
+ },
197
+ ];
198
+ if (alternate !== null && alternate.raw !== null) {
199
+ alternateMigrated = removeMnemonikHooks(alternate.hooksJson, sourceDispatcher);
200
+ if (alternateMigrated) {
201
+ changes.push({
202
+ path: alternatePath,
203
+ expected: alternate.raw,
204
+ next: `${JSON.stringify(alternate.hooksJson, null, 2)}\n`,
205
+ });
206
+ }
207
+ }
208
+ if (removeRetiredRule) {
209
+ changes.push({
210
+ path: retiredRulePath,
211
+ expected: retiredRuleRaw,
212
+ next: null,
213
+ });
214
+ }
215
+ try {
216
+ await atomicWriteTransaction(changes);
217
+ }
218
+ catch (error) {
219
+ if (removeRetiredRule && String(error).includes(retiredRulePath)) {
220
+ throw new Error(`Could not remove retired Cursor rule ${RETIRED_CURSOR_RULE_PATH}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
221
+ }
222
+ throw error;
223
+ }
224
+ return removeRetiredRule ? 'removed' : retiredRuleRaw === null ? 'absent' : 'preserved';
225
+ });
122
226
  console.log([
123
- `mnemonik-cursor-hooks: wired into ${hooksPath}`,
227
+ `mnemonik-cursor-hooks: wired into ${requestedHooksPath}`,
124
228
  ` target -> ${target}`,
125
- ` dispatcher -> ${dispatcher}`,
229
+ ...(alternateMigrated
230
+ ? [` migration -> removed duplicate Mnemonik hooks from ${requestedAlternatePath}`]
231
+ : []),
232
+ ` dispatcher -> ${installedDispatcher}`,
233
+ ...(retiredRuleMigration === 'removed'
234
+ ? [` migration -> removed ${RETIRED_CURSOR_RULE_PATH}`]
235
+ : []),
126
236
  '',
127
- 'Installed Cursor hooks only. This does not install or modify skills, rules, AGENTS.md, .mnemonik.json, or MCP config.',
237
+ 'Installed Cursor hooks only. This does not install or modify user-authored skills, rules, AGENTS.md, .mnemonik.json, or MCP config.',
238
+ 'Migration removes the retired .cursor/rules/memory_tools.mdc only when its Mnemonik-generated fingerprint is present.',
128
239
  'MCP precheck (Cat 1-9 of the ordering-rule taxonomy) is server-driven via POST /api/v1/hooks/mcp-precheck.',
129
240
  'Bash policy reminders are server-driven via POST /api/v1/hooks/policy-reminder.',
130
241
  'Local irreducible deny-floor blocks three catastrophic patterns unconditionally: rm -rf / | ~ | $HOME, dd of=<whole-disk>, mkfs <whole-disk>.',
@@ -145,10 +256,10 @@ function isDirectExecution() {
145
256
  if (isDirectExecution()) {
146
257
  main(process.argv.slice(2))
147
258
  .then((code) => process.exit(code))
148
- .catch((err) => {
149
- console.error(`mnemonik-cursor-hooks: ${err instanceof Error ? err.message : String(err)}`);
259
+ .catch((error) => {
260
+ console.error(`mnemonik-cursor-hooks: ${error instanceof Error ? error.message : String(error)}`);
150
261
  process.exit(1);
151
262
  });
152
263
  }
153
- export { buildHookEntry, isMnemonikEntry, patchEventEntries, parseArgs, resolveTargetPath };
264
+ export { buildHookEntry, isMnemonikEntry, isRetiredMnemonikManagedRule, migrateRetiredCursorRule, patchEventEntries, removeMnemonikEntries, parseArgs, resolveTargetPath, };
154
265
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
@@ -41,8 +41,10 @@ export declare const PRE_BASH_GATE: GateMode;
41
41
  */
42
42
  export declare const PRE_MCP_GATE: GateMode;
43
43
  /**
44
- * stop continuation pressure ("you made changes but didn't checkpoint").
45
- * Repeated Stop follow-ups are guarded server-side by checkpoint generation.
44
+ * Checkpoint-pressure rendering kill switch.
45
+ *
46
+ * stop itself is always a clean allow because followup_message is submitted
47
+ * as a new user turn. Pressure rides tool-adjacent context instead.
46
48
  */
47
49
  export declare const CHECKPOINT_PRESSURE: SoftMode;
48
50
  /** subagentStart / subagentStop observability. */
@@ -39,8 +39,10 @@ export const PRE_BASH_GATE = 'advisory';
39
39
  */
40
40
  export const PRE_MCP_GATE = 'advisory';
41
41
  /**
42
- * stop continuation pressure ("you made changes but didn't checkpoint").
43
- * Repeated Stop follow-ups are guarded server-side by checkpoint generation.
42
+ * Checkpoint-pressure rendering kill switch.
43
+ *
44
+ * stop itself is always a clean allow because followup_message is submitted
45
+ * as a new user turn. Pressure rides tool-adjacent context instead.
44
46
  */
45
47
  export const CHECKPOINT_PRESSURE = 'advisory';
46
48
  /** subagentStart / subagentStop observability. */
@@ -1 +1 @@
1
- {"version":3,"file":"behavior.js","sourceRoot":"","sources":["../../src/lib/behavior.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAa,UAAU,CAAC;AAEnD,6FAA6F;AAC7F,MAAM,CAAC,MAAM,aAAa,GAAa,UAAU,CAAC;AAElD,wEAAwE;AACxE,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD,iFAAiF;AACjF,MAAM,CAAC,MAAM,aAAa,GAAa,UAAU,CAAC;AAElD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAa,UAAU,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAa,UAAU,CAAC;AAExD,kDAAkD;AAClD,MAAM,CAAC,MAAM,cAAc,GAAa,UAAU,CAAC;AAEnD,sFAAsF;AACtF,MAAM,CAAC,MAAM,kBAAkB,GAAa,UAAU,CAAC"}
1
+ {"version":3,"file":"behavior.js","sourceRoot":"","sources":["../../src/lib/behavior.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAa,UAAU,CAAC;AAEnD,6FAA6F;AAC7F,MAAM,CAAC,MAAM,aAAa,GAAa,UAAU,CAAC;AAElD,wEAAwE;AACxE,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD,iFAAiF;AACjF,MAAM,CAAC,MAAM,aAAa,GAAa,UAAU,CAAC;AAElD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAa,UAAU,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAa,UAAU,CAAC;AAExD,kDAAkD;AAClD,MAAM,CAAC,MAAM,cAAc,GAAa,UAAU,CAAC;AAEnD,sFAAsF;AACtF,MAAM,CAAC,MAAM,kBAAkB,GAAa,UAAU,CAAC"}
@@ -1,4 +1,5 @@
1
- import { mkdir, readdir, stat, unlink, writeFile } from 'node:fs/promises';
1
+ import { constants } from 'node:fs';
2
+ import { lstat, mkdir, open, readdir, unlink } from 'node:fs/promises';
2
3
  import { randomBytes } from 'node:crypto';
3
4
  import { homedir } from 'node:os';
4
5
  import { join } from 'node:path';
@@ -50,14 +51,92 @@ function headOf(text, maxBytes) {
50
51
  // Prefer ending on a line boundary when one exists in the back half.
51
52
  return lastNewline > maxBytes / 2 ? out.slice(0, lastNewline) : out;
52
53
  }
54
+ function isMissing(error) {
55
+ return Boolean(error && typeof error === 'object' && 'code' in error && error.code === 'ENOENT');
56
+ }
57
+ async function hardenExistingStorage(dir) {
58
+ if (process.platform === 'win32')
59
+ return;
60
+ let dirInfo;
61
+ try {
62
+ dirInfo = await lstat(dir);
63
+ }
64
+ catch (error) {
65
+ if (isMissing(error))
66
+ return;
67
+ throw error;
68
+ }
69
+ if (!dirInfo.isDirectory())
70
+ return;
71
+ const dirHandle = await open(dir, constants.O_RDONLY | constants.O_DIRECTORY | constants.O_NOFOLLOW);
72
+ try {
73
+ if (!(await dirHandle.stat()).isDirectory())
74
+ return;
75
+ await dirHandle.chmod(0o700);
76
+ for (const name of await readdir(dir)) {
77
+ if (!name.endsWith('.md'))
78
+ continue;
79
+ const full = join(dir, name);
80
+ try {
81
+ if (!(await lstat(full)).isFile())
82
+ continue;
83
+ const fileHandle = await open(full, constants.O_RDONLY | constants.O_NOFOLLOW);
84
+ try {
85
+ if ((await fileHandle.stat()).isFile())
86
+ await fileHandle.chmod(0o600);
87
+ }
88
+ finally {
89
+ await fileHandle.close();
90
+ }
91
+ }
92
+ catch {
93
+ /* per-file migration is best effort */
94
+ }
95
+ }
96
+ }
97
+ finally {
98
+ await dirHandle.close();
99
+ }
100
+ }
101
+ async function ensureOverflowDirectory(dir) {
102
+ let existing;
103
+ try {
104
+ existing = await lstat(dir);
105
+ }
106
+ catch (error) {
107
+ if (!isMissing(error))
108
+ throw error;
109
+ }
110
+ if (existing && !existing.isDirectory()) {
111
+ throw new Error(`Refusing non-directory Cursor context path: ${dir}`);
112
+ }
113
+ if (!existing)
114
+ await mkdir(dir, { recursive: true, mode: 0o700 });
115
+ const created = await lstat(dir);
116
+ if (!created.isDirectory()) {
117
+ throw new Error(`Refusing non-directory Cursor context path: ${dir}`);
118
+ }
119
+ await hardenExistingStorage(dir);
120
+ }
121
+ async function writePrivateFile(path, text) {
122
+ const handle = await open(path, 'wx', 0o600);
123
+ try {
124
+ await handle.writeFile(text, 'utf8');
125
+ if (process.platform !== 'win32')
126
+ await handle.chmod(0o600);
127
+ }
128
+ finally {
129
+ await handle.close();
130
+ }
131
+ }
53
132
  async function pruneStale(dir) {
54
133
  try {
55
134
  const now = Date.now();
56
135
  for (const name of await readdir(dir)) {
57
136
  try {
58
137
  const full = join(dir, name);
59
- const s = await stat(full);
60
- if (now - s.mtimeMs > OVERFLOW_TTL_MS)
138
+ const s = await lstat(full);
139
+ if (s.isFile() && now - s.mtimeMs > OVERFLOW_TTL_MS)
61
140
  await unlink(full);
62
141
  }
63
142
  catch {
@@ -80,15 +159,19 @@ async function pruneStale(dir) {
80
159
  * degraded, but never a silent loss and never the design path.
81
160
  */
82
161
  export async function deliverContext(text, sessionId) {
83
- if (Buffer.byteLength(text, 'utf8') <= CURSOR_INLINE_CONTEXT_LIMIT)
84
- return text;
85
162
  const dir = overflowDir();
163
+ if (Buffer.byteLength(text, 'utf8') <= CURSOR_INLINE_CONTEXT_LIMIT) {
164
+ await hardenExistingStorage(dir).catch(() => undefined);
165
+ return text;
166
+ }
86
167
  const fileName = `${sanitizeSessionId(sessionId)}-${randomBytes(4).toString('hex')}.md`;
87
168
  const fullPath = join(dir, fileName);
88
169
  try {
89
- await mkdir(dir, { recursive: true });
170
+ await ensureOverflowDirectory(dir);
90
171
  await pruneStale(dir);
91
- await writeFile(fullPath, text, 'utf8');
172
+ // The random name prevents normal collisions; `wx` also makes creation
173
+ // atomic and refuses to follow/overwrite an existing final path.
174
+ await writePrivateFile(fullPath, text);
92
175
  const directive = [
93
176
  '',
94
177
  `[Mnemonik: this briefing exceeds Cursor's inline context limit and CONTINUES in a file. ` +
@@ -1 +1 @@
1
- {"version":3,"file":"contextOverflow.js","sourceRoot":"","sources":["../../src/lib/contextOverflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contextOverflow.js","sourceRoot":"","sources":["../../src/lib/contextOverflow.ts"],"names":[],"mappings":"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"}
@@ -97,12 +97,14 @@ export function renderVisibleMnemonikText(text) {
97
97
  const source = text.includes('&lt;mnemonik:') ? decodeXmlEntities(text) : text;
98
98
  const envelopeRe = /<mnemonik:(directive|nudge|ambient)\b([^>]*)>([\s\S]*?)<\/mnemonik:\1>/g;
99
99
  let matched = false;
100
- const rendered = source.replace(envelopeRe, (_all, _kind, attrs, body) => {
100
+ const rendered = source.replace(envelopeRe, (_all, kind, attrs, body) => {
101
101
  matched = true;
102
102
  const signal = attrs.match(/\bsignal="([^"]+)"/)?.[1];
103
103
  const title = `Mnemonik ${humanSignal(signal)}${signal ? ` (${signal})` : ''}`;
104
104
  const decodedBody = decodeXmlEntities(body).trim();
105
- return decodedBody ? `${title}\n\n${decodedBody}` : title;
105
+ const visible = decodedBody ? `${title}\n\n${decodedBody}` : title;
106
+ const budgetMarker = kind === 'nudge' && signal ? `<!-- mnemonik-nudge:${signal} -->\n\n` : '';
107
+ return budgetMarker + visible;
106
108
  });
107
109
  return matched ? rendered.trim() : text;
108
110
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cursorOutput.js","sourceRoot":"","sources":["../../src/lib/cursorOutput.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,MAAM,UAAU,KAAK;IACnB,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,MAAc,EAAE,GAAY;IAC/C,uEAAuE;IACvE,wEAAwE;IACxE,0EAA0E;IAC1E,uEAAuE;IACvE,kCAAkC;IAClC,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IACrD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,GAAY;IAC9C,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IACrD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO;QACL,QAAQ,EAAE,IAAI;QACd,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,QAAQ,GAAG,MAAM;IACzD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,MAAM,GACV,uGAAuG,CAAC;IAC1G,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM;YAAE,MAAM;QACxD,GAAG,IAAI,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,GAAG,GAAG,MAAM,CAAC;AACtB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,IAAI;SACR,OAAO,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,GAAW,EAAE,EAAE,CAChD,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAC/C;SACA,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;SACzF,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAAC,MAA0B;IAC7C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,qBAAqB;YACxB,OAAO,qBAAqB,CAAC;QAC/B,KAAK,kBAAkB;YACrB,OAAO,qBAAqB,CAAC;QAC/B,KAAK,4BAA4B;YAC/B,OAAO,4BAA4B,CAAC;QACtC,KAAK,uBAAuB;YAC1B,OAAO,uBAAuB,CAAC;QACjC,KAAK,uBAAuB;YAC1B,OAAO,uBAAuB,CAAC;QACjC,KAAK,iBAAiB;YACpB,OAAO,iBAAiB,CAAC;QAC3B,KAAK,cAAc;YACjB,OAAO,cAAc,CAAC;QACxB,KAAK,sBAAsB;YACzB,OAAO,sBAAsB,CAAC;QAChC;YACE,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,IAAI,IAAI,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/E,MAAM,UAAU,GAAG,yEAAyE,CAAC;IAC7F,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAC7B,UAAU,EACV,CAAC,IAAI,EAAE,KAAa,EAAE,KAAa,EAAE,IAAY,EAAE,EAAE;QACnD,OAAO,GAAG,IAAI,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,YAAY,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC/E,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,OAAO,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,CAAC,CACF,CAAC;IACF,OAAO,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"cursorOutput.js","sourceRoot":"","sources":["../../src/lib/cursorOutput.ts"],"names":[],"mappings":"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"}
@@ -8,4 +8,5 @@ export declare function claimFire(input: {
8
8
  event: string;
9
9
  sessionKey: string;
10
10
  prompt?: string;
11
+ generationId?: string;
11
12
  }): Promise<boolean>;
@@ -8,7 +8,10 @@ export function dedupDir() {
8
8
  return join(homedir(), '.mnemonik', 'hook-dedup');
9
9
  }
10
10
  function markerName(input) {
11
- const key = input.event + input.sessionKey + (input.prompt ?? '');
11
+ const key = input.event +
12
+ input.sessionKey +
13
+ (input.prompt ?? '') +
14
+ (input.generationId === undefined ? '' : `\0generation:${input.generationId}`);
12
15
  return createHash('sha256').update(key).digest('hex').slice(0, 32);
13
16
  }
14
17
  async function pruneStale(dir) {
@@ -1 +1 @@
1
- {"version":3,"file":"dedupGuard.js","sourceRoot":"","sources":["../../src/lib/dedupGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,+FAA+F;AAC/F,MAAM,YAAY,GAAG,MAAM,CAAC;AAE5B,MAAM,UAAU,QAAQ;IACtB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,UAAU,CAAC,KAA6D;IAC/E,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAClE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAW;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC7B,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,YAAY;oBAAE,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACzD,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yDAAyD;IAC3D,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAI/B;IACC,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7E,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"dedupGuard.js","sourceRoot":"","sources":["../../src/lib/dedupGuard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,+FAA+F;AAC/F,MAAM,YAAY,GAAG,MAAM,CAAC;AAE5B,MAAM,UAAU,QAAQ;IACtB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,UAAU,CAAC,KAKnB;IACC,MAAM,GAAG,GACP,KAAK,CAAC,KAAK;QACX,KAAK,CAAC,UAAU;QAChB,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;QACpB,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACjF,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAW;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC7B,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,YAAY;oBAAE,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACzD,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yDAAyD;IAC3D,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAK/B;IACC,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7E,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}