litmus-cli 1.3.9 → 1.3.11
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.map +1 -1
- package/dist/commands/init.js +95 -22
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/submit.js +15 -1
- package/dist/commands/submit.js.map +1 -1
- package/dist/lib/ai-tracking.d.ts +61 -0
- package/dist/lib/ai-tracking.d.ts.map +1 -1
- package/dist/lib/ai-tracking.js +342 -4
- package/dist/lib/ai-tracking.js.map +1 -1
- package/dist/lib/hook-logger.cjs +341 -48
- package/package.json +1 -1
package/dist/lib/ai-tracking.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { existsSync, readFileSync, writeFileSync, renameSync, mkdirSync, copyFileSync, openSync, closeSync, unlinkSync, statSync, } from "fs";
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, renameSync, mkdirSync, copyFileSync, openSync, closeSync, unlinkSync, statSync, constants as fsConstants, } from "fs";
|
|
2
2
|
import path from "path";
|
|
3
3
|
import os from "os";
|
|
4
4
|
const CLAUDE_DIR = path.join(os.homedir(), ".claude");
|
|
5
5
|
const CLAUDE_SETTINGS = path.join(CLAUDE_DIR, "settings.json");
|
|
6
6
|
const CODEX_DIR = path.join(os.homedir(), ".codex");
|
|
7
7
|
const CODEX_HOOKS = path.join(CODEX_DIR, "hooks.json");
|
|
8
|
+
const CURSOR_DIR = path.join(os.homedir(), ".cursor");
|
|
9
|
+
const CURSOR_HOOKS = path.join(CURSOR_DIR, "hooks.json");
|
|
8
10
|
const LITMUS_DIR = path.join(os.homedir(), ".litmus");
|
|
9
11
|
const ACTIVE_ASSESSMENTS = path.join(LITMUS_DIR, "active-assessments.json");
|
|
10
12
|
const REGISTRY_LOCK = path.join(LITMUS_DIR, "registry.lock");
|
|
@@ -12,16 +14,36 @@ export const USER_SCOPE_LOGGER = path.join(LITMUS_DIR, "hook-logger.cjs");
|
|
|
12
14
|
// Two identifiers in case one drifts. Primary: a sentinel field on the hook
|
|
13
15
|
// entry itself. Fallback: the command-string pattern (catches v1.3.6 entries
|
|
14
16
|
// that pre-date the sentinel). Identifying by either means cleanup is robust
|
|
15
|
-
// to format changes by Anthropic/OpenAI and to candidate hand-edits.
|
|
16
|
-
|
|
17
|
+
// to format changes by Anthropic/OpenAI/Anysphere and to candidate hand-edits.
|
|
18
|
+
// The optional quote is required because the logger path is shell-quoted (see
|
|
19
|
+
// quoteForShell): without it this pattern stops matching our OWN entries, and
|
|
20
|
+
// repeat-install idempotency and uninstall both silently stop working.
|
|
21
|
+
// hook-logger.cjs carries the same pattern for its Cursor dedupe check — keep
|
|
22
|
+
// the two in step.
|
|
23
|
+
const OUR_COMMAND_PATTERN = /[/\\]\.litmus[/\\]hook-logger\.cjs["']?\s+(claude|codex|cursor|copilot)\b/;
|
|
17
24
|
const SENTINEL_FIELD = "_litmus";
|
|
25
|
+
/**
|
|
26
|
+
* Shell-quote a path for a hook `command` string.
|
|
27
|
+
*
|
|
28
|
+
* Hook runners hand the command to a shell, so an unquoted path breaks for any
|
|
29
|
+
* candidate whose home directory contains a space (`/Users/Jane Smith/...`) —
|
|
30
|
+
* the shell splits it and node is handed a path that doesn't exist. The logger
|
|
31
|
+
* always lives under the home directory, so this is exactly where it bites.
|
|
32
|
+
* Single quotes are the safest POSIX form; the Windows runners go through
|
|
33
|
+
* cmd/PowerShell, where double quotes are what's understood.
|
|
34
|
+
*/
|
|
35
|
+
function quoteForShell(p) {
|
|
36
|
+
if (process.platform === "win32")
|
|
37
|
+
return `"${p}"`;
|
|
38
|
+
return `'${p.replace(/'/g, `'\\''`)}'`;
|
|
39
|
+
}
|
|
18
40
|
function buildHookEntry(loggerAbsPath, tool) {
|
|
19
41
|
return {
|
|
20
42
|
matcher: "",
|
|
21
43
|
[SENTINEL_FIELD]: 1,
|
|
22
44
|
hooks: [{
|
|
23
45
|
type: "command",
|
|
24
|
-
command: `node ${loggerAbsPath} ${tool}`,
|
|
46
|
+
command: `node ${quoteForShell(loggerAbsPath)} ${tool}`,
|
|
25
47
|
timeout: tool === "claude" ? 5 : 30,
|
|
26
48
|
}],
|
|
27
49
|
};
|
|
@@ -42,6 +64,28 @@ function isOurEntry(entry) {
|
|
|
42
64
|
return typeof cmd === "string" && OUR_COMMAND_PATTERN.test(cmd);
|
|
43
65
|
});
|
|
44
66
|
}
|
|
67
|
+
// Cursor's hooks.json entry is FLAT — `{command, type?, timeout?}` — not the
|
|
68
|
+
// nested `{matcher, hooks:[{command}]}` shape Claude Code and Codex use, so it
|
|
69
|
+
// needs its own builder and its own identifier. Deliberately NO `_litmus`
|
|
70
|
+
// sentinel: Cursor publishes a JSON schema for this file
|
|
71
|
+
// (unpkg.com/cursor-hooks/schema/hooks.schema.json) and may validate it, so an
|
|
72
|
+
// unrecognized key risks invalidating the whole config and taking the
|
|
73
|
+
// candidate's *other* hooks down with it. The command string is a sufficient
|
|
74
|
+
// identifier — it already backs `isOurEntry` as its fallback.
|
|
75
|
+
const CURSOR_HOOK_TIMEOUT_SECONDS = 10;
|
|
76
|
+
function buildCursorHookEntry(loggerAbsPath) {
|
|
77
|
+
return {
|
|
78
|
+
command: `node ${quoteForShell(loggerAbsPath)} cursor`,
|
|
79
|
+
type: "command",
|
|
80
|
+
timeout: CURSOR_HOOK_TIMEOUT_SECONDS,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function isOurCursorEntry(entry) {
|
|
84
|
+
if (!entry || typeof entry !== "object")
|
|
85
|
+
return false;
|
|
86
|
+
const cmd = entry.command;
|
|
87
|
+
return typeof cmd === "string" && OUR_COMMAND_PATTERN.test(cmd);
|
|
88
|
+
}
|
|
45
89
|
// Atomic write: write to a sibling .tmp file then rename. POSIX rename is
|
|
46
90
|
// atomic, so a crash mid-write leaves either the old file or the new file —
|
|
47
91
|
// never a truncated mix. Avoids leaving the candidate's ~/.claude/settings.json
|
|
@@ -269,6 +313,300 @@ export function uninstallUserScopeCodexHook() {
|
|
|
269
313
|
}
|
|
270
314
|
catch { /* unwritable, give up silently */ }
|
|
271
315
|
}
|
|
316
|
+
// ── Cursor hook ───────────────────────────────────────────────────
|
|
317
|
+
// Cursor's native agent runs its model traffic on the candidate's machine, so
|
|
318
|
+
// nothing in our stack sees it — but Cursor ships a first-party hooks API and
|
|
319
|
+
// `~/.cursor/hooks.json` is its user-scope config (cursor.com/docs/agent/hooks).
|
|
320
|
+
// The `beforeSubmitPrompt` event delivers the raw prompt on stdin, which is the
|
|
321
|
+
// only way to capture a native-Cursor candidate's prompts at all.
|
|
322
|
+
//
|
|
323
|
+
// Why this matters beyond "more data": with zero `ai_prompt` events the grader's
|
|
324
|
+
// Process dimension fails its evidence gate and is dropped from the score
|
|
325
|
+
// entirely, so a Cursor candidate is silently graded on a partial rubric.
|
|
326
|
+
//
|
|
327
|
+
// Cursor merges every config source it finds (enterprise / team / project /
|
|
328
|
+
// user) and runs all matching hooks, so ours coexists with the candidate's own.
|
|
329
|
+
/**
|
|
330
|
+
* Install a `beforeSubmitPrompt` hook in `~/.cursor/hooks.json` pointing at the
|
|
331
|
+
* absolute logger path. Idempotent.
|
|
332
|
+
*
|
|
333
|
+
* Pass `hookLoggerSrc` and this will make sure the logger actually exists at
|
|
334
|
+
* `USER_SCOPE_LOGGER` before writing a hook that references it. That copy
|
|
335
|
+
* normally happens in `installUserScopeClaudeHook` — its very first action — so
|
|
336
|
+
* if THAT throws (unwritable HOME) and init falls back to project scope, the
|
|
337
|
+
* Cursor hook would otherwise point at a file that was never created.
|
|
338
|
+
*
|
|
339
|
+
* A dead reference is no longer catastrophic (the logger's `ourCursorHookIsInstalled`
|
|
340
|
+
* resolves the path and refuses to stand down for a hook that cannot run, so the
|
|
341
|
+
* Claude invocation still captures). This just avoids writing one in the first
|
|
342
|
+
* place. Deliberately does NOT throw when the logger is absent and no source is
|
|
343
|
+
* given: Cursor capture failing is worth far less than `litmus init` failing, and
|
|
344
|
+
* the read-side check already prevents the both-paths-lost case.
|
|
345
|
+
*
|
|
346
|
+
* Returns `backedUpMalformed` so the caller can tell the candidate when we had to
|
|
347
|
+
* replace an unparseable config — that write is unavoidable (you cannot merge into
|
|
348
|
+
* JSON you cannot parse) but it must not be silent.
|
|
349
|
+
*
|
|
350
|
+
* Throws on a non-array `beforeSubmitPrompt` (rather than clobbering a config
|
|
351
|
+
* shape we don't understand) and on any filesystem failure, so the caller can
|
|
352
|
+
* treat Cursor tracking as best-effort the way it already does for Codex.
|
|
353
|
+
*/
|
|
354
|
+
export function installUserScopeCursorHook(hookLoggerSrc) {
|
|
355
|
+
// Best effort: create the logger if we were given a source and it's absent.
|
|
356
|
+
if (!existsSync(USER_SCOPE_LOGGER) && hookLoggerSrc && existsSync(hookLoggerSrc)) {
|
|
357
|
+
try {
|
|
358
|
+
mkdirSync(LITMUS_DIR, { recursive: true });
|
|
359
|
+
atomicCopyFileSync(hookLoggerSrc, USER_SCOPE_LOGGER);
|
|
360
|
+
}
|
|
361
|
+
catch { /* the read-side check handles a missing logger */ }
|
|
362
|
+
}
|
|
363
|
+
mkdirSync(CURSOR_DIR, { recursive: true });
|
|
364
|
+
let backedUpMalformed = false;
|
|
365
|
+
let data = {};
|
|
366
|
+
if (existsSync(CURSOR_HOOKS)) {
|
|
367
|
+
try {
|
|
368
|
+
data = JSON.parse(readFileSync(CURSOR_HOOKS, "utf8"));
|
|
369
|
+
}
|
|
370
|
+
catch {
|
|
371
|
+
// Unparseable — possibly a genuinely broken file, possibly one caught
|
|
372
|
+
// mid-write. Either way their hooks can't be preserved, so keep a copy and
|
|
373
|
+
// report it upward rather than replacing their config silently.
|
|
374
|
+
try {
|
|
375
|
+
copyFileSync(CURSOR_HOOKS, CURSOR_HOOKS + ".litmus-backup");
|
|
376
|
+
backedUpMalformed = true;
|
|
377
|
+
}
|
|
378
|
+
catch { /* best effort — if even the backup fails, still don't fail init */ }
|
|
379
|
+
data = {};
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
// `version` is required by Cursor's schema. Preserve whatever the candidate
|
|
383
|
+
// already had — a future schema rev is theirs to own, not ours to downgrade.
|
|
384
|
+
if (data.version === undefined)
|
|
385
|
+
data.version = 1;
|
|
386
|
+
const hooks = (data.hooks ?? (data.hooks = {}));
|
|
387
|
+
const beforeSubmitPrompt = hooks.beforeSubmitPrompt;
|
|
388
|
+
if (beforeSubmitPrompt !== undefined && !Array.isArray(beforeSubmitPrompt)) {
|
|
389
|
+
throw new Error(`~/.cursor/hooks.json has a non-array beforeSubmitPrompt value (${typeof beforeSubmitPrompt}); ` +
|
|
390
|
+
`refusing to overwrite.`);
|
|
391
|
+
}
|
|
392
|
+
const existing = Array.isArray(beforeSubmitPrompt) ? beforeSubmitPrompt : [];
|
|
393
|
+
const others = existing.filter(e => !isOurCursorEntry(e));
|
|
394
|
+
hooks.beforeSubmitPrompt = [...others, buildCursorHookEntry(USER_SCOPE_LOGGER)];
|
|
395
|
+
atomicWriteFileSync(CURSOR_HOOKS, JSON.stringify(data, null, 2) + "\n");
|
|
396
|
+
return { backedUpMalformed };
|
|
397
|
+
}
|
|
398
|
+
export function uninstallUserScopeCursorHook() {
|
|
399
|
+
if (!existsSync(CURSOR_HOOKS))
|
|
400
|
+
return;
|
|
401
|
+
let data;
|
|
402
|
+
try {
|
|
403
|
+
data = JSON.parse(readFileSync(CURSOR_HOOKS, "utf8"));
|
|
404
|
+
}
|
|
405
|
+
catch {
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
const entries = data.hooks?.beforeSubmitPrompt;
|
|
409
|
+
if (!Array.isArray(entries))
|
|
410
|
+
return;
|
|
411
|
+
const filtered = entries.filter(e => !isOurCursorEntry(e));
|
|
412
|
+
if (filtered.length === entries.length)
|
|
413
|
+
return;
|
|
414
|
+
if (filtered.length === 0) {
|
|
415
|
+
delete data.hooks.beforeSubmitPrompt;
|
|
416
|
+
if (Object.keys(data.hooks).length === 0)
|
|
417
|
+
delete data.hooks;
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
data.hooks.beforeSubmitPrompt = filtered;
|
|
421
|
+
}
|
|
422
|
+
try {
|
|
423
|
+
atomicWriteFileSync(CURSOR_HOOKS, JSON.stringify(data, null, 2) + "\n");
|
|
424
|
+
}
|
|
425
|
+
catch { /* unwritable, give up silently */ }
|
|
426
|
+
}
|
|
427
|
+
// ── GitHub Copilot hook ───────────────────────────────────────────
|
|
428
|
+
// One repo-scope file, `<assessment>/.github/hooks/litmus.json`, covers every
|
|
429
|
+
// Copilot surface: the `copilot` CLI binary, the cloud agent, VS Code Copilot
|
|
430
|
+
// Chat, and JetBrains. Verified live on VS Code 1.131 / Copilot Chat 0.59.0 —
|
|
431
|
+
// five agent-mode prompts captured verbatim and correctly labelled.
|
|
432
|
+
//
|
|
433
|
+
// Two things make this the right scope, both verified in VS Code core
|
|
434
|
+
// (workbench.desktop.main.js):
|
|
435
|
+
// - `chat.useHooks` defaults TRUE and its discovery glob is
|
|
436
|
+
// `**/.github/hooks/*.json`, so repo scope works with no candidate setup.
|
|
437
|
+
// - `chat.useClaudeHooks` — which is what would make Copilot read
|
|
438
|
+
// `~/.claude/settings.json` — defaults FALSE. So we do NOT get Copilot
|
|
439
|
+
// capture for free from the Claude hook, and must not assume we do.
|
|
440
|
+
// Both additionally require workspace trust, and both are `restricted` +
|
|
441
|
+
// `disallowConfigurationDefault`, so neither can be flipped from a workspace
|
|
442
|
+
// settings file. Repo scope is the only route that needs nothing from the
|
|
443
|
+
// candidate.
|
|
444
|
+
//
|
|
445
|
+
// Deliberately repo scope ONLY — no `~/.copilot/hooks/`. A fourth write into
|
|
446
|
+
// the candidate's home directory is exactly the over-capture surface ENG-953
|
|
447
|
+
// and ENG-1297 are about, and this file lives inside the assessment where the
|
|
448
|
+
// candidate can see it.
|
|
449
|
+
//
|
|
450
|
+
// Entry shape is the portable one: PascalCase key (Copilot CLI maps it onto
|
|
451
|
+
// `userPromptSubmitted` internally; VS Code uses it natively), `command`
|
|
452
|
+
// rather than `bash`/`powershell`, and `timeout` rather than `timeoutSec` —
|
|
453
|
+
// both aliases since CLI 1.0.2 and the only spelling VS Code understands. No
|
|
454
|
+
// `version` key: optional for the CLI since 1.0.5 and not part of VS Code's
|
|
455
|
+
// format at all. No `_litmus` sentinel, for the same reason Cursor gets none —
|
|
456
|
+
// the config is schema-validated and an unknown key risks rejecting the whole
|
|
457
|
+
// file, taking the candidate's other hooks with it. The command string is the
|
|
458
|
+
// identifier.
|
|
459
|
+
const COPILOT_HOOK_EVENT = "UserPromptSubmit";
|
|
460
|
+
const COPILOT_HOOK_TIMEOUT_SECONDS = 10;
|
|
461
|
+
export function copilotHooksFile(assessmentDir) {
|
|
462
|
+
return path.join(assessmentDir, ".github", "hooks", "litmus.json");
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Copy `file` aside for safekeeping without ever clobbering an earlier rescue.
|
|
466
|
+
*
|
|
467
|
+
* A candidate can leave the config unparseable more than once — hand-edit it,
|
|
468
|
+
* re-run init, break it again, re-run init. An unconditional copy to a fixed
|
|
469
|
+
* `.litmus-backup` path means the SECOND rescue overwrites the first, and the
|
|
470
|
+
* first is the one holding their original pre-Litmus config. So the later, less
|
|
471
|
+
* valuable copy destroys the earlier, more valuable one.
|
|
472
|
+
*
|
|
473
|
+
* `COPYFILE_EXCL` makes each attempt fail rather than overwrite, so this is
|
|
474
|
+
* race-safe against a concurrent init rather than merely existsSync-guarded.
|
|
475
|
+
* Returns the path actually written so the caller can name it accurately.
|
|
476
|
+
*/
|
|
477
|
+
function backupAside(file) {
|
|
478
|
+
for (let i = 0; i < 100; i++) {
|
|
479
|
+
const dest = i === 0 ? `${file}.litmus-backup` : `${file}.litmus-backup-${i}`;
|
|
480
|
+
try {
|
|
481
|
+
copyFileSync(file, dest, fsConstants.COPYFILE_EXCL);
|
|
482
|
+
return dest;
|
|
483
|
+
}
|
|
484
|
+
catch (err) {
|
|
485
|
+
if (err.code !== "EEXIST")
|
|
486
|
+
throw err;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
throw new Error(`${file}: no free .litmus-backup path after 100 attempts`);
|
|
490
|
+
}
|
|
491
|
+
function buildCopilotHookEntry(loggerAbsPath, assessmentDir) {
|
|
492
|
+
// The assessment path is passed EXPLICITLY, not left to be discovered.
|
|
493
|
+
//
|
|
494
|
+
// VS Code Copilot Chat's hook payload has no `cwd` and no workspace roots, so
|
|
495
|
+
// the logger would otherwise fall back to a cwd walk-up (wrong whenever the
|
|
496
|
+
// editor process starts outside the assessment) or the active-assessments
|
|
497
|
+
// registry. The registry is not dependable here: `litmus init` deliberately
|
|
498
|
+
// removes the entry in project-scope mode, which silently dropped every Chat
|
|
499
|
+
// prompt for candidates whose HOME could not take the user-scope Claude hook.
|
|
500
|
+
// A repo-scope hook lives inside the assessment and knows its own path, so
|
|
501
|
+
// there is no reason to make it guess.
|
|
502
|
+
return {
|
|
503
|
+
type: "command",
|
|
504
|
+
command: `node ${quoteForShell(loggerAbsPath)} copilot ${quoteForShell(assessmentDir)}`,
|
|
505
|
+
timeout: COPILOT_HOOK_TIMEOUT_SECONDS,
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
function isOurCopilotEntry(entry) {
|
|
509
|
+
if (!entry || typeof entry !== "object")
|
|
510
|
+
return false;
|
|
511
|
+
const cmd = entry.command;
|
|
512
|
+
return typeof cmd === "string" && OUR_COMMAND_PATTERN.test(cmd);
|
|
513
|
+
}
|
|
514
|
+
/**
|
|
515
|
+
* Install a `UserPromptSubmit` hook in `<assessment>/.github/hooks/litmus.json`.
|
|
516
|
+
* Idempotent.
|
|
517
|
+
*
|
|
518
|
+
* `loggerAbsPath` must be absolute. The shipped version used a RELATIVE path
|
|
519
|
+
* (`node .litmus/hook-logger.cjs copilot`), which only resolves when the hook
|
|
520
|
+
* runner's cwd happens to be the assessment root — and VS Code Copilot Chat
|
|
521
|
+
* sends no cwd at all.
|
|
522
|
+
*
|
|
523
|
+
* Merges rather than overwrites: the previous implementation was an
|
|
524
|
+
* unconditional writeFileSync, so a candidate whose repo already had a
|
|
525
|
+
* `.github/hooks/litmus.json` lost it with no backup. Preserves their other
|
|
526
|
+
* events and any foreign entries under our own event, and keeps a `.litmus-backup`
|
|
527
|
+
* copy when the existing file cannot be parsed.
|
|
528
|
+
*
|
|
529
|
+
* Throws on a non-array value for our event rather than clobbering a shape we
|
|
530
|
+
* don't understand, and on any filesystem failure, so the caller can treat
|
|
531
|
+
* Copilot tracking as best-effort the way it already does for Codex and Cursor.
|
|
532
|
+
*/
|
|
533
|
+
export function installRepoScopeCopilotHook(assessmentDir, loggerAbsPath) {
|
|
534
|
+
if (!path.isAbsolute(loggerAbsPath)) {
|
|
535
|
+
throw new Error(`installRepoScopeCopilotHook needs an absolute logger path, got: ${loggerAbsPath}`);
|
|
536
|
+
}
|
|
537
|
+
const hooksFile = copilotHooksFile(assessmentDir);
|
|
538
|
+
mkdirSync(path.dirname(hooksFile), { recursive: true });
|
|
539
|
+
let backedUpMalformed = false;
|
|
540
|
+
let backupPath;
|
|
541
|
+
let data = {};
|
|
542
|
+
if (existsSync(hooksFile)) {
|
|
543
|
+
try {
|
|
544
|
+
data = JSON.parse(readFileSync(hooksFile, "utf8"));
|
|
545
|
+
}
|
|
546
|
+
catch {
|
|
547
|
+
// Unparseable — we cannot merge into it, so the only options are "preserve
|
|
548
|
+
// a copy and replace" or "leave it alone". Deliberately NOT best-effort:
|
|
549
|
+
// if the copy fails we let it throw rather than replacing a file we could
|
|
550
|
+
// not preserve. Swallowing it would destroy the candidate's config
|
|
551
|
+
// permanently AND leave `backedUpMalformed` false, so init would print no
|
|
552
|
+
// warning — a silent data loss. Throwing costs only Copilot capture for
|
|
553
|
+
// this assessment, since the caller treats this install as best-effort.
|
|
554
|
+
backupPath = backupAside(hooksFile);
|
|
555
|
+
backedUpMalformed = true;
|
|
556
|
+
data = {};
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
if (!data.hooks || typeof data.hooks !== "object" || Array.isArray(data.hooks)) {
|
|
560
|
+
data.hooks = {};
|
|
561
|
+
}
|
|
562
|
+
const hooks = data.hooks;
|
|
563
|
+
const existingEvent = hooks[COPILOT_HOOK_EVENT];
|
|
564
|
+
if (existingEvent !== undefined && !Array.isArray(existingEvent)) {
|
|
565
|
+
throw new Error(`${hooksFile} has a non-array ${COPILOT_HOOK_EVENT} value (${typeof existingEvent}); refusing to overwrite.`);
|
|
566
|
+
}
|
|
567
|
+
const existing = Array.isArray(existingEvent) ? existingEvent : [];
|
|
568
|
+
const others = existing.filter(e => !isOurCopilotEntry(e));
|
|
569
|
+
hooks[COPILOT_HOOK_EVENT] = [...others, buildCopilotHookEntry(loggerAbsPath, assessmentDir)];
|
|
570
|
+
atomicWriteFileSync(hooksFile, JSON.stringify(data, null, 2) + "\n");
|
|
571
|
+
return { backedUpMalformed, backupPath };
|
|
572
|
+
}
|
|
573
|
+
/**
|
|
574
|
+
* Remove our entry from the assessment's Copilot hooks file.
|
|
575
|
+
*
|
|
576
|
+
* Usually moot — `litmus submit` deletes the whole assessment folder — but the
|
|
577
|
+
* walkthrough-handoff exit path does not, and a candidate may have pointed init
|
|
578
|
+
* at a directory they keep.
|
|
579
|
+
*/
|
|
580
|
+
export function uninstallRepoScopeCopilotHook(assessmentDir) {
|
|
581
|
+
const hooksFile = copilotHooksFile(assessmentDir);
|
|
582
|
+
if (!existsSync(hooksFile))
|
|
583
|
+
return;
|
|
584
|
+
let data;
|
|
585
|
+
try {
|
|
586
|
+
data = JSON.parse(readFileSync(hooksFile, "utf8"));
|
|
587
|
+
}
|
|
588
|
+
catch {
|
|
589
|
+
return;
|
|
590
|
+
}
|
|
591
|
+
const entries = data.hooks?.[COPILOT_HOOK_EVENT];
|
|
592
|
+
if (!Array.isArray(entries))
|
|
593
|
+
return;
|
|
594
|
+
const filtered = entries.filter(e => !isOurCopilotEntry(e));
|
|
595
|
+
if (filtered.length === entries.length)
|
|
596
|
+
return;
|
|
597
|
+
if (filtered.length === 0) {
|
|
598
|
+
delete data.hooks[COPILOT_HOOK_EVENT];
|
|
599
|
+
if (Object.keys(data.hooks).length === 0)
|
|
600
|
+
delete data.hooks;
|
|
601
|
+
}
|
|
602
|
+
else {
|
|
603
|
+
data.hooks[COPILOT_HOOK_EVENT] = filtered;
|
|
604
|
+
}
|
|
605
|
+
try {
|
|
606
|
+
atomicWriteFileSync(hooksFile, JSON.stringify(data, null, 2) + "\n");
|
|
607
|
+
}
|
|
608
|
+
catch { /* unwritable, give up silently */ }
|
|
609
|
+
}
|
|
272
610
|
// ── Active-assessments registry ───────────────────────────────────
|
|
273
611
|
// Tracks which assessment directories are currently active so the hook-logger
|
|
274
612
|
// can capture even when Claude Code / Codex / Copilot CLI fire from a cwd
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-tracking.js","sourceRoot":"","sources":["../../src/lib/ai-tracking.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ai-tracking.js","sourceRoot":"","sources":["../../src/lib/ai-tracking.ts"],"names":[],"mappings":"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"}
|