@snutils/snu 0.2.1 → 0.2.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/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +146 -12
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/portReclaim.d.ts +48 -0
- package/dist/cli/portReclaim.d.ts.map +1 -0
- package/dist/cli/portReclaim.js +191 -0
- package/dist/cli/portReclaim.js.map +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +17 -3
- package/dist/mcp/index.js.map +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +4 -2
- package/dist/registry.js.map +1 -1
- package/dist/server/dispatcher.d.ts +8 -0
- package/dist/server/dispatcher.d.ts.map +1 -1
- package/dist/server/dispatcher.js +56 -2
- package/dist/server/dispatcher.js.map +1 -1
- package/dist/server/standalone.d.ts +6 -0
- package/dist/server/standalone.d.ts.map +1 -1
- package/dist/server/standalone.js +51 -0
- package/dist/server/standalone.js.map +1 -1
- package/package.json +1 -1
|
@@ -48,6 +48,8 @@ class StandaloneBridge {
|
|
|
48
48
|
token;
|
|
49
49
|
cwd;
|
|
50
50
|
writtenPortFiles = [];
|
|
51
|
+
portFilePayload;
|
|
52
|
+
portFileHeartbeat;
|
|
51
53
|
signalHandler;
|
|
52
54
|
exitHandler;
|
|
53
55
|
constructor(options = {}) {
|
|
@@ -84,6 +86,11 @@ class StandaloneBridge {
|
|
|
84
86
|
this.httpBridge = httpBridge;
|
|
85
87
|
// 4. Write Port Files
|
|
86
88
|
this.writePortFiles(httpPort);
|
|
89
|
+
// Self-heal: older ScriptSync builds in an editor window blindly delete
|
|
90
|
+
// the global port file on their own start/stop, leaving this healthy
|
|
91
|
+
// bridge undiscoverable. Re-assert the files on a slow heartbeat.
|
|
92
|
+
this.portFileHeartbeat = setInterval(() => this.reassertPortFiles(), 60_000);
|
|
93
|
+
this.portFileHeartbeat.unref?.();
|
|
87
94
|
// 5. Clean up on exit
|
|
88
95
|
this.signalHandler = () => {
|
|
89
96
|
void this.stop().finally(() => process.exit(0));
|
|
@@ -130,6 +137,46 @@ class StandaloneBridge {
|
|
|
130
137
|
}
|
|
131
138
|
catch { }
|
|
132
139
|
}
|
|
140
|
+
this.portFilePayload = payload;
|
|
141
|
+
}
|
|
142
|
+
/** Re-write any of our port files that went missing or lost their contents
|
|
143
|
+
* to another process, leaving a file owned by another live bridge alone. */
|
|
144
|
+
reassertPortFiles() {
|
|
145
|
+
if (!this.portFilePayload)
|
|
146
|
+
return;
|
|
147
|
+
const expected = JSON.parse(this.portFilePayload);
|
|
148
|
+
for (const target of this.writtenPortFiles) {
|
|
149
|
+
let rewrite = true;
|
|
150
|
+
try {
|
|
151
|
+
const data = JSON.parse(fs.readFileSync(target, 'utf8'));
|
|
152
|
+
if (data?.pid === process.pid) {
|
|
153
|
+
// Ours — repair only if the contents drifted.
|
|
154
|
+
rewrite = data.port !== expected.port || data.token !== expected.token;
|
|
155
|
+
}
|
|
156
|
+
else if (typeof data?.pid === 'number' && this.pidAlive(data.pid)) {
|
|
157
|
+
rewrite = false; // a live foreign bridge owns this file — leave it
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Missing, unreadable or corrupt — rewrite.
|
|
162
|
+
}
|
|
163
|
+
if (rewrite) {
|
|
164
|
+
try {
|
|
165
|
+
fs.writeFileSync(target, this.portFilePayload);
|
|
166
|
+
}
|
|
167
|
+
catch { }
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
pidAlive(pid) {
|
|
172
|
+
try {
|
|
173
|
+
process.kill(pid, 0);
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
// EPERM: the process exists but belongs to another user.
|
|
178
|
+
return err?.code === 'EPERM';
|
|
179
|
+
}
|
|
133
180
|
}
|
|
134
181
|
cleanPortFiles() {
|
|
135
182
|
for (const p of this.writtenPortFiles) {
|
|
@@ -148,6 +195,10 @@ class StandaloneBridge {
|
|
|
148
195
|
this.writtenPortFiles = [];
|
|
149
196
|
}
|
|
150
197
|
async stop() {
|
|
198
|
+
if (this.portFileHeartbeat) {
|
|
199
|
+
clearInterval(this.portFileHeartbeat);
|
|
200
|
+
this.portFileHeartbeat = undefined;
|
|
201
|
+
}
|
|
151
202
|
if (this.signalHandler) {
|
|
152
203
|
process.off('SIGINT', this.signalHandler);
|
|
153
204
|
process.off('SIGTERM', this.signalHandler);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../../src/server/standalone.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,+CAAiC;AACjC,+CAAmD;AACnD,mDAAuD;AACvD,mDAAuD;AAUvD,MAAa,gBAAgB;
|
|
1
|
+
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../../src/server/standalone.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED