noctrace 0.7.2 → 0.7.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/dist/client/index.html
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600;700&display=swap" rel="stylesheet" />
|
|
10
|
-
<script type="module" crossorigin src="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-CLA0rrye.js"></script>
|
|
11
11
|
<link rel="stylesheet" crossorigin href="/assets/index-iQItZcUN.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
|
@@ -242,6 +242,29 @@ export function buildApiRouter(claudeHome, wss) {
|
|
|
242
242
|
}
|
|
243
243
|
});
|
|
244
244
|
// ---------------------------------------------------------------------------
|
|
245
|
+
// GET /api/sessions/registered (MUST be before /sessions/:slug to avoid param capture)
|
|
246
|
+
// ---------------------------------------------------------------------------
|
|
247
|
+
/**
|
|
248
|
+
* Return the list of currently registered MCP session paths.
|
|
249
|
+
* An empty array means standalone mode (show all sessions from disk).
|
|
250
|
+
* A non-empty array means MCP mode (show only registered sessions).
|
|
251
|
+
*/
|
|
252
|
+
router.get('/sessions/registered', async (_req, res) => {
|
|
253
|
+
const STALE_THRESHOLD_MS = 5 * 60 * 1000;
|
|
254
|
+
for (const registeredPath of registeredSessionPaths) {
|
|
255
|
+
try {
|
|
256
|
+
const stat = await fs.stat(registeredPath);
|
|
257
|
+
if (Date.now() - stat.mtime.getTime() > STALE_THRESHOLD_MS) {
|
|
258
|
+
registeredSessionPaths.delete(registeredPath);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
registeredSessionPaths.delete(registeredPath);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
res.json({ sessions: Array.from(registeredSessionPaths) });
|
|
266
|
+
});
|
|
267
|
+
// ---------------------------------------------------------------------------
|
|
245
268
|
// GET /api/sessions/:slug
|
|
246
269
|
// ---------------------------------------------------------------------------
|
|
247
270
|
/**
|
|
@@ -572,30 +595,5 @@ export function buildApiRouter(claudeHome, wss) {
|
|
|
572
595
|
}
|
|
573
596
|
});
|
|
574
597
|
// ---------------------------------------------------------------------------
|
|
575
|
-
// GET /api/sessions/registered
|
|
576
|
-
// ---------------------------------------------------------------------------
|
|
577
|
-
/**
|
|
578
|
-
* Return the list of currently registered MCP session paths.
|
|
579
|
-
* An empty array means standalone mode (show all sessions from disk).
|
|
580
|
-
* A non-empty array means MCP mode (show only registered sessions).
|
|
581
|
-
*/
|
|
582
|
-
router.get('/sessions/registered', async (_req, res) => {
|
|
583
|
-
// Prune phantom sessions whose JSONL has not been modified in the last 5 minutes.
|
|
584
|
-
// Active sessions are written to frequently; stale ones left by SIGKILL won't be.
|
|
585
|
-
const STALE_THRESHOLD_MS = 5 * 60 * 1000;
|
|
586
|
-
for (const registeredPath of registeredSessionPaths) {
|
|
587
|
-
try {
|
|
588
|
-
const stat = await fs.stat(registeredPath);
|
|
589
|
-
if (Date.now() - stat.mtime.getTime() > STALE_THRESHOLD_MS) {
|
|
590
|
-
registeredSessionPaths.delete(registeredPath);
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
catch {
|
|
594
|
-
// File no longer exists — remove the phantom entry
|
|
595
|
-
registeredSessionPaths.delete(registeredPath);
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
res.json({ sessions: Array.from(registeredSessionPaths) });
|
|
599
|
-
});
|
|
600
598
|
return router;
|
|
601
599
|
}
|