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.
- package/README.md +19 -2
- package/dist/commands/connect.d.ts +2 -0
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +2 -1
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +25 -6
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/pause.d.ts.map +1 -1
- package/dist/commands/pause.js +12 -2
- package/dist/commands/pause.js.map +1 -1
- package/dist/index.js +10 -232
- package/dist/index.js.map +1 -1
- package/dist/lib/ai-tracking.d.ts +4 -0
- package/dist/lib/ai-tracking.d.ts.map +1 -1
- package/dist/lib/ai-tracking.js +68 -0
- package/dist/lib/ai-tracking.js.map +1 -1
- package/dist/lib/api.d.ts +2 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +28 -8
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/capture-notice-ping.d.ts +7 -27
- package/dist/lib/capture-notice-ping.d.ts.map +1 -1
- package/dist/lib/capture-notice-ping.js +10 -42
- package/dist/lib/capture-notice-ping.js.map +1 -1
- package/dist/lib/capture-nudge.d.ts +5 -7
- package/dist/lib/capture-nudge.d.ts.map +1 -1
- package/dist/lib/capture-nudge.js +19 -35
- package/dist/lib/capture-nudge.js.map +1 -1
- package/dist/lib/capture-selftest.d.ts +9 -0
- package/dist/lib/capture-selftest.d.ts.map +1 -1
- package/dist/lib/capture-selftest.js +27 -2
- package/dist/lib/capture-selftest.js.map +1 -1
- package/dist/lib/codex-capture-health.d.ts +21 -0
- package/dist/lib/codex-capture-health.d.ts.map +1 -0
- package/dist/lib/codex-capture-health.js +82 -0
- package/dist/lib/codex-capture-health.js.map +1 -0
- package/dist/lib/environment-checks.d.ts +1 -3
- package/dist/lib/environment-checks.d.ts.map +1 -1
- package/dist/lib/environment-checks.js +2 -16
- package/dist/lib/environment-checks.js.map +1 -1
- package/dist/lib/file-monitor.d.ts +18 -0
- package/dist/lib/file-monitor.d.ts.map +1 -0
- package/dist/lib/file-monitor.js +87 -0
- package/dist/lib/file-monitor.js.map +1 -0
- package/dist/lib/hook-logger.cjs +76 -11
- package/dist/lib/hosted-capture.d.ts +4 -2
- package/dist/lib/hosted-capture.d.ts.map +1 -1
- package/dist/lib/hosted-capture.js +74 -16
- package/dist/lib/hosted-capture.js.map +1 -1
- package/dist/lib/init-location.d.ts +4 -0
- package/dist/lib/init-location.d.ts.map +1 -0
- package/dist/lib/init-location.js +36 -0
- package/dist/lib/init-location.js.map +1 -0
- package/dist/lib/mac-notifier.d.ts +4 -0
- package/dist/lib/mac-notifier.d.ts.map +1 -0
- package/dist/lib/mac-notifier.js +72 -0
- package/dist/lib/mac-notifier.js.map +1 -0
- package/dist/lib/node-version.d.ts +8 -0
- package/dist/lib/node-version.d.ts.map +1 -0
- package/dist/lib/node-version.js +23 -0
- package/dist/lib/node-version.js.map +1 -0
- package/dist/lib/notify.d.ts +4 -5
- package/dist/lib/notify.d.ts.map +1 -1
- package/dist/lib/notify.js +24 -25
- package/dist/lib/notify.js.map +1 -1
- package/dist/lib/portal-launcher.d.ts.map +1 -1
- package/dist/lib/portal-launcher.js +6 -1
- package/dist/lib/portal-launcher.js.map +1 -1
- package/dist/lib/tracker.d.ts +1 -0
- package/dist/lib/tracker.d.ts.map +1 -1
- package/dist/lib/tracker.js +4 -2
- package/dist/lib/tracker.js.map +1 -1
- package/dist/lib/watcher.js +147 -101
- package/dist/lib/watcher.js.map +1 -1
- package/dist/lib/workspace-start-wait.d.ts +3 -1
- package/dist/lib/workspace-start-wait.d.ts.map +1 -1
- package/dist/lib/workspace-start-wait.js +36 -1
- package/dist/lib/workspace-start-wait.js.map +1 -1
- package/dist/notification-assets/litmus.icns +0 -0
- package/dist/notification-assets/litmus.png +0 -0
- package/dist/notification-assets/notifier.js +12 -0
- package/dist/program.d.ts +2 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +236 -0
- package/dist/program.js.map +1 -0
- package/package.json +5 -5
package/dist/lib/hook-logger.cjs
CHANGED
|
@@ -589,13 +589,23 @@ function sessionOverMarked(litmusDir) {
|
|
|
589
589
|
* `{ sessionOver }`, true only when the server refused the token for good.
|
|
590
590
|
*/
|
|
591
591
|
function uploadEvent(config, event) {
|
|
592
|
-
|
|
592
|
+
const started = Date.now()
|
|
593
|
+
// Probe-only stderr is captured by doctor, never sent for ordinary AI turns.
|
|
594
|
+
const probe = event?.type === "capture_selftest_probe"
|
|
595
|
+
const result = (sessionOver, outcome, status = null, code = null) => {
|
|
596
|
+
const delivery = { outcome, status, code, elapsedMs: Date.now() - started }
|
|
597
|
+
if (probe) process.stderr.write("LITMUS_PROBE_DELIVERY " + JSON.stringify(delivery) + "\n")
|
|
598
|
+
return { sessionOver, delivery }
|
|
599
|
+
}
|
|
600
|
+
const safeCode = error => ["ENOTFOUND", "EAI_AGAIN", "ECONNREFUSED", "ECONNRESET", "ETIMEDOUT", "CERT_HAS_EXPIRED", "UNABLE_TO_VERIFY_LEAF_SIGNATURE", "ERR_TLS_CERT_ALTNAME_INVALID"].includes(error?.code) ? error.code : null
|
|
601
|
+
if (!config || !config.token || !config.backendUrl) return Promise.resolve(result(false, "configuration_missing"))
|
|
593
602
|
|
|
594
603
|
let url
|
|
595
604
|
try {
|
|
596
605
|
url = new URL(`${config.backendUrl}/cli/activity`)
|
|
606
|
+
if (!["http:", "https:"].includes(url.protocol)) throw new Error("Unsupported protocol")
|
|
597
607
|
} catch {
|
|
598
|
-
return Promise.resolve(
|
|
608
|
+
return Promise.resolve(result(false, "invalid_url")) // malformed backendUrl — nothing to do
|
|
599
609
|
}
|
|
600
610
|
|
|
601
611
|
const body = JSON.stringify({ events: [event] })
|
|
@@ -605,11 +615,12 @@ function uploadEvent(config, event) {
|
|
|
605
615
|
let settled = false
|
|
606
616
|
let guard = null
|
|
607
617
|
let sessionOver = false
|
|
608
|
-
|
|
618
|
+
let status = null
|
|
619
|
+
const done = (outcome = "transport_error", code = null) => {
|
|
609
620
|
if (settled) return
|
|
610
621
|
settled = true
|
|
611
622
|
if (guard) clearTimeout(guard)
|
|
612
|
-
resolve(
|
|
623
|
+
resolve(result(sessionOver, outcome, status, code))
|
|
613
624
|
}
|
|
614
625
|
|
|
615
626
|
const req = reqFn(url, {
|
|
@@ -634,7 +645,7 @@ function uploadEvent(config, event) {
|
|
|
634
645
|
// A 4xx body is kept (capped) because it is the only place the server says
|
|
635
646
|
// the assessment is over for good (ENG-2768, see isFinalRefusal).
|
|
636
647
|
req.on("response", (res) => {
|
|
637
|
-
|
|
648
|
+
status = res.statusCode || 0
|
|
638
649
|
const chunks = []
|
|
639
650
|
let kept = 0
|
|
640
651
|
res.on("data", (chunk) => {
|
|
@@ -645,14 +656,15 @@ function uploadEvent(config, event) {
|
|
|
645
656
|
})
|
|
646
657
|
res.on("end", () => {
|
|
647
658
|
if (chunks.length) sessionOver = isFinalRefusal(status, Buffer.concat(chunks).toString("utf8"))
|
|
648
|
-
done()
|
|
659
|
+
done(status >= 200 && status < 300 ? "delivered" : "http_error")
|
|
649
660
|
})
|
|
650
|
-
res.on("error", done)
|
|
661
|
+
res.on("error", error => done("response_error", safeCode(error)))
|
|
662
|
+
res.on("aborted", () => done("response_aborted"))
|
|
651
663
|
})
|
|
652
|
-
req.on("error", done) // network down, DNS, refused, destroyed
|
|
653
|
-
req.on("timeout", () => { req.destroy(); done() })
|
|
664
|
+
req.on("error", error => done("transport_error", safeCode(error))) // network down, DNS, refused, destroyed
|
|
665
|
+
req.on("timeout", () => { req.destroy(); done("timeout") })
|
|
654
666
|
// Backstop in case none of the above fires (a socket wedged before connect).
|
|
655
|
-
guard = setTimeout(() => { try { req.destroy() } catch { /* already gone */ } done() }, UPLOAD_TIMEOUT_MS)
|
|
667
|
+
guard = setTimeout(() => { try { req.destroy() } catch { /* already gone */ } done("timeout") }, UPLOAD_TIMEOUT_MS)
|
|
656
668
|
req.end(body)
|
|
657
669
|
})
|
|
658
670
|
}
|
|
@@ -2302,6 +2314,20 @@ async function main() {
|
|
|
2302
2314
|
const config = readConfig(litmusDir)
|
|
2303
2315
|
const upload = await uploadEvent(config, event)
|
|
2304
2316
|
|
|
2317
|
+
// ENG-3794: a passing synthetic probe does not prove Codex invoked its
|
|
2318
|
+
// hooks for a real turn. Keep a content-free latest outcome for the watcher
|
|
2319
|
+
// to relay on its independent, retrying outbox. Never spend another request
|
|
2320
|
+
// or print diagnostics into the candidate's AI tool. Hosted capture has its
|
|
2321
|
+
// own supervisor; probes must not masquerade as real tool invocations.
|
|
2322
|
+
if (effectiveTool === "codex" && !selftestNonce && !hostedAtStart) {
|
|
2323
|
+
const statusFile = path.join(litmusDir, "codex-capture-status.json")
|
|
2324
|
+
const temp = statusFile + "." + process.pid + ".tmp"
|
|
2325
|
+
try {
|
|
2326
|
+
fs.writeFileSync(temp, JSON.stringify({ ts: new Date().toISOString(), eventType: event.type, localAppend: logged, ...upload.delivery }), { mode: 0o600 })
|
|
2327
|
+
fs.renameSync(temp, statusFile)
|
|
2328
|
+
} catch { try { fs.unlinkSync(temp) } catch { /* best effort */ } }
|
|
2329
|
+
}
|
|
2330
|
+
|
|
2305
2331
|
// ENG-2768: the server says this token will never be accepted again. Mark
|
|
2306
2332
|
// the folder so the next turn stops at the top of main(), and skip the
|
|
2307
2333
|
// revival below: there is no session left for a watcher to serve.
|
|
@@ -2349,7 +2375,46 @@ const CODEX_CONTEXTUAL_PREFIXES = [
|
|
|
2349
2375
|
"<rollout_budget>",
|
|
2350
2376
|
]
|
|
2351
2377
|
function isCodexContextualText(text) {
|
|
2352
|
-
const
|
|
2378
|
+
const raw = typeof text === "string" ? text.trimStart() : ""
|
|
2379
|
+
const trimmed = raw.toLowerCase()
|
|
2380
|
+
// Desktop page visibility arrives as a standalone user-role notification.
|
|
2381
|
+
// Match only its metadata envelope: quoted examples and accompanying human
|
|
2382
|
+
// text must remain prompts, not disappear because they mention this tag.
|
|
2383
|
+
const page = /^<external_codex_apps_open_page>\s*([\s\S]*?)\s*<\/external_codex_apps_open_page>\s*$/.exec(trimmed)
|
|
2384
|
+
if (page) {
|
|
2385
|
+
try {
|
|
2386
|
+
const value = JSON.parse(page[1])
|
|
2387
|
+
if (value && Object.keys(value).length === 1 && Object.prototype.hasOwnProperty.call(value, "page_id")
|
|
2388
|
+
&& (value.page_id === null || typeof value.page_id === "string")) return true
|
|
2389
|
+
} catch { /* malformed or human-authored examples are preserved */ }
|
|
2390
|
+
}
|
|
2391
|
+
// Desktop control-plane messages are stored with a user role in Codex's
|
|
2392
|
+
// transcript even though the human never authored them. Match the complete
|
|
2393
|
+
// envelope and its expected payload shape so quoted examples and ordinary
|
|
2394
|
+
// prompts that merely mention these tags remain visible assessment evidence.
|
|
2395
|
+
const reply = /^<send_user_message_question_reply>\s*([\s\S]*?)\s*<\/send_user_message_question_reply>\s*$/i.exec(raw)
|
|
2396
|
+
if (reply) {
|
|
2397
|
+
try {
|
|
2398
|
+
const value = JSON.parse(reply[1])
|
|
2399
|
+
if (Array.isArray(value) && value.length > 0 && value.every(item => item && typeof item === "object"
|
|
2400
|
+
&& typeof item.questionItemId === "string" && typeof item.question === "string"
|
|
2401
|
+
&& Object.prototype.hasOwnProperty.call(item, "answer"))) return true
|
|
2402
|
+
} catch { /* malformed or human-authored examples are preserved */ }
|
|
2403
|
+
}
|
|
2404
|
+
const heartbeat = /^<heartbeat>\s*([\s\S]*?)\s*<\/heartbeat>\s*$/i.exec(raw)
|
|
2405
|
+
if (heartbeat) {
|
|
2406
|
+
let body = heartbeat[1].trim()
|
|
2407
|
+
const fields = []
|
|
2408
|
+
while (body) {
|
|
2409
|
+
const field = /^<(automation_id|decision|message|current_time_iso|instructions)>[\s\S]*?<\/\1>\s*/i.exec(body)
|
|
2410
|
+
if (!field) break
|
|
2411
|
+
fields.push(field[1].toLowerCase())
|
|
2412
|
+
body = body.slice(field[0].length)
|
|
2413
|
+
}
|
|
2414
|
+
const shape = fields.join(",")
|
|
2415
|
+
if (!body && (shape === "automation_id,decision,message"
|
|
2416
|
+
|| shape === "automation_id,current_time_iso,instructions")) return true
|
|
2417
|
+
}
|
|
2353
2418
|
return CODEX_CONTEXTUAL_PREFIXES.some(prefix => trimmed.startsWith(prefix.toLowerCase()))
|
|
2354
2419
|
}
|
|
2355
2420
|
// Python's ingest filter budgets JSON with ensure_ascii=True. Bound the same
|
|
@@ -2,6 +2,8 @@ import type { InitMetadata } from "./schemas.js";
|
|
|
2
2
|
export declare const HOSTED_CAPTURE_DISCLOSURE_VERSION = "hosted_local_v2";
|
|
3
3
|
export declare const HOSTED_CAPTURE_DISCLOSURE = "During this assessment, Litmus records prompts, responses, tool calls and their results from supported AI tools across this computer, including outside this workspace. The hiring company can review them alongside workspace activity. Capture ends with the coding session or pauses within ten seconds if offline. Browser AI and Copilot are not captured. Restart open AI tools to load capture hooks.";
|
|
4
4
|
export declare const HOSTED_CAPTURE_FILE: string;
|
|
5
|
+
/** Never infer session completion from an ordinary 404 or a network failure. */
|
|
6
|
+
export declare function isRemovedPreviewResponse(backendUrl: string, status: number, body: unknown): boolean;
|
|
5
7
|
export declare function atomicPrivateJson(file: string, value: unknown): void;
|
|
6
8
|
export declare function captureLease(backendUrl: string, token: string, accept?: boolean): Promise<{
|
|
7
9
|
active: boolean;
|
|
@@ -19,10 +21,10 @@ export declare function acquireCaptureSetupLock(lock: string, waitMs?: number):
|
|
|
19
21
|
/** Reconcile legacy hook registrations before opening a machine-wide window.
|
|
20
22
|
* No PID inference: a stopped watcher does not mean the assessment ended.
|
|
21
23
|
*/
|
|
22
|
-
export declare function reconcileLocalCaptureRegistrations(excluded: string[], localToken?: string): Promise<void>;
|
|
24
|
+
export declare function reconcileLocalCaptureRegistrations(excluded: string[], localToken?: string, forgetPreview?: boolean): Promise<void>;
|
|
23
25
|
/** Cancel only this newly prepared generation, never a reused/successor window.
|
|
24
26
|
* No session-over marker: the assessment is still valid and init can retry.
|
|
25
27
|
*/
|
|
26
28
|
export declare function rollbackPreparedCapture(projectDir: string, setupId: string): Promise<void>;
|
|
27
|
-
export declare function startHostedCapture(meta: InitMetadata, token: string, apiBase: string): Promise<(() => Promise<void>) | undefined>;
|
|
29
|
+
export declare function startHostedCapture(meta: InitMetadata, token: string, apiBase: string, forgetPreview?: boolean): Promise<(() => Promise<void>) | undefined>;
|
|
28
30
|
//# sourceMappingURL=hosted-capture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-capture.d.ts","sourceRoot":"","sources":["../../src/lib/hosted-capture.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAMhD,eAAO,MAAM,iCAAiC,oBAAoB,CAAA;AAClE,eAAO,MAAM,yBAAyB,iZAAiZ,CAAA;AACvb,eAAO,MAAM,mBAAmB,QAA4D,CAAA;
|
|
1
|
+
{"version":3,"file":"hosted-capture.d.ts","sourceRoot":"","sources":["../../src/lib/hosted-capture.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAMhD,eAAO,MAAM,iCAAiC,oBAAoB,CAAA;AAClE,eAAO,MAAM,yBAAyB,iZAAiZ,CAAA;AACvb,eAAO,MAAM,mBAAmB,QAA4D,CAAA;AAM5F,gFAAgF;AAChF,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAOnG;AAUD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAKpE;AACD,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CAAC,CAcjM;AACD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,IAAI,CA6B3D;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CA+BpG;AAED;;GAEG;AACH,wBAAsB,kCAAkC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,aAAa,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDtI;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhG;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,UAAQ,GAAG,OAAO,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAqF9J"}
|
|
@@ -11,12 +11,42 @@ import { linkSync, unlinkSync, realpathSync } from "fs";
|
|
|
11
11
|
import { startTracker, waitForTrackerReady, isTrackerHealthy } from "./tracker.js";
|
|
12
12
|
import { setupAiTracking } from "../commands/init.js";
|
|
13
13
|
import { releaseAiTrackingForAssessment, readRegistrySnapshot, pruneOrphanedCaptureRegistrations } from "./ai-tracking.js";
|
|
14
|
-
import { retireAiCaptureForEndedSession, sessionOverMarked } from "./session-over.js";
|
|
14
|
+
import { retireAiCaptureForEndedSession, sessionOverMarked, writeSessionOverMarker } from "./session-over.js";
|
|
15
15
|
import { findShadowConfigForDir } from "./shadow.js";
|
|
16
16
|
import { prepareHostedTranscripts } from "./hosted-transcripts.js";
|
|
17
17
|
export const HOSTED_CAPTURE_DISCLOSURE_VERSION = "hosted_local_v2";
|
|
18
18
|
export const HOSTED_CAPTURE_DISCLOSURE = "During this assessment, Litmus records prompts, responses, tool calls and their results from supported AI tools across this computer, including outside this workspace. The hiring company can review them alongside workspace activity. Capture ends with the coding session or pauses within ten seconds if offline. Browser AI and Copilot are not captured. Restart open AI tools to load capture hooks.";
|
|
19
19
|
export const HOSTED_CAPTURE_FILE = path.join(os.homedir(), ".litmus", "hosted-capture.json");
|
|
20
|
+
const PREVIEW_RECOVERY_HINT = "A previous preview capture service is unavailable. If that preview was removed, retry the same connect command with --forget-unavailable-preview. This stops its local capture only; it does not submit the previous assessment.";
|
|
21
|
+
class UnavailablePreviewCapture extends Error {
|
|
22
|
+
constructor() { super(PREVIEW_RECOVERY_HINT); }
|
|
23
|
+
}
|
|
24
|
+
/** Never infer session completion from an ordinary 404 or a network failure. */
|
|
25
|
+
export function isRemovedPreviewResponse(backendUrl, status, body) {
|
|
26
|
+
let url;
|
|
27
|
+
try {
|
|
28
|
+
url = new URL(backendUrl);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
if (url.protocol !== "https:" || url.port || url.username || url.password || url.pathname !== "/"
|
|
34
|
+
|| url.search || url.hash || !/^litmus-litmus-pr-\d+\.up\.railway\.app$/.test(url.hostname))
|
|
35
|
+
return false;
|
|
36
|
+
const value = body;
|
|
37
|
+
return status === 404 && value?.status === "error" && value.code === 404 && value.message === "Application not found";
|
|
38
|
+
}
|
|
39
|
+
function forgetUnavailablePreview(projectDir, token) {
|
|
40
|
+
// Explicit recovery is local abandonment, not evidence of server submission.
|
|
41
|
+
if (!writeSessionOverMarker(projectDir, token, "connect: user discarded unavailable preview capture")) {
|
|
42
|
+
throw new Error("Could not stop the previous preview capture. Contact support.");
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
writeFileSync(path.join(projectDir, ".litmus", "shutdown"), String(Date.now()));
|
|
46
|
+
}
|
|
47
|
+
catch { /* folder may be gone */ }
|
|
48
|
+
releaseAiTrackingForAssessment(projectDir);
|
|
49
|
+
}
|
|
20
50
|
export function atomicPrivateJson(file, value) {
|
|
21
51
|
mkdirSync(path.dirname(file), { recursive: true, mode: 0o700 });
|
|
22
52
|
const temp = `${file}.${randomUUID()}.tmp`;
|
|
@@ -34,8 +64,11 @@ export async function captureLease(backendUrl, token, accept = false) {
|
|
|
34
64
|
...(accept ? { body: JSON.stringify({ disclosureVersion: HOSTED_CAPTURE_DISCLOSURE_VERSION }) } : {}),
|
|
35
65
|
signal: AbortSignal.timeout(4000),
|
|
36
66
|
});
|
|
37
|
-
if (!response.ok)
|
|
67
|
+
if (!response.ok) {
|
|
68
|
+
if (!accept && isRemovedPreviewResponse(backendUrl, response.status, await response.json().catch(() => null)))
|
|
69
|
+
throw new UnavailablePreviewCapture();
|
|
38
70
|
throw new Error(`Local capture authorization failed (${response.status})`);
|
|
71
|
+
}
|
|
39
72
|
const value = await response.json();
|
|
40
73
|
if (typeof value.active !== "boolean" || typeof value.leaseSeconds !== "number" || value.leaseSeconds < 0 || value.leaseSeconds > 10)
|
|
41
74
|
throw new Error("Invalid capture authorization");
|
|
@@ -112,8 +145,14 @@ export async function acquireCaptureSetupLock(lock, waitMs = 0) {
|
|
|
112
145
|
break;
|
|
113
146
|
}
|
|
114
147
|
catch (error) {
|
|
115
|
-
|
|
116
|
-
|
|
148
|
+
const code = error.code;
|
|
149
|
+
if (code !== "EADDRINUSE" || Date.now() >= deadline) {
|
|
150
|
+
// Keep only fixed errno labels: raw bind errors carry the local address.
|
|
151
|
+
const safeCode = ["EADDRINUSE", "EACCES", "EPERM", "EADDRNOTAVAIL", "EAFNOSUPPORT", "EMFILE", "ENFILE"].includes(code ?? "") ? code : undefined;
|
|
152
|
+
const message = code === "EADDRINUSE"
|
|
153
|
+
? "Capture setup is already running, or its local coordination port is occupied. Retry after the other setup or application closes."
|
|
154
|
+
: "Local capture setup could not open its coordination port. Retry, and contact the company for help if it keeps happening.";
|
|
155
|
+
throw Object.assign(new Error(message), { code: safeCode });
|
|
117
156
|
}
|
|
118
157
|
await new Promise(resolve => setTimeout(resolve, Math.min(250, deadline - Date.now())));
|
|
119
158
|
}
|
|
@@ -138,7 +177,7 @@ export async function acquireCaptureSetupLock(lock, waitMs = 0) {
|
|
|
138
177
|
/** Reconcile legacy hook registrations before opening a machine-wide window.
|
|
139
178
|
* No PID inference: a stopped watcher does not mean the assessment ended.
|
|
140
179
|
*/
|
|
141
|
-
export async function reconcileLocalCaptureRegistrations(excluded, localToken) {
|
|
180
|
+
export async function reconcileLocalCaptureRegistrations(excluded, localToken, forgetPreview = false) {
|
|
142
181
|
const blocked = [];
|
|
143
182
|
let handoffError;
|
|
144
183
|
for (const dir of readRegistrySnapshot() ?? []) {
|
|
@@ -177,6 +216,12 @@ export async function reconcileLocalCaptureRegistrations(excluded, localToken) {
|
|
|
177
216
|
redirect: "error", signal: AbortSignal.timeout(4000),
|
|
178
217
|
});
|
|
179
218
|
const body = await response.json();
|
|
219
|
+
if (config.captureMode === "hosted-local" && isRemovedPreviewResponse(config.backendUrl, response.status, body)) {
|
|
220
|
+
if (!forgetPreview)
|
|
221
|
+
throw new UnavailablePreviewCapture();
|
|
222
|
+
forgetUnavailablePreview(dir, config.token);
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
180
225
|
const ended = (response.status === 403 && body.detail?.error === "Token expired")
|
|
181
226
|
|| (response.status === 404 && body.detail?.error === "Invalid token");
|
|
182
227
|
if (!ended) {
|
|
@@ -198,6 +243,8 @@ export async function reconcileLocalCaptureRegistrations(excluded, localToken) {
|
|
|
198
243
|
retireAiCaptureForEndedSession(dir, config.token);
|
|
199
244
|
}
|
|
200
245
|
catch (error) {
|
|
246
|
+
if (error instanceof UnavailablePreviewCapture)
|
|
247
|
+
throw error;
|
|
201
248
|
if (error instanceof ServerError)
|
|
202
249
|
handoffError ?? (handoffError = error);
|
|
203
250
|
blocked.push(dir);
|
|
@@ -244,14 +291,15 @@ export async function rollbackPreparedCapture(projectDir, setupId) {
|
|
|
244
291
|
await release();
|
|
245
292
|
}
|
|
246
293
|
}
|
|
247
|
-
export async function startHostedCapture(meta, token, apiBase) {
|
|
294
|
+
export async function startHostedCapture(meta, token, apiBase, forgetPreview = false) {
|
|
248
295
|
const key = createHash("sha256").update(token).digest("hex");
|
|
249
296
|
const projectDir = hostedCaptureProjectDir(token);
|
|
250
297
|
// One machine-wide window: never silently mix two candidates' conversations.
|
|
251
298
|
const lock = `${HOSTED_CAPTURE_FILE}.lock`;
|
|
252
299
|
mkdirSync(path.dirname(lock), { recursive: true, mode: 0o700 });
|
|
253
|
-
//
|
|
254
|
-
|
|
300
|
+
// A supervisor renewal or another editor can briefly own this same guard.
|
|
301
|
+
// Stable startup needs the same bounded wait as the launcher; never steal it.
|
|
302
|
+
const releaseLock = await acquireCaptureSetupLock(lock, 30000);
|
|
255
303
|
try {
|
|
256
304
|
pruneOrphanedCaptureRegistrations();
|
|
257
305
|
let prior = {};
|
|
@@ -268,17 +316,27 @@ export async function startHostedCapture(meta, token, apiBase) {
|
|
|
268
316
|
}
|
|
269
317
|
if (prior.projectDir && prior.tokenKey !== key) {
|
|
270
318
|
const oldConfig = JSON.parse(readFileSync(path.join(prior.projectDir, ".litmus", "config.json"), "utf8"));
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
await
|
|
274
|
-
|
|
275
|
-
|
|
319
|
+
let oldLease;
|
|
320
|
+
try {
|
|
321
|
+
oldLease = await captureLease(oldConfig.backendUrl, oldConfig.token);
|
|
322
|
+
}
|
|
323
|
+
catch (error) {
|
|
324
|
+
if (!(error instanceof UnavailablePreviewCapture) || !forgetPreview || oldConfig.captureMode !== "hosted-local")
|
|
325
|
+
throw error;
|
|
326
|
+
forgetUnavailablePreview(prior.projectDir, oldConfig.token);
|
|
327
|
+
}
|
|
328
|
+
if (oldLease) {
|
|
329
|
+
if (oldLease.active) {
|
|
330
|
+
await finishPracticeCapture(oldConfig.backendUrl, oldConfig.token, token);
|
|
331
|
+
if ((await captureLease(oldConfig.backendUrl, oldConfig.token)).active)
|
|
332
|
+
throw new Error("Practice capture is still active. Retry the same command.");
|
|
333
|
+
}
|
|
334
|
+
// Confirmed server closure, not mere lease expiry, permits replacing a window.
|
|
335
|
+
retireAiCaptureForEndedSession(prior.projectDir, oldConfig.token);
|
|
276
336
|
}
|
|
277
|
-
// Confirmed server closure, not mere lease expiry, permits replacing a window.
|
|
278
|
-
retireAiCaptureForEndedSession(prior.projectDir, oldConfig.token);
|
|
279
337
|
rmSync(HOSTED_CAPTURE_FILE, { force: true });
|
|
280
338
|
}
|
|
281
|
-
await reconcileLocalCaptureRegistrations([projectDir, ...(prior.projectDir ? [prior.projectDir] : [])], token);
|
|
339
|
+
await reconcileLocalCaptureRegistrations([projectDir, ...(prior.projectDir ? [prior.projectDir] : [])], token, forgetPreview);
|
|
282
340
|
if (prior.projectDir === projectDir && isTrackerHealthy(projectDir)) {
|
|
283
341
|
// A later command has adopted this running window; an earlier failed
|
|
284
342
|
// preparation no longer owns its rollback.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosted-capture.js","sourceRoot":"","sources":["../../src/lib/hosted-capture.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hosted-capture.js","sourceRoot":"","sources":["../../src/lib/hosted-capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Run before metadata: requesting init can start the assessment clock. */
|
|
2
|
+
export declare function checkInitLocation(directory: string, platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv): string | null;
|
|
3
|
+
export declare function validateInitLocation(directory: string): string | null;
|
|
4
|
+
//# sourceMappingURL=init-location.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-location.d.ts","sourceRoot":"","sources":["../../src/lib/init-location.ts"],"names":[],"mappings":"AAGA,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,kBAAmB,EAAE,GAAG,oBAAc,GAAG,MAAM,GAAG,IAAI,CAYlH;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAerE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { existsSync, mkdtempSync, realpathSync, rmSync } from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
/** Run before metadata: requesting init can start the assessment clock. */
|
|
4
|
+
export function checkInitLocation(directory, platform = process.platform, env = process.env) {
|
|
5
|
+
const paths = platform === "win32" ? path.win32 : path;
|
|
6
|
+
const normalized = paths.resolve(directory);
|
|
7
|
+
const under = (root) => {
|
|
8
|
+
const rel = paths.relative(root.toLowerCase(), normalized.toLowerCase());
|
|
9
|
+
return rel === "" || (rel !== ".." && !rel.startsWith(`..${paths.sep}`) && !paths.isAbsolute(rel));
|
|
10
|
+
};
|
|
11
|
+
if (normalized === paths.parse(normalized).root)
|
|
12
|
+
return "Choose a folder in your home directory, not the drive root.";
|
|
13
|
+
if (platform === "win32" && [env.SystemRoot, env.WINDIR, env.ProgramFiles, env["ProgramFiles(x86)"], env.ProgramData].some(root => root && under(root))) {
|
|
14
|
+
return "This is a Windows system folder. Choose a folder in your user profile.";
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
export function validateInitLocation(directory) {
|
|
19
|
+
// Resolve symlinks so an alias into a protected directory is treated equally.
|
|
20
|
+
const resolved = realpathSync(directory);
|
|
21
|
+
const unsuitable = checkInitLocation(resolved);
|
|
22
|
+
if (unsuitable)
|
|
23
|
+
return unsuitable;
|
|
24
|
+
for (let current = resolved;; current = path.dirname(current)) {
|
|
25
|
+
if (existsSync(path.join(current, ".litmus", "config.json"))) {
|
|
26
|
+
return "You are inside an existing assessment or practice folder. Move outside it before starting another assessment.";
|
|
27
|
+
}
|
|
28
|
+
if (path.dirname(current) === current)
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
// Test actual directory creation rather than trusting mode bits or ACL guesses.
|
|
32
|
+
const probe = mkdtempSync(path.join(resolved, ".litmus-write-check-"));
|
|
33
|
+
rmSync(probe, { recursive: true });
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=init-location.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-location.js","sourceRoot":"","sources":["../../src/lib/init-location.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAClE,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,2EAA2E;AAC3E,MAAM,UAAU,iBAAiB,CAAC,SAAiB,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG;IACjG,MAAM,KAAK,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IACtD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAA;QACxE,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;IACpG,CAAC,CAAA;IACD,IAAI,UAAU,KAAK,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI;QAAE,OAAO,6DAA6D,CAAA;IACrH,IAAI,QAAQ,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,mBAAmB,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACxJ,OAAO,wEAAwE,CAAA;IACjF,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,8EAA8E;IAC9E,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;IACxC,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAC9C,IAAI,UAAU;QAAE,OAAO,UAAU,CAAA;IACjC,KAAK,IAAI,OAAO,GAAG,QAAQ,GAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/D,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;YAC7D,OAAO,+GAA+G,CAAA;QACxH,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO;YAAE,MAAK;IAC9C,CAAC;IACD,gFAAgF;IAChF,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAA;IACtE,MAAM,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAClC,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mac-notifier.d.ts","sourceRoot":"","sources":["../../src/lib/mac-notifier.ts"],"names":[],"mappings":"AAgBA;8EAC8E;AAC9E,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAGpD"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { execFile } from "child_process";
|
|
2
|
+
import { createHash } from "crypto";
|
|
3
|
+
import { cp, mkdir, mkdtemp, readFile, rename, rm, stat, writeFile } from "fs/promises";
|
|
4
|
+
import os from "os";
|
|
5
|
+
import path from "path";
|
|
6
|
+
import { fileURLToPath } from "url";
|
|
7
|
+
const assets = fileURLToPath(new URL("../notification-assets/", import.meta.url));
|
|
8
|
+
let preparing;
|
|
9
|
+
function run(command, args) {
|
|
10
|
+
return new Promise((resolve, reject) => {
|
|
11
|
+
execFile(command, args, { timeout: 15000, windowsHide: true }, error => error ? reject(error) : resolve());
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
/** Built once per asset revision using macOS's built-in applet compiler. No
|
|
15
|
+
* downloaded executables, development toolchain, or installer is required. */
|
|
16
|
+
export function prepareMacNotifier() {
|
|
17
|
+
preparing ?? (preparing = prepare().catch(error => { preparing = undefined; throw error; }));
|
|
18
|
+
return preparing;
|
|
19
|
+
}
|
|
20
|
+
async function prepare() {
|
|
21
|
+
const script = await readFile(path.join(assets, "notifier.js"));
|
|
22
|
+
const icon = await readFile(path.join(assets, "litmus.icns"));
|
|
23
|
+
const revision = createHash("sha256").update("bundle-v1").update(script).update(icon).digest("hex").slice(0, 16);
|
|
24
|
+
const root = path.join(os.homedir(), ".litmus", "notifications", revision);
|
|
25
|
+
const app = path.join(root, "Litmus.app");
|
|
26
|
+
const ready = path.join(app, "Contents", "Resources", ".litmus-ready");
|
|
27
|
+
try {
|
|
28
|
+
if ((await stat(ready)).isFile())
|
|
29
|
+
return app;
|
|
30
|
+
}
|
|
31
|
+
catch { /* first use */ }
|
|
32
|
+
await mkdir(root, { recursive: true, mode: 0o700 });
|
|
33
|
+
const staging = await mkdtemp(path.join(root, ".build-"));
|
|
34
|
+
const stagedApp = path.join(staging, "Litmus.app");
|
|
35
|
+
try {
|
|
36
|
+
await run("/usr/bin/osacompile", ["-l", "JavaScript", "-o", stagedApp, path.join(assets, "notifier.js")]);
|
|
37
|
+
await writeFile(path.join(stagedApp, "Contents", "Info.plist"), `<?xml version="1.0" encoding="UTF-8"?>
|
|
38
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
39
|
+
<plist version="1.0"><dict>
|
|
40
|
+
<key>CFBundleExecutable</key><string>applet</string>
|
|
41
|
+
<key>CFBundleIdentifier</key><string>com.litmushiring.notifications</string>
|
|
42
|
+
<key>CFBundleName</key><string>Litmus</string>
|
|
43
|
+
<key>CFBundleIconFile</key><string>litmus.icns</string>
|
|
44
|
+
<key>CFBundlePackageType</key><string>APPL</string>
|
|
45
|
+
<key>CFBundleVersion</key><string>1</string>
|
|
46
|
+
<key>LSUIElement</key><true/>
|
|
47
|
+
<key>OSAAppletShowStartupScreen</key><false/>
|
|
48
|
+
</dict></plist>`);
|
|
49
|
+
await cp(path.join(assets, "litmus.icns"), path.join(stagedApp, "Contents", "Resources", "litmus.icns"));
|
|
50
|
+
// Editing a compiled app invalidates its ad-hoc signature. Sign the final
|
|
51
|
+
// bundle, not the source applet, before launching it.
|
|
52
|
+
await writeFile(path.join(stagedApp, "Contents", "Resources", ".litmus-ready"), revision);
|
|
53
|
+
await run("/usr/bin/codesign", ["--force", "--sign", "-", stagedApp]);
|
|
54
|
+
try {
|
|
55
|
+
await rename(stagedApp, app);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
// Another watcher may have installed this exact revision first.
|
|
59
|
+
try {
|
|
60
|
+
await stat(ready);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return app;
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
await rm(staging, { recursive: true, force: true });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=mac-notifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mac-notifier.js","sourceRoot":"","sources":["../../src/lib/mac-notifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Dependency-free CLI boot check, shared with setup-check and doctor. */
|
|
2
|
+
export declare const NODE_MIN_VERSION = "24.0.0";
|
|
3
|
+
export declare function checkNodeVersion(version?: string): {
|
|
4
|
+
name: "node";
|
|
5
|
+
status: "ok" | "warn" | "fail";
|
|
6
|
+
detail: string;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=node-version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-version.d.ts","sourceRoot":"","sources":["../../src/lib/node-version.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,WAAW,CAAA;AAExC,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,MAAwB,GAAG;IACnE,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;CACf,CAkBA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Dependency-free CLI boot check, shared with setup-check and doctor. */
|
|
2
|
+
export const NODE_MIN_VERSION = "24.0.0";
|
|
3
|
+
export function checkNodeVersion(version = process.version) {
|
|
4
|
+
const value = version.trim();
|
|
5
|
+
if (!/^v?\d+(?:\.\d+){0,2}(?:[-+].*)?$/.test(value)) {
|
|
6
|
+
return { name: "node", status: "warn", detail: `Node.js: version could not be read (${version})` };
|
|
7
|
+
}
|
|
8
|
+
const parts = value.replace(/^v/, "").split(/[-+]/, 1)[0].split(".").map(Number);
|
|
9
|
+
const minimum = NODE_MIN_VERSION.split(".").map(Number);
|
|
10
|
+
for (let i = 0; i < 3; i++) {
|
|
11
|
+
if ((parts[i] ?? 0) < minimum[i]) {
|
|
12
|
+
return {
|
|
13
|
+
name: "node",
|
|
14
|
+
status: "fail",
|
|
15
|
+
detail: `Node.js: ${version} is too old. Update to Node.js ${NODE_MIN_VERSION} or newer, then run "litmus setup-check" again.`,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
if ((parts[i] ?? 0) > minimum[i])
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
return { name: "node", status: "ok", detail: `Node.js: ${version}` };
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=node-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-version.js","sourceRoot":"","sources":["../../src/lib/node-version.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAA;AAExC,MAAM,UAAU,gBAAgB,CAAC,OAAO,GAAW,OAAO,CAAC,OAAO;IAKhE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;IAC5B,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,uCAAuC,OAAO,GAAG,EAAE,CAAA;IACpG,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAChF,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,OAAO;gBACL,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,YAAY,OAAO,kCAAkC,gBAAgB,iDAAiD;aAC/H,CAAA;QACH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;YAAE,MAAK;IACzC,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,OAAO,EAAE,EAAE,CAAA;AACtE,CAAC"}
|