mslxdff 0.1.175 → 0.1.176

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mslxdff",
3
- "version": "0.1.175",
3
+ "version": "0.1.176",
4
4
  "description": "测试项目,请勿使用。",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,7 +11,7 @@ import { createRotatingDispatcher } from "./rotate.js";
11
11
  import { createHealthMonitor } from "./health.js";
12
12
  import { ensureDir, loadNodes, removeNode, saveNode } from "./nodes.js";
13
13
  import { registerWarpDevice } from "./register.js";
14
- import { ensureBinary, resolveAsset, startTunnel, writeTunnelConf } from "./wireproxy.js";
14
+ import { ensureBinary, probeTunnel, resolveAsset, startTunnel, writeTunnelConf } from "./wireproxy.js";
15
15
  /** 重拨节流:连续失败指数退避。缺省开之后,网络不通的机器绝不能让重注册把 CF 刷到 429。 */
16
16
  const REDIAL_MIN_GAP_MS = 5 * 60_000;
17
17
  const REDIAL_MAX_GAP_MS = 30 * 60_000;
@@ -34,6 +34,7 @@ export function createWarpPool({
34
34
  register = registerWarpDevice,
35
35
  ensureBin = ensureBinary,
36
36
  start = startTunnel,
37
+ probe = probeTunnel,
37
38
  now = Date.now,
38
39
  rnd = Math.random,
39
40
  wait = (ms) => new Promise((r) => setTimeout(r, ms)),
@@ -129,8 +130,16 @@ export function createWarpPool({
129
130
  }
130
131
  }
131
132
 
132
- // 4. 换上真实出口(失败/退出中的节点仍会被 health 摘除)
133
- const live = nodes.filter((n) => tunnels.has(n.port));
133
+ // 4. **入池前实测探活**:只判「进程还活着」不够——WARP 握手不通时 wireproxy 进程照样在跑却转不动流量
134
+ // (实测经它 curl 挂到超时,不是快速失败)。那种节点一旦进池,dispatcher 会把**所有** opencode
135
+ // 请求派给它 ⇒ opencode 整体被黑洞而非直连兜底。探活打上游 models 路径,不烧 token。
136
+ const live = [];
137
+ for (const n of nodes) {
138
+ if (!tunnels.has(n.port)) continue;
139
+ const r = await probe({ port: n.port, baseUrl, path: cfg.probePath });
140
+ if (r.ok) live.push(n);
141
+ else log(`[warp-pool] 节点 :${n.port} 隧道未通(${r.status || r.error || "?"}),不进池`);
142
+ }
134
143
  if (live.length) {
135
144
  await dispatcher.setNodes(live.map((n) => ({ port: n.port, uri: `http://127.0.0.1:${n.port}` })));
136
145
  log(`[warp-pool] 出口池就绪:${live.length} 个节点`);