@mnemonik/cursor-hooks 0.7.4 → 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/hook.js +193 -73
- package/dist/hook.js.map +1 -1
- package/dist/install.d.ts +5 -9
- package/dist/install.js +194 -83
- package/dist/install.js.map +1 -1
- package/dist/lib/behavior.d.ts +4 -2
- package/dist/lib/behavior.js +4 -2
- package/dist/lib/behavior.js.map +1 -1
- package/dist/lib/contextOverflow.js +90 -7
- package/dist/lib/contextOverflow.js.map +1 -1
- package/dist/lib/cursorOutput.js +4 -2
- package/dist/lib/cursorOutput.js.map +1 -1
- package/dist/lib/dedupGuard.d.ts +12 -0
- package/dist/lib/dedupGuard.js +57 -0
- package/dist/lib/dedupGuard.js.map +1 -0
- package/dist/lib/http.d.ts +10 -5
- package/dist/lib/http.js +40 -26
- package/dist/lib/http.js.map +1 -1
- package/dist/lib/installerSupport.d.ts +33 -0
- package/dist/lib/installerSupport.js +561 -0
- package/dist/lib/installerSupport.js.map +1 -0
- package/dist/lib/mcpOwnership.d.ts +19 -0
- package/dist/lib/mcpOwnership.js +127 -0
- package/dist/lib/mcpOwnership.js.map +1 -0
- package/dist/lib/retiredCursorRule.d.ts +9 -0
- package/dist/lib/retiredCursorRule.js +87 -0
- package/dist/lib/retiredCursorRule.js.map +1 -0
- package/dist/lib/types.d.ts +12 -11
- package/dist/lib/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/lib/files.d.ts +0 -20
- package/dist/lib/files.js +0 -52
- package/dist/lib/files.js.map +0 -1
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { mkdir, readdir, stat, unlink, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
/** Markers older than this are pruned on the next claim — a repeat after TTL is a new fire. */
|
|
6
|
+
const DEDUP_TTL_MS = 60_000;
|
|
7
|
+
export function dedupDir() {
|
|
8
|
+
return join(homedir(), '.mnemonik', 'hook-dedup');
|
|
9
|
+
}
|
|
10
|
+
function markerName(input) {
|
|
11
|
+
const key = input.event +
|
|
12
|
+
input.sessionKey +
|
|
13
|
+
(input.prompt ?? '') +
|
|
14
|
+
(input.generationId === undefined ? '' : `\0generation:${input.generationId}`);
|
|
15
|
+
return createHash('sha256').update(key).digest('hex').slice(0, 32);
|
|
16
|
+
}
|
|
17
|
+
async function pruneStale(dir) {
|
|
18
|
+
try {
|
|
19
|
+
const now = Date.now();
|
|
20
|
+
for (const name of await readdir(dir)) {
|
|
21
|
+
try {
|
|
22
|
+
const full = join(dir, name);
|
|
23
|
+
const s = await stat(full);
|
|
24
|
+
if (now - s.mtimeMs > DEDUP_TTL_MS)
|
|
25
|
+
await unlink(full);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
/* per-file best effort */
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
/* housekeeping is best effort — never blocks delivery */
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* First-fire-wins claim for context-bearing hook events. Dual registration
|
|
38
|
+
* (project + user hooks.json) would otherwise concatenate duplicate digests
|
|
39
|
+
* past Cursor's inline cap. Fail-open toward delivery on any fs error.
|
|
40
|
+
*/
|
|
41
|
+
export async function claimFire(input) {
|
|
42
|
+
const dir = dedupDir();
|
|
43
|
+
const path = join(dir, markerName(input));
|
|
44
|
+
try {
|
|
45
|
+
await mkdir(dir, { recursive: true });
|
|
46
|
+
await pruneStale(dir);
|
|
47
|
+
await writeFile(path, String(process.pid), { flag: 'wx' });
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
if (err && typeof err === 'object' && 'code' in err && err.code === 'EEXIST') {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=dedupGuard.js.map
|
|
@@ -0,0 +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,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"}
|
package/dist/lib/http.d.ts
CHANGED
|
@@ -42,10 +42,10 @@ export declare function fetchMcpRecord(input: FetchMcpRecordInput): Promise<void
|
|
|
42
42
|
* The hook is a thin renderer that translates each entry's `deliveryHint`
|
|
43
43
|
* into Cursor's output shape via the builders in `cursorOutput.ts`.
|
|
44
44
|
*
|
|
45
|
-
* Soft-fails on every error path so the agent's tool call proceeds even
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
45
|
+
* Soft-fails on every error path so the agent's tool call proceeds even if the
|
|
46
|
+
* server is unreachable. SessionStart is warm-only (its additional_context is
|
|
47
|
+
* not model-visible), so it shares the short fail-open budget with every other
|
|
48
|
+
* event rather than holding Cursor startup for a cold digest build.
|
|
49
49
|
*/
|
|
50
50
|
export interface FetchInjectionsInput {
|
|
51
51
|
server: string;
|
|
@@ -57,6 +57,10 @@ export interface FetchInjectionsInput {
|
|
|
57
57
|
prompt?: string;
|
|
58
58
|
toolName?: string;
|
|
59
59
|
toolArgs?: Record<string, unknown>;
|
|
60
|
+
eventId?: string;
|
|
61
|
+
observeOnly?: boolean;
|
|
62
|
+
/** Proven outcome of the host's MCP CallToolResult. Unknown is omitted. */
|
|
63
|
+
toolSucceeded?: boolean;
|
|
60
64
|
stopHookActive?: boolean;
|
|
61
65
|
/** Edit-style PreToolUse: absolute paths the host is about to write to. */
|
|
62
66
|
filePaths?: string[];
|
|
@@ -109,7 +113,8 @@ export declare function trackIdeEdit(input: {
|
|
|
109
113
|
sessionId: string;
|
|
110
114
|
filePath: string;
|
|
111
115
|
cwd?: string;
|
|
112
|
-
|
|
116
|
+
eventId?: string;
|
|
117
|
+
}): Promise<boolean>;
|
|
113
118
|
export interface ReportSubagentInput {
|
|
114
119
|
server: string;
|
|
115
120
|
apiKey: string | null;
|
package/dist/lib/http.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { FETCH_TIMEOUT_MS, TELEMETRY_TIMEOUT_MS, POST_TOOL_TIMEOUT_MS, MCP_PRECHECK_TIMEOUT_MS, withHookTimeout as withTimeout, } from '@mnemonik/shared';
|
|
6
6
|
import { stderr } from 'node:process';
|
|
7
7
|
const HOST = 'cursor';
|
|
8
|
-
const
|
|
8
|
+
const TRACK_IDE_EDIT_ATTEMPTS = 2;
|
|
9
9
|
/**
|
|
10
10
|
* Inline surface for the server's `identity_mismatch` reason. See the
|
|
11
11
|
* matching helper in claude-code-hooks/src/lib/http.ts for the rationale —
|
|
@@ -90,8 +90,7 @@ export async function fetchMcpRecord(input) {
|
|
|
90
90
|
}
|
|
91
91
|
export async function fetchInjections(input) {
|
|
92
92
|
const url = `${input.server.replace(/\/$/, '')}/api/v1/hooks/injections`;
|
|
93
|
-
const
|
|
94
|
-
const { signal, cleanup } = withTimeout(timeoutMs);
|
|
93
|
+
const { signal, cleanup } = withTimeout(FETCH_TIMEOUT_MS);
|
|
95
94
|
try {
|
|
96
95
|
const res = await fetch(url, {
|
|
97
96
|
method: 'POST',
|
|
@@ -108,6 +107,9 @@ export async function fetchInjections(input) {
|
|
|
108
107
|
prompt: input.prompt,
|
|
109
108
|
toolName: input.toolName,
|
|
110
109
|
toolArgs: input.toolArgs,
|
|
110
|
+
eventId: input.eventId,
|
|
111
|
+
observeOnly: input.observeOnly,
|
|
112
|
+
toolSucceeded: input.toolSucceeded,
|
|
111
113
|
stopHookActive: input.stopHookActive,
|
|
112
114
|
filePaths: input.filePaths,
|
|
113
115
|
...(input.tz ? { tz: input.tz } : {}),
|
|
@@ -220,31 +222,43 @@ export async function reportBypass(input) {
|
|
|
220
222
|
}
|
|
221
223
|
export async function trackIdeEdit(input) {
|
|
222
224
|
if (!input.apiKey)
|
|
223
|
-
return;
|
|
225
|
+
return false;
|
|
224
226
|
const url = `${input.server.replace(/\/$/, '')}/api/v1/session/track-ide-edit`;
|
|
225
|
-
const
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
227
|
+
const body = JSON.stringify({
|
|
228
|
+
sessionId: input.sessionId,
|
|
229
|
+
filePath: input.filePath,
|
|
230
|
+
cwd: input.cwd,
|
|
231
|
+
host: HOST,
|
|
232
|
+
eventId: input.eventId,
|
|
233
|
+
});
|
|
234
|
+
const attempts = input.eventId ? TRACK_IDE_EDIT_ATTEMPTS : 1;
|
|
235
|
+
for (let attempt = 0; attempt < attempts; attempt += 1) {
|
|
236
|
+
const { signal, cleanup } = withTimeout(POST_TOOL_TIMEOUT_MS);
|
|
237
|
+
try {
|
|
238
|
+
const response = await fetch(url, {
|
|
239
|
+
method: 'POST',
|
|
240
|
+
headers: {
|
|
241
|
+
'content-type': 'application/json',
|
|
242
|
+
authorization: `Bearer ${input.apiKey}`,
|
|
243
|
+
},
|
|
244
|
+
body,
|
|
245
|
+
signal,
|
|
246
|
+
});
|
|
247
|
+
if (!response.ok)
|
|
248
|
+
continue;
|
|
249
|
+
const acknowledgement = (await response.json());
|
|
250
|
+
if (acknowledgement?.ok === true)
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
// Retry once with the same eventId; server receipts make a lost response
|
|
255
|
+
// safe without applying the edit twice.
|
|
256
|
+
}
|
|
257
|
+
finally {
|
|
258
|
+
cleanup();
|
|
259
|
+
}
|
|
247
260
|
}
|
|
261
|
+
return false;
|
|
248
262
|
}
|
|
249
263
|
export async function reportSubagent(input) {
|
|
250
264
|
if (!input.apiKey)
|
package/dist/lib/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"AAEA,qEAAqE;AACrE,wEAAwE;AACxE,0EAA0E;AAC1E,6BAA6B;AAC7B,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,eAAe,IAAI,WAAW,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,IAAI,GAAG,QAAQ,CAAC;AACtB,MAAM,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare function buildManagedCommand(targetPath: string, owner: string): string;
|
|
2
|
+
export declare function parseManagedCommand(command: string, owner: string): string | null;
|
|
3
|
+
export declare function isManagedCommand(command: string, owner: string, packageName: string, entrypoint: string, currentTarget?: string): boolean;
|
|
4
|
+
export declare function resolvePackageRoot(importMetaUrl: string): string;
|
|
5
|
+
export declare function resolveRuntimeParent(env?: Partial<Record<'HOME' | 'USERPROFILE', string | undefined>>): string;
|
|
6
|
+
/** Non-invasive lock location shared by host/project installers for one config path. */
|
|
7
|
+
export declare function installerConfigLockPath(configPath: string, runtimeParent?: string): string;
|
|
8
|
+
/** Resolve symlink/hard-link aliases before config locking and migration. */
|
|
9
|
+
export declare function canonicalizeConfigTargets(paths: string[]): Promise<string[]>;
|
|
10
|
+
export declare function withFileLock<T>(lockPath: string, action: () => Promise<T>): Promise<T>;
|
|
11
|
+
export declare function withFileLocks<T>(lockPaths: string[], action: () => Promise<T>): Promise<T>;
|
|
12
|
+
export declare function readTextIfExists(path: string): Promise<string | null>;
|
|
13
|
+
export declare function atomicWriteText(path: string, next: string, expectedCurrent: string | null): Promise<void>;
|
|
14
|
+
export declare function atomicRestoreText(path: string, original: string | null, expectedCurrent: string | null): Promise<void>;
|
|
15
|
+
export declare function atomicRemoveText(path: string, expectedCurrent: string): Promise<void>;
|
|
16
|
+
export interface AtomicTextChange {
|
|
17
|
+
path: string;
|
|
18
|
+
expected: string | null;
|
|
19
|
+
next: string | null;
|
|
20
|
+
}
|
|
21
|
+
export declare function atomicWriteTransaction(changes: AtomicTextChange[]): Promise<void>;
|
|
22
|
+
export interface DurableRuntimeOptions {
|
|
23
|
+
sourcePackageRoot: string;
|
|
24
|
+
runtimeParent: string;
|
|
25
|
+
runtimeName: string;
|
|
26
|
+
entrypoints: string[];
|
|
27
|
+
}
|
|
28
|
+
export interface DurableRuntime {
|
|
29
|
+
root: string;
|
|
30
|
+
packageRoot: string;
|
|
31
|
+
entrypoints: Record<string, string>;
|
|
32
|
+
}
|
|
33
|
+
export declare function installDurableRuntime(options: DurableRuntimeOptions): Promise<DurableRuntime>;
|