litmus-cli 1.5.0-beta.1 → 1.5.0-beta.3

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 (87) hide show
  1. package/README.md +19 -2
  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 +2 -1
  5. package/dist/commands/connect.js.map +1 -1
  6. package/dist/commands/init.d.ts.map +1 -1
  7. package/dist/commands/init.js +25 -6
  8. package/dist/commands/init.js.map +1 -1
  9. package/dist/commands/pause.d.ts.map +1 -1
  10. package/dist/commands/pause.js +12 -2
  11. package/dist/commands/pause.js.map +1 -1
  12. package/dist/index.js +10 -232
  13. package/dist/index.js.map +1 -1
  14. package/dist/lib/ai-tracking.d.ts +4 -0
  15. package/dist/lib/ai-tracking.d.ts.map +1 -1
  16. package/dist/lib/ai-tracking.js +68 -0
  17. package/dist/lib/ai-tracking.js.map +1 -1
  18. package/dist/lib/api.d.ts +2 -0
  19. package/dist/lib/api.d.ts.map +1 -1
  20. package/dist/lib/api.js +28 -8
  21. package/dist/lib/api.js.map +1 -1
  22. package/dist/lib/capture-notice-ping.d.ts +7 -27
  23. package/dist/lib/capture-notice-ping.d.ts.map +1 -1
  24. package/dist/lib/capture-notice-ping.js +10 -42
  25. package/dist/lib/capture-notice-ping.js.map +1 -1
  26. package/dist/lib/capture-nudge.d.ts +5 -7
  27. package/dist/lib/capture-nudge.d.ts.map +1 -1
  28. package/dist/lib/capture-nudge.js +19 -35
  29. package/dist/lib/capture-nudge.js.map +1 -1
  30. package/dist/lib/capture-selftest.d.ts +9 -0
  31. package/dist/lib/capture-selftest.d.ts.map +1 -1
  32. package/dist/lib/capture-selftest.js +27 -2
  33. package/dist/lib/capture-selftest.js.map +1 -1
  34. package/dist/lib/codex-capture-health.d.ts +21 -0
  35. package/dist/lib/codex-capture-health.d.ts.map +1 -0
  36. package/dist/lib/codex-capture-health.js +82 -0
  37. package/dist/lib/codex-capture-health.js.map +1 -0
  38. package/dist/lib/environment-checks.d.ts +1 -3
  39. package/dist/lib/environment-checks.d.ts.map +1 -1
  40. package/dist/lib/environment-checks.js +2 -16
  41. package/dist/lib/environment-checks.js.map +1 -1
  42. package/dist/lib/file-monitor.d.ts +18 -0
  43. package/dist/lib/file-monitor.d.ts.map +1 -0
  44. package/dist/lib/file-monitor.js +87 -0
  45. package/dist/lib/file-monitor.js.map +1 -0
  46. package/dist/lib/hook-logger.cjs +76 -11
  47. package/dist/lib/hosted-capture.d.ts +4 -2
  48. package/dist/lib/hosted-capture.d.ts.map +1 -1
  49. package/dist/lib/hosted-capture.js +74 -16
  50. package/dist/lib/hosted-capture.js.map +1 -1
  51. package/dist/lib/init-location.d.ts +4 -0
  52. package/dist/lib/init-location.d.ts.map +1 -0
  53. package/dist/lib/init-location.js +36 -0
  54. package/dist/lib/init-location.js.map +1 -0
  55. package/dist/lib/mac-notifier.d.ts +4 -0
  56. package/dist/lib/mac-notifier.d.ts.map +1 -0
  57. package/dist/lib/mac-notifier.js +72 -0
  58. package/dist/lib/mac-notifier.js.map +1 -0
  59. package/dist/lib/node-version.d.ts +8 -0
  60. package/dist/lib/node-version.d.ts.map +1 -0
  61. package/dist/lib/node-version.js +23 -0
  62. package/dist/lib/node-version.js.map +1 -0
  63. package/dist/lib/notify.d.ts +4 -5
  64. package/dist/lib/notify.d.ts.map +1 -1
  65. package/dist/lib/notify.js +24 -25
  66. package/dist/lib/notify.js.map +1 -1
  67. package/dist/lib/portal-launcher.d.ts.map +1 -1
  68. package/dist/lib/portal-launcher.js +6 -1
  69. package/dist/lib/portal-launcher.js.map +1 -1
  70. package/dist/lib/tracker.d.ts +1 -0
  71. package/dist/lib/tracker.d.ts.map +1 -1
  72. package/dist/lib/tracker.js +4 -2
  73. package/dist/lib/tracker.js.map +1 -1
  74. package/dist/lib/watcher.js +147 -101
  75. package/dist/lib/watcher.js.map +1 -1
  76. package/dist/lib/workspace-start-wait.d.ts +3 -1
  77. package/dist/lib/workspace-start-wait.d.ts.map +1 -1
  78. package/dist/lib/workspace-start-wait.js +36 -1
  79. package/dist/lib/workspace-start-wait.js.map +1 -1
  80. package/dist/notification-assets/litmus.icns +0 -0
  81. package/dist/notification-assets/litmus.png +0 -0
  82. package/dist/notification-assets/notifier.js +12 -0
  83. package/dist/program.d.ts +2 -0
  84. package/dist/program.d.ts.map +1 -0
  85. package/dist/program.js +236 -0
  86. package/dist/program.js.map +1 -0
  87. package/package.json +5 -5
@@ -0,0 +1,236 @@
1
+ import { runDiagnoseConnection } from "./commands/diagnose-connection.js";
2
+ import { program } from "commander";
3
+ import { cursorSessionFlags } from "./lib/cursor-session.js";
4
+ import { runInit } from "./commands/init.js";
5
+ import { runConnect } from "./commands/connect.js";
6
+ import { runSsh } from "./commands/ssh.js";
7
+ import { runForward } from "./commands/forward.js";
8
+ import { runPush } from "./commands/push.js";
9
+ import { runSubmit } from "./commands/submit.js";
10
+ import { runPause } from "./commands/pause.js";
11
+ import { runStatus } from "./commands/status.js";
12
+ import { runDoctor } from "./commands/doctor.js";
13
+ import { runSetupCheck } from "./commands/setup-check.js";
14
+ import { runEnv } from "./commands/env.js";
15
+ import { FatalError } from "./lib/errors.js";
16
+ import { CLI_VERSION } from "./lib/version.js";
17
+ import { checkNodeVersion } from "./lib/environment-checks.js";
18
+ import { MISSING_TOKEN_HELP, readTokenArgument } from "./lib/workspace-token.js";
19
+ /**
20
+ * The token for a command that takes one (ENG-3035): the argument, `-` for
21
+ * stdin, or LITMUS_ASSESSMENT_TOKEN. Exits with the help line when none is given.
22
+ */
23
+ async function tokenOrExit(arg) {
24
+ const token = await readTokenArgument(arg);
25
+ if (!token) {
26
+ console.error(MISSING_TOKEN_HELP);
27
+ process.exit(1);
28
+ }
29
+ return token;
30
+ }
31
+ // Refuse before token handling or any request that can start the assessment clock.
32
+ function requireSupportedNode() {
33
+ const check = checkNodeVersion();
34
+ if (check.status === "fail")
35
+ throw new Error(check.detail);
36
+ }
37
+ program
38
+ .name("litmus")
39
+ .description("Litmus engineering assessment CLI")
40
+ .version(CLI_VERSION);
41
+ program
42
+ .command("init [token]")
43
+ .description("Download and set up a Litmus assessment")
44
+ .action(async (token) => {
45
+ try {
46
+ requireSupportedNode();
47
+ await runInit(await tokenOrExit(token));
48
+ }
49
+ catch (err) {
50
+ if (err instanceof FatalError)
51
+ return;
52
+ console.error(err instanceof Error ? err.message : String(err));
53
+ process.exit(1);
54
+ }
55
+ });
56
+ cursorSessionFlags(program.command("connect [token]"))
57
+ .description("Open your assessment workspace in your editor of choice (codespace)")
58
+ .option("--ide <editor>", "Where to open: vscode (native VS Code), cursor (native Cursor), browser, or ssh")
59
+ .option("--verbose", "Print what your editor wrote while opening, for support")
60
+ .option("--skills", "Import your AI skills (~/.claude/skills, ~/.agents/skills, ...) into the workspace without asking")
61
+ .option("--no-skills", "Don't offer to import your AI skills")
62
+ .option("--forget-unavailable-preview", "Stop local capture for a removed preview service; does not submit that assessment")
63
+ .action(async (token, opts) => {
64
+ try {
65
+ requireSupportedNode();
66
+ await runConnect(token, opts.ide, { verbose: opts.verbose, skills: opts.skills, cursorAgentWindow: opts.cursorAgentWindow, cursorSessionCleanup: opts.cursorSessionCleanup, forgetUnavailablePreview: opts.forgetUnavailablePreview });
67
+ }
68
+ catch (err) {
69
+ if (err instanceof FatalError)
70
+ return;
71
+ console.error(err instanceof Error ? err.message : String(err));
72
+ process.exit(1);
73
+ }
74
+ });
75
+ program
76
+ .command("ssh <alias>")
77
+ .description("Open a configured workspace SSH shell with automatic localhost forwarding")
78
+ .action(async (alias) => {
79
+ try {
80
+ await runSsh(alias);
81
+ }
82
+ catch (err) {
83
+ console.error(err instanceof Error ? err.message : String(err));
84
+ process.exitCode = 1;
85
+ }
86
+ });
87
+ program
88
+ .command("diagnose-connection [token]")
89
+ .description("Collect connection diagnostics without changing your editor or workspace")
90
+ .option("--ide <editor>", "Editor to inspect: cursor or vscode", "cursor")
91
+ .option("--log <file>", "Classify the last 64 KiB of a Remote-SSH log locally; raw contents are not uploaded")
92
+ .action(async (token, opts) => {
93
+ try {
94
+ await runDiagnoseConnection(await tokenOrExit(token), opts);
95
+ }
96
+ catch (err) {
97
+ console.error(err instanceof Error ? err.message : String(err));
98
+ process.exitCode = 1;
99
+ }
100
+ });
101
+ program
102
+ .command("forward [token] [ports...]")
103
+ .description("Automatically forward workspace apps to localhost; optionally choose ports (5173, or 5174:5173)")
104
+ .option("--verbose", "Print more detail, for support")
105
+ .action(async (token, ports, opts) => {
106
+ try {
107
+ await runForward(await tokenOrExit(token), ports, { verbose: opts.verbose });
108
+ }
109
+ catch (err) {
110
+ if (err instanceof FatalError)
111
+ return;
112
+ console.error(err instanceof Error ? err.message : String(err));
113
+ process.exit(1);
114
+ }
115
+ });
116
+ program
117
+ .command("push")
118
+ .description("Submit your VM workspace (codespace) for grading")
119
+ // OPTIONAL, unlike `init`/`connect` (ENG-2064). Inside the workspace the token
120
+ // comes from the environment the host injected at container start, so a candidate
121
+ // in their own terminal types `litmus push` and nothing else. On a laptop it is
122
+ // still required in practice: with no argument and no injected token the command
123
+ // says so and points at the assessment page.
124
+ .argument("[token]", "Assessment token — only needed outside the workspace (it is pre-set inside one)")
125
+ .option("-y, --yes", "Skip confirmation prompt")
126
+ .action(async (token, opts) => {
127
+ try {
128
+ await runPush(token, opts);
129
+ }
130
+ catch (err) {
131
+ if (err instanceof FatalError)
132
+ return;
133
+ console.error(err instanceof Error ? err.message : String(err));
134
+ process.exit(1);
135
+ }
136
+ });
137
+ program
138
+ .command("pause [token]")
139
+ .description("Pause your workspace (codespace) and come back later - your work is kept")
140
+ .action(async (token) => {
141
+ try {
142
+ await runPause(await tokenOrExit(token));
143
+ }
144
+ catch (err) {
145
+ if (err instanceof FatalError)
146
+ return;
147
+ console.error(err instanceof Error ? err.message : String(err));
148
+ process.exit(1);
149
+ }
150
+ });
151
+ program
152
+ .command("submit")
153
+ .description("Submit your assessment code (walkthrough recording happens in the browser)")
154
+ .option("-y, --yes", "Skip confirmation prompt")
155
+ .action(async (opts) => {
156
+ try {
157
+ await runSubmit(opts);
158
+ }
159
+ catch (err) {
160
+ if (err instanceof FatalError)
161
+ return;
162
+ console.error(err instanceof Error ? err.message : String(err));
163
+ process.exit(1);
164
+ }
165
+ });
166
+ program
167
+ .command("doctor")
168
+ .description("Check your assessment setup and repair activity tracking")
169
+ // Positional like `litmus init <token>`, but optional: with a healthy
170
+ // config the token comes from the settings file and nobody types it.
171
+ // Doctor only needs it to restore a missing/corrupted settings file, and
172
+ // prompts for it interactively when it does.
173
+ .argument("[token]", "Assessment token, only needed to restore a missing settings file (doctor asks for it otherwise)")
174
+ .option("--verbose", "Show diagnostic details for support")
175
+ .option("--backfill-prompts", "Recover missed AI prompts from the whole assessment window (recovery also runs automatically when doctor repairs broken tracking)")
176
+ .option("--since <timestamp>", "Only recover prompts after this time (ISO format, e.g. 2026-08-07T19:00:00Z)")
177
+ .option("--all-sessions", "Recover from every AI session on this machine (Claude, Gemini, Copilot, Cursor), not just this folder's")
178
+ .option("--no-backfill", "Skip automatic prompt recovery")
179
+ .option("--here", "Restore a missing settings file in this folder, without looking for your assessment folder below it")
180
+ .action(async (token, opts) => {
181
+ try {
182
+ await runDoctor({ ...opts, token });
183
+ }
184
+ catch (err) {
185
+ if (err instanceof FatalError)
186
+ return;
187
+ console.error(err instanceof Error ? err.message : String(err));
188
+ process.exit(1);
189
+ }
190
+ });
191
+ program
192
+ .command("setup-check")
193
+ .description("Check this machine can run the Litmus CLI, before you start an assessment")
194
+ .option("--verbose", "Show diagnostic details for support")
195
+ .action(async (opts) => {
196
+ try {
197
+ await runSetupCheck(opts);
198
+ }
199
+ catch (err) {
200
+ if (err instanceof FatalError)
201
+ return;
202
+ console.error(err instanceof Error ? err.message : String(err));
203
+ process.exit(1);
204
+ }
205
+ });
206
+ program
207
+ .command("status")
208
+ .description("Show assessment status and stats")
209
+ .action(async () => {
210
+ try {
211
+ await runStatus();
212
+ }
213
+ catch (err) {
214
+ if (err instanceof FatalError)
215
+ return;
216
+ console.error(err instanceof Error ? err.message : String(err));
217
+ process.exit(1);
218
+ }
219
+ });
220
+ program
221
+ .command("env")
222
+ .description("Set the assessment's environment variables in this shell: eval \"$(litmus env)\"")
223
+ .option("--powershell", "Print PowerShell assignments, for: litmus env --powershell | Invoke-Expression")
224
+ .action(async (opts) => {
225
+ try {
226
+ await runEnv(opts);
227
+ }
228
+ catch (err) {
229
+ if (err instanceof FatalError)
230
+ return;
231
+ console.error(err instanceof Error ? err.message : String(err));
232
+ process.exit(1);
233
+ }
234
+ });
235
+ program.parse();
236
+ //# sourceMappingURL=program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.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.5.0-beta.1",
3
+ "version": "1.5.0-beta.3",
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 && node -e \"require('fs').cpSync('src/lib/hook-logger.cjs','dist/lib/hook-logger.cjs');require('fs').cpSync('src/cursor-session','dist/cursor-session',{recursive:true})\"",
22
+ "build": "tsc && node -e \"require('fs').cpSync('src/lib/hook-logger.cjs','dist/lib/hook-logger.cjs');require('fs').cpSync('src/cursor-session','dist/cursor-session',{recursive:true});require('fs').cpSync('src/notification-assets','dist/notification-assets',{recursive:true})\"",
23
23
  "dev": "tsc --watch",
24
24
  "start": "node dist/index.js",
25
25
  "prepublishOnly": "node scripts/guard-publish-tag.cjs && npm run build",
@@ -30,7 +30,7 @@
30
30
  "dependencies": {
31
31
  "chalk": "^5.3.0",
32
32
  "chokidar": "^5.0.0",
33
- "commander": "^12.1.0",
33
+ "commander": "^15.0.0",
34
34
  "fast-glob": "^3.3.3",
35
35
  "ora": "^9.4.1",
36
36
  "proper-lockfile": "^4.1.2",
@@ -39,7 +39,7 @@
39
39
  "zod": "^4.6.7"
40
40
  },
41
41
  "devDependencies": {
42
- "@types/node": "^20.19.39",
42
+ "@types/node": "^24.0.0",
43
43
  "@types/pg": "^8.23.1",
44
44
  "@types/proper-lockfile": "^4.1.4",
45
45
  "@types/unzipper": "^0.10.10",
@@ -48,6 +48,6 @@
48
48
  "vitest": "^4.1.12"
49
49
  },
50
50
  "engines": {
51
- "node": ">=20.19.0"
51
+ "node": ">=24.0.0"
52
52
  }
53
53
  }