litmus-cli 1.3.12 → 1.3.13
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/commands/init.d.ts +27 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +16 -8
- package/dist/commands/init.js.map +1 -1
- package/dist/lib/hook-logger.cjs +68 -171
- package/package.json +1 -1
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,2 +1,29 @@
|
|
|
1
1
|
export declare function runInit(token: string): Promise<void>;
|
|
2
|
+
/**
|
|
3
|
+
* Set up AI prompt tracking for Claude Code, OpenAI Codex CLI, and GitHub
|
|
4
|
+
* Copilot CLI.
|
|
5
|
+
*
|
|
6
|
+
* Claude Code (ENG-771): prefer a user-scope hook in ~/.claude/settings.json so
|
|
7
|
+
* the logger reference is an absolute path. With an absolute logger path, the
|
|
8
|
+
* hook can use the active-assessments registry as a fallback when the
|
|
9
|
+
* candidate's Claude Code cwd is outside the assessment dir (the actual
|
|
10
|
+
* silent-capture bug). If user-scope install fails (sandboxed HOME, etc.) we
|
|
11
|
+
* fall back to a project-scope `.claude/settings.local.json` with a relative
|
|
12
|
+
* logger path — fires fine but only captures when Claude Code's cwd happens to
|
|
13
|
+
* be inside the assessment.
|
|
14
|
+
*
|
|
15
|
+
* Returns the install mode + Codex install status so the caller can surface the
|
|
16
|
+
* right follow-up message.
|
|
17
|
+
*
|
|
18
|
+
* Exported for tests: the logger-placement rule (ENG-1297) is only observable
|
|
19
|
+
* at this level, not through the individual installers.
|
|
20
|
+
*/
|
|
21
|
+
export declare function setupAiTracking(targetDir: string): {
|
|
22
|
+
mode: "user" | "project";
|
|
23
|
+
codexInstalled: boolean;
|
|
24
|
+
cursorConfigReplaced: boolean;
|
|
25
|
+
cursorBackupPath?: string;
|
|
26
|
+
copilotConfigReplaced: boolean;
|
|
27
|
+
copilotBackupPath?: string;
|
|
28
|
+
};
|
|
2
29
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAmBA,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAmBA,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuQ1D;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,cAAc,EAAE,OAAO,CAAC;IAAC,oBAAoB,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,qBAAqB,EAAE,OAAO,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,CA8H9N"}
|
package/dist/commands/init.js
CHANGED
|
@@ -139,8 +139,11 @@ export async function runInit(token) {
|
|
|
139
139
|
backendUrl: metadata.backendUrl,
|
|
140
140
|
});
|
|
141
141
|
// Step 6: Set up AI prompt tracking
|
|
142
|
-
//
|
|
143
|
-
//
|
|
142
|
+
// Install prompt-capture hook configs for Claude Code, Codex, Cursor, and
|
|
143
|
+
// GitHub Copilot. (The transparency notices this comment used to promise
|
|
144
|
+
// were removed in e81ed8a28 — writing into CLAUDE.md/AGENTS.md polluted the
|
|
145
|
+
// candidate's agent context — so disclosure lives in the web flow, not in
|
|
146
|
+
// the assessment tree.)
|
|
144
147
|
//
|
|
145
148
|
// ENG-606: stop swallowing failures silently. Surface the error to the
|
|
146
149
|
// candidate (so they can re-init if it matters) and drop a marker file
|
|
@@ -274,18 +277,16 @@ export async function runInit(token) {
|
|
|
274
277
|
*
|
|
275
278
|
* Returns the install mode + Codex install status so the caller can surface the
|
|
276
279
|
* right follow-up message.
|
|
280
|
+
*
|
|
281
|
+
* Exported for tests: the logger-placement rule (ENG-1297) is only observable
|
|
282
|
+
* at this level, not through the individual installers.
|
|
277
283
|
*/
|
|
278
|
-
function setupAiTracking(targetDir) {
|
|
284
|
+
export function setupAiTracking(targetDir) {
|
|
279
285
|
const litmusDir = path.join(targetDir, ".litmus");
|
|
280
286
|
mkdirSync(litmusDir, { recursive: true });
|
|
281
287
|
const __filename = fileURLToPath(import.meta.url);
|
|
282
288
|
const __dirname = path.dirname(__filename);
|
|
283
289
|
const hookLoggerSrc = path.join(__dirname, "..", "lib", "hook-logger.cjs");
|
|
284
|
-
// Always keep a local copy of the logger inside .litmus/. It's part of the
|
|
285
|
-
// submission ZIP and is the path the project-scope fallback references.
|
|
286
|
-
if (existsSync(hookLoggerSrc)) {
|
|
287
|
-
copyFileSync(hookLoggerSrc, path.join(litmusDir, "hook-logger.cjs"));
|
|
288
|
-
}
|
|
289
290
|
// Claim a registry slot BEFORE installing any hooks, not after.
|
|
290
291
|
//
|
|
291
292
|
// `litmus submit` uninstalls the user-scope hooks when the registry goes empty
|
|
@@ -312,6 +313,13 @@ function setupAiTracking(targetDir) {
|
|
|
312
313
|
}
|
|
313
314
|
catch {
|
|
314
315
|
mode = "project";
|
|
316
|
+
// Project scope references an assessment-local copy of the logger — the
|
|
317
|
+
// user-scope one at ~/.litmus may not exist on this path (an unwritable
|
|
318
|
+
// HOME is what usually lands us here). This is the ONLY mode that keeps a
|
|
319
|
+
// copy inside the assessment: the readable logger spells out the whole
|
|
320
|
+
// capture design, so it doesn't ship into every assessment by default
|
|
321
|
+
// (ENG-1297).
|
|
322
|
+
copyFileSync(hookLoggerSrc, path.join(litmusDir, "hook-logger.cjs"));
|
|
315
323
|
writeProjectScopeClaudeHook(targetDir, litmusDir);
|
|
316
324
|
}
|
|
317
325
|
// Codex CLI: install user-scope hook at ~/.codex/hooks.json. Per the openai/codex
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/hook-logger.cjs
CHANGED
|
@@ -1,30 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Litmus AI prompt logger.
|
|
4
|
-
* Universal hook script invoked by Claude Code, GitHub Copilot CLI, OpenAI Codex
|
|
5
|
-
* CLI, and Cursor.
|
|
3
|
+
* Litmus AI prompt logger — the shared hook target for every supported AI tool.
|
|
6
4
|
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* node hook-logger.cjs <tool>
|
|
5
|
+
* Usage: node hook-logger.cjs <tool> [assessment-dir]
|
|
9
6
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* transcript_path, timestamp, prompt } and notably NO cwd
|
|
15
|
-
* - Codex CLI: experimental hooks support (format TBD)
|
|
16
|
-
* - Cursor (beforeSubmitPrompt): { conversation_id, generation_id, prompt, ... }
|
|
7
|
+
* Reads the tool's JSON payload on stdin, normalizes it to
|
|
8
|
+
* { ts, type: "ai_prompt", tool, prompt, sessionId? }, appends it to the
|
|
9
|
+
* assessment's activity.jsonl, and uploads it (awaited, bounded — see
|
|
10
|
+
* uploadEvent).
|
|
17
11
|
*
|
|
18
|
-
* Cursor is the only
|
|
19
|
-
*
|
|
20
|
-
* Claude Code injects
|
|
21
|
-
*
|
|
22
|
-
* Normalizes to: { ts, type: "ai_prompt", tool, prompt, sessionId? }
|
|
23
|
-
* Appends to .litmus/activity.jsonl — the same file the watcher uses,
|
|
24
|
-
* so prompts flow through the existing analysis pipeline.
|
|
25
|
-
* Also uploads the event to /cli/activity so it reaches candidate_activity_logs.
|
|
26
|
-
* That upload is AWAITED (bounded) — see uploadEvent for why an unawaited one
|
|
27
|
-
* silently stopped working.
|
|
12
|
+
* stdout contract: Cursor is the only tool that expects output back — see
|
|
13
|
+
* emitCursorVerdictIfNeeded. For every other tool stdout MUST stay empty:
|
|
14
|
+
* Claude Code injects hook stdout into the candidate's prompt as context.
|
|
28
15
|
*/
|
|
29
16
|
|
|
30
17
|
const fs = require("fs")
|
|
@@ -45,27 +32,14 @@ const STDIN_TIMEOUT_MS = 5000
|
|
|
45
32
|
|
|
46
33
|
const tool = process.argv[2] || "unknown"
|
|
47
34
|
|
|
48
|
-
// Optional explicit assessment directory (argv[3]).
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
//
|
|
52
|
-
// Copilot: VS Code Copilot Chat's payload carries no `cwd` and no workspace
|
|
53
|
-
// roots, so without this the only resolution left is the cwd walk-up (wrong
|
|
54
|
-
// whenever the editor's process starts elsewhere) or the active-assessments
|
|
55
|
-
// registry — and the registry is not always populated. `litmus init` removes
|
|
56
|
-
// the entry in project-scope mode, which silently disabled Copilot Chat capture
|
|
57
|
-
// for exactly the candidates whose HOME could not take the user-scope hook.
|
|
58
|
-
//
|
|
59
|
-
// Passing it explicitly also sidesteps the registry's first-match behaviour,
|
|
60
|
-
// which misattributes prompts when a candidate has more than one assessment.
|
|
35
|
+
// Optional explicit assessment directory (argv[3]). Repo-scope hooks are
|
|
36
|
+
// written INTO an assessment, so they know its absolute path at install time —
|
|
37
|
+
// passed as the strongest hint because not every tool's payload or cwd can
|
|
38
|
+
// place the session (VS Code Copilot Chat's payload carries neither).
|
|
61
39
|
const explicitAssessmentDir = process.argv[3] || null
|
|
62
40
|
|
|
63
|
-
// A directory only counts as an assessment if it has a config.json
|
|
64
|
-
//
|
|
65
|
-
// user-scope install) for any Claude Code session whose cwd is in HOME but
|
|
66
|
-
// outside an assessment — silently misrouting prompts to a junk log that
|
|
67
|
-
// never reaches the submission ZIP, and capturing non-Litmus prompts the
|
|
68
|
-
// candidate didn't intend to share.
|
|
41
|
+
// A directory only counts as an assessment if it has a config.json — the
|
|
42
|
+
// user-scope ~/.litmus/ dir must never be mistaken for one.
|
|
69
43
|
function isAssessmentLitmusDir(litmusDir) {
|
|
70
44
|
try {
|
|
71
45
|
return fs.statSync(path.join(litmusDir, "config.json")).isFile()
|
|
@@ -89,14 +63,9 @@ function walkUpForLitmusDir(startDir) {
|
|
|
89
63
|
|
|
90
64
|
// Find the .litmus directory — walk up from any workspace roots the tool told
|
|
91
65
|
// us about, then from cwd, then fall back to the active-assessments registry
|
|
92
|
-
// that `litmus init` writes to ~/.litmus/.
|
|
93
|
-
//
|
|
94
|
-
//
|
|
95
|
-
// Verified against a real Cursor 3.13.25 session: Cursor invokes the hook with
|
|
96
|
-
// cwd = ~/.cursor and passes the actual workspace in `workspace_roots`. Without
|
|
97
|
-
// the hint the cwd walk-up can never match, and we'd silently fall through to
|
|
98
|
-
// the registry — which returns the FIRST active assessment, misattributing
|
|
99
|
-
// prompts whenever a candidate has more than one on the go.
|
|
66
|
+
// that `litmus init` writes to ~/.litmus/. `hintDirs` matters because not
|
|
67
|
+
// every tool runs the hook from the workspace (Cursor invokes hooks with
|
|
68
|
+
// cwd = its own config dir and passes the workspace in `workspace_roots`).
|
|
100
69
|
function findLitmusDir(hintDirs = []) {
|
|
101
70
|
for (const hint of hintDirs) {
|
|
102
71
|
if (typeof hint !== "string" || !hint) continue
|
|
@@ -139,26 +108,15 @@ function readConfig(litmusDir) {
|
|
|
139
108
|
const UPLOAD_TIMEOUT_MS = 2000
|
|
140
109
|
|
|
141
110
|
/**
|
|
142
|
-
* POST the event to /cli/activity and WAIT for it to complete.
|
|
143
|
-
*
|
|
144
|
-
* This used to be fire-and-forget: it called `socket.unref()` so Node wouldn't
|
|
145
|
-
* hold the process open for the response. That only ever worked by accident —
|
|
146
|
-
* `readStdin`'s timeout timer was never cleared, which kept the event loop alive
|
|
147
|
-
* ~5s, comfortably longer than the upload. Clearing that timer (correctly, it was
|
|
148
|
-
* spending the entire hook budget doing nothing) dropped the process lifetime to
|
|
149
|
-
* ~26ms, which is BEFORE tcp connect at 39ms, let alone TLS at 154ms. Every
|
|
150
|
-
* hook-captured prompt silently stopped reaching candidate_activity_logs.
|
|
111
|
+
* POST the event to /cli/activity and WAIT for it to complete, bounded.
|
|
151
112
|
*
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
* DB: zero ai_prompt rows for a submission whose zip had three, while the
|
|
157
|
-
* long-lived watcher's uploads (heartbeat, env_detected) all landed.
|
|
113
|
+
* The await is load-bearing: this process exits in tens of milliseconds, so a
|
|
114
|
+
* fire-and-forget request dies before TCP even connects. Exactly that
|
|
115
|
+
* regressed once — uploads silently vanished while grading (which also reads
|
|
116
|
+
* the in-zip activity.jsonl) kept working, so nothing surfaced it.
|
|
158
117
|
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
* cleared on settle — the bug above is exactly what an uncleared timer costs.
|
|
118
|
+
* Resolves rather than rejects on every failure path: a telemetry upload must
|
|
119
|
+
* never fail a candidate's prompt. Both timers are cleared on settle.
|
|
162
120
|
*/
|
|
163
121
|
function uploadEvent(config, event) {
|
|
164
122
|
if (!config || !config.token || !config.backendUrl) return Promise.resolve()
|
|
@@ -208,10 +166,8 @@ function readStdin() {
|
|
|
208
166
|
let timer = null
|
|
209
167
|
const chunks = []
|
|
210
168
|
// clearTimeout is load-bearing, not tidiness. A pending timer keeps the
|
|
211
|
-
// Node event loop alive after main() has finished,
|
|
212
|
-
//
|
|
213
|
-
// invocation even though stdin closed in milliseconds. That silently ate
|
|
214
|
-
// the entire 5s budget Claude Code allows its UserPromptSubmit hook.
|
|
169
|
+
// Node event loop alive after main() has finished, burning the entire
|
|
170
|
+
// hook budget even though stdin closed in milliseconds.
|
|
215
171
|
const done = () => {
|
|
216
172
|
if (resolved) return
|
|
217
173
|
resolved = true
|
|
@@ -222,22 +178,11 @@ function readStdin() {
|
|
|
222
178
|
process.stdin.on("data", (chunk) => {
|
|
223
179
|
chunks.push(chunk)
|
|
224
180
|
// Resolve as soon as the payload is a COMPLETE JSON document instead of
|
|
225
|
-
// waiting for EOF.
|
|
226
|
-
//
|
|
227
|
-
//
|
|
228
|
-
//
|
|
229
|
-
//
|
|
230
|
-
// therefore spends the whole hook budget doing nothing, and the budget is
|
|
231
|
-
// what the awaited /cli/activity upload has to fit inside — so on any
|
|
232
|
-
// such runner the process is killed before the upload lands and prompts
|
|
233
|
-
// silently stop reaching candidate_activity_logs. That is precisely the
|
|
234
|
-
// regression 2c1aeeb1b fixed for Cursor; resolving on a complete document
|
|
235
|
-
// removes the whole failure mode rather than re-tuning timeouts per tool.
|
|
236
|
-
//
|
|
237
|
-
// Safe against partial reads: every payload is a JSON object, and a
|
|
238
|
-
// truncated object never parses (`{"prompt":` throws). Worst case this
|
|
239
|
-
// never fires and we fall back to EOF or the timeout, i.e. today's
|
|
240
|
-
// behaviour.
|
|
181
|
+
// waiting for EOF. Not every hook runner closes stdin after writing
|
|
182
|
+
// (Cursor does not), and waiting for EOF burns the whole hook budget —
|
|
183
|
+
// the budget the awaited upload has to fit inside. Safe against partial
|
|
184
|
+
// reads: a truncated JSON object never parses. Worst case this never
|
|
185
|
+
// fires and we fall back to EOF or the timeout.
|
|
241
186
|
if (isCompleteJson(chunks.join(""))) done()
|
|
242
187
|
})
|
|
243
188
|
process.stdin.on("end", done)
|
|
@@ -272,20 +217,11 @@ function extractPrompt(input, toolName) {
|
|
|
272
217
|
}
|
|
273
218
|
}
|
|
274
219
|
case "copilot": {
|
|
275
|
-
// GitHub Copilot, both surfaces.
|
|
276
|
-
//
|
|
277
|
-
// internal `userPromptSubmitted` (alias map verified in the first-party
|
|
278
|
-
// @github/copilot SDK) and which VS Code Copilot Chat uses natively —
|
|
279
|
-
// so one config serves the terminal binary, the cloud agent, VS Code
|
|
280
|
-
// and JetBrains.
|
|
281
|
-
//
|
|
282
|
-
// Payloads differ slightly by surface, so read both spellings:
|
|
220
|
+
// GitHub Copilot, both surfaces. Payloads differ slightly, so read
|
|
221
|
+
// both sessionId spellings:
|
|
283
222
|
// Copilot CLI { sessionId | session_id, timestamp, cwd, prompt }
|
|
284
223
|
// VS Code Chat { hook_event_name, session_id?, transcript_path?,
|
|
285
224
|
// timestamp, prompt } <- note: no cwd
|
|
286
|
-
// The missing cwd is why this arm must never rely on the hook's working
|
|
287
|
-
// directory to locate the assessment; resolution comes from the
|
|
288
|
-
// registry fallback in findLitmusDir.
|
|
289
225
|
const prompt = data.prompt || null
|
|
290
226
|
return {
|
|
291
227
|
prompt: typeof prompt === "string" ? prompt : JSON.stringify(prompt),
|
|
@@ -293,9 +229,8 @@ function extractPrompt(input, toolName) {
|
|
|
293
229
|
}
|
|
294
230
|
}
|
|
295
231
|
case "codex": {
|
|
296
|
-
// Codex CLI UserPromptSubmit: { session_id, turn_id, prompt, cwd,
|
|
297
|
-
// per developers.openai.com/codex/hooks.
|
|
298
|
-
// fallbacks were unfounded — Codex's payload is documented and stable.
|
|
232
|
+
// Codex CLI UserPromptSubmit: { session_id, turn_id, prompt, cwd,
|
|
233
|
+
// hook_event_name } per developers.openai.com/codex/hooks.
|
|
299
234
|
const prompt = data.prompt || null
|
|
300
235
|
return {
|
|
301
236
|
prompt: typeof prompt === "string" ? prompt : JSON.stringify(prompt),
|
|
@@ -303,15 +238,10 @@ function extractPrompt(input, toolName) {
|
|
|
303
238
|
}
|
|
304
239
|
}
|
|
305
240
|
case "cursor": {
|
|
306
|
-
// Cursor beforeSubmitPrompt.
|
|
307
|
-
//
|
|
308
|
-
//
|
|
309
|
-
//
|
|
310
|
-
// cursor_version, workspace_roots, user_email, transcript_path }
|
|
311
|
-
// session_id and conversation_id carry the same value; prefer session_id
|
|
312
|
-
// to match every other tool here. `workspace_roots` is load-bearing —
|
|
313
|
-
// Cursor runs the hook with cwd = ~/.cursor, so it is the only reliable
|
|
314
|
-
// pointer back to the assessment directory.
|
|
241
|
+
// Cursor beforeSubmitPrompt. session_id and conversation_id carry the
|
|
242
|
+
// same value; prefer session_id to match every other tool here.
|
|
243
|
+
// `workspace_roots` is load-bearing — Cursor runs hooks from its own
|
|
244
|
+
// config dir, so it is the only reliable pointer to the workspace.
|
|
315
245
|
// Deliberately NOT captured: user_email (PII we have no use for) and
|
|
316
246
|
// transcript_path (points at Cursor's own on-disk agent transcript).
|
|
317
247
|
const prompt = data.prompt || null
|
|
@@ -335,18 +265,13 @@ function extractPrompt(input, toolName) {
|
|
|
335
265
|
}
|
|
336
266
|
}
|
|
337
267
|
|
|
338
|
-
// Cursor requires a JSON verdict on stdout; non-JSON output
|
|
339
|
-
//
|
|
340
|
-
//
|
|
341
|
-
//
|
|
342
|
-
// Emitted FIRST, before any capture work, so a slow filesystem, a missing
|
|
343
|
-
// assessment, or an outright crash can never delay or swallow it — the
|
|
344
|
-
// candidate's agent proceeds regardless of whether we captured anything.
|
|
268
|
+
// Cursor requires a JSON verdict on stdout; non-JSON output breaks its hook
|
|
269
|
+
// runtime. We are pure observation and never block a prompt, so the verdict is
|
|
270
|
+
// a constant — emitted FIRST so nothing downstream can delay or swallow it.
|
|
345
271
|
//
|
|
346
272
|
// Gated on the RAW argv tool, never on `effectiveTool`: Claude Code injects
|
|
347
|
-
// hook stdout into the candidate's prompt as added context, and
|
|
348
|
-
//
|
|
349
|
-
// Keying off the relabel would leak `{"continue":true}` into those prompts.
|
|
273
|
+
// hook stdout into the candidate's prompt as added context, and keying off the
|
|
274
|
+
// relabel would leak `{"continue":true}` into those prompts.
|
|
350
275
|
function emitCursorVerdictIfNeeded() {
|
|
351
276
|
if (tool !== "cursor") return
|
|
352
277
|
try {
|
|
@@ -356,56 +281,32 @@ function emitCursorVerdictIfNeeded() {
|
|
|
356
281
|
}
|
|
357
282
|
}
|
|
358
283
|
|
|
359
|
-
// Cursor merges
|
|
360
|
-
//
|
|
361
|
-
//
|
|
362
|
-
//
|
|
363
|
-
// Cursor
|
|
364
|
-
//
|
|
365
|
-
// Found 2 hook(s) to execute for step: beforeSubmitPrompt
|
|
366
|
-
// Executing hook 1/2 from user config (~/.cursor/hooks.json)
|
|
367
|
-
// Executing hook 2/2 from claude-user config (~/.claude/settings.json)
|
|
368
|
-
//
|
|
369
|
-
// Both invocations got the identical Cursor payload, so a single prompt produced
|
|
370
|
-
// two activity rows with the same text and timestamp, differing only in `tool`
|
|
371
|
-
// (`cursor` and `claude`). That double-counts prompts and misattributes half of
|
|
372
|
-
// them to Claude Code, which was never involved.
|
|
373
|
-
//
|
|
374
|
-
// Dedupe by identity rather than by inspecting the log: the two hooks run
|
|
375
|
-
// concurrently (observed writing at the same millisecond), so any
|
|
376
|
-
// read-then-write check would race. Instead the claude-registered invocation
|
|
377
|
-
// stands down when the payload is visibly Cursor's — `cursor_version` is present
|
|
378
|
-
// on every beforeSubmitPrompt payload and never on a Claude Code one — leaving
|
|
379
|
-
// the dedicated cursor hook as the single writer.
|
|
380
|
-
//
|
|
381
|
-
// Gated on our cursor hook actually being installed. If that install failed
|
|
382
|
-
// (unwritable ~/.cursor, refused config shape) nothing else would capture the
|
|
383
|
-
// prompt, and dropping it would be worse than a duplicate.
|
|
284
|
+
// Cursor merges every config source it finds and translates Claude Code's
|
|
285
|
+
// `UserPromptSubmit` onto its own `beforeSubmitPrompt`, so with both of our
|
|
286
|
+
// configs installed a single Cursor prompt fires this script TWICE with the
|
|
287
|
+
// identical payload — same text, differing only in argv tool. The payload
|
|
288
|
+
// shape is the reliable Cursor signal: `cursor_version` is present on every
|
|
289
|
+
// beforeSubmitPrompt payload and never on a Claude Code one.
|
|
384
290
|
function isCursorPayload(data) {
|
|
385
291
|
if (!data || typeof data !== "object") return false
|
|
386
292
|
return typeof data.cursor_version === "string"
|
|
387
293
|
|| data.hook_event_name === "beforeSubmitPrompt"
|
|
388
294
|
}
|
|
389
295
|
|
|
390
|
-
// Dedupe by CLAIMING the prompt, not by predicting whether the sibling hook
|
|
391
|
-
// succeed
|
|
392
|
-
//
|
|
393
|
-
//
|
|
394
|
-
// the worst case in the other direction is a duplicate row. A hook can be
|
|
395
|
-
// configured and still not run (logger missing, truncated, unreadable, or broken
|
|
396
|
-
// in a way no amount of statting reveals), so there is no check that makes the
|
|
397
|
-
// prediction sound.
|
|
296
|
+
// Dedupe by CLAIMING the prompt, not by predicting whether the sibling hook
|
|
297
|
+
// will succeed — a hook can be configured and still not run, and the failure
|
|
298
|
+
// is asymmetric: a wrong guess loses the prompt, where the worst case here is
|
|
299
|
+
// a duplicate row.
|
|
398
300
|
//
|
|
399
|
-
//
|
|
400
|
-
// `openSync(..., "wx")` is O_CREAT|O_EXCL, so exactly one wins — no
|
|
401
|
-
// window
|
|
402
|
-
//
|
|
403
|
-
// Cursor hook never runs at all, the Claude invocation simply wins uncontested.
|
|
301
|
+
// Both invocations race to create a marker for this specific prompt.
|
|
302
|
+
// `openSync(..., "wx")` is O_CREAT|O_EXCL, so exactly one wins — no
|
|
303
|
+
// read-then-write window (the two invocations run in the same millisecond).
|
|
304
|
+
// If the sibling never runs at all, this invocation wins uncontested.
|
|
404
305
|
//
|
|
405
|
-
// Keyed on `generation_id`, which is per prompt submission
|
|
406
|
-
// which is stable for a whole thread and would collapse every
|
|
407
|
-
// conversation into one.
|
|
408
|
-
// the acceptable failure, a dropped prompt is not.
|
|
306
|
+
// Keyed on `generation_id`, which is per prompt submission — NOT
|
|
307
|
+
// conversation_id, which is stable for a whole thread and would collapse every
|
|
308
|
+
// prompt in a conversation into one. Absent an id we do not dedupe at all: a
|
|
309
|
+
// duplicate is the acceptable failure, a dropped prompt is not.
|
|
409
310
|
const CLAIM_DIR = path.join(os.homedir() || os.tmpdir(), ".litmus", "claims")
|
|
410
311
|
const CLAIM_TTL_MS = 60 * 60 * 1000
|
|
411
312
|
|
|
@@ -446,11 +347,9 @@ async function main() {
|
|
|
446
347
|
const raw = await readStdin()
|
|
447
348
|
if (!raw.trim()) return
|
|
448
349
|
|
|
449
|
-
// Detect Cursor firing Claude Code hooks.
|
|
450
|
-
//
|
|
451
|
-
// integrated terminal
|
|
452
|
-
// spawns us — verified against a real session, where the compat-path event
|
|
453
|
-
// stayed labelled `claude`. The payload shape is the reliable signal.
|
|
350
|
+
// Detect Cursor firing Claude Code hooks. The payload shape is the reliable
|
|
351
|
+
// signal; CURSOR_TRACE_ID only covers Claude Code run inside Cursor's
|
|
352
|
+
// integrated terminal, not Cursor's own hooks service.
|
|
454
353
|
let parsed = null
|
|
455
354
|
try { parsed = JSON.parse(raw) } catch { /* extractPrompt reports the failure */ }
|
|
456
355
|
const cursorShaped = isCursorPayload(parsed)
|
|
@@ -471,7 +370,7 @@ async function main() {
|
|
|
471
370
|
? [explicitAssessmentDir, ...(workspaceRoots || [])]
|
|
472
371
|
: (workspaceRoots || [])
|
|
473
372
|
const litmusDir = findLitmusDir(hintDirs)
|
|
474
|
-
if (!litmusDir) return
|
|
373
|
+
if (!litmusDir) return
|
|
475
374
|
|
|
476
375
|
// Claim as LATE as possible — only once we know we have a prompt and somewhere
|
|
477
376
|
// to put it. Claiming earlier would let an invocation that then bails (no
|
|
@@ -501,9 +400,7 @@ async function main() {
|
|
|
501
400
|
// Non-critical
|
|
502
401
|
}
|
|
503
402
|
|
|
504
|
-
// 2. Upload to the server
|
|
505
|
-
// (bounded by UPLOAD_TIMEOUT_MS) because the process now exits far too fast for
|
|
506
|
-
// an unawaited request to survive — see uploadEvent.
|
|
403
|
+
// 2. Upload to the server. Awaited, bounded — see uploadEvent.
|
|
507
404
|
const config = readConfig(litmusDir)
|
|
508
405
|
await uploadEvent(config, event)
|
|
509
406
|
|