sensorium-mcp 3.0.65 → 3.0.66
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.
|
@@ -17,7 +17,9 @@ export declare function saveFileToDisk(buffer: Buffer, filename: string): string
|
|
|
17
17
|
*/
|
|
18
18
|
export declare function writeActivityHeartbeat(): void;
|
|
19
19
|
/** Write epoch timestamp for a specific thread. Called on every MCP tool call.
|
|
20
|
-
* Uses atomic write (tmp + rename) to prevent keeper from reading a truncated
|
|
20
|
+
* Uses atomic write (tmp + rename) to prevent keeper from reading a truncated
|
|
21
|
+
* file, with retry + direct-write fallback so a transient Windows lock can't
|
|
22
|
+
* silently drop the heartbeat (a dropped heartbeat risks a false "stuck"). */
|
|
21
23
|
export declare function writeThreadHeartbeat(threadId: number): void;
|
|
22
24
|
/** Synchronous heartbeat write — guarantees the file is flushed before returning.
|
|
23
25
|
* Used at spawn time and in the poll loop to prevent false zombie detection. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-storage.d.ts","sourceRoot":"","sources":["../../src/data/file-storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,eAAO,MAAM,SAAS,QAAkD,CAAC;AAGzE;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAqBvE;AAOD;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;
|
|
1
|
+
{"version":3,"file":"file-storage.d.ts","sourceRoot":"","sources":["../../src/data/file-storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,eAAO,MAAM,SAAS,QAAkD,CAAC;AAGzE;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAqBvE;AAOD;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAwBD;;;+EAG+E;AAC/E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAI3D;AA2BD;iFACiF;AACjF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAyB/D;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMnE;AAED;;;4EAG4E;AAC5E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAM3D;AASD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAuBpD"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Extracted from config.ts during modular decomposition (phase 1).
|
|
6
6
|
*/
|
|
7
7
|
import { mkdirSync, existsSync, readFileSync, readdirSync, renameSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
8
|
-
import { writeFile, rename } from "node:fs/promises";
|
|
8
|
+
import { writeFile, rename, unlink } from "node:fs/promises";
|
|
9
9
|
import { homedir } from "node:os";
|
|
10
10
|
import { join } from "node:path";
|
|
11
11
|
import { log } from "../logger.js";
|
|
@@ -65,26 +65,101 @@ try {
|
|
|
65
65
|
}
|
|
66
66
|
catch { }
|
|
67
67
|
let hbSeq = 0;
|
|
68
|
+
// On Windows a concurrent reader (the keeper reading the heartbeat) or an AV
|
|
69
|
+
// scanner can hold the target file open WITHOUT share-delete for a few micro-
|
|
70
|
+
// seconds, making rename-over-existing fail with EPERM/EACCES/EBUSY. At the
|
|
71
|
+
// heartbeat write frequency (every tool call + poll loop ~2s) these transient
|
|
72
|
+
// collisions are inevitable. The lock clears in milliseconds, so retry briefly.
|
|
73
|
+
const RENAME_RETRY_CODES = new Set(["EPERM", "EACCES", "EBUSY"]);
|
|
74
|
+
/** Synchronous sleep without busy-spinning the CPU (rare error-path only). */
|
|
75
|
+
function sleepSync(ms) {
|
|
76
|
+
try {
|
|
77
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
78
|
+
}
|
|
79
|
+
catch { /* SAB unavailable — skip */ }
|
|
80
|
+
}
|
|
81
|
+
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
68
82
|
/** Write epoch timestamp for a specific thread. Called on every MCP tool call.
|
|
69
|
-
* Uses atomic write (tmp + rename) to prevent keeper from reading a truncated
|
|
83
|
+
* Uses atomic write (tmp + rename) to prevent keeper from reading a truncated
|
|
84
|
+
* file, with retry + direct-write fallback so a transient Windows lock can't
|
|
85
|
+
* silently drop the heartbeat (a dropped heartbeat risks a false "stuck"). */
|
|
70
86
|
export function writeThreadHeartbeat(threadId) {
|
|
71
87
|
const target = join(HEARTBEATS_DIR, `${threadId}`);
|
|
72
88
|
const tmp = target + `.tmp.${process.pid}.${++hbSeq}`;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
89
|
+
void commitHeartbeatAsync(threadId, tmp, target, String(Date.now()));
|
|
90
|
+
}
|
|
91
|
+
async function commitHeartbeatAsync(threadId, tmp, target, data) {
|
|
92
|
+
try {
|
|
93
|
+
await writeFile(tmp, data, "utf-8");
|
|
94
|
+
for (let attempt = 1;; attempt++) {
|
|
95
|
+
try {
|
|
96
|
+
await rename(tmp, target);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
if (RENAME_RETRY_CODES.has(err?.code)) {
|
|
101
|
+
if (attempt < 5) {
|
|
102
|
+
await delay(4 * attempt);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
// Transient lock didn't clear in ~40ms. Do NOT truncate the live
|
|
106
|
+
// target (that would risk a torn read → false "stuck"). The previous
|
|
107
|
+
// heartbeat is only seconds old and still valid; the next beat (~2s)
|
|
108
|
+
// retries once the lock clears.
|
|
109
|
+
log.debug(`[heartbeat] Rename contended for thread ${threadId} (${attempt} attempts) — keeping prior heartbeat`);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
log.debug(`[heartbeat] Async write failed for thread ${threadId}: ${err instanceof Error ? err.message : err}`);
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
await unlink(tmp);
|
|
116
|
+
}
|
|
117
|
+
catch { }
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
log.debug(`[heartbeat] Async write failed for thread ${threadId}: ${err instanceof Error ? err.message : err}`);
|
|
124
|
+
}
|
|
76
125
|
}
|
|
77
126
|
/** Synchronous heartbeat write — guarantees the file is flushed before returning.
|
|
78
127
|
* Used at spawn time and in the poll loop to prevent false zombie detection. */
|
|
79
128
|
export function writeThreadHeartbeatSync(threadId) {
|
|
80
129
|
const target = join(HEARTBEATS_DIR, `${threadId}`);
|
|
81
130
|
const tmp = target + `.tmp.${process.pid}.${++hbSeq}`;
|
|
131
|
+
const data = String(Date.now());
|
|
82
132
|
try {
|
|
83
|
-
writeFileSync(tmp,
|
|
84
|
-
|
|
133
|
+
writeFileSync(tmp, data, "utf-8");
|
|
134
|
+
for (let attempt = 1;; attempt++) {
|
|
135
|
+
try {
|
|
136
|
+
renameSync(tmp, target);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
if (RENAME_RETRY_CODES.has(err?.code)) {
|
|
141
|
+
if (attempt < 5) {
|
|
142
|
+
sleepSync(4 * attempt);
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
// Transient lock persisted — keep the prior (seconds-old, valid)
|
|
146
|
+
// heartbeat rather than truncating the live target; the next beat
|
|
147
|
+
// retries. Never risks a torn read that could trip a false "stuck".
|
|
148
|
+
log.debug(`[heartbeat] Rename contended for thread ${threadId} (${attempt} attempts) — keeping prior heartbeat`);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
log.warn(`[heartbeat] Write failed for thread ${threadId}: ${err instanceof Error ? err.message : err}`);
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
unlinkSync(tmp);
|
|
155
|
+
}
|
|
156
|
+
catch { }
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
85
160
|
}
|
|
86
161
|
catch (err) {
|
|
87
|
-
|
|
162
|
+
log.warn(`[heartbeat] Write failed for thread ${threadId}: ${err instanceof Error ? err.message : err}`);
|
|
88
163
|
}
|
|
89
164
|
}
|
|
90
165
|
/** Read the last heartbeat epoch for a thread. Returns null if no heartbeat. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-storage.js","sourceRoot":"","sources":["../../src/data/file-storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5H,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"file-storage.js","sourceRoot":"","sources":["../../src/data/file-storage.ts"],"names":[],"mappings":"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"}
|