litmus-cli 1.3.4 → 1.3.7
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 +30 -4
- 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 +143 -30
- 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 +3 -3
- 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 +133 -35
- package/dist/lib/watcher.js.map +1 -1
- package/dist/lib/zip.d.ts.map +1 -1
- package/dist/lib/zip.js +45 -9
- package/dist/lib/zip.js.map +1 -1
- package/package.json +3 -2
package/dist/lib/zip.js
CHANGED
|
@@ -6,13 +6,22 @@ import { Zip } from "zip-lib";
|
|
|
6
6
|
// NOTE: .git is intentionally NOT excluded — git history is included so the
|
|
7
7
|
// analysis backend can run parse_git_history() on the submission.
|
|
8
8
|
// Directories always excluded (generates dir/** and **/dir/** patterns).
|
|
9
|
+
//
|
|
10
|
+
// `.env` is deliberately NOT in this list even though it's a Python
|
|
11
|
+
// virtualenv convention: fast-glob's `.env/**` pattern silently matches
|
|
12
|
+
// the file `.env` too, so listing it here strips every candidate's
|
|
13
|
+
// top-level .env file from their submission. That broke at least one
|
|
14
|
+
// Mercor Search submission (Caroline Smyth, 2026-06-10) — her code did
|
|
15
|
+
// `os.environ["TURBOPUFFER_API_KEY"]` but her .env never made it into
|
|
16
|
+
// the zip. `venv` / `.venv` / `env` still cover the common virtualenv
|
|
17
|
+
// names; the rare case of someone using `.env/` for a virtualenv just
|
|
18
|
+
// means a slightly larger zip, not broken grading.
|
|
9
19
|
const EXCLUDE_DIRS = [
|
|
10
20
|
"node_modules",
|
|
11
21
|
"__pycache__",
|
|
12
22
|
"venv",
|
|
13
23
|
".venv",
|
|
14
24
|
"env",
|
|
15
|
-
".env",
|
|
16
25
|
"target", // Rust/Java build output
|
|
17
26
|
"build",
|
|
18
27
|
"dist",
|
|
@@ -54,7 +63,12 @@ export async function createSubmissionZip(projectDir) {
|
|
|
54
63
|
// Always include .litmus diagnostic files if they exist (hidden from reviewer file browser).
|
|
55
64
|
// Cap watcher.err at 256KB — it can grow large on repeated polling errors.
|
|
56
65
|
const WATCHER_ERR_MAX = 256 * 1024;
|
|
57
|
-
|
|
66
|
+
const LITMUS_ALWAYS_INCLUDE = [
|
|
67
|
+
".litmus/activity.jsonl",
|
|
68
|
+
".litmus/watcher.err",
|
|
69
|
+
".litmus/setup_failed.json",
|
|
70
|
+
];
|
|
71
|
+
for (const litmusFile of LITMUS_ALWAYS_INCLUDE) {
|
|
58
72
|
const abs = path.join(projectDir, litmusFile);
|
|
59
73
|
if (!existsSync(abs) || files.includes(litmusFile))
|
|
60
74
|
continue;
|
|
@@ -106,24 +120,46 @@ function buildIgnoreGlobs(projectDir) {
|
|
|
106
120
|
patterns.push(file);
|
|
107
121
|
patterns.push(`**/${file}`);
|
|
108
122
|
}
|
|
109
|
-
// Basic .gitignore support
|
|
123
|
+
// Basic .gitignore support — not a full implementation of the gitignore
|
|
124
|
+
// spec, but enough to honor the common patterns candidates write.
|
|
125
|
+
//
|
|
126
|
+
// We handle:
|
|
127
|
+
// - bare names ("foo") → match foo anywhere
|
|
128
|
+
// - directory patterns ("foo/") → match foo/ anywhere
|
|
129
|
+
// - root-anchored patterns ("/foo", "/foo/") → match only at the repo root
|
|
130
|
+
//
|
|
131
|
+
// We skip:
|
|
132
|
+
// - negation lines ("!foo"): would require re-including a previously
|
|
133
|
+
// excluded path, which fast-glob's `ignore` doesn't model the same way.
|
|
134
|
+
// Honoring negation badly is worse than ignoring it — a candidate who
|
|
135
|
+
// wrote "!important.env" would silently still have it excluded if we
|
|
136
|
+
// forward "!important.env" verbatim. Skipping the negation line means
|
|
137
|
+
// the prior exclusion stands, which matches the candidate's intent
|
|
138
|
+
// less well but is at least predictable.
|
|
110
139
|
const gitignorePath = path.join(projectDir, ".gitignore");
|
|
111
140
|
if (existsSync(gitignorePath)) {
|
|
112
141
|
try {
|
|
113
142
|
const lines = readFileSync(gitignorePath, "utf8")
|
|
114
143
|
.split("\n")
|
|
115
|
-
.map((l) => l.trim())
|
|
116
|
-
.filter((l) => l && !l.startsWith("#"));
|
|
117
|
-
for (const
|
|
144
|
+
.map((l) => l.replace(/\s+#.*$/, "").trim())
|
|
145
|
+
.filter((l) => l && !l.startsWith("#") && !l.startsWith("!"));
|
|
146
|
+
for (const rawLine of lines) {
|
|
147
|
+
const rootAnchored = rawLine.startsWith("/");
|
|
148
|
+
let line = rootAnchored ? rawLine.slice(1) : rawLine;
|
|
149
|
+
if (!line)
|
|
150
|
+
continue;
|
|
118
151
|
if (line.endsWith("/")) {
|
|
119
|
-
// Directory pattern
|
|
120
152
|
const dir = line.slice(0, -1);
|
|
153
|
+
if (!dir)
|
|
154
|
+
continue;
|
|
121
155
|
patterns.push(`${dir}/**`);
|
|
122
|
-
|
|
156
|
+
if (!rootAnchored)
|
|
157
|
+
patterns.push(`**/${dir}/**`);
|
|
123
158
|
}
|
|
124
159
|
else {
|
|
125
160
|
patterns.push(line);
|
|
126
|
-
|
|
161
|
+
if (!rootAnchored)
|
|
162
|
+
patterns.push(`**/${line}`);
|
|
127
163
|
}
|
|
128
164
|
}
|
|
129
165
|
}
|
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,4EAA4E;AAC5E,kEAAkE;AAElE,yEAAyE;AACzE,MAAM,YAAY,GAAG;IACnB,cAAc;IACd,aAAa;IACb,MAAM;IACN,OAAO;IACP,KAAK;IACL,
|
|
1
|
+
{"version":3,"file":"zip.js","sourceRoot":"","sources":["../../src/lib/zip.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "litmus-cli",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.7",
|
|
4
4
|
"description": "CLI tool for Litmus engineering assessments",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "elenazhao",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"litmus": "dist/index.js"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
|
-
"build": "tsc &&
|
|
22
|
+
"build": "tsc && node -e \"require('fs').cpSync('src/lib/hook-logger.cjs','dist/lib/hook-logger.cjs')\"",
|
|
23
23
|
"dev": "tsc --watch",
|
|
24
24
|
"start": "node dist/index.js",
|
|
25
25
|
"prepublishOnly": "npm run build",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"chalk": "^5.3.0",
|
|
32
|
+
"chokidar": "^5.0.0",
|
|
32
33
|
"commander": "^12.1.0",
|
|
33
34
|
"fast-glob": "^3.3.3",
|
|
34
35
|
"ora": "^8.1.1",
|