litmus-cli 1.4.39 → 1.4.41

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.
Files changed (45) hide show
  1. package/README.md +7 -0
  2. package/dist/commands/connect.d.ts +2 -0
  3. package/dist/commands/connect.d.ts.map +1 -1
  4. package/dist/commands/connect.js +21 -0
  5. package/dist/commands/connect.js.map +1 -1
  6. package/dist/commands/doctor.d.ts +20 -2
  7. package/dist/commands/doctor.d.ts.map +1 -1
  8. package/dist/commands/doctor.js +51 -8
  9. package/dist/commands/doctor.js.map +1 -1
  10. package/dist/commands/submit.d.ts.map +1 -1
  11. package/dist/commands/submit.js +1 -42
  12. package/dist/commands/submit.js.map +1 -1
  13. package/dist/index.js +3 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/lib/ai-tracking.d.ts +13 -0
  16. package/dist/lib/ai-tracking.d.ts.map +1 -1
  17. package/dist/lib/ai-tracking.js +71 -0
  18. package/dist/lib/ai-tracking.js.map +1 -1
  19. package/dist/lib/api.d.ts +23 -0
  20. package/dist/lib/api.d.ts.map +1 -1
  21. package/dist/lib/api.js +68 -0
  22. package/dist/lib/api.js.map +1 -1
  23. package/dist/lib/backfill.d.ts +46 -3
  24. package/dist/lib/backfill.d.ts.map +1 -1
  25. package/dist/lib/backfill.js +203 -3
  26. package/dist/lib/backfill.js.map +1 -1
  27. package/dist/lib/connect-skills.d.ts +39 -0
  28. package/dist/lib/connect-skills.d.ts.map +1 -0
  29. package/dist/lib/connect-skills.js +138 -0
  30. package/dist/lib/connect-skills.js.map +1 -0
  31. package/dist/lib/hook-logger.cjs +216 -15
  32. package/dist/lib/session-over.d.ts +32 -0
  33. package/dist/lib/session-over.d.ts.map +1 -0
  34. package/dist/lib/session-over.js +99 -0
  35. package/dist/lib/session-over.js.map +1 -0
  36. package/dist/lib/skill-import.d.ts +82 -0
  37. package/dist/lib/skill-import.d.ts.map +1 -0
  38. package/dist/lib/skill-import.js +228 -0
  39. package/dist/lib/skill-import.js.map +1 -0
  40. package/dist/lib/tracker.d.ts.map +1 -1
  41. package/dist/lib/tracker.js +10 -0
  42. package/dist/lib/tracker.js.map +1 -1
  43. package/dist/lib/watcher.js +8 -0
  44. package/dist/lib/watcher.js.map +1 -1
  45. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
3
  import os from "os";
4
+ import { createHash } from "crypto";
4
5
  /**
5
6
  * Prompt backfill from Claude Code's own session transcripts (`litmus doctor
6
7
  * --backfill-prompts`).
@@ -24,9 +25,10 @@ import os from "os";
24
25
  * 2. Prefer over-capture to under-capture, within the declared scope. The
25
26
  * default scope is sessions whose recorded cwd sits inside the assessment
26
27
  * directory; `--all-sessions` widens to every session on the machine for
27
- * support-guided recoveries. Re-running the backfill can duplicate events
28
- * server-side — accepted, because the provenance flag makes duplicates
29
- * identifiable and the server store is append-only.
28
+ * support-guided recoveries. Events already in `.litmus/activity.jsonl`
29
+ * (the hook's copy, or an earlier recovery's) are not sent again
30
+ * (`withoutCapturedEvents`, ENG-2793); anything that still duplicates is
31
+ * identifiable by the provenance flag, and the report folds it.
30
32
  *
31
33
  * Parsing mirrors the hook-logger's Stop-hook transcript reader
32
34
  * (parseClaudeTranscript in hook-logger.cjs): same entry filtering
@@ -359,4 +361,202 @@ export function windowEvents(events, sinceMs) {
359
361
  return !isNaN(t) && t >= sinceMs;
360
362
  });
361
363
  }
364
+ /** Identity of a captured event for `withoutCapturedEvents`: kind, tool,
365
+ * session and words. */
366
+ function capturedKey(e) {
367
+ return JSON.stringify([e.type, e.tool, e.sessionId ?? "", e.type === "ai_response" ? e.text : e.prompt]);
368
+ }
369
+ /** How far apart the hook's copy of a prompt and the transcript's may be stamped
370
+ * and still be one capture. The frontend's `PROMPT_TWIN_WINDOW_MS`; the widest gap
371
+ * measured on production was 105 s. */
372
+ const CAPTURE_TWIN_WINDOW_MS = 120000;
373
+ /**
374
+ * ENG-2793: drop the events `activityLog` already holds, whether the hook wrote
375
+ * them or an earlier recovery did.
376
+ *
377
+ * The window above only trims by time, so a forced run, or an automatic one
378
+ * whose gap overlaps live capture, re-sent turns the hook had captured under
379
+ * fresh ids. Measured on production: 150 of 219 recovered Claude prompts and 144
380
+ * of 186 replies had a hook copy with the same words in the same session, and
381
+ * the report showed both.
382
+ *
383
+ * A PROMPT is held by a logged prompt with the same words, in the same tool and
384
+ * session, one logged copy per recovered copy, closest in time first within
385
+ * `CAPTURE_TWIN_WINDOW_MS`.
386
+ *
387
+ * A `tsApproximate` copy is never held: Cursor recovery spaces a conversation
388
+ * 1 ms apart, so neither its stamp nor its order says which turn it is, and a
389
+ * wrong match would leave a missed turn unsent where no match only sends a copy
390
+ * twice. A file-timed store's copy goes through the window like any other. No
391
+ * Cursor, Gemini or Copilot recovered event on production has a hook twin in its
392
+ * session (0 of 144).
393
+ *
394
+ * A REPLY is read against the hook replies stamped inside ITS RECOVERED TURN:
395
+ * from its recovered prompt up to the next one. The transcript's clock and the
396
+ * hook's are the same machine's, a Stop fires after the turn's last message and
397
+ * before the next prompt, and this holds whether or not the prompt hook caught the
398
+ * turn. The hook sends a reply per Stop and the transcript joins the turn, so
399
+ * * those hook replies joined by a blank line equal to it: held;
400
+ * * they are its head: only the rest is recovered;
401
+ * * there are none: held only on an earlier run's receipt FOR THIS TURN
402
+ * (`backfill_run.sentReplies`; replies are upload-only);
403
+ * * anything else: recovered.
404
+ * A session left with no events is dropped.
405
+ *
406
+ * `receipts` gives each reply that is to be sent the digest doctor records once it
407
+ * reaches the server: the reply's words and its recovered turn's prompt stamp, so
408
+ * a receipt only ever answers for the turn it was written for.
409
+ */
410
+ export function withoutCapturedEvents(sessions, activityLog) {
411
+ const sessionOf = (e) => JSON.stringify([e.tool, e.sessionId ?? ""]);
412
+ const receiptOf = (e, turnTs) => createHash("sha256").update(JSON.stringify([capturedKey(e), turnTs])).digest("hex").slice(0, 16);
413
+ const sentReceipts = new Map();
414
+ const takeReceipt = (d) => {
415
+ const n = sentReceipts.get(d) ?? 0;
416
+ if (n === 0)
417
+ return false;
418
+ sentReceipts.set(d, n - 1);
419
+ return true;
420
+ };
421
+ const loggedPrompts = new Map();
422
+ // Every hook reply of a session, in log order, with its stamp.
423
+ const hookReplies = new Map();
424
+ let id = 0;
425
+ for (const line of activityLog.split("\n")) {
426
+ let e;
427
+ try {
428
+ e = JSON.parse(line);
429
+ }
430
+ catch {
431
+ continue;
432
+ }
433
+ if (!e || typeof e !== "object")
434
+ continue;
435
+ if (e.type === "backfill_run" && Array.isArray(e.sentReplies)) {
436
+ for (const d of e.sentReplies)
437
+ if (typeof d === "string")
438
+ sentReceipts.set(d, (sentReceipts.get(d) ?? 0) + 1);
439
+ continue;
440
+ }
441
+ const tsMs = Date.parse(String(e.ts));
442
+ if (e.type === "ai_prompt" && !Number.isNaN(tsMs)) {
443
+ const k = capturedKey(e);
444
+ loggedPrompts.set(k, [...(loggedPrompts.get(k) ?? []), { tsMs, id: id++ }]);
445
+ }
446
+ if (e.type === "ai_response" && typeof e.text === "string" && e.backfilled !== true) {
447
+ const k = sessionOf(e);
448
+ hookReplies.set(k, [...(hookReplies.get(k) ?? []), { text: e.text, tsMs, used: false }]);
449
+ }
450
+ }
451
+ for (const copies of loggedPrompts.values())
452
+ copies.sort((x, y) => x.tsMs - y.tsMs || x.id - y.id);
453
+ // Prompts: closest in time first inside the window, by binary search.
454
+ const heldPrompts = new Set();
455
+ const answered = new Set();
456
+ const candidates = [];
457
+ let order = 0;
458
+ for (const s of sessions) {
459
+ for (const e of s.events) {
460
+ order += 1;
461
+ if (e.type !== "ai_prompt" || e.tsApproximate === true)
462
+ continue;
463
+ const at = Date.parse(e.ts);
464
+ if (Number.isNaN(at))
465
+ continue;
466
+ const copies = loggedPrompts.get(capturedKey(e)) ?? [];
467
+ let lo = 0;
468
+ let hi = copies.length;
469
+ while (lo < hi) {
470
+ const mid = (lo + hi) >> 1;
471
+ if (copies[mid].tsMs < at - CAPTURE_TWIN_WINDOW_MS)
472
+ lo = mid + 1;
473
+ else
474
+ hi = mid;
475
+ }
476
+ for (let i = lo; i < copies.length && copies[i].tsMs <= at + CAPTURE_TWIN_WINDOW_MS; i++) {
477
+ candidates.push([Math.abs(copies[i].tsMs - at), order, e, copies[i].id]);
478
+ }
479
+ }
480
+ }
481
+ candidates.sort((x, y) => x[0] - y[0] || x[1] - y[1] || x[3] - y[3]);
482
+ for (const [, , e, logged] of candidates) {
483
+ if (heldPrompts.has(e) || answered.has(logged))
484
+ continue;
485
+ answered.add(logged);
486
+ heldPrompts.add(e);
487
+ }
488
+ let skipped = 0;
489
+ const receipts = new Map();
490
+ const kept = [];
491
+ for (const s of sessions) {
492
+ const events = [];
493
+ // Each reply's turn: from the recovered prompt before it to the next one.
494
+ const turnStart = new Map();
495
+ let start = { ts: "", ms: -Infinity };
496
+ const pending = [];
497
+ const close = (endMs) => {
498
+ for (const r of pending)
499
+ turnStart.set(r, { ts: start.ts, startMs: start.ms, endMs });
500
+ pending.length = 0;
501
+ };
502
+ for (const e of s.events) {
503
+ if (e.type === "ai_prompt") {
504
+ const ms = Date.parse(e.ts);
505
+ close(Number.isNaN(ms) ? Infinity : ms);
506
+ start = { ts: e.ts, ms: Number.isNaN(ms) ? -Infinity : ms };
507
+ }
508
+ else {
509
+ pending.push(e);
510
+ }
511
+ }
512
+ close(Infinity);
513
+ for (const e of s.events) {
514
+ if (e.type === "ai_prompt") {
515
+ if (heldPrompts.has(e))
516
+ skipped += 1;
517
+ else
518
+ events.push(e);
519
+ continue;
520
+ }
521
+ const turn = turnStart.get(e);
522
+ const text = e.text ?? "";
523
+ const replies = hookReplies.get(sessionOf(e)) ?? [];
524
+ const send = (out) => {
525
+ const receipt = receiptOf(out, turn.ts);
526
+ if (takeReceipt(receipt)) {
527
+ skipped += 1;
528
+ return;
529
+ }
530
+ receipts.set(out, receipt);
531
+ events.push(out);
532
+ };
533
+ if (e.tsApproximate === true) {
534
+ send(e);
535
+ continue;
536
+ }
537
+ const inTurn = replies.filter((r) => !r.used && r.tsMs >= turn.startMs && r.tsMs < turn.endMs);
538
+ const joined = inTurn.map((r) => r.text).join("\n\n");
539
+ for (const r of inTurn)
540
+ r.used = true;
541
+ if (inTurn.length > 0 && text === joined) {
542
+ skipped += 1;
543
+ }
544
+ else if (inTurn.length > 0 && text.startsWith(joined + "\n\n")) {
545
+ send({ ...e, text: text.slice(joined.length + 2) });
546
+ }
547
+ else {
548
+ send(e);
549
+ }
550
+ }
551
+ if (events.length === 0)
552
+ continue;
553
+ kept.push({
554
+ ...s,
555
+ events,
556
+ prompts: events.filter((e) => e.type === "ai_prompt").length,
557
+ responses: events.filter((e) => e.type === "ai_response").length,
558
+ });
559
+ }
560
+ return { sessions: kept, skipped, receipts };
561
+ }
362
562
  //# sourceMappingURL=backfill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"backfill.js","sourceRoot":"","sources":["../../src/lib/backfill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backfill.js","sourceRoot":"","sources":["../../src/lib/backfill.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { type LocalSkillFile } from "./skill-import.js";
2
+ /**
3
+ * ENG-2814 — `litmus connect` offers to bring the candidate's own AI tool skills
4
+ * into their workspace.
5
+ *
6
+ * Asked up front, next to the editor choice, so the question is not waiting for an
7
+ * answer in the middle of the boot. The upload starts once the workspace is ready and
8
+ * runs while the editor opens; its result is printed when connect finishes. Nothing
9
+ * here can stop a connect: an assessment that does not allow skill import, a backend
10
+ * that predates it, or a failed upload all leave the candidate exactly where they
11
+ * would have been, with the assessment page's Import skills dialog as the way to try
12
+ * again.
13
+ */
14
+ export interface PendingSkillImport {
15
+ files: LocalSkillFile[];
16
+ names: string[];
17
+ digest: string;
18
+ assessmentId: string;
19
+ }
20
+ export interface SkillOfferInput {
21
+ backendUrl: string;
22
+ token: string;
23
+ assessmentId: string;
24
+ /** `--skills` true, `--no-skills` false, neither undefined (ask). */
25
+ flag: boolean | undefined;
26
+ verbose?: boolean;
27
+ /** Injected by tests. */
28
+ home?: string;
29
+ isTTY?: boolean;
30
+ ask?: (question: string) => Promise<string>;
31
+ }
32
+ export declare function describeSkills(names: string[]): string;
33
+ export declare function offerSkillImport(input: SkillOfferInput): Promise<PendingSkillImport | null>;
34
+ /**
35
+ * Start the upload and return what to print when it is done. Never rejects: the
36
+ * workspace opens while this runs, and its outcome is reported at the end of connect.
37
+ */
38
+ export declare function startSkillImport(backendUrl: string, token: string, pending: PendingSkillImport, home?: string): Promise<() => void>;
39
+ //# sourceMappingURL=connect-skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-skills.d.ts","sourceRoot":"","sources":["../../src/lib/connect-skills.ts"],"names":[],"mappings":"AAMA,OAAO,EAUL,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAA;AAE1B;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,qEAAqE;IACrE,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;IACzB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAC5C;AAKD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAItD;AAmDD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAyCjG;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,kBAAkB,EAC3B,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,IAAI,CAAC,CA6BrB"}
@@ -0,0 +1,138 @@
1
+ import { readFileSync } from "fs";
2
+ import readline from "readline";
3
+ import chalk from "chalk";
4
+ import { importSkills, planSkillImport, ServerError } from "./api.js";
5
+ import { info, success, warn } from "./errors.js";
6
+ import { collectSkillFiles, importSummaryLines, lastAnswered, overUploadCaps, planRequest, rememberAnswered, skillNames, skillSetDigest, SKILLS_PICKUP, } from "./skill-import.js";
7
+ const NAMES_SHOWN = 5;
8
+ const ASK_ATTEMPTS = 3;
9
+ export function describeSkills(names) {
10
+ const shown = names.slice(0, NAMES_SHOWN).join(", ");
11
+ const more = names.length - NAMES_SHOWN;
12
+ return more > 0 ? `${shown} and ${more} more` : shown;
13
+ }
14
+ function askLine(question) {
15
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
16
+ return new Promise((resolve) => rl.question(question, (a) => {
17
+ rl.close();
18
+ resolve(a);
19
+ }));
20
+ }
21
+ /** Enter or yes imports, no declines. Anything else is asked again, and never read as
22
+ * consent: after a few tries it is a no. */
23
+ async function askYesNo(ask, question) {
24
+ let q = question;
25
+ for (let i = 0; i < ASK_ATTEMPTS; i++) {
26
+ const a = (await ask(q)).trim().toLowerCase();
27
+ if (a === "" || a === "y" || a === "yes")
28
+ return true;
29
+ if (a === "n" || a === "no")
30
+ return false;
31
+ q = ` Please answer y or n. ${chalk.dim("[Y/n]")} `;
32
+ }
33
+ return false;
34
+ }
35
+ /** Not offered at all: the assessment does not allow it (403) or the backend has no
36
+ * such route (404). Nothing to tell the candidate. */
37
+ function notOffered(err) {
38
+ return err instanceof ServerError && (err.statusCode === 403 || err.statusCode === 404);
39
+ }
40
+ /**
41
+ * The server's plan for these files: one request for every source folder, so the
42
+ * server dedupes across them and applies the upload's skill cap to the whole set. A
43
+ * skill it cannot read is left out and named, with the server's reason, never the
44
+ * skills beside it. Null when there is nothing to offer.
45
+ */
46
+ async function planFiles(input, all) {
47
+ try {
48
+ const plan = await planSkillImport(input.backendUrl, input.token, planRequest(all));
49
+ for (const r of plan.refused)
50
+ warn(`Leaving out ~/.${r.path}: ${r.reason}`);
51
+ return plan.upload;
52
+ }
53
+ catch (err) {
54
+ if (notOffered(err)) {
55
+ if (input.verbose)
56
+ info(`Skill import not offered: ${err instanceof Error ? err.message : String(err)}`);
57
+ return null;
58
+ }
59
+ // A refusal of the set as a whole (over the skill cap, say): say why, offer nothing.
60
+ warn(`Couldn't offer your skills for import: ${err instanceof Error ? err.message : String(err)}`);
61
+ return null;
62
+ }
63
+ }
64
+ export async function offerSkillImport(input) {
65
+ if (input.flag === false)
66
+ return null;
67
+ const all = collectSkillFiles(input.home);
68
+ if (all.length === 0)
69
+ return null;
70
+ const upload = await planFiles(input, all);
71
+ if (!upload)
72
+ return null;
73
+ const wanted = new Set(upload);
74
+ const files = all.filter((f) => wanted.has(f.path));
75
+ const names = skillNames(upload);
76
+ if (names.length === 0)
77
+ return null;
78
+ const n = names.length;
79
+ const found = `Found ${n} AI skill${n === 1 ? "" : "s"} on this computer (${describeSkills(names)}).`;
80
+ const over = overUploadCaps(files);
81
+ if (over) {
82
+ info(`${found} Together they are ${over}, more than one import takes. Import the ones you want from your assessment page.`);
83
+ return null;
84
+ }
85
+ const pending = { files, names, digest: skillSetDigest(files), assessmentId: input.assessmentId };
86
+ if (input.flag === true)
87
+ return pending;
88
+ if (!(input.isTTY ?? process.stdin.isTTY)) {
89
+ info(`${found} Run with --skills to import ${n === 1 ? "it" : "them"} into your workspace.`);
90
+ return null;
91
+ }
92
+ // Asked once per set of skills: a candidate who reconnects every day is asked
93
+ // again only after they add or change one.
94
+ if (lastAnswered(input.assessmentId, input.home) === pending.digest)
95
+ return null;
96
+ const yes = await askYesNo(input.ask ?? askLine, `${found}\n Import ${n === 1 ? "it" : "them"} into your workspace? ${chalk.dim("[Y/n]")} `);
97
+ if (!yes) {
98
+ rememberAnswered(input.assessmentId, pending.digest, input.home);
99
+ info("Skipped. To import them later, add --skills to your `litmus connect` command, or use your assessment page.");
100
+ return null;
101
+ }
102
+ return pending;
103
+ }
104
+ /**
105
+ * Start the upload and return what to print when it is done. Never rejects: the
106
+ * workspace opens while this runs, and its outcome is reported at the end of connect.
107
+ */
108
+ export function startSkillImport(backendUrl, token, pending, home) {
109
+ info(`Importing your ${pending.names.length === 1 ? "skill" : "skills"} in the background...`);
110
+ return (async () => {
111
+ try {
112
+ const result = await importSkills(backendUrl, token, pending.files.map((f) => ({ path: f.path, data: readFileSync(f.abs) })));
113
+ rememberAnswered(pending.assessmentId, pending.digest, home);
114
+ const lines = importSummaryLines(result);
115
+ return () => {
116
+ if (result.installed.length > 0) {
117
+ success(lines[0]);
118
+ for (const line of lines.slice(1))
119
+ warn(line);
120
+ console.log(chalk.dim(` ${SKILLS_PICKUP}`));
121
+ }
122
+ else {
123
+ warn("No skills were imported.");
124
+ for (const line of lines)
125
+ warn(line);
126
+ }
127
+ };
128
+ }
129
+ catch (err) {
130
+ const message = err instanceof Error ? err.message : String(err);
131
+ return () => {
132
+ warn(`Couldn't import your skills: ${message}`);
133
+ info("Your workspace is fine. You can import skills from your assessment page instead.");
134
+ };
135
+ }
136
+ })();
137
+ }
138
+ //# sourceMappingURL=connect-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-skills.js","sourceRoot":"","sources":["../../src/lib/connect-skills.ts"],"names":[],"mappings":"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"}