@askexenow/exe-os 0.9.261 → 0.9.262

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.
@@ -4,7 +4,7 @@ import {
4
4
  } from "../chunk-GMUZHA5J.js";
5
5
  import {
6
6
  lightweightSearch
7
- } from "../chunk-N2MMYJLT.js";
7
+ } from "../chunk-K6FHWGFL.js";
8
8
  import "../chunk-6YHVX54O.js";
9
9
  import "../chunk-CHCA3ZM2.js";
10
10
  import "../chunk-P2XNRKEL.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  hybridSearch,
4
4
  lightweightSearch
5
- } from "../chunk-N2MMYJLT.js";
5
+ } from "../chunk-K6FHWGFL.js";
6
6
  import {
7
7
  initStore
8
8
  } from "../chunk-6YHVX54O.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  lightweightSearch
3
- } from "./chunk-N2MMYJLT.js";
3
+ } from "./chunk-K6FHWGFL.js";
4
4
  import "./chunk-6YHVX54O.js";
5
5
  import "./chunk-CHCA3ZM2.js";
6
6
  import "./chunk-P2XNRKEL.js";
@@ -288,7 +288,7 @@ async function hybridSearch(queryText, agentId, options) {
288
288
  let rerankerAvailable = false;
289
289
  if (process.env.EXE_IS_DAEMON === "1") {
290
290
  try {
291
- const { isRerankerAvailable } = await import("./reranker-ECLOD4L4.js");
291
+ const { isRerankerAvailable } = await import("./reranker-RPPWEE73.js");
292
292
  rerankerAvailable = isRerankerAvailable();
293
293
  } catch {
294
294
  }
@@ -452,7 +452,7 @@ async function hybridSearch(queryText, agentId, options) {
452
452
  try {
453
453
  let rerankedRecords;
454
454
  if (graphContextMap.size > 0) {
455
- const { rerankWithContext } = await import("./reranker-ECLOD4L4.js");
455
+ const { rerankWithContext } = await import("./reranker-RPPWEE73.js");
456
456
  const candidates = merged.map((m) => ({
457
457
  text: m.raw_text,
458
458
  context: graphContextMap.get(m.id)
@@ -460,7 +460,7 @@ async function hybridSearch(queryText, agentId, options) {
460
460
  const scored = await rerankWithContext(effectiveQuery, candidates, rerankReturnLimit);
461
461
  rerankedRecords = scored.map((s) => merged[s.index]);
462
462
  } else {
463
- const { rerank } = await import("./reranker-ECLOD4L4.js");
463
+ const { rerank } = await import("./reranker-RPPWEE73.js");
464
464
  rerankedRecords = await rerank(effectiveQuery, merged, rerankReturnLimit);
465
465
  }
466
466
  if (rerankedRecords.length > 0) {
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  isRerankerAvailable,
12
12
  rerankWithScores
13
- } from "./chunk-PISNYNHN.js";
13
+ } from "./chunk-JBPOZ6LG.js";
14
14
  import {
15
15
  getCachedLicenseGate
16
16
  } from "./chunk-2WBBVEIB.js";
@@ -194,7 +194,7 @@ import {
194
194
  import {
195
195
  hybridSearch,
196
196
  recentRecords
197
- } from "./chunk-N2MMYJLT.js";
197
+ } from "./chunk-K6FHWGFL.js";
198
198
  import {
199
199
  attachDocumentMetadata,
200
200
  flushBatch,
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  hybridSearch,
6
6
  lightweightSearch
7
- } from "../chunk-N2MMYJLT.js";
7
+ } from "../chunk-K6FHWGFL.js";
8
8
  import {
9
9
  initStore
10
10
  } from "../chunk-6YHVX54O.js";
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "version": 1,
3
- "generatedAt": "2026-06-10T02:38:20.900Z",
3
+ "generatedAt": "2026-06-10T02:47:42.754Z",
4
4
  "hashes": {
5
5
  "bug-report-worker.js": "5b5c47ed54222e7e9e9099dbe0032076b549d406fd0fad91e4685d345f4d465f",
6
6
  "codex-stop-task-finalizer.js": "4470796421e93af8416e83e6822e14acfa72ecc96da6574fbfb38965f2e7d7e6",
7
7
  "commit-complete.js": "d6a053e16241909b3ded37c13fa2868bf93f0fe593b5dcc2d7117fd367744861",
8
- "error-recall.js": "f6e90abf6790b79e314b66f73e82bf88d30c39c3b11d1b8f20bc595422d9b0f1",
8
+ "error-recall.js": "060435a477ed3c1b6caf7cd63b272ab393a22f579db2a55d80e2664d57197774",
9
9
  "exe-heartbeat-hook.js": "351dd0a9c4c1f21bf7faa3a5431b0f71f6f55bc629a6503394e1e696a9589b08",
10
10
  "ingest-worker.js": "1f6a591f863d5bc540b0e11bb382d3ba13cf761709e4a82313f6f1d9fb9c18e2",
11
11
  "ingest.js": "f040375367df68749331bbf3ea5527b754840f0ed2db621c966abe51b6375890",
@@ -15,9 +15,9 @@
15
15
  "post-tool-combined.js": "3fbbb2d941e264291567a6da97bb02523c907a0edf742ef6d59b13e5956cd4f8",
16
16
  "pre-compact.js": "8e7512e75a0407a5c632ebfb5f23595507c5d8972afcae839462f719ea56a973",
17
17
  "pre-tool-use.js": "f50d7d8b341109bf5f927295d9227877b691989fdf3ef04565e7579dfac8a66a",
18
- "prompt-submit.js": "a57f9ff37c49b2627d40c047a3d5da14bdea4ac70498deab72f2b0f1e74f277c",
18
+ "prompt-submit.js": "e7c071e3e5b3e7c931ad3d94db2b9269cb56f47d26325a7406846b997ee822eb",
19
19
  "session-end.js": "b88b3007dadaa427f748154551790648742627ac788a8fa8f76761ad8b45ef90",
20
- "session-start.js": "3674a4f1ca6aa49f47f17727262961ed9c55c2e217a312c6a269bfdfc9280a71",
20
+ "session-start.js": "bd2ab64142b7e8db1ab999486f1ce5fd4f5ce52f7af28555555cd0e5403a359e",
21
21
  "stop.js": "ab962df8d9b91f04e3eb3708e67300fb0f64cd57c25d814312bc84485c4d00ae",
22
22
  "subagent-stop.js": "626924150de92ca5e509066b016950d6ce62d4df5e58a0d0713a4d36705aaefc",
23
23
  "summary-worker.js": "dc0ac0448fbec252aacccf8b8a2dfe2e296ee0306e5ce41b1362db2318307b66"
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  hybridSearch,
3
3
  lightweightSearch
4
- } from "../chunk-N2MMYJLT.js";
4
+ } from "../chunk-K6FHWGFL.js";
5
5
  import {
6
6
  initStore
7
7
  } from "../chunk-6YHVX54O.js";
@@ -163,7 +163,7 @@ You are **${ag.agentId}**. Daemon is degraded \u2014 memory unavailable.
163
163
  query = `last actions on ${projectName}`;
164
164
  header = "## Resuming Session\nHere's where you left off:";
165
165
  try {
166
- const { buildCatchupBrief } = await import("../catchup-brief-AY3NXSZ4.js");
166
+ const { buildCatchupBrief } = await import("../catchup-brief-QYHXH7X4.js");
167
167
  const brief = await buildCatchupBrief(
168
168
  agentId,
169
169
  projectName,
@@ -2036,12 +2036,13 @@ async function startMcpHttpServer() {
2036
2036
  if (now - lastSeen > MCP_SESSION_TTL_MS) closeMcpSession2(sid, "session_expired");
2037
2037
  }
2038
2038
  }
2039
- const ZOMBIE_THRESHOLD_MS = 30 * 60 * 1e3;
2040
- for (const [sid, lastSeen] of sessionLastSeen) {
2041
- if (now - lastSeen > ZOMBIE_THRESHOLD_MS) {
2042
- closeMcpSession2(sid, "zombie_full_cleanup");
2043
- process.stderr.write(`[exed] MCP session ${sid.slice(0, 8)}\u2026 fully released (inactive ${Math.round((now - lastSeen) / 6e4)}m)
2039
+ if (MCP_ZOMBIE_THRESHOLD_MS > 0) {
2040
+ for (const [sid, lastSeen] of sessionLastSeen) {
2041
+ if (now - lastSeen > MCP_ZOMBIE_THRESHOLD_MS) {
2042
+ closeMcpSession2(sid, "zombie_full_cleanup");
2043
+ process.stderr.write(`[exed] MCP session ${sid.slice(0, 8)}\u2026 fully released (inactive ${Math.round((now - lastSeen) / 6e4)}m)
2044
2044
  `);
2045
+ }
2045
2046
  }
2046
2047
  }
2047
2048
  const mem = process.memoryUsage();
@@ -2135,7 +2136,8 @@ async function startMcpHttpServer() {
2135
2136
  const MAX_MCP_SESSIONS = Number(process.env.EXE_MAX_MCP_SESSIONS) || 50;
2136
2137
  const MCP_SESSION_SWEEP_MS = parseDurationMs2(process.env.EXE_MCP_SESSION_SWEEP_MS, 60 * 1e3);
2137
2138
  const MCP_RECOVERY_ALIAS_TTL_MS = parseDurationMs2(process.env.EXE_MCP_RECOVERY_ALIAS_TTL_MS, 30 * 60 * 1e3);
2138
- const MCP_PRESSURE_EVICT_MIN_IDLE_MS = parseDurationMs2(process.env.EXE_MCP_PRESSURE_EVICT_MIN_IDLE_MS, 30 * 60 * 1e3);
2139
+ const MCP_ZOMBIE_THRESHOLD_MS = parseDurationMs2(process.env.EXE_MCP_ZOMBIE_THRESHOLD_MS, 0, { allowZero: true });
2140
+ const MCP_PRESSURE_EVICT_MIN_IDLE_MS = parseDurationMs2(process.env.EXE_MCP_PRESSURE_EVICT_MIN_IDLE_MS, 2 * 60 * 60 * 1e3);
2139
2141
  const sessionLastSeen = /* @__PURE__ */ new Map();
2140
2142
  const sessionDetails = /* @__PURE__ */ new Map();
2141
2143
  const staleSessionRecoveries = /* @__PURE__ */ new Map();
@@ -2688,6 +2690,20 @@ async function startMcpHttpServer() {
2688
2690
  const recovered = await createRecoveredMcpSession(sessionId, details);
2689
2691
  transport = recovered.transport;
2690
2692
  req.headers["mcp-session-id"] = recovered.sessionId;
2693
+ } else if (sessionId && !transports.has(sessionId) && req.method === "DELETE") {
2694
+ recordMcpHttpEvent({
2695
+ level: "info",
2696
+ message: "session_delete_stale_ignored",
2697
+ method: req.method,
2698
+ sessionId,
2699
+ agentId,
2700
+ agentRole,
2701
+ runtime,
2702
+ activeSessions: transports.size
2703
+ });
2704
+ res.writeHead(204);
2705
+ res.end();
2706
+ return;
2691
2707
  } else {
2692
2708
  const message = sessionId ? "Bad Request: MCP session is stale or unknown; reconnect MCP client" : "Bad Request: missing MCP session; initialize before tool calls";
2693
2709
  sendJsonRpcError2(res, 400, message, getJsonRpcId2(parsedBody), {
@@ -5,7 +5,7 @@ import {
5
5
  recentRecords,
6
6
  rrfMerge,
7
7
  rrfMergeMulti
8
- } from "../chunk-N2MMYJLT.js";
8
+ } from "../chunk-K6FHWGFL.js";
9
9
  import "../chunk-6YHVX54O.js";
10
10
  import "../chunk-CHCA3ZM2.js";
11
11
  import "../chunk-P2XNRKEL.js";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  registerAllTools
3
- } from "../chunk-LMA3QZCR.js";
3
+ } from "../chunk-RGKPO6UP.js";
4
4
  import "../chunk-O4D4DSNZ.js";
5
5
  import "../chunk-557C2IGL.js";
6
6
  import "../chunk-KPVRGCOC.js";
7
7
  import "../chunk-PK7H6FFK.js";
8
- import "../chunk-PISNYNHN.js";
8
+ import "../chunk-JBPOZ6LG.js";
9
9
  import "../chunk-2WBBVEIB.js";
10
10
  import "../chunk-AU64ZSNH.js";
11
11
  import "../chunk-BBPRL2MP.js";
@@ -61,7 +61,7 @@ import "../chunk-GMUZHA5J.js";
61
61
  import "../chunk-45W7EDXB.js";
62
62
  import "../chunk-Z2AEOVEZ.js";
63
63
  import "../chunk-7IZWLMTP.js";
64
- import "../chunk-N2MMYJLT.js";
64
+ import "../chunk-K6FHWGFL.js";
65
65
  import "../chunk-6YHVX54O.js";
66
66
  import "../chunk-CHCA3ZM2.js";
67
67
  import "../chunk-P2XNRKEL.js";
@@ -3,12 +3,12 @@ import {
3
3
  } from "../chunk-V4TZI6EO.js";
4
4
  import {
5
5
  registerAllTools
6
- } from "../chunk-LMA3QZCR.js";
6
+ } from "../chunk-RGKPO6UP.js";
7
7
  import "../chunk-O4D4DSNZ.js";
8
8
  import "../chunk-557C2IGL.js";
9
9
  import "../chunk-KPVRGCOC.js";
10
10
  import "../chunk-PK7H6FFK.js";
11
- import "../chunk-PISNYNHN.js";
11
+ import "../chunk-JBPOZ6LG.js";
12
12
  import {
13
13
  initLicenseGate
14
14
  } from "../chunk-2WBBVEIB.js";
@@ -71,7 +71,7 @@ import "../chunk-GMUZHA5J.js";
71
71
  import "../chunk-45W7EDXB.js";
72
72
  import "../chunk-Z2AEOVEZ.js";
73
73
  import "../chunk-7IZWLMTP.js";
74
- import "../chunk-N2MMYJLT.js";
74
+ import "../chunk-K6FHWGFL.js";
75
75
  import {
76
76
  disposeStore,
77
77
  initStore
@@ -5,7 +5,7 @@ import {
5
5
  rerank,
6
6
  rerankWithContext,
7
7
  rerankWithScores
8
- } from "./chunk-PISNYNHN.js";
8
+ } from "./chunk-JBPOZ6LG.js";
9
9
  import "./chunk-VXIMSRTO.js";
10
10
  import "./chunk-LYH5HE24.js";
11
11
  import "./chunk-MLKGABMK.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askexenow/exe-os",
3
- "version": "0.9.261",
3
+ "version": "0.9.262",
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",
@@ -1,6 +1,17 @@
1
1
  {
2
- "current": "0.9.261",
2
+ "current": "0.9.262",
3
3
  "notes": {
4
+ "0.9.262": {
5
+ "version": "0.9.262",
6
+ "date": "2026-06-10",
7
+ "features": [],
8
+ "fixes": [
9
+ "harden MCP session retention"
10
+ ],
11
+ "security": [],
12
+ "other": [],
13
+ "migration_notes": []
14
+ },
4
15
  "0.9.261": {
5
16
  "version": "0.9.261",
6
17
  "date": "2026-06-10",
@@ -51,17 +62,6 @@
51
62
  "migration_notes": [
52
63
  "Fresh stack DBs now create filtered.conversations.source_ref with UNIQUE(platform, source_ref); existing stacks self-heal on projection-worker startup."
53
64
  ]
54
- },
55
- "0.9.256": {
56
- "version": "0.9.256",
57
- "date": "2026-06-09",
58
- "features": [],
59
- "fixes": [],
60
- "security": [],
61
- "other": [
62
- "bump v0.9.256 — all images verified on GHCR"
63
- ],
64
- "migration_notes": []
65
65
  }
66
66
  }
67
67
  }
File without changes