litmus-cli 1.0.15 → 1.0.18
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 +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +121 -17
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/submit.d.ts.map +1 -1
- package/dist/commands/submit.js +17 -5
- package/dist/commands/submit.js.map +1 -1
- package/dist/lib/hook-logger.cjs +180 -0
- package/dist/lib/watcher.cjs +34 -2
- package/dist/lib/zip.d.ts.map +1 -1
- package/dist/lib/zip.js +32 -15
- package/dist/lib/zip.js.map +1 -1
- package/dist/staging.d.ts +2 -0
- package/dist/staging.d.ts.map +1 -0
- package/dist/staging.js +6 -0
- package/dist/staging.js.map +1 -0
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -23,6 +23,7 @@ litmus init <token>
|
|
|
23
23
|
- Initializes a git repo with an initial commit
|
|
24
24
|
- Starts background file tracking
|
|
25
25
|
- **Your timer begins when you run this command**
|
|
26
|
+
- Your work is automatically submitted when the time limit is reached — if auto-submit fails, run `litmus submit` manually within 5 minutes of the deadline
|
|
26
27
|
|
|
27
28
|
Your token is provided on the Litmus candidate portal when you open your assessment.
|
|
28
29
|
|
|
@@ -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":"AAgBA,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+M1D"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createWriteStream, unlinkSync } from "fs";
|
|
1
|
+
import { createWriteStream, unlinkSync, existsSync, readFileSync, writeFileSync, appendFileSync, mkdirSync, copyFileSync } from "fs";
|
|
2
2
|
import { pipeline } from "stream/promises";
|
|
3
3
|
import { Readable } from "stream";
|
|
4
4
|
import path from "path";
|
|
@@ -12,6 +12,7 @@ import { startTracker } from "../lib/tracker.js";
|
|
|
12
12
|
import { detectProject } from "../utils/detect-project.js";
|
|
13
13
|
import { fatal, success, info, warn, setErrorContext, reportSuccess, FALLBACK_URL } from "../utils/errors.js";
|
|
14
14
|
import { execSync } from "child_process";
|
|
15
|
+
import { fileURLToPath } from "url";
|
|
15
16
|
export async function runInit(token) {
|
|
16
17
|
const apiBase = process.env.LITMUS_API_URL || FALLBACK_URL;
|
|
17
18
|
setErrorContext({ token, apiBase });
|
|
@@ -33,7 +34,6 @@ export async function runInit(token) {
|
|
|
33
34
|
}
|
|
34
35
|
// Check for naming collision
|
|
35
36
|
const targetDir = path.resolve(process.cwd(), metadata.folderName);
|
|
36
|
-
const { existsSync } = await import("fs");
|
|
37
37
|
if (existsSync(targetDir)) {
|
|
38
38
|
fatal(`Folder "${metadata.folderName}" already exists in this directory.`, `Delete or rename it, then re-run litmus init with your token.`, { severity: "warning" });
|
|
39
39
|
}
|
|
@@ -91,20 +91,35 @@ export async function runInit(token) {
|
|
|
91
91
|
}
|
|
92
92
|
catch { /* cleanup */ }
|
|
93
93
|
}
|
|
94
|
-
// Step 4:
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
94
|
+
// Step 4: Ensure .litmus/ and project dependency directories are gitignored.
|
|
95
|
+
// Detect project type early so we can add the right entries before git add -A.
|
|
96
|
+
const projectEarly = detectProject(targetDir);
|
|
97
|
+
const depIgnoreEntries = {
|
|
98
|
+
node: ["node_modules/"],
|
|
99
|
+
python: ["venv/", ".venv/", "__pycache__/", "*.pyc"],
|
|
100
|
+
java: ["target/", "build/", ".gradle/"],
|
|
101
|
+
dotnet: ["bin/", "obj/"],
|
|
102
|
+
rust: ["target/"],
|
|
103
|
+
ruby: [".bundle/", "vendor/bundle/"],
|
|
104
|
+
php: ["vendor/"],
|
|
105
|
+
go: [],
|
|
106
|
+
unknown: [],
|
|
107
|
+
};
|
|
108
|
+
const gitignorePath = path.join(targetDir, ".gitignore");
|
|
109
|
+
const entriesToEnsure = [".litmus/", ".claude/settings.local.json", ...(depIgnoreEntries[projectEarly.type] ?? [])];
|
|
110
|
+
if (existsSync(gitignorePath)) {
|
|
111
|
+
const content = readFileSync(gitignorePath, "utf8");
|
|
112
|
+
const lines = content.split(/\r?\n/).map(l => l.trim());
|
|
113
|
+
const missing = entriesToEnsure.filter(e => {
|
|
114
|
+
const bare = e.replace(/\/$/, ""); // "venv/" → "venv"
|
|
115
|
+
return !lines.includes(bare) && !lines.includes(bare + "/");
|
|
116
|
+
});
|
|
117
|
+
if (missing.length > 0) {
|
|
118
|
+
appendFileSync(gitignorePath, "\n" + missing.join("\n") + "\n");
|
|
104
119
|
}
|
|
105
120
|
}
|
|
106
|
-
|
|
107
|
-
|
|
121
|
+
else {
|
|
122
|
+
writeFileSync(gitignorePath, entriesToEnsure.join("\n") + "\n");
|
|
108
123
|
}
|
|
109
124
|
// Step 5: Write .litmus/config.json
|
|
110
125
|
await writeConfig(targetDir, {
|
|
@@ -119,8 +134,17 @@ export async function runInit(token) {
|
|
|
119
134
|
apiBase,
|
|
120
135
|
backendUrl: metadata.backendUrl,
|
|
121
136
|
});
|
|
122
|
-
// Step 6:
|
|
123
|
-
|
|
137
|
+
// Step 6: Set up AI prompt tracking
|
|
138
|
+
// Write transparency notices (committed in initial state — tamper-evident)
|
|
139
|
+
// and hook configs for Claude Code, Copilot CLI, and Codex CLI.
|
|
140
|
+
try {
|
|
141
|
+
setupAiTracking(targetDir);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Non-critical — assessment works fine without AI tracking
|
|
145
|
+
}
|
|
146
|
+
// Step 7: Install dependencies (project type already detected in step 4)
|
|
147
|
+
const project = projectEarly;
|
|
124
148
|
if (project.installCommand) {
|
|
125
149
|
console.log();
|
|
126
150
|
const installSpinner = ora(`Running ${chalk.cyan(project.installCommand)}... (this may take a minute)`).start();
|
|
@@ -135,7 +159,22 @@ export async function runInit(token) {
|
|
|
135
159
|
installSpinner.warn(`Couldn't run "${project.installCommand}" automatically. Run it manually inside ${metadata.folderName}/.`);
|
|
136
160
|
}
|
|
137
161
|
}
|
|
138
|
-
// Step
|
|
162
|
+
// Step 8: Initialize git repo with initial commit
|
|
163
|
+
try {
|
|
164
|
+
execSync("git --version", { stdio: "pipe" });
|
|
165
|
+
try {
|
|
166
|
+
execSync("git init", { cwd: targetDir, stdio: "pipe" });
|
|
167
|
+
execSync("git add -A", { cwd: targetDir, stdio: "pipe" });
|
|
168
|
+
execSync("git commit -m \"Assessment: initial state\"", { cwd: targetDir, stdio: "pipe" });
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
warn("Git is installed but failed to initialize. Check your git config (user.name / user.email).");
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
// git not installed — non-critical, analysis degrades gracefully
|
|
176
|
+
}
|
|
177
|
+
// Step 9: Start tracker in background
|
|
139
178
|
try {
|
|
140
179
|
startTracker(targetDir);
|
|
141
180
|
}
|
|
@@ -165,4 +204,69 @@ export async function runInit(token) {
|
|
|
165
204
|
console.log();
|
|
166
205
|
}
|
|
167
206
|
}
|
|
207
|
+
// ── AI prompt tracking setup ────────────────────────────────────
|
|
208
|
+
/**
|
|
209
|
+
* Set up AI prompt tracking for Claude Code, GitHub Copilot CLI, and OpenAI Codex CLI.
|
|
210
|
+
* Writes:
|
|
211
|
+
* - Hook configs for each tool to log prompts to .litmus/activity.jsonl
|
|
212
|
+
* - Copies hook-logger.cjs into .litmus/ for self-contained execution
|
|
213
|
+
*
|
|
214
|
+
* Never overwrites existing files — assessments may ship their own configs.
|
|
215
|
+
*/
|
|
216
|
+
function setupAiTracking(targetDir) {
|
|
217
|
+
const litmusDir = path.join(targetDir, ".litmus");
|
|
218
|
+
mkdirSync(litmusDir, { recursive: true });
|
|
219
|
+
// Copy hook-logger.cjs into .litmus/ (gitignored, included in submission ZIP)
|
|
220
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
221
|
+
const __dirname = path.dirname(__filename);
|
|
222
|
+
const hookLoggerSrc = path.join(__dirname, "..", "lib", "hook-logger.cjs");
|
|
223
|
+
const hookLoggerDest = path.join(litmusDir, "hook-logger.cjs");
|
|
224
|
+
if (existsSync(hookLoggerSrc)) {
|
|
225
|
+
copyFileSync(hookLoggerSrc, hookLoggerDest);
|
|
226
|
+
}
|
|
227
|
+
// Claude Code: .claude/settings.local.json — merge hooks into existing config
|
|
228
|
+
const claudeDir = path.join(targetDir, ".claude");
|
|
229
|
+
mkdirSync(claudeDir, { recursive: true });
|
|
230
|
+
const claudeSettingsPath = path.join(claudeDir, "settings.local.json");
|
|
231
|
+
const claudeHooks = {
|
|
232
|
+
UserPromptSubmit: [{
|
|
233
|
+
matcher: "",
|
|
234
|
+
hooks: [{
|
|
235
|
+
type: "command",
|
|
236
|
+
command: "node .litmus/hook-logger.cjs claude",
|
|
237
|
+
timeout: 5,
|
|
238
|
+
}],
|
|
239
|
+
}],
|
|
240
|
+
};
|
|
241
|
+
if (existsSync(claudeSettingsPath)) {
|
|
242
|
+
try {
|
|
243
|
+
const existing = JSON.parse(readFileSync(claudeSettingsPath, "utf8"));
|
|
244
|
+
existing.hooks = { ...existing.hooks, ...claudeHooks };
|
|
245
|
+
writeFileSync(claudeSettingsPath, JSON.stringify(existing, null, 2) + "\n");
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
// Malformed JSON — overwrite
|
|
249
|
+
writeFileSync(claudeSettingsPath, JSON.stringify({ hooks: claudeHooks }, null, 2) + "\n");
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
writeFileSync(claudeSettingsPath, JSON.stringify({ hooks: claudeHooks }, null, 2) + "\n");
|
|
254
|
+
}
|
|
255
|
+
// GitHub Copilot CLI: .github/hooks/litmus.json (separate file — won't conflict)
|
|
256
|
+
const ghHooksDir = path.join(targetDir, ".github", "hooks");
|
|
257
|
+
mkdirSync(ghHooksDir, { recursive: true });
|
|
258
|
+
writeFileSync(path.join(ghHooksDir, "litmus.json"), JSON.stringify({
|
|
259
|
+
version: 1,
|
|
260
|
+
hooks: {
|
|
261
|
+
userPromptSubmitted: [{
|
|
262
|
+
type: "command",
|
|
263
|
+
bash: "node .litmus/hook-logger.cjs copilot",
|
|
264
|
+
powershell: "node .litmus/hook-logger.cjs copilot",
|
|
265
|
+
timeoutSec: 5,
|
|
266
|
+
}],
|
|
267
|
+
},
|
|
268
|
+
}, null, 2) + "\n");
|
|
269
|
+
// OpenAI Codex CLI: hooks are experimental with no stable project-level config format yet.
|
|
270
|
+
// When the format stabilizes, add .codex/config.toml here.
|
|
271
|
+
}
|
|
168
272
|
//# 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":"submit.d.ts","sourceRoot":"","sources":["../../src/commands/submit.ts"],"names":[],"mappings":"AAYA,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../src/commands/submit.ts"],"names":[],"mappings":"AAYA,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0KtE"}
|
package/dist/commands/submit.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { unlinkSync, readFileSync } from "fs";
|
|
1
|
+
import { unlinkSync, readFileSync, existsSync } from "fs";
|
|
2
2
|
import { rm } from "fs/promises";
|
|
3
3
|
import path from "path";
|
|
4
4
|
import chalk from "chalk";
|
|
@@ -22,8 +22,9 @@ export async function runSubmit(opts) {
|
|
|
22
22
|
const now = new Date();
|
|
23
23
|
const effectiveDeadline = getEffectiveDeadline(config);
|
|
24
24
|
if (effectiveDeadline !== null) {
|
|
25
|
-
//
|
|
26
|
-
|
|
25
|
+
// 5-minute grace window: covers auto-submit process spawn overhead and
|
|
26
|
+
// gives candidates time to run `litmus submit` manually if auto-submit failed.
|
|
27
|
+
if (now.getTime() > effectiveDeadline + 5 * 60000) {
|
|
27
28
|
fatal(`The submission deadline passed at ${new Date(effectiveDeadline).toLocaleString()}.`, `Contact founders@litmus.build if you believe this is a mistake.`, { severity: "warning" });
|
|
28
29
|
}
|
|
29
30
|
}
|
|
@@ -58,10 +59,19 @@ export async function runSubmit(opts) {
|
|
|
58
59
|
// Step 5: Show what's being submitted
|
|
59
60
|
const zipSizeMb = (zipBytes / (1024 * 1024)).toFixed(1);
|
|
60
61
|
const folderName = path.basename(projectRoot);
|
|
62
|
+
const hasActivityLog = existsSync(path.join(projectRoot, ".litmus", "activity.jsonl"));
|
|
61
63
|
console.log();
|
|
62
64
|
console.log(chalk.bold(` Submitting: ${config.assessmentName}`));
|
|
63
65
|
info(` Upload size: ${zipSizeMb} MB (${fileCount} files)`);
|
|
64
|
-
|
|
66
|
+
if (hasActivityLog) {
|
|
67
|
+
info(` Tracking log included`);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
warn(`No activity tracking log found (.litmus/activity.jsonl missing).`);
|
|
71
|
+
console.log(chalk.dim(" The background tracker may not have run. Activity metrics won't be available to reviewers."));
|
|
72
|
+
console.log(chalk.dim(" You can still submit — your code and git history will be evaluated."));
|
|
73
|
+
console.log();
|
|
74
|
+
}
|
|
65
75
|
if (config.deadline) {
|
|
66
76
|
info(` Deadline: ${new Date(config.deadline).toLocaleString()}`);
|
|
67
77
|
}
|
|
@@ -122,7 +132,9 @@ export async function runSubmit(opts) {
|
|
|
122
132
|
|| rawError.includes("timed out")
|
|
123
133
|
|| rawError.includes("too large")
|
|
124
134
|
|| rawError.includes("deadline")
|
|
125
|
-
|| rawError.includes("Upload timed out")
|
|
135
|
+
|| rawError.includes("Upload timed out")
|
|
136
|
+
|| rawError.includes("Video walkthrough required")
|
|
137
|
+
|| rawError.includes("video walkthrough");
|
|
126
138
|
const candidateMessage = isKnownError
|
|
127
139
|
? rawError
|
|
128
140
|
: "Submission failed. Please try again or submit manually through the candidate portal.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit.js","sourceRoot":"","sources":["../../src/commands/submit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"submit.js","sourceRoot":"","sources":["../../src/commands/submit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Litmus AI prompt logger.
|
|
4
|
+
* Universal hook script invoked by Claude Code, GitHub Copilot CLI, and OpenAI Codex CLI.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* node hook-logger.cjs <tool>
|
|
8
|
+
*
|
|
9
|
+
* Each tool pipes JSON on stdin when a user submits a prompt:
|
|
10
|
+
* - Claude Code (UserPromptSubmit): stdin JSON with session_id, prompt content
|
|
11
|
+
* - Copilot CLI (userPromptSubmitted): { timestamp, cwd, prompt }
|
|
12
|
+
* - Codex CLI: experimental hooks support (format TBD)
|
|
13
|
+
*
|
|
14
|
+
* Normalizes to: { ts, type: "ai_prompt", tool, prompt, sessionId? }
|
|
15
|
+
* Appends to .litmus/activity.jsonl — the same file the watcher uses,
|
|
16
|
+
* so prompts flow through the existing analysis pipeline.
|
|
17
|
+
* Also uploads the event to the server (fire-and-forget) for real-time backup.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
const fs = require("fs")
|
|
21
|
+
const path = require("path")
|
|
22
|
+
const https = require("https")
|
|
23
|
+
const http = require("http")
|
|
24
|
+
|
|
25
|
+
// Keep under the server's MAX_EVENT_SIZE (2048 bytes) after JSON serialization.
|
|
26
|
+
// ~1800 chars of prompt + ~150 bytes of wrapper fields + JSON escaping = safely under 2KB.
|
|
27
|
+
const MAX_PROMPT_LENGTH = 1800
|
|
28
|
+
|
|
29
|
+
const tool = process.argv[2] || "unknown"
|
|
30
|
+
|
|
31
|
+
// Find the .litmus directory — walk up from cwd
|
|
32
|
+
function findLitmusDir() {
|
|
33
|
+
let dir = process.cwd()
|
|
34
|
+
for (let i = 0; i < 10; i++) {
|
|
35
|
+
const candidate = path.join(dir, ".litmus")
|
|
36
|
+
if (fs.existsSync(candidate)) return candidate
|
|
37
|
+
const parent = path.dirname(dir)
|
|
38
|
+
if (parent === dir) break
|
|
39
|
+
dir = parent
|
|
40
|
+
}
|
|
41
|
+
return null
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Read config.json for server upload credentials
|
|
45
|
+
function readConfig(litmusDir) {
|
|
46
|
+
try {
|
|
47
|
+
const configPath = path.join(litmusDir, "config.json")
|
|
48
|
+
return JSON.parse(fs.readFileSync(configPath, "utf8"))
|
|
49
|
+
} catch {
|
|
50
|
+
return null
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Fire-and-forget upload to /cli/activity.
|
|
55
|
+
// Uses socket.unref() so Node exits immediately without waiting for the response —
|
|
56
|
+
// the OS TCP stack still flushes the outbound data after our process exits.
|
|
57
|
+
function uploadEvent(config, event) {
|
|
58
|
+
if (!config || !config.token || !config.backendUrl) return
|
|
59
|
+
|
|
60
|
+
const body = JSON.stringify({ events: [event] })
|
|
61
|
+
const url = new URL(
|
|
62
|
+
`${config.backendUrl}/cli/activity?token=${encodeURIComponent(config.token)}`
|
|
63
|
+
)
|
|
64
|
+
const reqFn = url.protocol === "https:" ? https.request : http.request
|
|
65
|
+
|
|
66
|
+
const req = reqFn(url, {
|
|
67
|
+
method: "POST",
|
|
68
|
+
headers: { "Content-Type": "application/json", "Content-Length": Buffer.byteLength(body) },
|
|
69
|
+
timeout: 5000,
|
|
70
|
+
})
|
|
71
|
+
req.on("error", () => {}) // Swallow — fire-and-forget
|
|
72
|
+
req.on("timeout", () => { req.destroy() })
|
|
73
|
+
req.on("socket", (socket) => { socket.unref() }) // Don't keep process alive for response
|
|
74
|
+
req.end(body)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function readStdin() {
|
|
78
|
+
return new Promise((resolve) => {
|
|
79
|
+
let resolved = false
|
|
80
|
+
const chunks = []
|
|
81
|
+
process.stdin.setEncoding("utf8")
|
|
82
|
+
process.stdin.on("data", (chunk) => chunks.push(chunk))
|
|
83
|
+
process.stdin.on("end", () => {
|
|
84
|
+
if (!resolved) { resolved = true; resolve(chunks.join("")) }
|
|
85
|
+
})
|
|
86
|
+
// Safety timeout — stdin should arrive immediately from hook runners.
|
|
87
|
+
// Keep this short to avoid blocking the AI tool.
|
|
88
|
+
setTimeout(() => {
|
|
89
|
+
if (!resolved) { resolved = true; resolve(chunks.join("")) }
|
|
90
|
+
}, 300)
|
|
91
|
+
})
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function extractPrompt(input, toolName) {
|
|
95
|
+
try {
|
|
96
|
+
const data = JSON.parse(input)
|
|
97
|
+
|
|
98
|
+
switch (toolName) {
|
|
99
|
+
case "claude": {
|
|
100
|
+
// Claude Code UserPromptSubmit: prompt may be in message.content or content field
|
|
101
|
+
const prompt = data.user_message
|
|
102
|
+
|| data.prompt
|
|
103
|
+
|| (data.message && data.message.content)
|
|
104
|
+
|| null
|
|
105
|
+
return {
|
|
106
|
+
prompt: typeof prompt === "string" ? prompt : JSON.stringify(prompt),
|
|
107
|
+
sessionId: data.session_id || null,
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
case "copilot": {
|
|
111
|
+
// Copilot CLI userPromptSubmitted: { timestamp, cwd, prompt }
|
|
112
|
+
return {
|
|
113
|
+
prompt: data.prompt || null,
|
|
114
|
+
sessionId: null,
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
case "codex": {
|
|
118
|
+
// Codex CLI: experimental, extract what we can
|
|
119
|
+
const prompt = data.prompt
|
|
120
|
+
|| data.user_message
|
|
121
|
+
|| (data.message && data.message.content)
|
|
122
|
+
|| null
|
|
123
|
+
return {
|
|
124
|
+
prompt: typeof prompt === "string" ? prompt : JSON.stringify(prompt),
|
|
125
|
+
sessionId: data.thread_id || null,
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
default: {
|
|
129
|
+
// Best-effort: look for common field names
|
|
130
|
+
const prompt = data.prompt || data.user_message || data.content || null
|
|
131
|
+
return {
|
|
132
|
+
prompt: typeof prompt === "string" ? prompt : JSON.stringify(prompt),
|
|
133
|
+
sessionId: data.session_id || null,
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
} catch {
|
|
138
|
+
return { prompt: null, sessionId: null }
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
async function main() {
|
|
143
|
+
const litmusDir = findLitmusDir()
|
|
144
|
+
if (!litmusDir) return // Not in a Litmus assessment — silently exit
|
|
145
|
+
|
|
146
|
+
const raw = await readStdin()
|
|
147
|
+
if (!raw.trim()) return
|
|
148
|
+
|
|
149
|
+
const { prompt, sessionId } = extractPrompt(raw, tool)
|
|
150
|
+
if (!prompt) return
|
|
151
|
+
|
|
152
|
+
const truncated = prompt.length > MAX_PROMPT_LENGTH
|
|
153
|
+
? prompt.slice(0, MAX_PROMPT_LENGTH) + "...[truncated]"
|
|
154
|
+
: prompt
|
|
155
|
+
|
|
156
|
+
const event = {
|
|
157
|
+
ts: new Date().toISOString(),
|
|
158
|
+
type: "ai_prompt",
|
|
159
|
+
tool,
|
|
160
|
+
prompt: truncated,
|
|
161
|
+
}
|
|
162
|
+
if (sessionId) event.sessionId = sessionId
|
|
163
|
+
|
|
164
|
+
// 1. Append to activity.jsonl (for submission ZIP)
|
|
165
|
+
const logPath = path.join(litmusDir, "activity.jsonl")
|
|
166
|
+
try {
|
|
167
|
+
fs.appendFileSync(logPath, JSON.stringify(event) + "\n")
|
|
168
|
+
} catch {
|
|
169
|
+
// Non-critical
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// 2. Upload to server (fire-and-forget, for real-time backup)
|
|
173
|
+
const config = readConfig(litmusDir)
|
|
174
|
+
uploadEvent(config, event)
|
|
175
|
+
|
|
176
|
+
// No explicit process.exit() — the event loop drains naturally.
|
|
177
|
+
// The HTTP socket is unref'd so it won't keep the process alive.
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
main().catch(() => process.exit(0))
|
package/dist/lib/watcher.cjs
CHANGED
|
@@ -160,6 +160,32 @@ function emitFileEvent(type, relPath) {
|
|
|
160
160
|
emit(event)
|
|
161
161
|
}
|
|
162
162
|
|
|
163
|
+
// ── Burst-edit detection (AI-driven multi-file edits) ────────────
|
|
164
|
+
const BURST_WINDOW_MS = 2000 // 2 seconds
|
|
165
|
+
const BURST_MIN_FILES = 3 // 3+ distinct files = burst
|
|
166
|
+
const recentEdits = [] // [{ file, ts }]
|
|
167
|
+
|
|
168
|
+
function checkBurstEdit(filename) {
|
|
169
|
+
const now = Date.now()
|
|
170
|
+
recentEdits.push({ file: filename, ts: now })
|
|
171
|
+
// Prune edits outside the window
|
|
172
|
+
while (recentEdits.length > 0 && now - recentEdits[0].ts > BURST_WINDOW_MS) {
|
|
173
|
+
recentEdits.shift()
|
|
174
|
+
}
|
|
175
|
+
// Count distinct files in the window
|
|
176
|
+
const distinctFiles = new Set(recentEdits.map((e) => e.file))
|
|
177
|
+
if (distinctFiles.size >= BURST_MIN_FILES) {
|
|
178
|
+
const files = [...distinctFiles]
|
|
179
|
+
emit({
|
|
180
|
+
ts: new Date().toISOString(),
|
|
181
|
+
type: "burst_edit",
|
|
182
|
+
fileCount: files.length,
|
|
183
|
+
files: files.slice(0, 10), // Cap at 10 filenames
|
|
184
|
+
})
|
|
185
|
+
recentEdits.length = 0 // Reset to avoid duplicate bursts
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
163
189
|
// ── File system watcher (debounced) ──────────────────────────────
|
|
164
190
|
process.on("uncaughtException", (err) => {
|
|
165
191
|
process.stderr.write(`[watcher] uncaughtException: ${err.stack || err}\n`)
|
|
@@ -171,6 +197,9 @@ try {
|
|
|
171
197
|
if (!filename) return
|
|
172
198
|
if (shouldIgnore(filename)) return
|
|
173
199
|
|
|
200
|
+
// Check for burst edits on raw events (before debounce — needs real timing)
|
|
201
|
+
checkBurstEdit(filename)
|
|
202
|
+
|
|
174
203
|
// Debounce per file: collapse multiple events within 500ms into one
|
|
175
204
|
if (debounceTimers.has(filename)) {
|
|
176
205
|
clearTimeout(debounceTimers.get(filename))
|
|
@@ -187,8 +216,9 @@ try {
|
|
|
187
216
|
|
|
188
217
|
process.stderr.write("[watcher] file watcher started\n")
|
|
189
218
|
} catch (err) {
|
|
190
|
-
|
|
191
|
-
|
|
219
|
+
// fs.watch with recursive: true is not supported on Linux < Node 22.
|
|
220
|
+
// Continue without file watching — heartbeats and git commit polling still work.
|
|
221
|
+
process.stderr.write(`[watcher] file watching unavailable: ${err.message} (heartbeat + git tracking still active)\n`)
|
|
192
222
|
}
|
|
193
223
|
|
|
194
224
|
// ── Heartbeats ───────────────────────────────────────────────────
|
|
@@ -290,6 +320,8 @@ const AI_TOOL_PATTERNS = {
|
|
|
290
320
|
claude: /\bclaude\b/,
|
|
291
321
|
aider: /\baider\b/,
|
|
292
322
|
codeium: /\bcodeium\b/,
|
|
323
|
+
codex: /\bcodex\b/,
|
|
324
|
+
copilot: /\bcopilot\b/,
|
|
293
325
|
}
|
|
294
326
|
|
|
295
327
|
function detectEnvironment() {
|
package/dist/lib/zip.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zip.d.ts","sourceRoot":"","sources":["../../src/lib/zip.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zip.d.ts","sourceRoot":"","sources":["../../src/lib/zip.ts"],"names":[],"mappings":"AAqCA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,6DAA6D;IAC7D,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAC1C;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAwDhF"}
|
package/dist/lib/zip.js
CHANGED
|
@@ -3,10 +3,10 @@ import path from "path";
|
|
|
3
3
|
import os from "os";
|
|
4
4
|
import fg from "fast-glob";
|
|
5
5
|
import { Zip } from "zip-lib";
|
|
6
|
-
// Directories always excluded from submissions.
|
|
7
6
|
// NOTE: .git is intentionally NOT excluded — git history is included so the
|
|
8
7
|
// analysis backend can run parse_git_history() on the submission.
|
|
9
|
-
|
|
8
|
+
// Directories always excluded (generates dir/** and **/dir/** patterns).
|
|
9
|
+
const EXCLUDE_DIRS = [
|
|
10
10
|
"node_modules",
|
|
11
11
|
"__pycache__",
|
|
12
12
|
"venv",
|
|
@@ -18,6 +18,9 @@ const ALWAYS_EXCLUDE = [
|
|
|
18
18
|
"dist",
|
|
19
19
|
".gradle",
|
|
20
20
|
".idea",
|
|
21
|
+
];
|
|
22
|
+
// Files and glob patterns always excluded (generates entry and **/entry patterns).
|
|
23
|
+
const EXCLUDE_FILES = [
|
|
21
24
|
".DS_Store",
|
|
22
25
|
"*.pyc",
|
|
23
26
|
"*.class",
|
|
@@ -48,10 +51,24 @@ export async function createSubmissionZip(projectDir) {
|
|
|
48
51
|
followSymbolicLinks: false,
|
|
49
52
|
ignore: ignoredGlobs,
|
|
50
53
|
});
|
|
51
|
-
// Always include
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
// Always include .litmus diagnostic files if they exist (hidden from reviewer file browser).
|
|
55
|
+
// Cap watcher.err at 256KB — it can grow large on repeated polling errors.
|
|
56
|
+
const WATCHER_ERR_MAX = 256 * 1024;
|
|
57
|
+
for (const litmusFile of [".litmus/activity.jsonl", ".litmus/watcher.err"]) {
|
|
58
|
+
const abs = path.join(projectDir, litmusFile);
|
|
59
|
+
if (!existsSync(abs) || files.includes(litmusFile))
|
|
60
|
+
continue;
|
|
61
|
+
if (litmusFile === ".litmus/watcher.err") {
|
|
62
|
+
try {
|
|
63
|
+
const size = statSync(abs).size;
|
|
64
|
+
if (size > WATCHER_ERR_MAX)
|
|
65
|
+
continue; // skip oversized error log
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
files.push(litmusFile);
|
|
55
72
|
}
|
|
56
73
|
// Measure uncompressed sizes and track per-directory totals
|
|
57
74
|
let uncompressedBytes = 0;
|
|
@@ -79,15 +96,15 @@ export async function createSubmissionZip(projectDir) {
|
|
|
79
96
|
}
|
|
80
97
|
function buildIgnoreGlobs(projectDir) {
|
|
81
98
|
const patterns = [];
|
|
82
|
-
// Always-excluded
|
|
83
|
-
for (const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
99
|
+
// Always-excluded directories
|
|
100
|
+
for (const dir of EXCLUDE_DIRS) {
|
|
101
|
+
patterns.push(`${dir}/**`);
|
|
102
|
+
patterns.push(`**/${dir}/**`);
|
|
103
|
+
}
|
|
104
|
+
// Always-excluded files and globs
|
|
105
|
+
for (const file of EXCLUDE_FILES) {
|
|
106
|
+
patterns.push(file);
|
|
107
|
+
patterns.push(`**/${file}`);
|
|
91
108
|
}
|
|
92
109
|
// Basic .gitignore support
|
|
93
110
|
const gitignorePath = path.join(projectDir, ".gitignore");
|
package/dist/lib/zip.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zip.js","sourceRoot":"","sources":["../../src/lib/zip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AACvD,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,EAAE,MAAM,WAAW,CAAA;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAE7B,
|
|
1
|
+
{"version":3,"file":"zip.js","sourceRoot":"","sources":["../../src/lib/zip.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staging.d.ts","sourceRoot":"","sources":["../src/staging.ts"],"names":[],"mappings":""}
|
package/dist/staging.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staging.js","sourceRoot":"","sources":["../src/staging.ts"],"names":[],"mappings":";;AACA,kEAAkE;AAClE,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,4BAA4B,CAAC;AAC1D,MAAM,CAAC,YAAY,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "litmus-cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.18",
|
|
4
4
|
"description": "CLI tool for Litmus engineering assessments",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "elenazhao",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"bin": {
|
|
10
|
-
"litmus": "dist/index.js"
|
|
10
|
+
"litmus": "dist/index.js",
|
|
11
|
+
"litmus-staging": "dist/staging.js"
|
|
11
12
|
},
|
|
12
13
|
"scripts": {
|
|
13
|
-
"build": "tsc && cp src/lib/watcher.cjs dist/lib/watcher.cjs",
|
|
14
|
+
"build": "tsc && cp src/lib/watcher.cjs dist/lib/watcher.cjs && cp src/lib/hook-logger.cjs dist/lib/hook-logger.cjs",
|
|
14
15
|
"dev": "tsc --watch",
|
|
15
16
|
"start": "node dist/index.js",
|
|
16
17
|
"prepublishOnly": "npm run build"
|