@meetlobster/openclaw-plugin 1.3.11 → 1.3.13
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.
|
@@ -14,6 +14,8 @@ export declare class LobsterService implements LobsterServiceApi {
|
|
|
14
14
|
command(payload: CommandRequest): Promise<CommandResponse>;
|
|
15
15
|
private cleanupArmed;
|
|
16
16
|
private spawnWorker;
|
|
17
|
+
private sendStopRequest;
|
|
18
|
+
private isPortReachable;
|
|
17
19
|
private stopOrphanedWorker;
|
|
18
20
|
private waitForHealth;
|
|
19
21
|
}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.LobsterService = void 0;
|
|
7
|
+
const node_net_1 = __importDefault(require("node:net"));
|
|
4
8
|
const worker_spawn_1 = require("./worker-spawn");
|
|
9
|
+
const PORT_PROBE_TIMEOUT_MS = 2_000;
|
|
5
10
|
const REQUEST_TIMEOUT_MS = 6000;
|
|
6
11
|
const JOIN_TIMEOUT_MS = 30_000;
|
|
7
12
|
/** Commands that mutate worker state immediately — never retry on timeout. */
|
|
@@ -56,21 +61,7 @@ class LobsterService {
|
|
|
56
61
|
if (!this.started) {
|
|
57
62
|
return this.health();
|
|
58
63
|
}
|
|
59
|
-
|
|
60
|
-
await fetchJson(`${this.config.workerBaseUrl}/v1/control/stop`, {
|
|
61
|
-
method: "POST",
|
|
62
|
-
headers: {
|
|
63
|
-
"Content-Type": "application/json",
|
|
64
|
-
"X-Lobster-Adapter-Token": this.config.adapterToken,
|
|
65
|
-
},
|
|
66
|
-
body: JSON.stringify({ reason: "plugin-stop" }),
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
this.logger.warn("Lobster worker stop endpoint failed", {
|
|
71
|
-
error: error instanceof Error ? error.message : String(error),
|
|
72
|
-
});
|
|
73
|
-
}
|
|
64
|
+
await this.sendStopRequest("plugin-stop");
|
|
74
65
|
const proc = this.workerProcess;
|
|
75
66
|
if (proc) {
|
|
76
67
|
const exited = new Promise((resolve) => proc.once("exit", resolve));
|
|
@@ -88,6 +79,7 @@ class LobsterService {
|
|
|
88
79
|
await Promise.race([exited, sleep(1_000)]);
|
|
89
80
|
}
|
|
90
81
|
}
|
|
82
|
+
this.cleanupArmed = false;
|
|
91
83
|
this.started = false;
|
|
92
84
|
this.workerProcess = null;
|
|
93
85
|
return this.health();
|
|
@@ -165,6 +157,8 @@ class LobsterService {
|
|
|
165
157
|
if (this.workerProcess && !this.workerProcess.killed) {
|
|
166
158
|
return;
|
|
167
159
|
}
|
|
160
|
+
// Disarm any previous cleanup listener before registering a new one.
|
|
161
|
+
this.cleanupArmed = false;
|
|
168
162
|
const proc = (0, worker_spawn_1.spawnWorkerProcess)(this.config, this.logger, () => {
|
|
169
163
|
this.workerProcess = null;
|
|
170
164
|
this.started = false;
|
|
@@ -191,21 +185,7 @@ class LobsterService {
|
|
|
191
185
|
process.on("SIGTERM", cleanup);
|
|
192
186
|
process.on("SIGINT", cleanup);
|
|
193
187
|
}
|
|
194
|
-
async
|
|
195
|
-
const portInUse = await new Promise((resolve) => {
|
|
196
|
-
try {
|
|
197
|
-
const net = require("node:net");
|
|
198
|
-
const probe = net.createConnection({ host: this.config.workerHost, port: this.config.workerPort });
|
|
199
|
-
probe.on("connect", () => { probe.destroy(); resolve(true); });
|
|
200
|
-
probe.on("error", () => resolve(false));
|
|
201
|
-
}
|
|
202
|
-
catch {
|
|
203
|
-
resolve(false);
|
|
204
|
-
}
|
|
205
|
-
});
|
|
206
|
-
if (!portInUse)
|
|
207
|
-
return;
|
|
208
|
-
this.logger.info("Orphaned worker detected on port, sending stop", { port: this.config.workerPort });
|
|
188
|
+
async sendStopRequest(reason) {
|
|
209
189
|
try {
|
|
210
190
|
await fetchJson(`${this.config.workerBaseUrl}/v1/control/stop`, {
|
|
211
191
|
method: "POST",
|
|
@@ -213,25 +193,37 @@ class LobsterService {
|
|
|
213
193
|
"Content-Type": "application/json",
|
|
214
194
|
"X-Lobster-Adapter-Token": this.config.adapterToken,
|
|
215
195
|
},
|
|
216
|
-
body: JSON.stringify({ reason
|
|
196
|
+
body: JSON.stringify({ reason }),
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
this.logger.warn("Lobster worker stop endpoint failed", {
|
|
201
|
+
error: error instanceof Error ? error.message : String(error),
|
|
217
202
|
});
|
|
218
203
|
}
|
|
219
|
-
|
|
204
|
+
}
|
|
205
|
+
isPortReachable(host, port) {
|
|
206
|
+
return new Promise((resolve) => {
|
|
207
|
+
try {
|
|
208
|
+
const probe = node_net_1.default.createConnection({ host, port });
|
|
209
|
+
const timer = setTimeout(() => { probe.destroy(); resolve(false); }, PORT_PROBE_TIMEOUT_MS);
|
|
210
|
+
probe.on("connect", () => { clearTimeout(timer); probe.destroy(); resolve(true); });
|
|
211
|
+
probe.on("error", () => { clearTimeout(timer); resolve(false); });
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
resolve(false);
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
async stopOrphanedWorker() {
|
|
219
|
+
if (!await this.isPortReachable(this.config.workerHost, this.config.workerPort))
|
|
220
|
+
return;
|
|
221
|
+
this.logger.info("Orphaned worker detected on port, sending stop", { port: this.config.workerPort });
|
|
222
|
+
await this.sendStopRequest("plugin-reinit");
|
|
220
223
|
// Wait for port to free up (up to 3 seconds).
|
|
221
224
|
const deadline = Date.now() + 3_000;
|
|
222
225
|
while (Date.now() < deadline) {
|
|
223
|
-
|
|
224
|
-
try {
|
|
225
|
-
const net = require("node:net");
|
|
226
|
-
const probe = net.createConnection({ host: this.config.workerHost, port: this.config.workerPort });
|
|
227
|
-
probe.on("connect", () => { probe.destroy(); resolve(true); });
|
|
228
|
-
probe.on("error", () => resolve(false));
|
|
229
|
-
}
|
|
230
|
-
catch {
|
|
231
|
-
resolve(false);
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
if (!still)
|
|
226
|
+
if (!await this.isPortReachable(this.config.workerHost, this.config.workerPort))
|
|
235
227
|
return;
|
|
236
228
|
await sleep(250);
|
|
237
229
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lobster-service.js","sourceRoot":"","sources":["../../services/lobster-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lobster-service.js","sourceRoot":"","sources":["../../services/lobster-service.ts"],"names":[],"mappings":"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"}
|