litmus-cli 1.3.6 → 1.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +140 -43
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +97 -17
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/submit.d.ts.map +1 -1
- package/dist/commands/submit.js +31 -5
- package/dist/commands/submit.js.map +1 -1
- package/dist/lib/ai-tracking.d.ts +50 -0
- package/dist/lib/ai-tracking.d.ts.map +1 -0
- package/dist/lib/ai-tracking.js +345 -0
- package/dist/lib/ai-tracking.js.map +1 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +157 -31
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +14 -5
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/errors.js +4 -4
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/extract.d.ts.map +1 -1
- package/dist/lib/extract.js +22 -3
- package/dist/lib/extract.js.map +1 -1
- package/dist/lib/format-time.d.ts +28 -0
- package/dist/lib/format-time.d.ts.map +1 -0
- package/dist/lib/format-time.js +68 -0
- package/dist/lib/format-time.js.map +1 -0
- package/dist/lib/hook-logger.cjs +50 -16
- package/dist/lib/tracker.d.ts.map +1 -1
- package/dist/lib/tracker.js +47 -16
- package/dist/lib/tracker.js.map +1 -1
- package/dist/lib/watcher.js +39 -31
- package/dist/lib/watcher.js.map +1 -1
- package/dist/lib/zip.d.ts.map +1 -1
- package/dist/lib/zip.js +35 -8
- package/dist/lib/zip.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -60,6 +60,27 @@ Use `litmus submit --yes` to skip the confirmation prompt.
|
|
|
60
60
|
|
|
61
61
|
Your git commit history and file activity are included in the submission and used as part of the evaluation. Frequent, meaningful commits are recommended.
|
|
62
62
|
|
|
63
|
+
## What gets sent to Litmus during your session
|
|
64
|
+
|
|
65
|
+
While you're working, the background tracker sends activity data to Litmus
|
|
66
|
+
in addition to the submission ZIP you upload at the end:
|
|
67
|
+
|
|
68
|
+
- File-change events, git commits, and AI-tool usage detected on your machine
|
|
69
|
+
(process list, network endpoints) — every few seconds while you work.
|
|
70
|
+
- Captured AI prompts from Claude Code, Codex CLI, and Copilot CLI when those
|
|
71
|
+
tools fire `UserPromptSubmit` hooks. Copilot Chat (VS Code side panel) is
|
|
72
|
+
not hookable and is not captured.
|
|
73
|
+
- A periodic codebase snapshot (every five minutes) so the optional
|
|
74
|
+
live-interview agent has up-to-date context. Snapshots are capped at 2 MB
|
|
75
|
+
total and skip binaries, dotfiles (including `.env`), lockfiles,
|
|
76
|
+
`node_modules`/build directories, and obvious credential filenames
|
|
77
|
+
(`secrets.*`, `credentials.*`, `*.pem`, `*.key`, `id_rsa`, etc.). If you
|
|
78
|
+
have sensitive material in a non-standard filename, move it out of the
|
|
79
|
+
assessment directory before working.
|
|
80
|
+
|
|
81
|
+
You can confirm what's installed and what's being captured at any point with
|
|
82
|
+
`litmus status`.
|
|
83
|
+
|
|
63
84
|
## Requirements
|
|
64
85
|
|
|
65
86
|
- Node.js 18+
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
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,CAmP1D"}
|
package/dist/commands/init.js
CHANGED
|
@@ -12,6 +12,8 @@ import { startTracker } from "../lib/tracker.js";
|
|
|
12
12
|
import { detectProject } from "../lib/detect-project.js";
|
|
13
13
|
import { fatal, success, info, warn, setErrorContext, reportSuccess, FALLBACK_URL } from "../lib/errors.js";
|
|
14
14
|
import { resolveApiBaseFromToken } from "../lib/env-hosts.js";
|
|
15
|
+
import { formatDeadlinePT } from "../lib/format-time.js";
|
|
16
|
+
import { installUserScopeClaudeHook, installUserScopeCodexHook, addActiveAssessment } from "../lib/ai-tracking.js";
|
|
15
17
|
import { execSync } from "child_process";
|
|
16
18
|
import { fileURLToPath } from "url";
|
|
17
19
|
export async function runInit(token) {
|
|
@@ -44,7 +46,7 @@ export async function runInit(token) {
|
|
|
44
46
|
if (metadata.deadline) {
|
|
45
47
|
const deadline = new Date(metadata.deadline);
|
|
46
48
|
const hoursLeft = Math.max(0, Math.floor((deadline.getTime() - Date.now()) / (1000 * 60 * 60)));
|
|
47
|
-
const deadlineStr = deadline
|
|
49
|
+
const deadlineStr = formatDeadlinePT(deadline);
|
|
48
50
|
if (hoursLeft < 24) {
|
|
49
51
|
warn(`Deadline in ${hoursLeft} hours (${deadlineStr})`);
|
|
50
52
|
}
|
|
@@ -145,13 +147,29 @@ export async function runInit(token) {
|
|
|
145
147
|
// tracking setup failed" to the reviewer instead of just reporting
|
|
146
148
|
// zero prompts.
|
|
147
149
|
try {
|
|
148
|
-
setupAiTracking(targetDir);
|
|
150
|
+
const result = setupAiTracking(targetDir);
|
|
151
|
+
if (result.mode === "project") {
|
|
152
|
+
// User-scope install failed (sandboxed HOME, permissions, etc.). The
|
|
153
|
+
// project-scope file still fires on its own — per current Claude Code
|
|
154
|
+
// docs there's no approval gate at either scope — but capture is gated
|
|
155
|
+
// on the candidate's Claude Code cwd being inside the assessment dir,
|
|
156
|
+
// since the project-scope hook can't use the active-assessments
|
|
157
|
+
// registry fallback (it references a relative logger path).
|
|
158
|
+
console.log();
|
|
159
|
+
console.log(chalk.yellow("AI prompt tracking installed at project scope (user-scope install failed)."));
|
|
160
|
+
console.log(chalk.dim(" Capture only works when Claude Code is run from inside the assessment directory."));
|
|
161
|
+
}
|
|
162
|
+
if (result.codexInstalled) {
|
|
163
|
+
// Codex enforces a one-time trust prompt the first time the hook fires.
|
|
164
|
+
// Surface it so the candidate isn't surprised.
|
|
165
|
+
console.log(chalk.dim(" If you use Codex, accept its one-time trust prompt on first prompt to enable capture."));
|
|
166
|
+
}
|
|
149
167
|
}
|
|
150
168
|
catch (err) {
|
|
151
169
|
const message = err instanceof Error ? err.message : String(err);
|
|
152
170
|
console.log();
|
|
153
|
-
console.log(chalk.yellow("
|
|
154
|
-
console.log(chalk.dim("
|
|
171
|
+
console.log(chalk.yellow("AI prompt tracking setup failed:"), message);
|
|
172
|
+
console.log(chalk.dim(" Assessment will still work, but Claude Code / Copilot CLI prompts won't be captured."));
|
|
155
173
|
try {
|
|
156
174
|
const litmusDir = path.join(targetDir, ".litmus");
|
|
157
175
|
mkdirSync(litmusDir, { recursive: true });
|
|
@@ -219,65 +237,70 @@ export async function runInit(token) {
|
|
|
219
237
|
console.log();
|
|
220
238
|
if (metadata.deadline) {
|
|
221
239
|
const deadline = new Date(metadata.deadline);
|
|
222
|
-
console.log(chalk.dim(` Deadline: ${deadline
|
|
240
|
+
console.log(chalk.dim(` Deadline: ${formatDeadlinePT(deadline)}`));
|
|
223
241
|
console.log();
|
|
224
242
|
}
|
|
225
243
|
}
|
|
226
244
|
// ── AI prompt tracking setup ────────────────────────────────────
|
|
227
245
|
/**
|
|
228
|
-
* Set up AI prompt tracking for Claude Code,
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
* -
|
|
246
|
+
* Set up AI prompt tracking for Claude Code, OpenAI Codex CLI, and GitHub
|
|
247
|
+
* Copilot CLI.
|
|
248
|
+
*
|
|
249
|
+
* Claude Code (ENG-771): prefer a user-scope hook in ~/.claude/settings.json so
|
|
250
|
+
* the logger reference is an absolute path. With an absolute logger path, the
|
|
251
|
+
* hook can use the active-assessments registry as a fallback when the
|
|
252
|
+
* candidate's Claude Code cwd is outside the assessment dir (the actual
|
|
253
|
+
* silent-capture bug). If user-scope install fails (sandboxed HOME, etc.) we
|
|
254
|
+
* fall back to a project-scope `.claude/settings.local.json` with a relative
|
|
255
|
+
* logger path — fires fine but only captures when Claude Code's cwd happens to
|
|
256
|
+
* be inside the assessment.
|
|
232
257
|
*
|
|
233
|
-
*
|
|
258
|
+
* Returns the install mode + Codex install status so the caller can surface the
|
|
259
|
+
* right follow-up message.
|
|
234
260
|
*/
|
|
235
261
|
function setupAiTracking(targetDir) {
|
|
236
262
|
const litmusDir = path.join(targetDir, ".litmus");
|
|
237
263
|
mkdirSync(litmusDir, { recursive: true });
|
|
238
|
-
// Copy hook-logger.cjs into .litmus/ (gitignored, included in submission ZIP)
|
|
239
264
|
const __filename = fileURLToPath(import.meta.url);
|
|
240
265
|
const __dirname = path.dirname(__filename);
|
|
241
266
|
const hookLoggerSrc = path.join(__dirname, "..", "lib", "hook-logger.cjs");
|
|
242
|
-
|
|
267
|
+
// Always keep a local copy of the logger inside .litmus/. It's part of the
|
|
268
|
+
// submission ZIP and is the path the project-scope fallback references.
|
|
243
269
|
if (existsSync(hookLoggerSrc)) {
|
|
244
|
-
copyFileSync(hookLoggerSrc,
|
|
270
|
+
copyFileSync(hookLoggerSrc, path.join(litmusDir, "hook-logger.cjs"));
|
|
245
271
|
}
|
|
246
|
-
// Claude Code: .
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
matcher: "",
|
|
253
|
-
hooks: [{
|
|
254
|
-
type: "command",
|
|
255
|
-
command: "node .litmus/hook-logger.cjs claude",
|
|
256
|
-
timeout: 5,
|
|
257
|
-
}],
|
|
258
|
-
}],
|
|
259
|
-
};
|
|
260
|
-
if (existsSync(claudeSettingsPath)) {
|
|
261
|
-
try {
|
|
262
|
-
const existing = JSON.parse(readFileSync(claudeSettingsPath, "utf8"));
|
|
263
|
-
existing.hooks = { ...existing.hooks, ...claudeHooks };
|
|
264
|
-
writeFileSync(claudeSettingsPath, JSON.stringify(existing, null, 2) + "\n");
|
|
265
|
-
}
|
|
266
|
-
catch {
|
|
267
|
-
// Malformed JSON — overwrite
|
|
268
|
-
writeFileSync(claudeSettingsPath, JSON.stringify({ hooks: claudeHooks }, null, 2) + "\n");
|
|
269
|
-
}
|
|
272
|
+
// Claude Code: prefer user-scope.
|
|
273
|
+
let mode = "user";
|
|
274
|
+
try {
|
|
275
|
+
if (!existsSync(hookLoggerSrc))
|
|
276
|
+
throw new Error("hook-logger.cjs missing from CLI build");
|
|
277
|
+
installUserScopeClaudeHook(hookLoggerSrc);
|
|
270
278
|
}
|
|
271
|
-
|
|
272
|
-
|
|
279
|
+
catch {
|
|
280
|
+
mode = "project";
|
|
281
|
+
writeProjectScopeClaudeHook(targetDir, litmusDir);
|
|
273
282
|
}
|
|
274
|
-
//
|
|
283
|
+
// Codex CLI: install user-scope hook at ~/.codex/hooks.json. Per the openai/codex
|
|
284
|
+
// hooks reference, this is the canonical location and event name is `UserPromptSubmit`.
|
|
285
|
+
// Codex enforces a one-time trust prompt on first use — out of our hands, surfaced
|
|
286
|
+
// by Codex itself. Failure here is non-fatal: candidates not using Codex are unaffected.
|
|
287
|
+
let codexInstalled = false;
|
|
288
|
+
try {
|
|
289
|
+
installUserScopeCodexHook();
|
|
290
|
+
codexInstalled = true;
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
// Couldn't write ~/.codex/hooks.json — skip silently.
|
|
294
|
+
}
|
|
295
|
+
// GitHub Copilot CLI: .github/hooks/litmus.json (separate file — won't conflict).
|
|
296
|
+
// ENG-771 Bug 2: event name is `userPromptSubmit`, not `userPromptSubmitted`.
|
|
297
|
+
// The previous typo meant the Copilot CLI never recognized the hook.
|
|
275
298
|
const ghHooksDir = path.join(targetDir, ".github", "hooks");
|
|
276
299
|
mkdirSync(ghHooksDir, { recursive: true });
|
|
277
300
|
writeFileSync(path.join(ghHooksDir, "litmus.json"), JSON.stringify({
|
|
278
301
|
version: 1,
|
|
279
302
|
hooks: {
|
|
280
|
-
|
|
303
|
+
userPromptSubmit: [{
|
|
281
304
|
type: "command",
|
|
282
305
|
bash: "node .litmus/hook-logger.cjs copilot",
|
|
283
306
|
powershell: "node .litmus/hook-logger.cjs copilot",
|
|
@@ -285,7 +308,81 @@ function setupAiTracking(targetDir) {
|
|
|
285
308
|
}],
|
|
286
309
|
},
|
|
287
310
|
}, null, 2) + "\n");
|
|
288
|
-
//
|
|
289
|
-
//
|
|
311
|
+
// Register this assessment in ~/.litmus/active-assessments.json so the
|
|
312
|
+
// hook-logger can fall back to it when cwd walk-up fails (e.g. VS Code
|
|
313
|
+
// workspace opened above the assessment dir). Only meaningful in user-scope
|
|
314
|
+
// mode — the project-scope fallback writes a relative-path command that
|
|
315
|
+
// can't consult the registry. Skipping in project-scope mode prevents a
|
|
316
|
+
// dead entry that could mis-route a concurrent assessment's prompts.
|
|
317
|
+
if (mode === "user") {
|
|
318
|
+
try {
|
|
319
|
+
addActiveAssessment(targetDir);
|
|
320
|
+
}
|
|
321
|
+
catch { /* registry write failed, fall back to cwd-only capture */ }
|
|
322
|
+
}
|
|
323
|
+
return { mode, codexInstalled };
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Project-scope fallback for Claude Code: writes .claude/settings.local.json
|
|
327
|
+
* referencing the absolute path to the in-assessment .litmus/hook-logger.cjs.
|
|
328
|
+
* Only used when the user-scope install in installUserScopeClaudeHook fails.
|
|
329
|
+
*
|
|
330
|
+
* The command uses the absolute logger path (resolved at init time) rather
|
|
331
|
+
* than a relative `node .litmus/hook-logger.cjs` so it works regardless of
|
|
332
|
+
* Claude Code's cwd inside the assessment. Capture still only fires when
|
|
333
|
+
* Claude Code's project root sees `.claude/settings.local.json`, but the
|
|
334
|
+
* relative-path failure mode (Claude Code's cwd in a subdir, `Cannot find
|
|
335
|
+
* module`) is gone.
|
|
336
|
+
*
|
|
337
|
+
* Preserves any pre-existing UserPromptSubmit entries the candidate had,
|
|
338
|
+
* the same way the user-scope install path does, instead of shallow-merging
|
|
339
|
+
* and clobbering them.
|
|
340
|
+
*/
|
|
341
|
+
function writeProjectScopeClaudeHook(targetDir, litmusDir) {
|
|
342
|
+
const claudeDir = path.join(targetDir, ".claude");
|
|
343
|
+
mkdirSync(claudeDir, { recursive: true });
|
|
344
|
+
const claudeSettingsPath = path.join(claudeDir, "settings.local.json");
|
|
345
|
+
const loggerAbsPath = path.join(litmusDir, "hook-logger.cjs");
|
|
346
|
+
const ourEntry = {
|
|
347
|
+
matcher: "",
|
|
348
|
+
_litmus: 1,
|
|
349
|
+
hooks: [{
|
|
350
|
+
type: "command",
|
|
351
|
+
command: `node ${loggerAbsPath} claude`,
|
|
352
|
+
timeout: 5,
|
|
353
|
+
}],
|
|
354
|
+
};
|
|
355
|
+
const isOurs = (e) => {
|
|
356
|
+
if (!e || typeof e !== "object")
|
|
357
|
+
return false;
|
|
358
|
+
const obj = e;
|
|
359
|
+
if (obj._litmus)
|
|
360
|
+
return true;
|
|
361
|
+
const hooks = obj.hooks;
|
|
362
|
+
if (!Array.isArray(hooks))
|
|
363
|
+
return false;
|
|
364
|
+
return hooks.some((h) => {
|
|
365
|
+
const cmd = h?.command;
|
|
366
|
+
return typeof cmd === "string" && /[/\\]\.litmus[/\\]hook-logger\.cjs\s+claude\b/.test(cmd);
|
|
367
|
+
});
|
|
368
|
+
};
|
|
369
|
+
let data = {};
|
|
370
|
+
if (existsSync(claudeSettingsPath)) {
|
|
371
|
+
try {
|
|
372
|
+
data = JSON.parse(readFileSync(claudeSettingsPath, "utf8"));
|
|
373
|
+
}
|
|
374
|
+
catch {
|
|
375
|
+
try {
|
|
376
|
+
copyFileSync(claudeSettingsPath, claudeSettingsPath + ".litmus-backup");
|
|
377
|
+
}
|
|
378
|
+
catch { /* best effort */ }
|
|
379
|
+
data = {};
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
const hooks = (data.hooks ?? (data.hooks = {}));
|
|
383
|
+
const existing = Array.isArray(hooks.UserPromptSubmit) ? hooks.UserPromptSubmit : [];
|
|
384
|
+
const others = existing.filter(e => !isOurs(e));
|
|
385
|
+
hooks.UserPromptSubmit = [...others, ourEntry];
|
|
386
|
+
writeFileSync(claudeSettingsPath, JSON.stringify(data, null, 2) + "\n");
|
|
290
387
|
}
|
|
291
388
|
//# sourceMappingURL=init.js.map
|
|
@@ -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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AASA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA0I/C"}
|
package/dist/commands/status.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { existsSync, readFileSync, statSync, readdirSync } from "fs";
|
|
2
2
|
import path from "path";
|
|
3
|
+
import os from "os";
|
|
3
4
|
import chalk from "chalk";
|
|
4
5
|
import { readConfig, findProjectRoot, getEffectiveDeadline } from "../lib/config.js";
|
|
5
6
|
import { fatal, info, warn, setErrorContext } from "../lib/errors.js";
|
|
7
|
+
import { formatDeadlinePT, formatLocalDateTime } from "../lib/format-time.js";
|
|
6
8
|
import { execSync } from "child_process";
|
|
7
9
|
export async function runStatus() {
|
|
8
10
|
const config = await readConfig();
|
|
@@ -25,31 +27,30 @@ export async function runStatus() {
|
|
|
25
27
|
const elapsed = Date.now() - startedAt.getTime();
|
|
26
28
|
const elapsedHours = Math.floor(elapsed / (1000 * 60 * 60));
|
|
27
29
|
const elapsedMins = Math.floor((elapsed % (1000 * 60 * 60)) / (1000 * 60));
|
|
28
|
-
info(` Started: ${startedAt
|
|
29
|
-
//
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
info(` Started: ${formatLocalDateTime(startedAt)} (${elapsedHours}h ${elapsedMins}m ago)`);
|
|
31
|
+
// Time remaining: surface the effective deadline (the binding cutoff)
|
|
32
|
+
// first, so a candidate with a short time-limit on a long-window assessment
|
|
33
|
+
// doesn't read the wider window's number and assume they're safe. Show
|
|
34
|
+
// individual deadlines as context underneath.
|
|
35
|
+
const effectiveCutoff = getEffectiveDeadline(config);
|
|
36
|
+
if (effectiveCutoff !== null) {
|
|
37
|
+
const remaining = effectiveCutoff - Date.now();
|
|
38
|
+
const cutoffDate = new Date(effectiveCutoff);
|
|
33
39
|
if (remaining <= 0) {
|
|
34
|
-
console.log(chalk.red(`
|
|
40
|
+
console.log(chalk.red(` Time remaining: PASSED (${formatDeadlinePT(cutoffDate)})`));
|
|
35
41
|
}
|
|
36
42
|
else {
|
|
37
43
|
const remHours = Math.floor(remaining / (1000 * 60 * 60));
|
|
38
44
|
const remMins = Math.floor((remaining % (1000 * 60 * 60)) / (1000 * 60));
|
|
39
|
-
info(`
|
|
45
|
+
info(` Time remaining: ${remHours}h ${remMins}m (cutoff ${formatDeadlinePT(cutoffDate)})`);
|
|
40
46
|
}
|
|
41
47
|
}
|
|
48
|
+
if (config.deadline) {
|
|
49
|
+
const deadline = new Date(config.deadline);
|
|
50
|
+
console.log(chalk.dim(` Deadline: ${formatDeadlinePT(deadline)}`));
|
|
51
|
+
}
|
|
42
52
|
if (config.timeLimit) {
|
|
43
|
-
|
|
44
|
-
const used = Date.now() - startedAt.getTime();
|
|
45
|
-
const remaining = timeLimitMs - used;
|
|
46
|
-
if (remaining <= 0) {
|
|
47
|
-
console.log(chalk.red(` Time limit: EXCEEDED (${config.timeLimit} minutes)`));
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
const remMins = Math.floor(remaining / (1000 * 60));
|
|
51
|
-
info(` Time limit: ${config.timeLimit} min (${remMins} min remaining)`);
|
|
52
|
-
}
|
|
53
|
+
console.log(chalk.dim(` Time limit: ${config.timeLimit} min from start`));
|
|
53
54
|
}
|
|
54
55
|
console.log();
|
|
55
56
|
// Git stats
|
|
@@ -85,11 +86,37 @@ export async function runStatus() {
|
|
|
85
86
|
info(` Tracker: ${trackerRunning ? "running" : "not running"}`);
|
|
86
87
|
// Activity log stats
|
|
87
88
|
const activityPath = path.join(projectRoot, ".litmus", "activity.jsonl");
|
|
89
|
+
let aiPromptCount = 0;
|
|
88
90
|
if (existsSync(activityPath)) {
|
|
89
91
|
try {
|
|
90
92
|
const content = readFileSync(activityPath, "utf8");
|
|
91
93
|
const lines = content.split("\n").filter(l => l.trim());
|
|
92
94
|
info(` Activity events: ${lines.length}`);
|
|
95
|
+
for (const line of lines) {
|
|
96
|
+
try {
|
|
97
|
+
const event = JSON.parse(line);
|
|
98
|
+
if (event.type === "ai_prompt")
|
|
99
|
+
aiPromptCount++;
|
|
100
|
+
}
|
|
101
|
+
catch { /* ignore malformed lines */ }
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch { /* ignore */ }
|
|
105
|
+
}
|
|
106
|
+
// AI prompt tracking status — the natural debug surface for "why isn't my
|
|
107
|
+
// Claude usage being captured?". Reports: whether the user-scope hook is
|
|
108
|
+
// installed in ~/.claude/settings.json, whether this assessment is in the
|
|
109
|
+
// ~/.litmus/active-assessments.json registry, and the count of ai_prompt
|
|
110
|
+
// events written by the hook so far.
|
|
111
|
+
const aiTrackingMode = detectAiTrackingMode(projectRoot);
|
|
112
|
+
const registryStatus = detectActiveAssessmentStatus(projectRoot);
|
|
113
|
+
info(` AI prompt tracking: ${aiTrackingMode} (${registryStatus})`);
|
|
114
|
+
info(` AI prompts captured: ${aiPromptCount}`);
|
|
115
|
+
const setupFailedPath = path.join(projectRoot, ".litmus", "setup_failed.json");
|
|
116
|
+
if (existsSync(setupFailedPath)) {
|
|
117
|
+
try {
|
|
118
|
+
const marker = JSON.parse(readFileSync(setupFailedPath, "utf8"));
|
|
119
|
+
warn(` AI tracking setup failed at init: ${marker.error ?? "unknown"}`);
|
|
93
120
|
}
|
|
94
121
|
catch { /* ignore */ }
|
|
95
122
|
}
|
|
@@ -108,6 +135,59 @@ export async function runStatus() {
|
|
|
108
135
|
console.log(` ${chalk.cyan("litmus submit")}`);
|
|
109
136
|
console.log();
|
|
110
137
|
}
|
|
138
|
+
function detectAiTrackingMode(projectRoot) {
|
|
139
|
+
// User-scope: ~/.claude/settings.json has an entry pointing at our absolute
|
|
140
|
+
// logger path. Project-scope fallback: .claude/settings.local.json inside
|
|
141
|
+
// the assessment dir has the same shape with a relative or absolute path.
|
|
142
|
+
const userSettings = path.join(os.homedir(), ".claude", "settings.json");
|
|
143
|
+
const projectSettings = path.join(projectRoot, ".claude", "settings.local.json");
|
|
144
|
+
const PATTERN = /[/\\]\.litmus[/\\]hook-logger\.cjs\s+(claude|codex)\b/;
|
|
145
|
+
const fileHasOurHook = (file) => {
|
|
146
|
+
if (!existsSync(file))
|
|
147
|
+
return false;
|
|
148
|
+
try {
|
|
149
|
+
const data = JSON.parse(readFileSync(file, "utf8"));
|
|
150
|
+
const entries = data?.hooks?.UserPromptSubmit;
|
|
151
|
+
if (!Array.isArray(entries))
|
|
152
|
+
return false;
|
|
153
|
+
return entries.some((e) => {
|
|
154
|
+
if (!e || typeof e !== "object")
|
|
155
|
+
return false;
|
|
156
|
+
const obj = e;
|
|
157
|
+
if (obj._litmus)
|
|
158
|
+
return true;
|
|
159
|
+
const hooks = obj.hooks;
|
|
160
|
+
if (!Array.isArray(hooks))
|
|
161
|
+
return false;
|
|
162
|
+
return hooks.some((h) => {
|
|
163
|
+
const cmd = h?.command;
|
|
164
|
+
return typeof cmd === "string" && PATTERN.test(cmd);
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
if (fileHasOurHook(userSettings))
|
|
173
|
+
return "user-scope";
|
|
174
|
+
if (fileHasOurHook(projectSettings))
|
|
175
|
+
return "project-scope";
|
|
176
|
+
return "not installed";
|
|
177
|
+
}
|
|
178
|
+
function detectActiveAssessmentStatus(projectRoot) {
|
|
179
|
+
const registry = path.join(os.homedir(), ".litmus", "active-assessments.json");
|
|
180
|
+
if (!existsSync(registry))
|
|
181
|
+
return "not in active-assessments registry";
|
|
182
|
+
try {
|
|
183
|
+
const list = JSON.parse(readFileSync(registry, "utf8"));
|
|
184
|
+
if (Array.isArray(list) && list.includes(projectRoot)) {
|
|
185
|
+
return "registered for cwd-fallback capture";
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch { /* ignore malformed registry */ }
|
|
189
|
+
return "not in active-assessments registry";
|
|
190
|
+
}
|
|
111
191
|
function estimateSubmissionSize(projectRoot) {
|
|
112
192
|
let fileCount = 0;
|
|
113
193
|
let totalBytes = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,IAAI,CAAA;AACpE,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACpF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IAEjC,IAAI,MAAM,EAAE,CAAC;QACX,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAA;IACjJ,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CACH,+CAA+C,EAC/C,0FAA0F,CAC3F,CAAA;IACH,CAAC;IAED,MAAM,WAAW,GAAG,eAAe,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IAE7C,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;IACrD,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,iBAAiB;IACjB,IAAI,CAAC,gBAAgB,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,cAAc,GAAG,CAAC,CAAA;IACvE,IAAI,CAAC,aAAa,UAAU,GAAG,CAAC,CAAA;IAEhC,0BAA0B;IAC1B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAA;IAChD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;IAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAA;IAC1E,IAAI,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../src/commands/submit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../src/commands/submit.ts"],"names":[],"mappings":"AAcA,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4RtE"}
|
package/dist/commands/submit.js
CHANGED
|
@@ -9,6 +9,8 @@ import { readConfig, findProjectRoot, getEffectiveDeadline } from "../lib/config
|
|
|
9
9
|
import { submitZip, ServerError } from "../lib/api.js";
|
|
10
10
|
import { createSubmissionZip } from "../lib/zip.js";
|
|
11
11
|
import { fatal, success, warn, info, setErrorContext, reportSuccess } from "../lib/errors.js";
|
|
12
|
+
import { formatDeadlinePT } from "../lib/format-time.js";
|
|
13
|
+
import { uninstallUserScopeClaudeHook, uninstallUserScopeCodexHook, removeActiveAssessment } from "../lib/ai-tracking.js";
|
|
12
14
|
export async function runSubmit(opts) {
|
|
13
15
|
// Step 1: Read config
|
|
14
16
|
const config = await readConfig();
|
|
@@ -25,7 +27,7 @@ export async function runSubmit(opts) {
|
|
|
25
27
|
// 5-minute grace window: covers auto-submit process spawn overhead and
|
|
26
28
|
// gives candidates time to run `litmus submit` manually if auto-submit failed.
|
|
27
29
|
if (now.getTime() > effectiveDeadline + 5 * 60000) {
|
|
28
|
-
fatal(`The submission deadline passed at ${new Date(effectiveDeadline)
|
|
30
|
+
fatal(`The submission deadline passed at ${formatDeadlinePT(new Date(effectiveDeadline))}.`, `Contact support@litmushiring.com if you believe this is a mistake.`, { severity: "warning" });
|
|
29
31
|
}
|
|
30
32
|
}
|
|
31
33
|
// Step 3: Find the project root (where .litmus/config.json lives)
|
|
@@ -40,7 +42,7 @@ export async function runSubmit(opts) {
|
|
|
40
42
|
catch (err) {
|
|
41
43
|
zipSpinner.fail("Failed to create submission archive");
|
|
42
44
|
const msg = err instanceof Error ? err.message : String(err);
|
|
43
|
-
fatal(msg, `Contact
|
|
45
|
+
fatal(msg, `Contact support@litmushiring.com for additional assistance.`);
|
|
44
46
|
}
|
|
45
47
|
const { zipPath, fileCount, uncompressedBytes, zipBytes, topDirs } = zipResult;
|
|
46
48
|
// Size guard: warn if ZIP is unexpectedly large
|
|
@@ -81,7 +83,7 @@ export async function runSubmit(opts) {
|
|
|
81
83
|
// still blocked client-side past the time-limit; this just makes the
|
|
82
84
|
// displayed bounds match status / init.
|
|
83
85
|
if (config.deadline) {
|
|
84
|
-
info(` Deadline: ${new Date(config.deadline)
|
|
86
|
+
info(` Deadline: ${formatDeadlinePT(new Date(config.deadline))}`);
|
|
85
87
|
}
|
|
86
88
|
if (config.timeLimit && config.startedAt) {
|
|
87
89
|
const timeLimitDeadlineMs = new Date(config.startedAt).getTime() + config.timeLimit * 60 * 1000;
|
|
@@ -184,8 +186,14 @@ export async function runSubmit(opts) {
|
|
|
184
186
|
// terminal-side tracker has nothing left to observe. Signal it so it
|
|
185
187
|
// doesn't keep heartbeating until the candidate manually kills the
|
|
186
188
|
// session. Folder stays per ENG-719: the auto-submit cron may not have
|
|
187
|
-
// run yet, so we don't assume the upload is durably saved.
|
|
189
|
+
// run yet, so we don't assume the upload is durably saved. The
|
|
190
|
+
// active-assessments registry entry and user-scope hooks ARE cleaned
|
|
191
|
+
// up regardless — leaving them would (a) leak a stale entry pointing
|
|
192
|
+
// at a folder the candidate may later delete themselves, and (b) keep
|
|
193
|
+
// the user-scope Claude/Codex hook firing on any cwd inside the folder
|
|
194
|
+
// for the rest of the candidate's machine's lifetime.
|
|
188
195
|
stopTracker(projectRoot, config.token);
|
|
196
|
+
releaseAiTrackingForAssessment(projectRoot);
|
|
189
197
|
reportSuccess("submit_walkthrough_handoff", rawError);
|
|
190
198
|
return;
|
|
191
199
|
}
|
|
@@ -238,6 +246,11 @@ export async function runSubmit(opts) {
|
|
|
238
246
|
// active so any work in the meantime is still observed).
|
|
239
247
|
if (isTerminalCode) {
|
|
240
248
|
stopTracker(projectRoot, config.token);
|
|
249
|
+
// Assessment is over — release the AI-tracking registry entry and
|
|
250
|
+
// gate-uninstall the user-scope hooks. Folder stays so the candidate
|
|
251
|
+
// can recover their code locally, but the hooks shouldn't keep firing
|
|
252
|
+
// against a frozen assessment dir indefinitely.
|
|
253
|
+
releaseAiTrackingForAssessment(projectRoot);
|
|
241
254
|
}
|
|
242
255
|
// Include server response details and ZIP diagnostics in the error report
|
|
243
256
|
const zipDiag = `ZIP: ${zipSizeMb} MB (${fileCount} files, ${(uncompressedBytes / (1024 * 1024)).toFixed(1)} MB uncompressed)\nTop dirs: ${topDirs.slice(0, 5).map(d => `${d.dir} (${(d.bytes / (1024 * 1024)).toFixed(1)} MB)`).join(", ")}`;
|
|
@@ -282,7 +295,7 @@ function stopTracker(projectRoot, token) {
|
|
|
282
295
|
// Write a sentinel file (.litmus/shutdown) as the primary cross-platform
|
|
283
296
|
// mechanism — the watcher polls for it and flushes gracefully.
|
|
284
297
|
// On Unix, SIGTERM is also sent as an accelerator (instant delivery vs 1s poll).
|
|
285
|
-
// NOTE: The watcher polls for this file in watcher.
|
|
298
|
+
// NOTE: The watcher polls for this file in watcher.ts (search "sentinelPoll").
|
|
286
299
|
const pidFile = path.join(projectRoot, ".litmus", "tracker.pid");
|
|
287
300
|
const shutdownFile = path.join(projectRoot, ".litmus", "shutdown");
|
|
288
301
|
try {
|
|
@@ -342,5 +355,18 @@ async function deleteAssessmentFolder(projectRoot, token, folderName) {
|
|
|
342
355
|
catch {
|
|
343
356
|
warn(`Could not delete assessment folder. You can manually remove: ${projectRoot}`);
|
|
344
357
|
}
|
|
358
|
+
releaseAiTrackingForAssessment(projectRoot);
|
|
359
|
+
}
|
|
360
|
+
// ENG-771: remove this assessment from the active-assessments registry and,
|
|
361
|
+
// when no other Litmus assessments remain, uninstall the user-scope hooks.
|
|
362
|
+
// Called from every submit exit path that retires an assessment — successful
|
|
363
|
+
// upload + folder delete, "Already submitted" no-op, walkthrough handoff,
|
|
364
|
+
// terminal server-side errors (Time limit exceeded etc). Idempotent.
|
|
365
|
+
function releaseAiTrackingForAssessment(projectRoot) {
|
|
366
|
+
const registryEmpty = removeActiveAssessment(projectRoot);
|
|
367
|
+
if (registryEmpty) {
|
|
368
|
+
uninstallUserScopeClaudeHook();
|
|
369
|
+
uninstallUserScopeCodexHook();
|
|
370
|
+
}
|
|
345
371
|
}
|
|
346
372
|
//# sourceMappingURL=submit.js.map
|