@askexenow/exe-os 0.9.88 → 0.9.89
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/lib/exe-daemon.js +22 -4
- package/dist/lib/ws-client.js +8 -0
- package/package.json +1 -1
package/dist/lib/exe-daemon.js
CHANGED
|
@@ -34508,6 +34508,14 @@ function createWsClient(config2, handlers) {
|
|
|
34508
34508
|
let currentProjects = [];
|
|
34509
34509
|
function connect() {
|
|
34510
34510
|
if (closed) return;
|
|
34511
|
+
if (ws) {
|
|
34512
|
+
try {
|
|
34513
|
+
ws.onopen = ws.onmessage = ws.onclose = ws.onerror = null;
|
|
34514
|
+
ws.close();
|
|
34515
|
+
} catch {
|
|
34516
|
+
}
|
|
34517
|
+
ws = null;
|
|
34518
|
+
}
|
|
34511
34519
|
try {
|
|
34512
34520
|
const url = `${config2.endpoint}?org=${config2.orgId}`;
|
|
34513
34521
|
ws = new WebSocket(url, {
|
|
@@ -35386,6 +35394,15 @@ async function startMcpHttpServer() {
|
|
|
35386
35394
|
for (const [sid, lastSeen] of sessionLastSeen.entries()) {
|
|
35387
35395
|
if (now2 - lastSeen > MCP_SESSION_TTL_MS) closeMcpSession2(sid, "session_expired");
|
|
35388
35396
|
}
|
|
35397
|
+
const rss = process.memoryUsage.rss();
|
|
35398
|
+
if (rss > RSS_RESTART_BYTES * 0.8 && transports.size > 1) {
|
|
35399
|
+
const sorted = [...sessionLastSeen.entries()].sort((a, b) => a[1] - b[1]);
|
|
35400
|
+
for (let i = 0; i < sorted.length - 1; i++) {
|
|
35401
|
+
closeMcpSession2(sorted[i][0], "rss_pressure_evict");
|
|
35402
|
+
process.stderr.write(`[exed] RSS pressure eviction: closed session ${sorted[i][0].slice(0, 8)} (${transports.size} remaining)
|
|
35403
|
+
`);
|
|
35404
|
+
}
|
|
35405
|
+
}
|
|
35389
35406
|
}, getJsonRpcId2 = function(body) {
|
|
35390
35407
|
if (body && typeof body === "object" && !Array.isArray(body) && "id" in body) {
|
|
35391
35408
|
const id = body.id;
|
|
@@ -35431,7 +35448,7 @@ async function startMcpHttpServer() {
|
|
|
35431
35448
|
}
|
|
35432
35449
|
const transports = /* @__PURE__ */ new Map();
|
|
35433
35450
|
const MCP_HTTP_PORT = parseInt(process.env.EXE_MCP_PORT || "48739", 10);
|
|
35434
|
-
const MCP_SESSION_TTL_MS = parseDurationMs2(process.env.EXE_MCP_SESSION_TTL_MS,
|
|
35451
|
+
const MCP_SESSION_TTL_MS = parseDurationMs2(process.env.EXE_MCP_SESSION_TTL_MS, 30 * 60 * 1e3, { allowZero: true });
|
|
35435
35452
|
const MCP_SESSION_SWEEP_MS = parseDurationMs2(process.env.EXE_MCP_SESSION_SWEEP_MS, 60 * 1e3);
|
|
35436
35453
|
const sessionLastSeen = /* @__PURE__ */ new Map();
|
|
35437
35454
|
const sessionDetails = /* @__PURE__ */ new Map();
|
|
@@ -36164,8 +36181,8 @@ function startAutoWake() {
|
|
|
36164
36181
|
`);
|
|
36165
36182
|
}
|
|
36166
36183
|
var TOTAL_MEM_GB = os24.totalmem() / 1024 ** 3;
|
|
36167
|
-
var RSS_WARN_BYTES = Number(process.env.EXE_RSS_WARN_MB) * 1024 * 1024 || (TOTAL_MEM_GB >= 64 ? 6 * 1024 ** 3 : TOTAL_MEM_GB >= 32 ? 4 * 1024 ** 3 : 1024 ** 3);
|
|
36168
|
-
var RSS_RESTART_BYTES = Number(process.env.EXE_RSS_RESTART_MB) * 1024 * 1024 || (TOTAL_MEM_GB >= 64 ? 8 * 1024 ** 3 : TOTAL_MEM_GB >= 32 ? 6 * 1024 ** 3 :
|
|
36184
|
+
var RSS_WARN_BYTES = Number(process.env.EXE_RSS_WARN_MB) * 1024 * 1024 || (TOTAL_MEM_GB >= 64 ? 6 * 1024 ** 3 : TOTAL_MEM_GB >= 32 ? 4 * 1024 ** 3 : TOTAL_MEM_GB >= 16 ? 2.5 * 1024 ** 3 : 1.5 * 1024 ** 3);
|
|
36185
|
+
var RSS_RESTART_BYTES = Number(process.env.EXE_RSS_RESTART_MB) * 1024 * 1024 || (TOTAL_MEM_GB >= 64 ? 8 * 1024 ** 3 : TOTAL_MEM_GB >= 32 ? 6 * 1024 ** 3 : TOTAL_MEM_GB >= 16 ? 4 * 1024 ** 3 : 3 * 1024 ** 3);
|
|
36169
36186
|
var RSS_CHECK_INTERVAL_MS = 30 * 1e3;
|
|
36170
36187
|
var _rssWarned = false;
|
|
36171
36188
|
var TASK_ENFORCEMENT_INTERVAL_MS2 = 6e4;
|
|
@@ -36194,7 +36211,8 @@ function startTaskEnforcementScanner() {
|
|
|
36194
36211
|
);
|
|
36195
36212
|
}
|
|
36196
36213
|
};
|
|
36197
|
-
setInterval(tick, TASK_ENFORCEMENT_INTERVAL_MS2);
|
|
36214
|
+
const timer = setInterval(tick, TASK_ENFORCEMENT_INTERVAL_MS2);
|
|
36215
|
+
timer.unref();
|
|
36198
36216
|
process.stderr.write(`[exed] Task enforcement scanner started (${TASK_ENFORCEMENT_INTERVAL_MS2 / 1e3}s interval)
|
|
36199
36217
|
`);
|
|
36200
36218
|
}
|
package/dist/lib/ws-client.js
CHANGED
|
@@ -39,6 +39,14 @@ function createWsClient(config, handlers) {
|
|
|
39
39
|
let currentProjects = [];
|
|
40
40
|
function connect() {
|
|
41
41
|
if (closed) return;
|
|
42
|
+
if (ws) {
|
|
43
|
+
try {
|
|
44
|
+
ws.onopen = ws.onmessage = ws.onclose = ws.onerror = null;
|
|
45
|
+
ws.close();
|
|
46
|
+
} catch {
|
|
47
|
+
}
|
|
48
|
+
ws = null;
|
|
49
|
+
}
|
|
42
50
|
try {
|
|
43
51
|
const url = `${config.endpoint}?org=${config.orgId}`;
|
|
44
52
|
ws = new WebSocket(url, {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@askexenow/exe-os",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.89",
|
|
4
4
|
"description": "AI employee operating system — persistent memory, task management, and multi-agent coordination for Claude Code.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"type": "module",
|