litmus-cli 1.4.70 → 1.4.72-capturetest.0
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 +52 -9
- package/dist/commands/connect.d.ts +33 -2
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +119 -45
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/forward.d.ts +7 -16
- package/dist/commands/forward.d.ts.map +1 -1
- package/dist/commands/forward.js +97 -75
- package/dist/commands/forward.js.map +1 -1
- package/dist/commands/ssh.d.ts +3 -0
- package/dist/commands/ssh.d.ts.map +1 -0
- package/dist/commands/ssh.js +50 -0
- package/dist/commands/ssh.js.map +1 -0
- package/dist/index.js +16 -5
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +7 -1
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +38 -8
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/auto-forward.d.ts +31 -0
- package/dist/lib/auto-forward.d.ts.map +1 -0
- package/dist/lib/auto-forward.js +258 -0
- package/dist/lib/auto-forward.js.map +1 -0
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/connection-attempt.d.ts +13 -2
- package/dist/lib/connection-attempt.d.ts.map +1 -1
- package/dist/lib/connection-attempt.js +16 -3
- package/dist/lib/connection-attempt.js.map +1 -1
- package/dist/lib/cursor-session.d.ts +6 -0
- package/dist/lib/cursor-session.d.ts.map +1 -1
- package/dist/lib/cursor-session.js +21 -1
- package/dist/lib/cursor-session.js.map +1 -1
- package/dist/lib/environment-checks.d.ts +1 -2
- package/dist/lib/environment-checks.d.ts.map +1 -1
- package/dist/lib/environment-checks.js +4 -9
- package/dist/lib/environment-checks.js.map +1 -1
- package/dist/lib/hook-logger.cjs +79 -22
- package/dist/lib/hosted-capture.d.ts +21 -0
- package/dist/lib/hosted-capture.d.ts.map +1 -0
- package/dist/lib/hosted-capture.js +229 -0
- package/dist/lib/hosted-capture.js.map +1 -0
- package/dist/lib/hosted-watcher.d.ts +2 -0
- package/dist/lib/hosted-watcher.d.ts.map +1 -0
- package/dist/lib/hosted-watcher.js +176 -0
- package/dist/lib/hosted-watcher.js.map +1 -0
- package/dist/lib/install-ssh-forward-hook.d.ts +6 -0
- package/dist/lib/install-ssh-forward-hook.d.ts.map +1 -0
- package/dist/lib/install-ssh-forward-hook.js +57 -0
- package/dist/lib/install-ssh-forward-hook.js.map +1 -0
- package/dist/lib/port-forward.d.ts +16 -0
- package/dist/lib/port-forward.d.ts.map +1 -0
- package/dist/lib/port-forward.js +46 -0
- package/dist/lib/port-forward.js.map +1 -0
- package/dist/lib/session-state.d.ts +61 -0
- package/dist/lib/session-state.d.ts.map +1 -0
- package/dist/lib/session-state.js +92 -0
- package/dist/lib/session-state.js.map +1 -0
- package/dist/lib/ssh-client.d.ts +11 -2
- package/dist/lib/ssh-client.d.ts.map +1 -1
- package/dist/lib/ssh-client.js +66 -7
- package/dist/lib/ssh-client.js.map +1 -1
- package/dist/lib/ssh-forward-hook.d.ts +13 -0
- package/dist/lib/ssh-forward-hook.d.ts.map +1 -0
- package/dist/lib/ssh-forward-hook.js +93 -0
- package/dist/lib/ssh-forward-hook.js.map +1 -0
- package/dist/lib/tracker.d.ts.map +1 -1
- package/dist/lib/tracker.js +7 -2
- package/dist/lib/tracker.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import http from "http";
|
|
2
|
+
import net from "net";
|
|
3
|
+
import { startManagedSshTunnel } from "./ssh-client.js";
|
|
4
|
+
const DISCOVERY_PORT = 3998;
|
|
5
|
+
const MAX_PORTS = 256;
|
|
6
|
+
const DENIED = new Set([2222, 3000, DISCOVERY_PORT, 3999, 8053, 8080, 8081, 8443, 9090]);
|
|
7
|
+
const POLL_MS = 2000;
|
|
8
|
+
const RETRY_MS = 2000;
|
|
9
|
+
const CONNECT_MS = 20000;
|
|
10
|
+
export function parseDiscoveredPorts(body) {
|
|
11
|
+
const data = body;
|
|
12
|
+
if (!data || data.version !== 1 || !Array.isArray(data.ports) || data.ports.length > MAX_PORTS ||
|
|
13
|
+
data.ports.some((p) => !Number.isInteger(p) || p < 1024 || p > 65535 || DENIED.has(p))) {
|
|
14
|
+
throw new Error("Invalid workspace port discovery response");
|
|
15
|
+
}
|
|
16
|
+
return [...new Set(data.ports)].sort((a, b) => a - b);
|
|
17
|
+
}
|
|
18
|
+
/** Bounded HTTP over our loopback SSH forward; no proxy env, tokens or remote exec. */
|
|
19
|
+
export function readDiscoveredPorts(local, signal) {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
const req = http.get({ host: "127.0.0.1", port: local, path: "/ports", agent: false, signal }, (res) => {
|
|
22
|
+
let body = "";
|
|
23
|
+
res.setEncoding("utf8");
|
|
24
|
+
res.on("data", (chunk) => {
|
|
25
|
+
body += chunk;
|
|
26
|
+
if (body.length > 8192)
|
|
27
|
+
req.destroy(new Error("Discovery response too large"));
|
|
28
|
+
});
|
|
29
|
+
res.on("error", reject);
|
|
30
|
+
res.on("end", () => {
|
|
31
|
+
try {
|
|
32
|
+
if (res.statusCode !== 200)
|
|
33
|
+
throw new Error("Workspace discovery unavailable");
|
|
34
|
+
resolve(parseDiscoveredPorts(JSON.parse(body)));
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
reject(err);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
const deadline = setTimeout(() => req.destroy(new Error("Discovery request timed out")), 3000);
|
|
42
|
+
req.on("error", reject);
|
|
43
|
+
req.on("close", () => clearTimeout(deadline));
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
export async function unusedLocalPort(excluded = new Set()) {
|
|
47
|
+
const held = [];
|
|
48
|
+
try {
|
|
49
|
+
for (;;) {
|
|
50
|
+
const server = net.createServer();
|
|
51
|
+
held.push(server);
|
|
52
|
+
await new Promise((resolve, reject) => {
|
|
53
|
+
server.once("error", reject);
|
|
54
|
+
server.listen(0, "127.0.0.1", resolve);
|
|
55
|
+
});
|
|
56
|
+
const port = server.address().port;
|
|
57
|
+
if (!excluded.has(port))
|
|
58
|
+
return port;
|
|
59
|
+
// Hold rejected sockets until selection finishes so the allocator cannot
|
|
60
|
+
// keep returning the same excluded port. At most excluded.size + 1 sockets.
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
await Promise.all(held.map((s) => new Promise((resolve) => s.close(() => resolve()))));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** The value, or undefined as soon as `signal` aborts: Ctrl+C never waits on Litmus. */
|
|
68
|
+
function unlessStopped(value, signal) {
|
|
69
|
+
if (signal.aborted)
|
|
70
|
+
return Promise.resolve(undefined);
|
|
71
|
+
return new Promise((resolve, reject) => {
|
|
72
|
+
const finish = () => resolve(undefined);
|
|
73
|
+
signal.addEventListener("abort", finish, { once: true });
|
|
74
|
+
value.then(resolve, reject).finally(() => signal.removeEventListener("abort", finish));
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function pause(ms, signal) {
|
|
78
|
+
return new Promise((resolve) => {
|
|
79
|
+
if (signal.aborted) {
|
|
80
|
+
resolve();
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const finish = () => { clearTimeout(timer); signal.removeEventListener("abort", finish); resolve(); };
|
|
84
|
+
const timer = setTimeout(finish, ms);
|
|
85
|
+
signal.addEventListener("abort", finish, { once: true });
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/** One signal owner and reconciliation loop; adding a port never restarts another. */
|
|
89
|
+
export async function autoForward(alias, network, overrides = {}, externalSignal, options = {}) {
|
|
90
|
+
const d = { ...network, start: startManagedSshTunnel, read: readDiscoveredPorts,
|
|
91
|
+
reserve: unusedLocalPort, log: console.log, now: Date.now, pause, ...overrides };
|
|
92
|
+
const abort = new AbortController();
|
|
93
|
+
const stop = () => abort.abort();
|
|
94
|
+
if (options.handleSignals !== false) {
|
|
95
|
+
process.on("SIGINT", stop);
|
|
96
|
+
process.on("SIGTERM", stop);
|
|
97
|
+
}
|
|
98
|
+
externalSignal?.addEventListener("abort", stop, { once: true });
|
|
99
|
+
if (externalSignal?.aborted)
|
|
100
|
+
stop();
|
|
101
|
+
const entries = new Map();
|
|
102
|
+
let control;
|
|
103
|
+
const entry = (local, remote) => ({ local, remote, done: false, status: 0,
|
|
104
|
+
ready: false, announced: false, started: 0, ended: 0, failures: 0, next: 0, blocked: false });
|
|
105
|
+
const hint = (port) => `${port === 65535 ? 65534 : port + 1}:${port}`;
|
|
106
|
+
let lastPoll = -Infinity;
|
|
107
|
+
let lastSuccess = d.now();
|
|
108
|
+
let everDiscovered = false;
|
|
109
|
+
let warned = false;
|
|
110
|
+
let limitWarned = false;
|
|
111
|
+
let closureCheck;
|
|
112
|
+
async function tick(e, isControl = false) {
|
|
113
|
+
if (abort.signal.aborted)
|
|
114
|
+
return;
|
|
115
|
+
if (e.child && e.done) {
|
|
116
|
+
const ranMs = e.ended - e.started;
|
|
117
|
+
// SSH also exits when access ends intentionally. Check before retrying or
|
|
118
|
+
// reporting a failure, for discovery and individual app connections alike.
|
|
119
|
+
if (e.status !== null) {
|
|
120
|
+
closureCheck ?? (closureCheck = Promise.resolve(d.shouldStop?.(abort.signal)));
|
|
121
|
+
if (await unlessStopped(closureCheck, abort.signal)) {
|
|
122
|
+
stop();
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (abort.signal.aborted)
|
|
127
|
+
return;
|
|
128
|
+
e.child = undefined;
|
|
129
|
+
e.ready = false;
|
|
130
|
+
e.failures = ranMs >= 10000 ? 0 : e.failures + 1;
|
|
131
|
+
if (e.status === null)
|
|
132
|
+
throw new Error("Couldn't start ssh. Install OpenSSH, then run litmus forward again.");
|
|
133
|
+
if (e.failures >= 3) {
|
|
134
|
+
if (isControl) {
|
|
135
|
+
if (![...entries.values()].some((f) => f.ready && !f.done)) {
|
|
136
|
+
throw new Error("Couldn't keep the discovery connection open. Check the workspace and run litmus forward again.");
|
|
137
|
+
}
|
|
138
|
+
d.log(" Discovery connection failed; existing forwards remain open. Retrying in 30 seconds...");
|
|
139
|
+
e.failures = 0;
|
|
140
|
+
e.next = d.now() + 30000;
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
e.blocked = true;
|
|
144
|
+
d.log(` Port ${e.local} could not reconnect. Other forwards remain open. Rerun litmus forward to retry.`);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
e.next = d.now() + RETRY_MS;
|
|
148
|
+
}
|
|
149
|
+
if (e.blocked || abort.signal.aborted)
|
|
150
|
+
return;
|
|
151
|
+
if (!e.child && d.now() >= e.next) {
|
|
152
|
+
if ((isControl && entries.has(e.local)) || !(await d.free(e.local))) {
|
|
153
|
+
if (isControl) {
|
|
154
|
+
e.local = await d.reserve(new Set(entries.keys()));
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (!e.announced)
|
|
158
|
+
d.log(` Port ${e.local} is already in use on this computer. Use another port: litmus forward <token> ${hint(e.remote)}`);
|
|
159
|
+
e.announced = true; // Warn once, but retry if the local port is released.
|
|
160
|
+
e.next = d.now() + POLL_MS;
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (abort.signal.aborted)
|
|
164
|
+
return;
|
|
165
|
+
e.done = false;
|
|
166
|
+
e.ready = false;
|
|
167
|
+
e.started = d.now();
|
|
168
|
+
const child = d.start(d.args(alias, [e]));
|
|
169
|
+
e.child = child;
|
|
170
|
+
void child.exited.then((status) => { e.status = status; e.ended = d.now(); e.done = true; });
|
|
171
|
+
}
|
|
172
|
+
if (e.child && !e.done && !e.ready) {
|
|
173
|
+
const up = await d.listening(e.local);
|
|
174
|
+
if (up && !e.done && !abort.signal.aborted) {
|
|
175
|
+
e.ready = true;
|
|
176
|
+
if (!isControl) {
|
|
177
|
+
d.log(` http://localhost:${e.local}${e.announced ? " (connected)" : ""}`);
|
|
178
|
+
e.announced = true;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else if (d.now() - e.started > CONNECT_MS) {
|
|
182
|
+
await e.child.stop();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
control = entry(await d.reserve(), DISCOVERY_PORT);
|
|
188
|
+
d.log(options.startupMessage ?? " Watching for apps in your workspace. Start a server in its terminal; keep this window open. Ctrl+C stops.");
|
|
189
|
+
while (!abort.signal.aborted) {
|
|
190
|
+
// One assessment answer covers every connection reconciled in this pass.
|
|
191
|
+
closureCheck = undefined;
|
|
192
|
+
await tick(control, true);
|
|
193
|
+
if (abort.signal.aborted)
|
|
194
|
+
break;
|
|
195
|
+
if (control.ready && !control.done && d.now() - lastPoll >= POLL_MS) {
|
|
196
|
+
lastPoll = d.now();
|
|
197
|
+
try {
|
|
198
|
+
const ports = parseDiscoveredPorts({ version: 1, ports: await d.read(control.local, abort.signal) });
|
|
199
|
+
if (warned)
|
|
200
|
+
d.log(" Port discovery reconnected.");
|
|
201
|
+
warned = false;
|
|
202
|
+
everDiscovered = true;
|
|
203
|
+
lastSuccess = d.now();
|
|
204
|
+
for (const port of ports) {
|
|
205
|
+
if (!entries.has(port)) {
|
|
206
|
+
if (entries.size >= MAX_PORTS) {
|
|
207
|
+
if (!limitWarned)
|
|
208
|
+
d.log(" Forward limit reached (256). Rerun with explicit ports to choose another set.");
|
|
209
|
+
limitWarned = true;
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
entries.set(port, entry(port, port));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
if (abort.signal.aborted)
|
|
218
|
+
break;
|
|
219
|
+
if (!warned && d.now() - lastSuccess >= 10000) {
|
|
220
|
+
warned = true;
|
|
221
|
+
d.log(everDiscovered
|
|
222
|
+
? " Port discovery is unavailable; existing forwards remain open. Retrying..."
|
|
223
|
+
: " This workspace is not answering port discovery. An older workspace may need explicit ports: litmus forward <token> 5173. Retrying...");
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (entries.has(control.local)) {
|
|
228
|
+
// The private connection must yield to an app discovered on its port.
|
|
229
|
+
// Select outside every known app port, including not-yet-bound forwards.
|
|
230
|
+
const local = await d.reserve(new Set(entries.keys()));
|
|
231
|
+
await control.child?.stop();
|
|
232
|
+
control = entry(local, DISCOVERY_PORT);
|
|
233
|
+
lastPoll = -Infinity;
|
|
234
|
+
}
|
|
235
|
+
// At most one new application connection per tick; no burst of SSH logins.
|
|
236
|
+
let launched = false;
|
|
237
|
+
for (const e of entries.values()) {
|
|
238
|
+
if (!e.child && launched)
|
|
239
|
+
continue;
|
|
240
|
+
const before = e.child;
|
|
241
|
+
await tick(e);
|
|
242
|
+
if (!before && e.child)
|
|
243
|
+
launched = true;
|
|
244
|
+
}
|
|
245
|
+
await d.pause(250, abort.signal);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
finally {
|
|
249
|
+
stop();
|
|
250
|
+
await Promise.all([control, ...entries.values()].flatMap((e) => e?.child ? [e.child.stop()] : []));
|
|
251
|
+
if (options.handleSignals !== false) {
|
|
252
|
+
process.off("SIGINT", stop);
|
|
253
|
+
process.off("SIGTERM", stop);
|
|
254
|
+
}
|
|
255
|
+
externalSignal?.removeEventListener("abort", stop);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=auto-forward.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-forward.js","sourceRoot":"","sources":["../../src/lib/auto-forward.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.d.ts
CHANGED
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IAOnB,UAAU,CAAC,EAAE,MAAM,CAAA;IAQnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,MAAM,GAAG,IAAI,CAStH;AAKD,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC9E,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI,CASf;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACtF,KAAK,EAAE,MAAM,GACZ;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAsBtF;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAe/C;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB;;;kCAG8B;IAC9B,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,mBAAmB,CAiDpF;AAED;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAwB/D"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,cAAc,CAAA;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IAOnB,UAAU,CAAC,EAAE,MAAM,CAAA;IAQnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,MAAM,GAAG,IAAI,CAStH;AAKD,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC9E,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI,CASf;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EACtF,KAAK,EAAE,MAAM,GACZ;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAsBtF;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAe/C;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB;;;kCAG8B;IAC9B,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,mBAAmB,CAiDpF;AAED;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAwB/D"}
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,CAAA;AAC5C,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { reportEvent } from "./errors.js";
|
|
2
|
-
export type ConnectionStage = "authentication" | "selection" | "skills" | "ssh_key" | "workspace_start" | "workspace_ready" | "ssh_config" | "ssh_preflight" | "editor_resolution" | "extensions" | "editor_launch" | "editor_verify" | "browser_open" | "ssh_handoff" | "diagnostic_collection";
|
|
3
|
-
export type ConnectionResult = "incomplete" | "failed" | "stopped" | "server_detected" | "unverified" | "not_connected" | "browser_requested" | "ssh_ready" | "extension_conflict" | "launch_failed" | "diagnostic_collected";
|
|
2
|
+
export type ConnectionStage = "authentication" | "selection" | "skills" | "ssh_key" | "workspace_start" | "workspace_ready" | "ssh_config" | "ssh_preflight" | "editor_resolution" | "extensions" | "editor_launch" | "editor_verify" | "browser_open" | "ssh_handoff" | "diagnostic_collection" | "tunnel";
|
|
3
|
+
export type ConnectionResult = "incomplete" | "failed" | "stopped" | "server_detected" | "unverified" | "not_connected" | "browser_requested" | "ssh_ready" | "extension_conflict" | "launch_failed" | "diagnostic_collected" | "session_ended" | "tunnel_failed";
|
|
4
|
+
export type SessionStateFact = "open" | "submitted" | "over" | "locked" | "unknown";
|
|
4
5
|
/** Only structured evidence goes over the wire; raw logs, paths and credentials never do. */
|
|
5
6
|
export declare class ConnectionAttempt {
|
|
6
7
|
private readonly send;
|
|
@@ -14,10 +15,20 @@ export declare class ConnectionAttempt {
|
|
|
14
15
|
private signals;
|
|
15
16
|
private facts;
|
|
16
17
|
fact(key: string, value: unknown): void;
|
|
18
|
+
/**
|
|
19
|
+
* ENG-3265: capped at the day the server accepts (`parseConnectionAttempt`), because a
|
|
20
|
+
* `litmus forward` reports its outcome on the attempt that opened it, and a work trial's
|
|
21
|
+
* forward can stay up for longer than that. Past the cap the snapshot would be refused
|
|
22
|
+
* whole, losing the outcome along with the duration.
|
|
23
|
+
*/
|
|
24
|
+
private elapsed;
|
|
17
25
|
constructor(send?: typeof reportEvent);
|
|
18
26
|
stage(stage: ConnectionStage): void;
|
|
19
27
|
editor(route: string, version?: string | null): void;
|
|
20
28
|
finish(result: ConnectionResult): void;
|
|
29
|
+
get outcome(): ConnectionResult;
|
|
30
|
+
/** The fixed labels `evidence` has classified so far. */
|
|
31
|
+
get signalLabels(): readonly string[];
|
|
21
32
|
get needsSupport(): boolean;
|
|
22
33
|
evidence(text: string | null | undefined): void;
|
|
23
34
|
checkpoint(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-attempt.d.ts","sourceRoot":"","sources":["../../src/lib/connection-attempt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,YAAY,GAAG,eAAe,GAAG,mBAAmB,GAAG,YAAY,GAAG,eAAe,GAAG,eAAe,GAAG,cAAc,GAAG,aAAa,GAAG,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"connection-attempt.d.ts","sourceRoot":"","sources":["../../src/lib/connection-attempt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,YAAY,GAAG,eAAe,GAAG,mBAAmB,GAAG,YAAY,GAAG,eAAe,GAAG,eAAe,GAAG,cAAc,GAAG,aAAa,GAAG,uBAAuB,GAAG,QAAQ,CAAA;AAI3S,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,iBAAiB,GAAG,YAAY,GAAG,eAAe,GAAG,mBAAmB,GAAG,WAAW,GAAG,oBAAoB,GAAG,eAAe,GAAG,sBAAsB,GAAG,eAAe,GAAG,eAAe,CAAA;AACjQ,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;AAKnF,6FAA6F;AAC7F,qBAAa,iBAAiB;IAiChB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAhCjC,QAAQ,CAAC,EAAE,sDAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,KAAK,CAAsD;IACnE,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,KAAK,CAAuC;IACpD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAgBvC;;;;;OAKG;IACH,OAAO,CAAC,OAAO;gBACc,IAAI,qBAAc;IAC/C,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAGnC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIpD,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IACtC,IAAI,OAAO,IAAI,gBAAgB,CAAuB;IACtD,yDAAyD;IACzD,IAAI,YAAY,IAAI,SAAS,MAAM,EAAE,CAAwB;IAC7D,IAAI,YAAY,IAAI,OAAO,CAE1B;IACD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;IAgB/C,UAAU,IAAI,IAAI;IAMZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK7B"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { randomUUID } from "crypto";
|
|
2
2
|
import { reportEvent } from "./errors.js";
|
|
3
|
+
/** The longest duration `frontend/lib/connection-attempt.ts` accepts. */
|
|
4
|
+
const MAX_ELAPSED_MS = 86400000;
|
|
3
5
|
/** Only structured evidence goes over the wire; raw logs, paths and credentials never do. */
|
|
4
6
|
export class ConnectionAttempt {
|
|
5
7
|
fact(key, value) {
|
|
@@ -10,6 +12,7 @@ export class ConnectionAttempt {
|
|
|
10
12
|
extensionSetup: ["present", "installed", "failed"],
|
|
11
13
|
sshSelection: ["path", "editor-setting"],
|
|
12
14
|
logEvidence: ["classified", "unavailable", "not-requested"],
|
|
15
|
+
sessionState: ["open", "submitted", "over", "locked", "unknown"],
|
|
13
16
|
};
|
|
14
17
|
if (["editorFound", "conflictingExtension", "wsl"].includes(key) && typeof value === "boolean")
|
|
15
18
|
this.facts[key] = value;
|
|
@@ -22,6 +25,13 @@ export class ConnectionAttempt {
|
|
|
22
25
|
if (key === "editorCommit" && /^[a-f0-9]{40}$/i.test(value))
|
|
23
26
|
this.facts[key] = value;
|
|
24
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* ENG-3265: capped at the day the server accepts (`parseConnectionAttempt`), because a
|
|
30
|
+
* `litmus forward` reports its outcome on the attempt that opened it, and a work trial's
|
|
31
|
+
* forward can stay up for longer than that. Past the cap the snapshot would be refused
|
|
32
|
+
* whole, losing the outcome along with the duration.
|
|
33
|
+
*/
|
|
34
|
+
elapsed() { return Math.min(Date.now() - this.started, MAX_ELAPSED_MS); }
|
|
25
35
|
constructor(send = reportEvent) {
|
|
26
36
|
this.send = send;
|
|
27
37
|
this.id = randomUUID();
|
|
@@ -38,15 +48,18 @@ export class ConnectionAttempt {
|
|
|
38
48
|
}
|
|
39
49
|
stage(stage) {
|
|
40
50
|
if (this.steps.length < 24)
|
|
41
|
-
this.steps.push({ stage, elapsedMs:
|
|
51
|
+
this.steps.push({ stage, elapsedMs: this.elapsed() });
|
|
42
52
|
}
|
|
43
53
|
editor(route, version) {
|
|
44
54
|
this.route = ["cursor", "vscode", "ssh", "browser"].includes(route) ? route : "unknown";
|
|
45
55
|
this.version = version && /^\d+\.\d+\.\d+(?:[-+][\w.-]+)?$/.test(version) ? version : null;
|
|
46
56
|
}
|
|
47
57
|
finish(result) { this.result = result; }
|
|
58
|
+
get outcome() { return this.result; }
|
|
59
|
+
/** The fixed labels `evidence` has classified so far. */
|
|
60
|
+
get signalLabels() { return this.signals; }
|
|
48
61
|
get needsSupport() {
|
|
49
|
-
return ["failed", "stopped", "unverified", "not_connected", "extension_conflict", "launch_failed"].includes(this.result);
|
|
62
|
+
return ["failed", "stopped", "unverified", "not_connected", "extension_conflict", "launch_failed", "tunnel_failed"].includes(this.result);
|
|
50
63
|
}
|
|
51
64
|
evidence(text) {
|
|
52
65
|
// Classify known diagnostics locally. Even an arbitrary vendor log cannot upload
|
|
@@ -70,7 +83,7 @@ export class ConnectionAttempt {
|
|
|
70
83
|
if (this.pending.length >= 4)
|
|
71
84
|
return;
|
|
72
85
|
const hint = JSON.stringify({ schemaVersion: 1, attemptId: this.id, route: this.route, editorVersion: this.version,
|
|
73
|
-
result: this.result, elapsedMs:
|
|
86
|
+
result: this.result, elapsedMs: this.elapsed(), steps: this.steps, signals: this.signals, facts: this.facts });
|
|
74
87
|
this.pending.push(Promise.resolve(this.send("info", "Workspace connection attempt", hint, "connection_attempt")).catch(() => { }));
|
|
75
88
|
}
|
|
76
89
|
async flush() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-attempt.js","sourceRoot":"","sources":["../../src/lib/connection-attempt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"connection-attempt.js","sourceRoot":"","sources":["../../src/lib/connection-attempt.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
export declare function cursorSessionFlags(command: Command): Command;
|
|
1
3
|
export interface CursorSessionOptions {
|
|
2
4
|
handoff: boolean;
|
|
3
5
|
cleanup: boolean;
|
|
4
6
|
}
|
|
7
|
+
export declare function cursorSessionOptions(opts: {
|
|
8
|
+
cursorAgentWindow?: boolean;
|
|
9
|
+
cursorSessionCleanup?: boolean;
|
|
10
|
+
}, platform?: NodeJS.Platform): CursorSessionOptions;
|
|
5
11
|
/** Build from our bundled source; never download executable code at connect time. */
|
|
6
12
|
export declare function buildCursorSessionVsix(destination: string): Promise<void>;
|
|
7
13
|
export declare function prepareCursorSession(command: string, alias: string, backendUrl: string, token: string, options: CursorSessionOptions, home?: string, platform?: NodeJS.Platform): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-session.d.ts","sourceRoot":"","sources":["../../src/lib/cursor-session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cursor-session.d.ts","sourceRoot":"","sources":["../../src/lib/cursor-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAexC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAK5D;AAED,MAAM,WAAW,oBAAoB;IAAG,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE;AAE5E,wBAAgB,oBAAoB,CAClC,IAAI,EAAE;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAAE,EACrE,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,oBAAoB,CAKtB;AAED,qFAAqF;AACrF,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ/E;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EACjE,OAAO,EAAE,oBAAoB,EAC7B,IAAI,SAAe,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAChE,OAAO,CAAC,OAAO,CAAC,CAiDlB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { cpSync, mkdirSync, mkdtempSync, rmSync, writeFileSync, renameSync } from "fs";
|
|
1
|
+
import { cpSync, existsSync, mkdirSync, mkdtempSync, rmSync, writeFileSync, renameSync } from "fs";
|
|
2
2
|
import os from "os";
|
|
3
3
|
import path from "path";
|
|
4
4
|
import { fileURLToPath } from "url";
|
|
@@ -8,6 +8,18 @@ import { spawnSync } from "child_process";
|
|
|
8
8
|
import { archiveFolder } from "zip-lib";
|
|
9
9
|
import { editorSpawnSpec } from "./editor-binary.js";
|
|
10
10
|
const { withRegistrationLock } = createRequire(import.meta.url)("../cursor-session/session.cjs");
|
|
11
|
+
export function cursorSessionFlags(command) {
|
|
12
|
+
return command
|
|
13
|
+
.option("--cursor-session-cleanup", "Experimental: disconnect the ended Cursor IDE and remove its recent entry; does not delete chats")
|
|
14
|
+
.option("--cursor-agent-window", "Open Agents Window on this workspace (default on macOS and Windows)")
|
|
15
|
+
.option("--no-cursor-agent-window", "Keep Cursor in the IDE without automatic Agents Window handoff");
|
|
16
|
+
}
|
|
17
|
+
export function cursorSessionOptions(opts, platform = process.platform) {
|
|
18
|
+
return {
|
|
19
|
+
handoff: opts.cursorAgentWindow ?? (platform === "darwin" || platform === "win32"),
|
|
20
|
+
cleanup: opts.cursorSessionCleanup === true,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
11
23
|
/** Build from our bundled source; never download executable code at connect time. */
|
|
12
24
|
export async function buildCursorSessionVsix(destination) {
|
|
13
25
|
const staging = mkdtempSync(path.join(os.tmpdir(), "litmus-cursor-vsix-"));
|
|
@@ -24,6 +36,14 @@ export async function buildCursorSessionVsix(destination) {
|
|
|
24
36
|
export async function prepareCursorSession(command, alias, backendUrl, token, options, home = os.homedir(), platform = process.platform) {
|
|
25
37
|
if (!/^litmus-[a-zA-Z0-9-]+$/.test(alias) || !token || token.length > 4096)
|
|
26
38
|
return false;
|
|
39
|
+
// An opt-out must also disable a previous registration for this authority.
|
|
40
|
+
// Do not install the extension or create directories just to disable it.
|
|
41
|
+
if (!options.handoff && !options.cleanup) {
|
|
42
|
+
const file = path.join(home, ".litmus", "cursor-sessions", `ssh-remote+${alias}.json`);
|
|
43
|
+
if (existsSync(file))
|
|
44
|
+
await withRegistrationLock(file, async () => { rmSync(file, { force: true }); });
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
27
47
|
const url = new URL(backendUrl);
|
|
28
48
|
if (url.protocol !== "https:" || url.username || url.password || url.search || url.hash)
|
|
29
49
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-session.js","sourceRoot":"","sources":["../../src/lib/cursor-session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cursor-session.js","sourceRoot":"","sources":["../../src/lib/cursor-session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAClG,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,EAAE,oBAAoB,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,+BAA+B,CAE9F,CAAA;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,OAAO,OAAO;SACX,MAAM,CAAC,0BAA0B,EAAE,kGAAkG,CAAC;SACtI,MAAM,CAAC,uBAAuB,EAAE,qEAAqE,CAAC;SACtG,MAAM,CAAC,0BAA0B,EAAE,gEAAgE,CAAC,CAAA;AACzG,CAAC;AAID,MAAM,UAAU,oBAAoB,CAClC,IAAqE,EACrE,WAA4B,OAAO,CAAC,QAAQ;IAE5C,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,iBAAiB,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO,CAAC;QAClF,OAAO,EAAE,IAAI,CAAC,oBAAoB,KAAK,IAAI;KAC5C,CAAA;AACH,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,WAAmB;IAC9D,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAA;IAC1E,IAAI,CAAC;QACH,MAAM,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3H,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC,EAAE,8RAA8R,CAAC,CAAA;QACxV,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC,EAAE,+zBAA+zB,CAAC,CAAA;QAC53B,MAAM,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IAC3C,CAAC;YAAS,CAAC;QAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAe,EAAE,KAAa,EAAE,UAAkB,EAAE,KAAa,EACjE,OAA6B,EAC7B,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,WAA4B,OAAO,CAAC,QAAQ;IAEjE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI;QAAE,OAAO,KAAK,CAAA;IACxF,2EAA2E;IAC3E,yEAAyE;IACzE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,cAAc,KAAK,OAAO,CAAC,CAAA;QACtF,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,oBAAoB,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACrG,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAA;IAC/B,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI;QAAE,OAAO,KAAK,CAAA;IACrG,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAA;IAC/E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,IAAc,EAAE,GAAY,EAAE,EAAE;YAC3C,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;YACrD,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;gBAC/C,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK;gBACxD,SAAS,EAAE,GAAG,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;aACzD,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACX,CAAC,CAAA;QACD,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,CAAA;QAC/D,MAAM,OAAO,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YACrE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAA;QAC5E,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAA;YAClE,MAAM,sBAAsB,CAAC,IAAI,CAAC,CAAA;YAClC,uEAAuE;YACvE,oEAAoE;YACpE,mEAAmE;YACnE,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,CAAA;YACzF,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAA;QAC3E,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAA;QAC/D,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QACtD,MAAM,SAAS,GAAG,cAAc,KAAK,EAAE,CAAA;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,SAAS,OAAO,CAAC,CAAA;QACtD,MAAM,oBAAoB,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,UAAU,EAAE,MAAM,CAAA;YAC1C,IAAI,CAAC;gBACH,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACjC,SAAS,EAAE,SAAS,EAAE,2BAA2B;oBACjD,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjD,KAAK,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO;iBACzD,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;gBAChC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACxB,CAAC;oBAAS,CAAC;gBAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YAAC,CAAC;QAC3C,CAAC,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;YAAS,CAAC;QAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAAC,CAAC;AACnE,CAAC"}
|
|
@@ -37,11 +37,10 @@ export interface EnvironmentCheck {
|
|
|
37
37
|
verbose?: string;
|
|
38
38
|
}
|
|
39
39
|
/** The `engines.node` floor in package.json; pinned to it by test. */
|
|
40
|
-
export declare const
|
|
40
|
+
export declare const NODE_MIN_VERSION = "20.19.0";
|
|
41
41
|
export declare const REINSTALL_COMMAND = "npm install -g litmus-cli@latest";
|
|
42
42
|
/** Registry document for the `latest` dist-tag. */
|
|
43
43
|
export declare const NPM_LATEST_URL = "https://registry.npmjs.org/litmus-cli/latest";
|
|
44
|
-
export declare function parseNodeMajor(version: string): number | null;
|
|
45
44
|
export declare function checkNodeVersion(version?: string): EnvironmentCheck;
|
|
46
45
|
/**
|
|
47
46
|
* Numeric compare of dotted versions; prerelease suffixes are ignored, so
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-checks.d.ts","sourceRoot":"","sources":["../../src/lib/environment-checks.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,MAAM,sBAAsB,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,sBAAsB,CAAA;IAC9B,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAA;IACd,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,sEAAsE;AACtE,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"environment-checks.d.ts","sourceRoot":"","sources":["../../src/lib/environment-checks.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,MAAM,sBAAsB,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,sBAAsB,CAAA;IAC9B,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAA;IACd,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,YAAY,CAAA;AAEzC,eAAO,MAAM,iBAAiB,qCAAqC,CAAA;AAEnE,mDAAmD;AACnD,eAAO,MAAM,cAAc,iDAAiD,CAAA;AAS5E,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,MAAwB,GAAG,gBAAgB,CAYpF;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAU5D;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAAK,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,CAAA;AAE5I,wBAAsB,cAAc,CAAC,SAAS,GAAE,SAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAMlF;AAED,wBAAsB,eAAe,CAAC,IAAI,GAAE;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;CAC/B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0BjC;AAID;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwB5B;AAID,wBAAgB,QAAQ,CAAC,IAAI,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAgF,GAAG,gBAAgB,CAclJ;AAID;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,GAAE;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACZ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkEjC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACpF,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,eAAe,GAAG,UAAU,CAAA;CAAE,CAAC,CAyCtG;AAID;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAC/C,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAA;CAC1C,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAS9B"}
|
|
@@ -5,7 +5,7 @@ import { execSync } from "child_process";
|
|
|
5
5
|
import { CLI_VERSION } from "./version.js";
|
|
6
6
|
import { startTracker, trackerDiagnostics, waitForTrackerReady } from "./tracker.js";
|
|
7
7
|
/** The `engines.node` floor in package.json; pinned to it by test. */
|
|
8
|
-
export const
|
|
8
|
+
export const NODE_MIN_VERSION = "20.19.0";
|
|
9
9
|
export const REINSTALL_COMMAND = "npm install -g litmus-cli@latest";
|
|
10
10
|
/** Registry document for the `latest` dist-tag. */
|
|
11
11
|
export const NPM_LATEST_URL = "https://registry.npmjs.org/litmus-cli/latest";
|
|
@@ -14,20 +14,15 @@ const SERVER_TIMEOUT_MS = 8000;
|
|
|
14
14
|
/** Above this the connection is reported as slow. Still `ok`: slowness is not a fix the candidate can apply. */
|
|
15
15
|
const SERVER_SLOW_MS = 3000;
|
|
16
16
|
// ── Node ─────────────────────────────────────────────────────────────
|
|
17
|
-
export function parseNodeMajor(version) {
|
|
18
|
-
const m = /^v?(\d+)/.exec(version.trim());
|
|
19
|
-
return m ? Number(m[1]) : null;
|
|
20
|
-
}
|
|
21
17
|
export function checkNodeVersion(version = process.version) {
|
|
22
|
-
|
|
23
|
-
if (major === null) {
|
|
18
|
+
if (!/^v?\d+(?:\.\d+){0,2}(?:[-+].*)?$/.test(version.trim())) {
|
|
24
19
|
return { name: "node", status: "warn", detail: `Node.js: version could not be read (${version})` };
|
|
25
20
|
}
|
|
26
|
-
if (
|
|
21
|
+
if (compareVersions(version, NODE_MIN_VERSION) < 0) {
|
|
27
22
|
return {
|
|
28
23
|
name: "node",
|
|
29
24
|
status: "fail",
|
|
30
|
-
detail: `Node.js: ${version} is too old.
|
|
25
|
+
detail: `Node.js: ${version} is too old. Update to Node.js ${NODE_MIN_VERSION} or newer, then run "litmus setup-check" again.`,
|
|
31
26
|
};
|
|
32
27
|
}
|
|
33
28
|
return { name: "node", status: "ok", detail: `Node.js: ${version}` };
|