@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.
@@ -1,4 +1,4 @@
1
- export declare const PLUGIN_VERSION = "2.2.66";
1
+ export declare const PLUGIN_VERSION = "2.2.68";
2
2
  export declare const DEFAULT_API_BASE = "https://t0ken.ai/api";
3
3
  export declare const PLUGIN_DIR: string;
4
4
  /** 真实上游 baseUrl 缓存文件:重启后若配置已被改成 localhost,从此文件恢复各厂商真实地址。 */
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.66";
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,从此文件恢复各厂商真实地址。 */
@@ -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;IAwBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,OAAO,IAAI,MAAM;YAMH,aAAa;IAgM3B,OAAO,CAAC,QAAQ;CAQnB"}
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(), 120_000);
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 ? "fetch timeout (120s)" : (e?.message ?? String(e));
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 >= 500;
171
+ const proxyFailed = !proxyResponse || proxyResponse.status >= 400;
166
172
  if (proxyFailed) {
173
+ let detail = "";
167
174
  if (proxyResponse?.body) {
168
175
  try {
169
- if (typeof proxyResponse.body.cancel === "function") {
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
- const detail = proxyResponse?.statusText || "MemoryX proxy unavailable";
182
- log(`[Sidecar] ${reqId} ${status} proxy failed: ${detail}`, { console: true });
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 CHUNK_TIMEOUT = 90_000;
191
- const readWithTimeout = () => Promise.race([
192
- reader.read(),
193
- new Promise((_, rej) => setTimeout(() => rej(new Error("chunk timeout")), CHUNK_TIMEOUT)),
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@t0ken.ai/memoryx-openclaw-plugin",
3
- "version": "2.2.66",
3
+ "version": "2.2.68",
4
4
  "description": "MemoryX real-time memory capture and recall plugin for OpenClaw (powered by @t0ken.ai/memoryx-sdk)",
5
5
  "type": "module",
6
6
  "author": "MemoryX Team",