@t0ken.ai/memoryx-openclaw-plugin 2.2.66 → 2.2.68
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/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/sidecar.d.ts.map +1 -1
- package/dist/sidecar.js +26 -20
- package/package.json +1 -1
package/dist/constants.d.ts
CHANGED
package/dist/constants.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import * as path from "path";
|
|
5
5
|
import * as os from "os";
|
|
6
6
|
// Plugin version - synced from package.json by prebuild script
|
|
7
|
-
export const PLUGIN_VERSION = "2.2.
|
|
7
|
+
export const PLUGIN_VERSION = "2.2.68";
|
|
8
8
|
export const DEFAULT_API_BASE = "https://t0ken.ai/api";
|
|
9
9
|
export const PLUGIN_DIR = path.join(os.homedir(), ".openclaw", "extensions", "memoryx-openclaw-plugin");
|
|
10
10
|
/** 真实上游 baseUrl 缓存文件:重启后若配置已被改成 localhost,从此文件恢复各厂商真实地址。 */
|
package/dist/sidecar.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C,MAAM,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,eAAe,CAAsC;IAC7D,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,OAAO,CAAiB;gBAG5B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAC7C,eAAe,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EACpD,kBAAkB,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,EAC9D,OAAO,EAAE,cAAc;IAQrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C,MAAM,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,eAAe,CAAsC;IAC7D,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,OAAO,CAAiB;gBAG5B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAC7C,eAAe,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EACpD,kBAAkB,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,EAC9D,OAAO,EAAE,cAAc;IAQrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,OAAO,IAAI,MAAM;YAMH,aAAa;IAiM3B,OAAO,CAAC,QAAQ;CAQnB"}
|
package/dist/sidecar.js
CHANGED
|
@@ -24,6 +24,8 @@ export class SidecarServer {
|
|
|
24
24
|
const server = http.createServer(async (req, res) => {
|
|
25
25
|
await this.handleRequest(req, res);
|
|
26
26
|
});
|
|
27
|
+
server.timeout = 90_000;
|
|
28
|
+
server.keepAliveTimeout = 30_000;
|
|
27
29
|
server.on("error", (err) => {
|
|
28
30
|
if (err.code === "EADDRINUSE") {
|
|
29
31
|
log(`[Sidecar] Port ${SIDECAR_PORT} is in use. Free it or stop the other process using it.`, { console: true });
|
|
@@ -143,8 +145,10 @@ export class SidecarServer {
|
|
|
143
145
|
};
|
|
144
146
|
const pathLog = (req.url || "/").split("?")[0] || "/";
|
|
145
147
|
log(`[Sidecar] ${reqId} ${method} ${pathLog} model=${openaiRequest.model ?? "-"} stream=${stream} → proxy ${proxyUrl}`, { console: true });
|
|
148
|
+
const FETCH_TIMEOUT = 75_000;
|
|
149
|
+
const CHUNK_TIMEOUT = 30_000;
|
|
146
150
|
const fetchAbort = new AbortController();
|
|
147
|
-
const fetchTimer = setTimeout(() => fetchAbort.abort(),
|
|
151
|
+
const fetchTimer = setTimeout(() => fetchAbort.abort(), FETCH_TIMEOUT);
|
|
148
152
|
let proxyResponse = null;
|
|
149
153
|
try {
|
|
150
154
|
proxyResponse = await fetch(proxyUrl, {
|
|
@@ -156,42 +160,44 @@ export class SidecarServer {
|
|
|
156
160
|
}
|
|
157
161
|
catch (e) {
|
|
158
162
|
proxyResponse = null;
|
|
159
|
-
const msg = fetchAbort.signal.aborted
|
|
163
|
+
const msg = fetchAbort.signal.aborted
|
|
164
|
+
? `fetch timeout (${FETCH_TIMEOUT / 1000}s)`
|
|
165
|
+
: (e?.message ?? String(e));
|
|
160
166
|
log(`[Sidecar] ${reqId} err proxy fetch: ${msg}`, { console: true });
|
|
161
167
|
}
|
|
162
168
|
finally {
|
|
163
169
|
clearTimeout(fetchTimer);
|
|
164
170
|
}
|
|
165
|
-
const proxyFailed = !proxyResponse || proxyResponse.status >=
|
|
171
|
+
const proxyFailed = !proxyResponse || proxyResponse.status >= 400;
|
|
166
172
|
if (proxyFailed) {
|
|
173
|
+
let detail = "";
|
|
167
174
|
if (proxyResponse?.body) {
|
|
168
175
|
try {
|
|
169
|
-
|
|
170
|
-
await proxyResponse.body.cancel();
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
await proxyResponse.text();
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
catch (_) {
|
|
177
|
-
/* drain */
|
|
176
|
+
detail = await proxyResponse.text();
|
|
178
177
|
}
|
|
178
|
+
catch (_) { /* drain */ }
|
|
179
179
|
}
|
|
180
180
|
const status = proxyResponse?.status ?? 502;
|
|
181
|
-
|
|
182
|
-
|
|
181
|
+
if (!detail)
|
|
182
|
+
detail = proxyResponse?.statusText || "MemoryX proxy unavailable";
|
|
183
|
+
log(`[Sidecar] ${reqId} ← ${status} fast-fail: ${detail.slice(0, 200)}`, { console: true });
|
|
183
184
|
res.writeHead(status, { "Content-Type": "application/json" });
|
|
184
|
-
res.end(JSON.stringify({ error: detail }));
|
|
185
|
+
res.end(typeof detail === "string" && detail.startsWith("{") ? detail : JSON.stringify({ error: detail }));
|
|
185
186
|
return;
|
|
186
187
|
}
|
|
187
188
|
const proxy = proxyResponse;
|
|
188
189
|
if (openaiRequest.stream && proxy.body) {
|
|
189
190
|
const reader = proxy.body.getReader();
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
191
|
+
const readWithTimeout = () => {
|
|
192
|
+
let timer;
|
|
193
|
+
return Promise.race([
|
|
194
|
+
reader.read().then((r) => { if (timer)
|
|
195
|
+
clearTimeout(timer); return r; }),
|
|
196
|
+
new Promise((_, rej) => {
|
|
197
|
+
timer = setTimeout(() => rej(new Error("chunk timeout")), CHUNK_TIMEOUT);
|
|
198
|
+
}),
|
|
199
|
+
]);
|
|
200
|
+
};
|
|
195
201
|
let firstChunk;
|
|
196
202
|
try {
|
|
197
203
|
firstChunk = await readWithTimeout();
|
package/package.json
CHANGED