@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.
@@ -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, 4 * 60 * 60 * 1e3, { allowZero: true });
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 : 2 * 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
  }
@@ -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.88",
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",